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