Compare commits
	
		
			10 Commits
		
	
	
		
			9883fd92dc
			...
			61cf888605
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 61cf888605 | |||
| a62ddf8270 | |||
| aa65b28112 | |||
| 72a5ab7c5d | |||
| 89b3fdbc84 | |||
| 0a531488a3 | |||
| 7fbaef7bd4 | |||
| b411eff6f4 | |||
| befa4e3ea4 | |||
| 807d9fa784 | 
							
								
								
									
										40
									
								
								Packet.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								Packet.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					return {
 | 
				
			||||||
 | 
					    package = {
 | 
				
			||||||
 | 
					        name = "packets",
 | 
				
			||||||
 | 
					        id   = "packets@1.0.0",
 | 
				
			||||||
 | 
					        version = "1.0.0",
 | 
				
			||||||
 | 
					        author  = "robogg133",
 | 
				
			||||||
 | 
					        description = "fast, opensource, easy to use package manager.",
 | 
				
			||||||
 | 
					        type = "remote",
 | 
				
			||||||
 | 
					        serial = 0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        arch = {"x86_65"},
 | 
				
			||||||
 | 
					        os = {"linux"},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dependencies = {}, 
 | 
				
			||||||
 | 
					        build_dependencies = {["go"] = ">=1.25.1"},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        git_url = "https://github.com/roboogg133/packets.git",
 | 
				
			||||||
 | 
					        git_branch = "main"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    prepare = function(container)
 | 
				
			||||||
 | 
					        git.clone("https://github.com/roboogg133/packets.git", container.dir("/data"))
 | 
				
			||||||
 | 
					        os.remove(container.dir("/data/.git"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    end,
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    build = function()
 | 
				
			||||||
 | 
					        os.execute("go build ./data/cmd/packets")
 | 
				
			||||||
 | 
					    end,
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    install = function(container)
 | 
				
			||||||
 | 
					        os.copy(container.dir("./packets"), BIN_DIR)
 | 
				
			||||||
 | 
					    end,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    remove = function ()
 | 
				
			||||||
 | 
					        os.remove(path_join(BIN_DIR, "packets"))
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -13,6 +13,7 @@ CREATE TABLE packages (
 | 
				
			|||||||
    arch            TEXT NOT NULL,
 | 
					    arch            TEXT NOT NULL,
 | 
				
			||||||
    os              TEXT NOT NULL,
 | 
					    os              TEXT NOT NULL,
 | 
				
			||||||
    size            INTEGER NOT NULL DEFAULT 0,
 | 
					    size            INTEGER NOT NULL DEFAULT 0,
 | 
				
			||||||
 | 
					    type            TEXT NOT NULL DEFAULT 'static',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    UNIQUE(query_name, version),
 | 
					    UNIQUE(query_name, version),
 | 
				
			||||||
    UNIQUE(query_name, serial)
 | 
					    UNIQUE(query_name, serial)
 | 
				
			||||||
@@ -33,7 +34,6 @@ CREATE TABLE IF NOT EXISTS packages (
 | 
				
			|||||||
    query_name      TEXT NOT NULL UNIQUE PRIMARY KEY,
 | 
					    query_name      TEXT NOT NULL UNIQUE PRIMARY KEY,
 | 
				
			||||||
    id              TEXT NOT NULL UNIQUE, 
 | 
					    id              TEXT NOT NULL UNIQUE, 
 | 
				
			||||||
    version         TEXT NOT NULL, 
 | 
					    version         TEXT NOT NULL, 
 | 
				
			||||||
    dependencies    TEXT NOT NULL DEFAULT '', 
 | 
					 | 
				
			||||||
    description     TEXT NOT NULL,
 | 
					    description     TEXT NOT NULL,
 | 
				
			||||||
    package_d       TEXT NOT NULL,
 | 
					    package_d       TEXT NOT NULL,
 | 
				
			||||||
    filename        TEXT NOT NULL,
 | 
					    filename        TEXT NOT NULL,
 | 
				
			||||||
@@ -41,6 +41,7 @@ CREATE TABLE IF NOT EXISTS packages (
 | 
				
			|||||||
    arch            TEXT NOT NULL,
 | 
					    arch            TEXT NOT NULL,
 | 
				
			||||||
    in_cache        INTEGER NOT NULL DEFAULT 1,
 | 
					    in_cache        INTEGER NOT NULL DEFAULT 1,
 | 
				
			||||||
    serial          INTEGER NOT NULL,
 | 
					    serial          INTEGER NOT NULL,
 | 
				
			||||||
 | 
					    type            TEXT NOT NULL,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    UNIQUE(query_name, version),
 | 
					    UNIQUE(query_name, version),
 | 
				
			||||||
    UNIQUE(query_name, serial)
 | 
					    UNIQUE(query_name, serial)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,6 @@ const InstalledDatabaseSchema = `CREATE TABLE IF NOT EXISTS packages (
 | 
				
			|||||||
    query_name      TEXT NOT NULL UNIQUE PRIMARY KEY,
 | 
					    query_name      TEXT NOT NULL UNIQUE PRIMARY KEY,
 | 
				
			||||||
    id              TEXT NOT NULL UNIQUE, 
 | 
					    id              TEXT NOT NULL UNIQUE, 
 | 
				
			||||||
    version         TEXT NOT NULL, 
 | 
					    version         TEXT NOT NULL, 
 | 
				
			||||||
    dependencies    TEXT NOT NULL DEFAULT '', 
 | 
					 | 
				
			||||||
    description     TEXT NOT NULL,
 | 
					    description     TEXT NOT NULL,
 | 
				
			||||||
    package_d       TEXT NOT NULL,
 | 
					    package_d       TEXT NOT NULL,
 | 
				
			||||||
    filename        TEXT NOT NULL,
 | 
					    filename        TEXT NOT NULL,
 | 
				
			||||||
@@ -27,6 +26,7 @@ const InstalledDatabaseSchema = `CREATE TABLE IF NOT EXISTS packages (
 | 
				
			|||||||
    arch            TEXT NOT NULL,
 | 
					    arch            TEXT NOT NULL,
 | 
				
			||||||
    in_cache        INTEGER NOT NULL DEFAULT 1,
 | 
					    in_cache        INTEGER NOT NULL DEFAULT 1,
 | 
				
			||||||
    serial          INTEGER NOT NULL,
 | 
					    serial          INTEGER NOT NULL,
 | 
				
			||||||
 | 
					    type            TEXT NOT NULL,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    UNIQUE(query_name, version),
 | 
					    UNIQUE(query_name, version),
 | 
				
			||||||
    UNIQUE(query_name, serial)
 | 
					    UNIQUE(query_name, serial)
 | 
				
			||||||
@@ -41,4 +41,10 @@ CREATE TABLE package_dependencies(
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE INDEX index_dependency_name ON package_dependencies(dependency_name);
 | 
					CREATE INDEX index_dependency_name ON package_dependencies(dependency_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CREATE TABLE IF NOT EXISTS build_dependencies (
 | 
				
			||||||
 | 
					    id TEXT PRIMARY KEY,
 | 
				
			||||||
 | 
					    dir TEXT NOT NULL DEFAULT "/dev/null"
 | 
				
			||||||
 | 
					    uses INTEGER NOT NULL DEFAULT 0
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
`
 | 
					`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,9 @@ import (
 | 
				
			|||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"runtime"
 | 
						"runtime"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/go-git/go-git/v6"
 | 
				
			||||||
 | 
						"github.com/go-git/go-git/v6/plumbing"
 | 
				
			||||||
 | 
						"github.com/go-git/go-git/v6/storage/memory"
 | 
				
			||||||
	"github.com/klauspost/compress/zstd"
 | 
						"github.com/klauspost/compress/zstd"
 | 
				
			||||||
	lua "github.com/yuin/gopher-lua"
 | 
						lua "github.com/yuin/gopher-lua"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -22,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
 | 
				
			||||||
@@ -50,16 +55,17 @@ func ReadPacket(f []byte) (PacketLua, error) {
 | 
				
			|||||||
	L.SetGlobal("os", lua.LNil)
 | 
						L.SetGlobal("os", lua.LNil)
 | 
				
			||||||
	L.SetGlobal("io", lua.LNil)
 | 
						L.SetGlobal("io", lua.LNil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := L.DoString(string(f)); err != nil {
 | 
					 | 
				
			||||||
		return PacketLua{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	L.SetGlobal("os", osObject)
 | 
					 | 
				
			||||||
	L.SetGlobal("io", ioObject)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	L.SetGlobal("BIN_DIR", lua.LString(cfg.Config.Bin_d))
 | 
						L.SetGlobal("BIN_DIR", lua.LString(cfg.Config.Bin_d))
 | 
				
			||||||
	L.SetGlobal("ARCH", lua.LString(runtime.GOARCH))
 | 
						L.SetGlobal("ARCH", lua.LString(runtime.GOARCH))
 | 
				
			||||||
	L.SetGlobal("OS", lua.LString(runtime.GOOS))
 | 
						L.SetGlobal("OS", lua.LString(runtime.GOOS))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := L.DoString(string(f)); err != nil {
 | 
				
			||||||
 | 
							return PacketLua{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						L.SetGlobal("os", osObject)
 | 
				
			||||||
 | 
						L.SetGlobal("io", ioObject)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tableLua := L.Get(-1)
 | 
						tableLua := L.Get(-1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if tableLua.Type() != lua.LTTable {
 | 
						if tableLua.Type() != lua.LTTable {
 | 
				
			||||||
@@ -81,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"),
 | 
				
			||||||
@@ -88,10 +95,13 @@ func ReadPacket(f []byte) (PacketLua, error) {
 | 
				
			|||||||
		GitUrl:    getStringFromTable(pkgTable, "git_url"),
 | 
							GitUrl:    getStringFromTable(pkgTable, "git_url"),
 | 
				
			||||||
		GitBranch: getStringFromTable(pkgTable, "git_branch"),
 | 
							GitBranch: getStringFromTable(pkgTable, "git_branch"),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Prepare: getFunctionFromTable(pkgTable, "prepare"),
 | 
							Os:           getStringArrayFromTable(L, pkgTable, "os"),
 | 
				
			||||||
		Build:   getFunctionFromTable(pkgTable, "build"),
 | 
							Architetures: getStringArrayFromTable(L, pkgTable, "arch"),
 | 
				
			||||||
		Install: getFunctionFromTable(pkgTable, "install"),
 | 
					
 | 
				
			||||||
		Remove:  getFunctionFromTable(pkgTable, "remove"),
 | 
							Prepare: getFunctionFromTable(table, "prepare"),
 | 
				
			||||||
 | 
							Build:   getFunctionFromTable(table, "build"),
 | 
				
			||||||
 | 
							Install: getFunctionFromTable(table, "install"),
 | 
				
			||||||
 | 
							Remove:  getFunctionFromTable(table, "remove"),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if packetLua.Install == nil || packetLua.Remove == nil {
 | 
						if packetLua.Install == nil || packetLua.Remove == nil {
 | 
				
			||||||
@@ -137,3 +147,36 @@ func ReadPacketFromFile(file io.Reader) (PacketLua, error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return PacketLua{}, errors_packets.ErrCantFindPacketDotLua
 | 
						return PacketLua{}, errors_packets.ErrCantFindPacketDotLua
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetPackageDotLuaFromRemote(url string, branch string) (PacketLua, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						repo, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
 | 
				
			||||||
 | 
							Depth:         1,
 | 
				
			||||||
 | 
							URL:           url,
 | 
				
			||||||
 | 
							SingleBranch:  true,
 | 
				
			||||||
 | 
							ReferenceName: plumbing.ReferenceName("refs/heads/" + branch),
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return PacketLua{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ref, err := repo.Head()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return PacketLua{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						commit, err := repo.CommitObject(ref.Hash())
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return PacketLua{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						f, err := commit.File("Packet.lua")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return PacketLua{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						content, err := f.Contents()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return PacketLua{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return ReadPacket([]byte(content))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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"
 | 
				
			||||||
@@ -431,7 +434,7 @@ skipping:
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetPacketsUID() (int, error) {
 | 
					func GetPacketsUID() (int, error) {
 | 
				
			||||||
	_ = exec.Command("useradd", "-M", "-N", "-r", "-s", "/bin/false", "-d", "/var/lib/packets", "packets").Run()
 | 
						_ = exec.Command("useradd", "-M", "-N", "-r", "-s", "/bin/false", "-d", "/etc/packets", "packets").Run()
 | 
				
			||||||
	cmd := exec.Command("id", "-u", "packets")
 | 
						cmd := exec.Command("id", "-u", "packets")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	out, err := cmd.CombinedOutput()
 | 
						out, err := cmd.CombinedOutput()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										138
									
								
								pkg/main.go
									
									
									
									
									
								
							
							
						
						
									
										138
									
								
								pkg/main.go
									
									
									
									
									
								
							@@ -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:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								systemd/packets-http.service
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								systemd/packets-http.service
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					 Description=Serving packages for everyone in the same network.
 | 
				
			||||||
 | 
					 After=network.target packets-udp.service
 | 
				
			||||||
 | 
					 Requires=packets-udp.service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					 Type=simple
 | 
				
			||||||
 | 
					 User=packets
 | 
				
			||||||
 | 
					 WorkingDirectory=/var/cache/packets
 | 
				
			||||||
 | 
					 ExecStart=/etc/packets/httpsocket
 | 
				
			||||||
 | 
					 Restart=always
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					 WantedBy=multi-user.target
 | 
				
			||||||
							
								
								
									
										14
									
								
								systemd/packets-udp.service
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								systemd/packets-udp.service
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					 Description=Respond to every request for packages in local network.
 | 
				
			||||||
 | 
					 After=network.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					 Type=simple
 | 
				
			||||||
 | 
					 User=packets
 | 
				
			||||||
 | 
					 WorkingDirectory=/etc/packets
 | 
				
			||||||
 | 
					 ExecStart=/etc/packets/udpsocket
 | 
				
			||||||
 | 
					 Restart=always
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					 WantedBy=multi-user.target
 | 
				
			||||||
		Reference in New Issue
	
	Block a user