spinner on dowloading and installing

This commit is contained in:
2025-07-29 18:26:21 -03:00
parent c69f086b7c
commit 02ae7ea420

View File

@@ -1,3 +1,5 @@
//go:build linux
package main package main
import ( import (
@@ -22,6 +24,7 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/schollz/progressbar/v3"
"golang.org/x/net/ipv4" "golang.org/x/net/ipv4"
_ "modernc.org/sqlite" _ "modernc.org/sqlite"
@@ -61,12 +64,6 @@ var Serialpass uint
func main() { func main() {
uid := os.Getuid()
if uid != 0 {
fmt.Println("please, run packet as root")
return
}
if len(os.Args) < 2 { if len(os.Args) < 2 {
fmt.Println("invalid syntax") fmt.Println("invalid syntax")
return return
@@ -76,6 +73,11 @@ func main() {
switch cmd { switch cmd {
case "install": case "install":
if os.Getuid() != 0 {
fmt.Println("please, run as root")
return
}
if len(os.Args) < 3 { if len(os.Args) < 3 {
fmt.Println("usage: packets install <name>") fmt.Println("usage: packets install <name>")
return return
@@ -145,6 +147,11 @@ func main() {
} }
case "serve": case "serve":
if os.Getuid() != 0 {
fmt.Println("please, run as root")
return
}
if len(os.Args) < 3 { if len(os.Args) < 3 {
fmt.Println("usage: packets serve <option>\navaiable options: init, stop") fmt.Println("usage: packets serve <option>\navaiable options: init, stop")
return return
@@ -187,6 +194,11 @@ func main() {
return return
} }
case "sync": case "sync":
if os.Getuid() != 0 {
fmt.Println("please, run as root")
return
}
if len(os.Args) < 3 { if len(os.Args) < 3 {
fmt.Println("Starting to sync with https://servidordomal.fun/mirror/index.db") fmt.Println("Starting to sync with https://servidordomal.fun/mirror/index.db")
if err := Sync("https://servidordomal.fun/mirror/index.db"); err != nil { if err := Sync("https://servidordomal.fun/mirror/index.db"); err != nil {
@@ -208,6 +220,11 @@ func main() {
return return
case "remove": case "remove":
if os.Getuid() != 0 {
fmt.Println("please, run as root")
return
}
if len(os.Args) < 3 { if len(os.Args) < 3 {
fmt.Println("usage: packets remove <package-name>") fmt.Println("usage: packets remove <package-name>")
return return
@@ -220,12 +237,19 @@ func main() {
} }
return return
case "list": case "list":
if err := ListPackets(); err != nil { if err := ListPackets(); err != nil {
return return
} }
return return
case "upgrade": case "upgrade":
if os.Getuid() != 0 {
fmt.Println("please, run as root")
return
}
if len(os.Args) < 3 { if len(os.Args) < 3 {
fmt.Println("usage: packets upgrade <realname>") fmt.Println("usage: packets upgrade <realname>")
return return
@@ -293,8 +317,6 @@ func ManifestReadXZ(path string) (*Manifest, error) {
tr := tar.NewReader(xzr) tr := tar.NewReader(xzr)
fmt.Println("Reading manifest.json...")
for { for {
hdr, err := tr.Next() hdr, err := tr.Next()
if err == io.EOF { if err == io.EOF {
@@ -326,8 +348,6 @@ func Install(packagepath string, serial uint) error {
name := manifest.Name name := manifest.Name
fmt.Printf("Installing %s...\n", name)
var destDir = fmt.Sprintf("/opt/packets/%s", name) var destDir = fmt.Sprintf("/opt/packets/%s", name)
f, err := os.Open(packagepath) f, err := os.Open(packagepath)
@@ -344,6 +364,11 @@ func Install(packagepath string, serial uint) error {
tr := tar.NewReader(xzr) tr := tar.NewReader(xzr)
bar := progressbar.NewOptions64(
-1,
progressbar.OptionSetDescription("[2/2] Installing ..."),
progressbar.OptionSetWriter(os.Stdout),
)
for { for {
hdr, err := tr.Next() hdr, err := tr.Next()
if err == io.EOF { if err == io.EOF {
@@ -385,22 +410,23 @@ func Install(packagepath string, serial uint) error {
if err != nil { if err != nil {
return err return err
} }
_, err = io.Copy(out, tr)
_, err = io.Copy(io.MultiWriter(out, bar), tr)
out.Close() out.Close()
if err != nil { if err != nil {
return err return err
} }
err = os.Chmod(absPath, os.FileMode(hdr.Mode)) err = os.Chmod(absPath, os.FileMode(hdr.Mode))
if err != nil { if err != nil {
return err return err
} }
default: default:
fmt.Printf("ignored type: %c\n", hdr.Typeflag)
}
fmt.Printf("\r\033[2KUnpacking: %s ", filepath.Base(rel))
} }
}
bar.Finish()
manifest.Serial = serial manifest.Serial = serial
@@ -416,8 +442,6 @@ func Install(packagepath string, serial uint) error {
os.Chmod(script, 0777) os.Chmod(script, 0777)
os.Chmod(fmt.Sprintf("%s/remove.sh", destDir), 0777) os.Chmod(fmt.Sprintf("%s/remove.sh", destDir), 0777)
fmt.Println("\nExecute ", fmt.Sprintf("%s/postinstall.sh", destDir), "?")
fmt.Println("\nMaking post install configuration...") fmt.Println("\nMaking post install configuration...")
cmd := exec.Command(script) cmd := exec.Command(script)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
@@ -430,7 +454,7 @@ func Install(packagepath string, serial uint) error {
return fmt.Errorf("error exec postinstall script %e", err) return fmt.Errorf("error exec postinstall script %e", err)
} }
fmt.Printf("Package %s fully installed you maybe run: \"source ~/.bashrc \"\n", name) fmt.Printf("Package %s fully installed\n", name)
var insert = Installed{ var insert = Installed{
Realname: manifest.Name, Realname: manifest.Name,
@@ -470,6 +494,14 @@ func GetPackageByMirror(mirror string, realname string) error {
log.Panic("error doing get request, do you really have an internet connection?") log.Panic("error doing get request, do you really have an internet connection?")
return err return err
} }
bar := progressbar.NewOptions64(resp.ContentLength,
progressbar.OptionSetDescription(fmt.Sprintf("[1/2] Downloading from %s...", mirror)),
progressbar.OptionShowBytes(true),
progressbar.OptionSetPredictTime(true),
progressbar.OptionShowCount(),
progressbar.OptionClearOnFinish(),
)
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
@@ -494,7 +526,7 @@ func GetPackageByMirror(mirror string, realname string) error {
} }
defer out.Close() defer out.Close()
_, err = io.Copy(out, resp.Body) _, err = io.Copy(io.MultiWriter(out, bar), resp.Body)
if err != nil { if err != nil {
err := os.Remove(fmt.Sprintf("/var/cache/packets/%s", filename)) err := os.Remove(fmt.Sprintf("/var/cache/packets/%s", filename))
if err != nil { if err != nil {
@@ -502,6 +534,7 @@ func GetPackageByMirror(mirror string, realname string) error {
} }
return err return err
} }
bar.Finish()
err = Validate(filename, realname) err = Validate(filename, realname)
if err != nil { if err != nil {
@@ -624,15 +657,14 @@ func QueryInstall(realname string) {
if answers != 0 { if answers != 0 {
for _, p := range peers { for _, p := range peers {
fmt.Printf("Downloading from %s\n", p.IP) fmt.Printf("Downloading from %s\n", p.IP)
if err := GetPackageByMirror(fmt.Sprintf("http://%s:%d/%s", p.IP, p.Port, filename), realname); err == nil { if err := GetPackageByMirror(fmt.Sprintf("http://%s:%d/%s", p.IP, p.Port, filename), realname); err != nil {
log.Println(err) log.Println(err)
break break
} }
fmt.Printf("Download failed!\n") fmt.Printf("Download failed!\n")
} }
} }
fmt.Printf("Downloading from %s\n", mirrors) if err := GetPackageByMirror(mirrors, realname); err != nil {
if err := GetPackageByMirror(mirrors, realname); err == nil {
log.Println(err) log.Println(err)
return return
} }
@@ -676,7 +708,7 @@ func QueryInstall(realname string) {
} }
} }
fmt.Printf("Downloading from %s\n", v) fmt.Printf("Downloading from %s\n", v)
if err := GetPackageByMirror(v, realname); err == nil { if err := GetPackageByMirror(v, realname); err != nil {
log.Println(err) log.Println(err)
break break
} }
@@ -1120,5 +1152,3 @@ func SearchUpgrades(name string) error {
return nil return nil
} }
// i will kill myself soon cuz im so dumb, i need to upgrade this code 100x, but with time everything will be good