diff --git a/Makefile b/Makefile index 57d22dc..4ebcf61 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,7 @@ install: build/bpm config/ # Install files install -Dm755 build/bpm $(DESTDIR)$(BINDIR)/bpm install -Dm644 config/bpm.conf $(DESTDIR)$(SYSCONFDIR)/bpm.conf + install -Dm644 config/bpm-compilation.conf $(DESTDIR)$(SYSCONFDIR)/bpm-compilation.conf uninstall: rm $(DESTDIR)$(BINDIR)/bpm diff --git a/config/bpm-compilation.conf b/config/bpm-compilation.conf new file mode 100644 index 0000000..cd28321 --- /dev/null +++ b/config/bpm-compilation.conf @@ -0,0 +1,2 @@ +privilege_escalator_cmd: "sudo" +compilation_env: [] diff --git a/config/bpm.conf b/config/bpm.conf index d594d35..8c64765 100644 --- a/config/bpm.conf +++ b/config/bpm.conf @@ -1,8 +1,6 @@ ignore_packages: [] -privilege_escalator_cmd: "sudo" -compilation_env: [] cleanup_make_dependencies: true databases: - name: example-database source: https://my-database.xyz/ - disabled: true \ No newline at end of file + disabled: true diff --git a/src/bpm/main.go b/src/bpm/main.go index ffb0698..41b3440 100644 --- a/src/bpm/main.go +++ b/src/bpm/main.go @@ -217,7 +217,7 @@ func resolveCommand() { for i, term := range searchTerms { nameResults := make([]*bpmlib.PackageInfo, 0) descResults := make([]*bpmlib.PackageInfo, 0) - for _, db := range bpmlib.BPMConfig.Databases { + for _, db := range bpmlib.MainBPMConfig.Databases { for _, entry := range db.Entries { if strings.Contains(entry.Info.Name, term) { nameResults = append(nameResults, entry.Info) @@ -630,7 +630,7 @@ func resolveCommand() { // Run 'bpm install' using the set privilege escalator command args := []string{executable, "install", "--installation-reason=make-dependency"} args = append(args, unmetDepends...) - cmd := exec.Command(bpmlib.BPMConfig.PrivilegeEscalatorCmd, args...) + cmd := exec.Command(bpmlib.CompilationBPMConfig.PrivilegeEscalatorCmd, args...) if yesAll { cmd.Args = slices.Insert(cmd.Args, 3, "-y") } @@ -714,7 +714,7 @@ func resolveCommand() { } // Run 'bpm cleanup' using the set privilege escalator command - cmd := exec.Command(bpmlib.BPMConfig.PrivilegeEscalatorCmd, executable, "cleanup") + cmd := exec.Command(bpmlib.CompilationBPMConfig.PrivilegeEscalatorCmd, executable, "cleanup") if yesAll { cmd.Args = slices.Insert(cmd.Args, 3, "-y") } @@ -924,7 +924,7 @@ func resolveFlags() { } if !isFlagSet(cleanupFlagSet, "depends") && !isFlagSet(cleanupFlagSet, "make-depends") && !isFlagSet(cleanupFlagSet, "compilation-files") && !isFlagSet(cleanupFlagSet, "compiled-pkgs") && !isFlagSet(cleanupFlagSet, "fetched-pkgs") { cleanupDependencies = true - cleanupMakeDependencies = bpmlib.BPMConfig.CleanupMakeDependencies + cleanupMakeDependencies = bpmlib.MainBPMConfig.CleanupMakeDependencies cleanupCompilationFiles = true cleanupCompiledPackages = true cleanupFetchedPackages = true diff --git a/src/bpmlib/compilation.go b/src/bpmlib/compilation.go index f8434e4..1e2d2e1 100644 --- a/src/bpmlib/compilation.go +++ b/src/bpmlib/compilation.go @@ -3,13 +3,14 @@ package bpmlib import ( "errors" "fmt" - "gopkg.in/yaml.v3" "os" "os/exec" "path" "strconv" "strings" "syscall" + + "gopkg.in/yaml.v3" ) var rootCompilationUID = "65534" @@ -136,7 +137,7 @@ func CompileSourcePackage(archiveFilename, outputDirectory string, skipChecks bo } else { env = append(env, "BPM_PKG_ARCH="+GetArch()) } - env = append(env, BPMConfig.CompilationEnvironment...) + env = append(env, CompilationBPMConfig.CompilationEnvironment...) // Execute prepare and build functions in source.sh script cmd := exec.Command("bash", "-c", diff --git a/src/bpmlib/config.go b/src/bpmlib/config.go index e5f33c8..34a4762 100644 --- a/src/bpmlib/config.go +++ b/src/bpmlib/config.go @@ -1,41 +1,61 @@ package bpmlib import ( - "gopkg.in/yaml.v3" "os" + + "gopkg.in/yaml.v3" ) -type BPMConfigStruct struct { +type MainBPMConfigStruct struct { IgnorePackages []string `yaml:"ignore_packages"` - PrivilegeEscalatorCmd string `yaml:"privilege_escalator_cmd"` - CompilationEnvironment []string `yaml:"compilation_env"` CleanupMakeDependencies bool `yaml:"cleanup_make_dependencies"` Databases []*BPMDatabase `yaml:"databases"` } -var BPMConfig BPMConfigStruct +type CompilationBPMConfigStruct struct { + PrivilegeEscalatorCmd string `yaml:"privilege_escalator_cmd"` + CompilationEnvironment []string `yaml:"compilation_env"` +} + +var MainBPMConfig MainBPMConfigStruct +var CompilationBPMConfig CompilationBPMConfigStruct func ReadConfig() (err error) { - if _, err = os.Stat("/etc/bpm.conf"); os.IsNotExist(err) { - return err - } + var file *os.File - bytes, err := os.ReadFile("/etc/bpm.conf") - if err != nil { - return err - } - - BPMConfig = BPMConfigStruct{ + // Set default config options + MainBPMConfig = MainBPMConfigStruct{ CleanupMakeDependencies: true, } - err = yaml.Unmarshal(bytes, &BPMConfig) + + // Read main BPM config + file, err = os.Open("/etc/bpm.conf") if err != nil { return err } + err = yaml.NewDecoder(file).Decode(&MainBPMConfig) + if err != nil { + return err + } + file.Close() - for i := len(BPMConfig.Databases) - 1; i >= 0; i-- { - if BPMConfig.Databases[i].Disabled != nil && *BPMConfig.Databases[i].Disabled { - BPMConfig.Databases = append(BPMConfig.Databases[:i], BPMConfig.Databases[i+1:]...) + // Read compilation BPM config + if _, err := os.Stat("/etc/bpm-compilation.conf"); err == nil { + file, err = os.Open("/etc/bpm-compilation.conf") + if err != nil { + return err + } + err = yaml.NewDecoder(file).Decode(&CompilationBPMConfig) + if err != nil { + return err + } + file.Close() + } + + // Remove disabled databases from memory + for i := len(MainBPMConfig.Databases) - 1; i >= 0; i-- { + if MainBPMConfig.Databases[i].Disabled != nil && *MainBPMConfig.Databases[i].Disabled { + MainBPMConfig.Databases = append(MainBPMConfig.Databases[:i], MainBPMConfig.Databases[i+1:]...) } } diff --git a/src/bpmlib/databases.go b/src/bpmlib/databases.go index 6b14195..4d574c6 100644 --- a/src/bpmlib/databases.go +++ b/src/bpmlib/databases.go @@ -3,13 +3,14 @@ package bpmlib import ( "errors" "fmt" - "gopkg.in/yaml.v3" "io" "net/http" "net/url" "os" "path" "strings" + + "gopkg.in/yaml.v3" ) type BPMDatabase struct { @@ -172,7 +173,7 @@ func (db *BPMDatabase) SyncLocalDatabaseFile() error { } func ReadLocalDatabaseFiles() (err error) { - for _, db := range BPMConfig.Databases { + for _, db := range MainBPMConfig.Databases { // Initialize struct values db.Entries = make(map[string]*BPMDatabaseEntry) db.VirtualPackages = make(map[string][]string) @@ -188,7 +189,7 @@ func ReadLocalDatabaseFiles() (err error) { } func GetDatabase(name string) *BPMDatabase { - for _, db := range BPMConfig.Databases { + for _, db := range MainBPMConfig.Databases { if db.Name == name { return db } @@ -203,7 +204,7 @@ func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) { if pkgName == "" { return nil, nil, errors.New("could not find database entry for this package") } - for _, db := range BPMConfig.Databases { + for _, db := range MainBPMConfig.Databases { if db.ContainsPackage(pkgName) { return db.Entries[pkgName], db, nil } @@ -226,7 +227,7 @@ func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) { } func FindReplacement(pkg string) *BPMDatabaseEntry { - for _, db := range BPMConfig.Databases { + for _, db := range MainBPMConfig.Databases { for _, entry := range db.Entries { for _, replaced := range entry.Info.Replaces { if replaced == pkg { @@ -240,7 +241,7 @@ func FindReplacement(pkg string) *BPMDatabaseEntry { } func ResolveVirtualPackage(vpkg string) *BPMDatabaseEntry { - for _, db := range BPMConfig.Databases { + for _, db := range MainBPMConfig.Databases { if v, ok := db.VirtualPackages[vpkg]; ok { for _, pkg := range v { return db.Entries[pkg] diff --git a/src/bpmlib/general.go b/src/bpmlib/general.go index b3ba3ad..d5e301a 100644 --- a/src/bpmlib/general.go +++ b/src/bpmlib/general.go @@ -362,7 +362,7 @@ func UpdatePackages(rootDir string, syncDatabase bool, installOptionalDependenci // Search for packages for _, pkg := range pkgs { - if slices.Contains(BPMConfig.IgnorePackages, pkg) { + if slices.Contains(MainBPMConfig.IgnorePackages, pkg) { continue } var entry *BPMDatabaseEntry @@ -407,7 +407,7 @@ func UpdatePackages(rootDir string, syncDatabase bool, installOptionalDependenci // SyncDatabase syncs all databases declared in /etc/bpm.conf func SyncDatabase(verbose bool) (err error) { - for _, db := range BPMConfig.Databases { + for _, db := range MainBPMConfig.Databases { if verbose { fmt.Printf("Fetching package database file for database (%s)...\n", db.Name) }