Compare commits

...

4 commits

Author SHA1 Message Date
timoxa0 4c3fb48ac7 Make debug messages better 2024-08-08 11:37:48 +05:00
timoxa0 768af6db31 Add support for 512 gb mod 2024-08-08 11:14:54 +05:00
timoxa0 97a5127a59 Add no-simple-init flag 2024-08-08 11:08:26 +05:00
timoxa0 a119d6ac19 change -v flag description 2024-08-08 11:02:41 +05:00
3 changed files with 69 additions and 67 deletions

View file

@ -23,7 +23,9 @@ var username string
var password string
var serail string
var partsize string
var nosimpleinit bool
var partpercent int
var deployCmd = &cobra.Command{
Use: "deploy <rootfs.lni>",
Short: "Deploy system to device",
@ -240,14 +242,7 @@ var deployCmd = &cobra.Command{
block_size, _ := adbd.RunCommand("blockdev --getsize64 /dev/block/sda")
block_size = strings.TrimRight(block_size, "\n")
is128 := false
if r, _ := regexp.MatchString(`^125[0-9]{9}$`, block_size); r {
is128 = true
} else if r, _ := regexp.MatchString(`^253[0-9]{9}$`, block_size); r {
is128 = false
}
for _, cmd := range utils.GenRepartCommands(partpercent, is128) {
for _, cmd := range utils.GenRepartCommands(partpercent, block_size) {
adbd.RunCommand(cmd)
logger.Debug("Executed command", logger.Args("cmd", cmd))
}
@ -296,10 +291,10 @@ var deployCmd = &cobra.Command{
logger.Error("Failled to find free tcp port")
os.Exit(181)
}
logger.Debug("Flasher", logger.Args("port", port))
logger.Debug("Flasher started", logger.Args("port", port))
forwards, _ := adbd.ListForwards()
adbd.Forward(pterm.Sprintf("tcp:%v", port), "tcp:4444")
logger.Debug("ListForwards", logger.Args(adbd.ListForwards()))
logger.Debug("Forward started", logger.Args("forwards", forwards))
doneChan1 := make(chan bool)
doneChan2 := make(chan bool)
go func() {
@ -312,7 +307,7 @@ var deployCmd = &cobra.Command{
go func() {
conn, err := net.Dial("tcp", pterm.Sprintf("127.0.0.1:%v", port))
if err != nil {
logger.Error("Failled to connect to device")
logger.Fatal("Failled to connect to device")
}
buf := make([]byte, 409600)
bar, _ := pbar.WithTotal(int(image.ImgSize)).WithTitle("Flashing rootfs").WithRemoveWhenDone(false).Start()
@ -353,70 +348,74 @@ var deployCmd = &cobra.Command{
logger.Info("System cofigured")
}
adbd.RunCommand("mkdir /tmp/uefi-install")
var uefi_out string
bootshim, err := utils.Files.UEFIBootshim.Get(*pbar.WithTitle("Downloading uefi bootshim"))
if err != nil {
if bootshim != nil {
logger.Warn("Unable to verify uefi bootship image")
} else {
logger.Error("Unable to download uefi bootshim image")
os.Exit(179)
if nosimpleinit {
logger.Info("-Q flag present. Skipping simpleinit install")
uefi_out = "0"
} else {
adbd.RunCommand("mkdir /tmp/uefi-install")
bootshim, err := utils.Files.UEFIBootshim.Get(*pbar.WithTitle("Downloading uefi bootshim"))
if err != nil {
if bootshim != nil {
logger.Warn("Unable to verify uefi bootship image")
} else {
logger.Error("Unable to download uefi bootshim image")
os.Exit(179)
}
}
}
conn, err := adbd.OpenWrite(pterm.Sprintf("/tmp/uefi-install/%s", utils.Files.UEFIBootshim.Name), fs.FileMode(0777), adb.MtimeOfClose)
if err != nil {
logger.Error("Failed to send uefi bootshim", logger.Args("Error", err))
}
_, err = conn.Write(bootshim)
if err != nil {
logger.Error("Failed to send uefi bootshim", logger.Args("Error", err))
}
conn.Close()
payload, err := utils.Files.UEFIPayload.Get(*pbar.WithTitle("Downloading uefi payload"))
if err != nil {
if payload != nil {
logger.Warn("Unable to verify uefi payload image")
} else {
logger.Error("Unable to download uefi payload image")
os.Exit(179)
conn, err := adbd.OpenWrite(pterm.Sprintf("/tmp/uefi-install/%s", utils.Files.UEFIBootshim.Name), fs.FileMode(0777), adb.MtimeOfClose)
if err != nil {
logger.Error("Failed to send uefi bootshim", logger.Args("Error", err))
}
}
conn, err = adbd.OpenWrite(pterm.Sprintf("/tmp/uefi-install/%s", utils.Files.UEFIPayload.Name), fs.FileMode(0777), adb.MtimeOfClose)
if err != nil {
logger.Error("Failed to send uefi payload", logger.Args("Error", err))
}
_, err = conn.Write(payload)
if err != nil {
logger.Error("Failed to send uefi payload", logger.Args("Error", err))
}
conn.Close()
_, err = conn.Write(bootshim)
if err != nil {
logger.Error("Failed to send uefi bootshim", logger.Args("Error", err))
}
conn.Close()
uefiSpinner, _ := spinner.Start("Patching UEFI")
out, err = adbd.RunCommand("uefi-patch > /dev/null 2>&1; echo $?")
out = strings.TrimRight(out, "\n")
if err != nil {
logger.Error("Failed to install uefi. Reflash stock rom and try again", logger.Args("Error", err))
os.Exit(176)
}
logger.Debug("Uefi patch", logger.Args("Out", out))
payload, err := utils.Files.UEFIPayload.Get(*pbar.WithTitle("Downloading uefi payload"))
if err != nil {
if payload != nil {
logger.Warn("Unable to verify uefi payload image")
} else {
logger.Error("Unable to download uefi payload image")
os.Exit(179)
}
}
conn, err = adbd.OpenWrite(pterm.Sprintf("/tmp/uefi-install/%s", utils.Files.UEFIPayload.Name), fs.FileMode(0777), adb.MtimeOfClose)
if err != nil {
logger.Error("Failed to send uefi payload", logger.Args("Error", err))
}
_, err = conn.Write(payload)
if err != nil {
logger.Error("Failed to send uefi payload", logger.Args("Error", err))
}
conn.Close()
switch out {
case "1":
uefiSpinner, _ := spinner.Start("Patching UEFI")
uefi_out, err = adbd.RunCommand("uefi-patch > /dev/null 2>&1; echo $?")
if err != nil {
logger.Error("Failed to install uefi. Reflash stock rom and try again", logger.Args("Error", err))
os.Exit(176)
}
uefi_out = strings.TrimRight(uefi_out, "\n")
logger.Debug("Uefi patch", logger.Args("Out", out))
uefiSpinner.Stop()
}
switch uefi_out {
case "1":
logger.Error("Failed to install uefi. Reflash stock rom and try again", logger.Args("Error", err))
adbd.RunCommand("reboot bootloader")
os.Exit(176)
case "2":
adbd.RunCommand("reboot")
uefiSpinner.Stop()
logger.Info("Bootimage already patched")
case "0":
adbd.RunCommand("reboot")
uefiSpinner.Stop()
logger.Info("Installation done!")
}
},
@ -428,4 +427,5 @@ func init() {
deployCmd.Flags().StringVarP(&password, "password", "p", "", "User password")
deployCmd.Flags().StringVarP(&serail, "serial", "s", "autodetect", "Device serial")
deployCmd.Flags().StringVarP(&partsize, "part-size", "S", "", "Linux partition size in percents")
deployCmd.Flags().BoolVarP(&nosimpleinit, "no-simple-init", "Q", false, "Disable simple init install")
}

View file

@ -70,5 +70,5 @@ func Execute() {
}
func init() {
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "V", false, "Enabled verbose output")
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "V", false, "enable debug output")
}

View file

@ -4,14 +4,17 @@ import (
"fmt"
"math"
"net"
"regexp"
)
func GenRepartCommands(percent int, is128 bool) []string {
var maxsize uint8
if is128 {
func GenRepartCommands(percent int, blocksize string) []string {
var maxsize uint16
if r, _ := regexp.MatchString(`^125[0-9]{9}$`, blocksize); r {
maxsize = 126
} else {
} else if r, _ := regexp.MatchString(`^253[0-9]{9}$`, blocksize); r {
maxsize = 254
} else if r, _ := regexp.MatchString(`^509[0-9]{9}$`, blocksize); r {
maxsize = 509
}
linux_max := maxsize - 12
size := math.Round(float64(linux_max)*float64(percent)) / 100
@ -26,7 +29,6 @@ func GenRepartCommands(percent int, is128 bool) []string {
}
}
func GetFreePort() (int, error) {
listener, err := net.Listen("tcp", ":0")
if err != nil {