This commit is contained in:
2025-08-02 12:38:36 -03:00
parent f7dfa0d430
commit afb27816df
2 changed files with 112 additions and 108 deletions

View File

@@ -454,23 +454,19 @@ func Install(packagepath string, serial uint) error {
} }
defer f.Close() defer f.Close()
stat, _ := f.Stat()
totalsize := stat.Size()
counter := &CountingReader{R: f}
zs, err := zstd.NewReader(f) zs, err := zstd.NewReader(f)
if err != nil { if err != nil {
return err return err
} }
defer zs.Close()
tr := tar.NewReader(zs) tr := tar.NewReader(zs)
bar := progressbar.NewOptions64( bar := progressbar.NewOptions64(
totalsize, -1,
progressbar.OptionSetDescription("[2/2] Unpacking ..."), progressbar.OptionSetDescription("[2/2] Unpacking ..."),
progressbar.OptionSetWriter(os.Stdout), progressbar.OptionSetWriter(os.Stdout),
progressbar.OptionClearOnFinish(),
) )
for { for {
hdr, err := tr.Next() hdr, err := tr.Next()
@@ -513,13 +509,12 @@ func Install(packagepath string, serial uint) error {
return err return err
} }
_, err = io.Copy(io.MultiWriter(out), tr) n, err := io.Copy(out, tr)
out.Close() out.Close()
if err != nil { if err != nil {
return err return err
} }
bar.Add64(n)
bar.Set(int(counter.Total))
err = os.Chmod(absPath, os.FileMode(hdr.Mode)) err = os.Chmod(absPath, os.FileMode(hdr.Mode))
if err != nil { if err != nil {
@@ -562,7 +557,7 @@ func Install(packagepath string, serial uint) error {
ioObject.RawSetString("lines", lua.LNil) ioObject.RawSetString("lines", lua.LNil)
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen)) ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
if err := L.DoFile(manifest.Hooks.Install); err != nil { if err := L.DoFile(filepath.Join(cfg.Config.DataDir, name, manifest.Hooks.Install)); err != nil {
log.Panic(err) log.Panic(err)
} }
@@ -994,120 +989,121 @@ func Sync(url string) error {
fmt.Printf("Ooops... Data directory has been changed on %s do you want to move the packages from (%s), to (%s)\n", filepath.Join(PacketsDir, "config.toml"), cfg.Config.LastDataDir, cfg.Config.DataDir) fmt.Printf("Ooops... Data directory has been changed on %s do you want to move the packages from (%s), to (%s)\n", filepath.Join(PacketsDir, "config.toml"), cfg.Config.LastDataDir, cfg.Config.DataDir)
fmt.Println("What you want to do?") fmt.Println("What you want to do?")
fmt.Println("[y] Yes [n] No, [x] Ignore it and stop to show this message (not recommended)") fmt.Println("[y] Yes [n] No, [x] Ignore it and stop to show this message (not recommended)")
}
var answer string
fmt.Scanln(&answer)
switch answer { var answer string
case "n": fmt.Scanln(&answer)
fmt.Println("Just ignoring...")
case "x": switch answer {
f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644) case "n":
if err != nil { fmt.Println("Just ignoring...")
return err
}
cfg.Config.LastDataDir = cfg.Config.DataDir case "x":
f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644)
encoder := toml.NewEncoder(f)
err = encoder.Encode(cfg)
if err != nil {
return err
}
f.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n#NEVER CHANGE lastDataDir\n")
os.Remove(cfg.Config.LastDataDir)
case "y":
if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil {
return err
}
bar := progressbar.NewOptions64(-1,
progressbar.OptionSetDescription("Moving ..."),
)
err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error {
if walkErr != nil {
return walkErr
}
if last == cfg.Config.LastDataDir {
return nil
}
rel, err := filepath.Rel(cfg.Config.LastDataDir, last)
if err != nil { if err != nil {
return err return err
} }
dest := filepath.Join(cfg.Config.DataDir, rel)
if d.IsDir() { cfg.Config.LastDataDir = cfg.Config.DataDir
return os.MkdirAll(dest, 0755)
encoder := toml.NewEncoder(f)
err = encoder.Encode(cfg)
if err != nil {
return err
}
f.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n#NEVER CHANGE lastDataDir\n")
os.Remove(cfg.Config.LastDataDir)
case "y":
if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil {
return err
} }
return os.Rename(last, dest) bar := progressbar.NewOptions64(-1,
progressbar.OptionSetDescription("Moving ..."),
)
}) err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error {
if err != nil { if walkErr != nil {
return err return walkErr
} }
f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644) if last == cfg.Config.LastDataDir {
if err != nil { return nil
return err }
}
cfg.Config.LastDataDir = cfg.Config.DataDir rel, err := filepath.Rel(cfg.Config.LastDataDir, last)
if err != nil {
return err
}
dest := filepath.Join(cfg.Config.DataDir, rel)
encoder := toml.NewEncoder(f) if d.IsDir() {
return os.MkdirAll(dest, 0755)
}
err = encoder.Encode(cfg) return os.Rename(last, dest)
if err != nil {
})
if err != nil {
return err
}
f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644)
if err != nil {
return err
}
cfg.Config.LastDataDir = cfg.Config.DataDir
encoder := toml.NewEncoder(f)
err = encoder.Encode(cfg)
if err != nil {
bar.Finish()
return err
}
f.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n#NEVER CHANGE lastDataDir\n")
os.Remove(cfg.Config.LastDataDir)
bar.Finish() bar.Finish()
return err
}
f.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n#NEVER CHANGE lastDataDir\n")
os.Remove(cfg.Config.LastDataDir)
bar.Finish()
default: default:
if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil { if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil {
return err return err
}
bar := progressbar.NewOptions64(-1,
progressbar.OptionSetDescription("Moving ..."),
)
err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error {
if walkErr != nil {
return walkErr
} }
if last == cfg.Config.LastDataDir { bar := progressbar.NewOptions64(-1,
return nil progressbar.OptionSetDescription("Moving ..."),
} )
rel, err := filepath.Rel(cfg.Config.LastDataDir, last) err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error {
if walkErr != nil {
return walkErr
}
if last == cfg.Config.LastDataDir {
return nil
}
rel, err := filepath.Rel(cfg.Config.LastDataDir, last)
if err != nil {
return err
}
dest := filepath.Join(cfg.Config.DataDir, rel)
if d.IsDir() {
return os.MkdirAll(dest, 0755)
}
return os.Rename(last, dest)
})
if err != nil { if err != nil {
return err return err
} }
dest := filepath.Join(cfg.Config.DataDir, rel) bar.Finish()
if d.IsDir() {
return os.MkdirAll(dest, 0755)
}
return os.Rename(last, dest)
})
if err != nil {
return err
} }
bar.Finish()
} }
return nil return nil
@@ -1187,7 +1183,7 @@ func Unninstall(realname string) error {
L.SetGlobal("packets_package_dir", lua.LString(cfg.Config.DataDir)) L.SetGlobal("packets_package_dir", lua.LString(cfg.Config.DataDir))
L.SetGlobal("packets_bin_dir", lua.LString(cfg.Config.BinDir)) L.SetGlobal("packets_bin_dir", lua.LString(cfg.Config.BinDir))
L.SetGlobal("script", lua.LString(manifest.Hooks.Remove)) L.SetGlobal("script", lua.LString(path.Join(cfg.Config.DataDir, realname, manifest.Hooks.Remove)))
L.SetGlobal("data_dir", lua.LString(filepath.Join(cfg.Config.DataDir, realname, "data"))) L.SetGlobal("data_dir", lua.LString(filepath.Join(cfg.Config.DataDir, realname, "data")))
L.SetGlobal("path_join", L.NewFunction(internal.Ljoin)) L.SetGlobal("path_join", L.NewFunction(internal.Ljoin))
@@ -1211,7 +1207,7 @@ func Unninstall(realname string) error {
ioObject.RawSetString("lines", lua.LNil) ioObject.RawSetString("lines", lua.LNil)
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen)) ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
if err := L.DoFile(manifest.Hooks.Remove); err != nil { if err := L.DoFile(filepath.Join(cfg.Config.DataDir, realname, manifest.Hooks.Remove)); err != nil {
log.Panic(err) log.Panic(err)
} }
@@ -1393,6 +1389,7 @@ func Upgrade(packagepath string, og_realname string, serial uint) error {
totalSize, totalSize,
progressbar.OptionSetDescription("[2/2] Upgrading ..."), progressbar.OptionSetDescription("[2/2] Upgrading ..."),
progressbar.OptionSetWriter(os.Stdout), progressbar.OptionSetWriter(os.Stdout),
progressbar.OptionClearOnFinish(),
) )
for { for {
@@ -1488,11 +1485,11 @@ func Upgrade(packagepath string, og_realname string, serial uint) error {
ioObject.RawSetString("lines", lua.LNil) ioObject.RawSetString("lines", lua.LNil)
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen)) ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
if err := L.DoFile(manifest.Hooks.Install); err != nil { if err := L.DoFile(filepath.Join(cfg.Config.DataDir, name, manifest.Hooks.Install)); err != nil {
log.Panic(err) log.Panic(err)
} }
fmt.Printf("Package %s fully installed", name) fmt.Printf("\nPackage %s fully installed", name)
var insert = Installed{ var insert = Installed{
Realname: manifest.Info.Name, Realname: manifest.Info.Name,

View File

@@ -4,6 +4,7 @@ import (
"archive/tar" "archive/tar"
"fmt" "fmt"
"io" "io"
"log"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
@@ -82,7 +83,9 @@ func ManifestReadXZ(path string) (*Manifest, error) {
var manifest Manifest var manifest Manifest
decoder.Decode(&manifest) if _, err := decoder.Decode(&manifest); err != nil {
log.Fatal(err)
}
return &manifest, nil return &manifest, nil
} }
@@ -121,14 +124,17 @@ func DefaultConfigTOML() *ConfigTOML {
} }
func IsSafe(str string) bool { func IsSafe(str string) bool {
s, err := filepath.EvalSymlinks(filepath.Clean(str)) s, err := filepath.EvalSymlinks(strings.TrimSpace(filepath.Clean(str)))
if err != nil { if err != nil {
return false return false
} }
var cfg ConfigTOML var cfg ConfigTOML
toml.DecodeFile(filepath.Join(PacketsPackageDir(), "config.toml"), &cfg) toml.DecodeFile(filepath.Join(PacketsPackageDir(), "config.toml"), &cfg)
if strings.HasPrefix(s, cfg.Config.DataDir) || strings.HasPrefix(s, cfg.Config.BinDir) { fmt.Println("[DEBUG] verificando segurança de", s)
fmt.Println("[DEBUG] dataDir =", cfg.Config.DataDir, "binDir =", cfg.Config.BinDir)
if strings.HasPrefix(s, strings.TrimSpace(cfg.Config.DataDir)) || strings.HasPrefix(s, strings.TrimSpace(cfg.Config.BinDir)) {
return true return true
} else if strings.Contains(s, ".ssh") { } else if strings.Contains(s, ".ssh") {
@@ -297,6 +303,7 @@ func SymbolicLua(L *lua.LState) int {
if err := os.Symlink(fileName, destination); err != nil { if err := os.Symlink(fileName, destination); err != nil {
L.Push(lua.LFalse) L.Push(lua.LFalse)
L.Push(lua.LString("[packets] symlink failed\n" + err.Error())) L.Push(lua.LString("[packets] symlink failed\n" + err.Error()))
return 2
} }
L.Push(lua.LTrue) L.Push(lua.LTrue)