From 28e148b5b5a0eccf52405d18825e1deaba2756f9 Mon Sep 17 00:00:00 2001 From: Tovi Jaeschke-Rogers Date: Thu, 22 Jul 2021 15:43:22 +0930 Subject: [PATCH] Add pre/post install cmds to manifest yml --- .gitignore | 1 + Client/Package/InstallPackage.go | 29 ++++++++++++++++++++++++++++- Client/Package/Manifest.go | 10 ++++++---- Variables/Variables.go | 1 + notes.txt | 2 ++ 5 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 notes.txt diff --git a/.gitignore b/.gitignore index 8b84a56..4d8adb3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.tar *.tar.gz tjpkg +test.go diff --git a/Client/Package/InstallPackage.go b/Client/Package/InstallPackage.go index 978097e..2a5091b 100644 --- a/Client/Package/InstallPackage.go +++ b/Client/Package/InstallPackage.go @@ -4,12 +4,30 @@ import ( "errors" "fmt" "os" + "os/exec" "PackageManager/Archive" "PackageManager/Client/Database" "PackageManager/Variables" ) +func runInstallCmd(cmdStr string) error { + var ( + cmd *exec.Cmd + ) + + if cmdStr == "" { + return nil + } + + cmd = exec.Command("/bin/sh", "-c", cmdStr) + cmd.Dir = Variables.RootDir + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() +} + func CheckPackageDependancies(deps map[string]string) ([]int64, error) { var ( name, version string @@ -64,16 +82,25 @@ func InstallPackage(pkgs []string) error { if !Variables.IgnoreDepsCheck { depIds, e = CheckPackageDependancies(manifest.Dependancies) if e != nil { - // TODO: Search for package on error return e } } + e = runInstallCmd(manifest.PreInstallCmds) + if e != nil { + return e + } + e = Archive.ExtractArchive(pkg, Variables.RootDir) if e != nil { return e } + e = runInstallCmd(manifest.PostInstallCmds) + if e != nil { + return e + } + e = Database.InsertPackage(manifest.Name, manifest.Version, depIds) if e != nil { return e diff --git a/Client/Package/Manifest.go b/Client/Package/Manifest.go index 099b67e..ff49ce9 100644 --- a/Client/Package/Manifest.go +++ b/Client/Package/Manifest.go @@ -5,10 +5,12 @@ import ( ) type Manifest struct { - Name string `yaml:"name"` - Version string `yaml:"version"` - Symlinks map[string]string `yaml:"symlinks,flow"` - Dependancies map[string]string `yaml:"dependancies,flow"` + Name string `yaml:"name"` + Version string `yaml:"version"` + Symlinks map[string]string `yaml:"symlinks,flow"` + Dependancies map[string]string `yaml:"dependancies,flow"` + PreInstallCmds string `yaml:"pre_install_cmds"` + PostInstallCmds string `yaml:"post_install_cmds"` } func ParseManifestFile(manifest string) (Manifest, error) { diff --git a/Variables/Variables.go b/Variables/Variables.go index b39dbd0..ac9452a 100644 --- a/Variables/Variables.go +++ b/Variables/Variables.go @@ -57,6 +57,7 @@ var ( IgnoreRegexPaths []string = []string{ os.Args[0], + "^/usr/share/info/dir$", "^/swapfile$", "^/etc/passwd$", "^/etc/passwd-$", diff --git a/notes.txt b/notes.txt new file mode 100644 index 0000000..bbb2877 --- /dev/null +++ b/notes.txt @@ -0,0 +1,2 @@ +Ncurses needs a post install command + ln -sf ../share/terminfo usr/lib/terminfo