simple checking for remote packets

This commit is contained in:
2025-10-26 21:47:06 -03:00
parent aa65b28112
commit a62ddf8270
5 changed files with 113 additions and 44 deletions

View File

@@ -10,6 +10,16 @@ func getStringFromTable(table *lua.LTable, key string) string {
return "" return ""
} }
func getIntFromTable(table *lua.LTable, key string) int {
value := table.RawGetString(key)
if value.Type() == lua.LTNumber {
if num, ok := value.(lua.LNumber); ok {
return int(num)
}
}
return -133
}
func getStringArrayFromTable(L *lua.LState, table *lua.LTable, key string) []string { func getStringArrayFromTable(L *lua.LState, table *lua.LTable, key string) []string {
value := table.RawGetString(key) value := table.RawGetString(key)
if value.Type() != lua.LTTable { if value.Type() != lua.LTTable {

View File

@@ -25,6 +25,8 @@ type PacketLua struct {
Author string Author string
Architetures []string Architetures []string
Os []string Os []string
Serial int
Type string
PkgType string PkgType string
GitUrl string GitUrl string
@@ -85,6 +87,7 @@ func ReadPacket(f []byte) (PacketLua, error) {
Author: getStringFromTable(pkgTable, "author"), Author: getStringFromTable(pkgTable, "author"),
Description: getStringFromTable(pkgTable, "description"), Description: getStringFromTable(pkgTable, "description"),
PkgType: getStringFromTable(pkgTable, "type"), PkgType: getStringFromTable(pkgTable, "type"),
Serial: getIntFromTable(pkgTable, "serial"),
Dependencies: getDependenciesFromTable(L, pkgTable, "dependencies"), Dependencies: getDependenciesFromTable(L, pkgTable, "dependencies"),
BuildDependencies: getDependenciesFromTable(L, pkgTable, "build_dependencies"), BuildDependencies: getDependenciesFromTable(L, pkgTable, "build_dependencies"),

View File

@@ -64,6 +64,9 @@ func LGitCheckout(L *lua.LState) int {
func LGitPUll(L *lua.LState) int { func LGitPUll(L *lua.LState) int {
dir := L.CheckString(1) dir := L.CheckString(1)
git.PlainClone("/tmp", &git.CloneOptions{})
depth := 1 depth := 1
if L.GetTop() > 1 { if L.GetTop() > 1 {
depth = L.CheckInt(2) depth = L.CheckInt(2)

View File

@@ -264,6 +264,9 @@ func ResolvDependencies(depnList map[string]string) ([]string, error) {
value := strings.TrimLeft(constraint, "<>=") value := strings.TrimLeft(constraint, "<>=")
switch { switch {
case constraint == "any":
filter = ""
order = "ORDER BY serial DESC LIMIT 1"
case strings.HasPrefix(constraint, ">"): case strings.HasPrefix(constraint, ">"):
filter = fmt.Sprintf("AND serial > %s", value) filter = fmt.Sprintf("AND serial > %s", value)
order = "ORDER BY serial DESC LIMIT 1" order = "ORDER BY serial DESC LIMIT 1"

View File

@@ -49,6 +49,43 @@ type Package struct {
// Install exctract and fully install from a package file ( tar.zst ) // Install exctract and fully install from a package file ( tar.zst )
func InstallPackage(file []byte, destDir string) error { func InstallPackage(file []byte, destDir string) error {
packetLua, err := packet.ReadPacket(file)
if err == nil {
L, err := utils_lua.GetSandBox()
if err != nil {
return err
}
bootstrapcontainer, err := build.NewContainer(packetLua)
if err != nil {
return err
}
os.Chdir(destDir)
if err := utils.ChangeToNoPermission(); err != nil {
return fmt.Errorf("error changing to packet user: %s", err)
}
if err := bootstrapcontainer.ExecutePrepare(packetLua, &L); err != nil {
return fmt.Errorf("error executing prepare: %s", err)
}
if err := bootstrapcontainer.ExecuteBuild(packetLua, &L); err != nil {
return fmt.Errorf("error executing build: %s", err)
}
if err := utils.ElevatePermission(); err != nil {
return fmt.Errorf("error changing to root: %s", err)
}
if err := bootstrapcontainer.ExecuteInstall(packetLua, &L); err != nil {
return fmt.Errorf("error executing build: %s", err)
}
return nil
}
manifest, err := packet.ReadPacketFromFile(bytes.NewReader(file)) manifest, err := packet.ReadPacketFromFile(bytes.NewReader(file))
if err != nil { if err != nil {
return err return err
@@ -151,6 +188,10 @@ func InstallPackage(file []byte, destDir string) error {
os.Chdir(destDir) os.Chdir(destDir)
if err := utils.ChangeToNoPermission(); err != nil {
return fmt.Errorf("error changing to packet user: %s", err)
}
if err := bootstrapcontainer.ExecutePrepare(manifest, &L); err != nil { if err := bootstrapcontainer.ExecutePrepare(manifest, &L); err != nil {
return fmt.Errorf("error executing prepare: %s", err) return fmt.Errorf("error executing prepare: %s", err)
} }
@@ -159,17 +200,14 @@ func InstallPackage(file []byte, destDir string) error {
return fmt.Errorf("error executing build: %s", err) return fmt.Errorf("error executing build: %s", err)
} }
if err := utils.ChangeToNoPermission(); err != nil {
return fmt.Errorf("error changing to packet user: %s", err)
}
if err := bootstrapcontainer.ExecuteInstall(manifest, &L); err != nil {
return fmt.Errorf("error executing build: %s", err)
}
if err := utils.ElevatePermission(); err != nil { if err := utils.ElevatePermission(); err != nil {
return fmt.Errorf("error changing to root: %s", err) return fmt.Errorf("error changing to root: %s", err)
} }
if err := bootstrapcontainer.ExecuteInstall(manifest, &L); err != nil {
return fmt.Errorf("error executing build: %s", err)
}
return nil return nil
} }
@@ -185,8 +223,8 @@ func GetPackage(id string) (Package, error) {
} }
defer db.Close() defer db.Close()
var packageUrl string var packageUrl, typePackage string
err = db.QueryRow("SELECT query_name, version, package_url, image_url, description, author, author_verified, os, arch, signature, public_key, serial, size FROM packages WHERE id = ?", id). err = db.QueryRow("SELECT query_name, version, package_url, image_url, description, author, author_verified, os, arch, signature, public_key, serial, size, type FROM packages WHERE id = ?", id).
Scan( Scan(
&this.QueryName, &this.QueryName,
&this.Version, &this.Version,
@@ -201,6 +239,7 @@ func GetPackage(id string) (Package, error) {
&this.PublicKey, &this.PublicKey,
&this.Serial, &this.Serial,
&this.Size, &this.Size,
&typePackage,
) )
if err != nil { if err != nil {
return Package{}, err return Package{}, err
@@ -221,53 +260,64 @@ func GetPackage(id string) (Package, error) {
this.Dependencies[a] = vConstraint this.Dependencies[a] = vConstraint
} }
filename := path.Base(packageUrl) if strings.Contains(typePackage, " ") {
this.Filename = filename
dirEntry, err := os.ReadDir(consts.DefaultCache_d) filename := path.Base(packageUrl)
if err != nil { this.Filename = filename
return Package{}, err
}
for _, v := range dirEntry { dirEntry, err := os.ReadDir(consts.DefaultCache_d)
if v.Name() == filename {
this.PackageF, err = os.ReadFile(filepath.Join(consts.DefaultCache_d, filename))
if err != nil {
break
}
goto skipping
}
}
peers, err = AskLAN(filename)
if err != nil {
return Package{}, err
}
if len(peers) == 0 {
fmt.Printf(":: Pulling from %s\n", packageUrl)
this.PackageF, err = getFileHTTP(packageUrl)
if err != nil { if err != nil {
return Package{}, err return Package{}, err
} }
} else {
var totalerrors int = 0 for _, v := range dirEntry {
for _, peer := range peers { if v.Name() == filename {
fmt.Printf(":: Pulling from local network (%s)\n", peer.IP) this.PackageF, err = os.ReadFile(filepath.Join(consts.DefaultCache_d, filename))
this.PackageF, err = getFileHTTP(fmt.Sprintf("http://%s:%d/%s", peer.IP, peer.Port, filename)) if err != nil {
if err == nil { break
break }
} else { goto skipping
totalerrors++
} }
} }
if totalerrors == len(peers) {
peers, err = AskLAN(filename)
if err != nil {
return Package{}, err
}
if len(peers) == 0 {
fmt.Printf(":: Pulling from %s\n", packageUrl)
this.PackageF, err = getFileHTTP(packageUrl) this.PackageF, err = getFileHTTP(packageUrl)
if err != nil { if err != nil {
return Package{}, err return Package{}, err
} }
} else {
var totalerrors int = 0
for _, peer := range peers {
fmt.Printf(":: Pulling from local network (%s)\n", peer.IP)
this.PackageF, err = getFileHTTP(fmt.Sprintf("http://%s:%d/%s", peer.IP, peer.Port, filename))
if err == nil {
break
} else {
totalerrors++
}
}
if totalerrors == len(peers) {
this.PackageF, err = getFileHTTP(packageUrl)
if err != nil {
return Package{}, err
}
}
} }
} else {
filds := strings.Fields(typePackage)
pkt, err := packet.GetPackageDotLuaFromRemote(filds[0], filds[1])
if err != nil {
return Package{}, err
}
this.Manifest = pkt
return this, nil
} }
skipping: skipping: