Split compilation config options into separate config file

This commit is contained in:
2025-08-14 22:35:11 +03:00
parent 5181c43ecf
commit 812caa1485
8 changed files with 58 additions and 35 deletions
+1
View File
@@ -21,6 +21,7 @@ install: build/bpm config/
# Install files # Install files
install -Dm755 build/bpm $(DESTDIR)$(BINDIR)/bpm install -Dm755 build/bpm $(DESTDIR)$(BINDIR)/bpm
install -Dm644 config/bpm.conf $(DESTDIR)$(SYSCONFDIR)/bpm.conf install -Dm644 config/bpm.conf $(DESTDIR)$(SYSCONFDIR)/bpm.conf
install -Dm644 config/bpm-compilation.conf $(DESTDIR)$(SYSCONFDIR)/bpm-compilation.conf
uninstall: uninstall:
rm $(DESTDIR)$(BINDIR)/bpm rm $(DESTDIR)$(BINDIR)/bpm
+2
View File
@@ -0,0 +1,2 @@
privilege_escalator_cmd: "sudo"
compilation_env: []
-2
View File
@@ -1,6 +1,4 @@
ignore_packages: [] ignore_packages: []
privilege_escalator_cmd: "sudo"
compilation_env: []
cleanup_make_dependencies: true cleanup_make_dependencies: true
databases: databases:
- name: example-database - name: example-database
+4 -4
View File
@@ -217,7 +217,7 @@ func resolveCommand() {
for i, term := range searchTerms { for i, term := range searchTerms {
nameResults := make([]*bpmlib.PackageInfo, 0) nameResults := make([]*bpmlib.PackageInfo, 0)
descResults := 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 { for _, entry := range db.Entries {
if strings.Contains(entry.Info.Name, term) { if strings.Contains(entry.Info.Name, term) {
nameResults = append(nameResults, entry.Info) nameResults = append(nameResults, entry.Info)
@@ -630,7 +630,7 @@ func resolveCommand() {
// Run 'bpm install' using the set privilege escalator command // Run 'bpm install' using the set privilege escalator command
args := []string{executable, "install", "--installation-reason=make-dependency"} args := []string{executable, "install", "--installation-reason=make-dependency"}
args = append(args, unmetDepends...) args = append(args, unmetDepends...)
cmd := exec.Command(bpmlib.BPMConfig.PrivilegeEscalatorCmd, args...) cmd := exec.Command(bpmlib.CompilationBPMConfig.PrivilegeEscalatorCmd, args...)
if yesAll { if yesAll {
cmd.Args = slices.Insert(cmd.Args, 3, "-y") cmd.Args = slices.Insert(cmd.Args, 3, "-y")
} }
@@ -714,7 +714,7 @@ func resolveCommand() {
} }
// Run 'bpm cleanup' using the set privilege escalator command // 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 { if yesAll {
cmd.Args = slices.Insert(cmd.Args, 3, "-y") 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") { if !isFlagSet(cleanupFlagSet, "depends") && !isFlagSet(cleanupFlagSet, "make-depends") && !isFlagSet(cleanupFlagSet, "compilation-files") && !isFlagSet(cleanupFlagSet, "compiled-pkgs") && !isFlagSet(cleanupFlagSet, "fetched-pkgs") {
cleanupDependencies = true cleanupDependencies = true
cleanupMakeDependencies = bpmlib.BPMConfig.CleanupMakeDependencies cleanupMakeDependencies = bpmlib.MainBPMConfig.CleanupMakeDependencies
cleanupCompilationFiles = true cleanupCompilationFiles = true
cleanupCompiledPackages = true cleanupCompiledPackages = true
cleanupFetchedPackages = true cleanupFetchedPackages = true
+3 -2
View File
@@ -3,13 +3,14 @@ package bpmlib
import ( import (
"errors" "errors"
"fmt" "fmt"
"gopkg.in/yaml.v3"
"os" "os"
"os/exec" "os/exec"
"path" "path"
"strconv" "strconv"
"strings" "strings"
"syscall" "syscall"
"gopkg.in/yaml.v3"
) )
var rootCompilationUID = "65534" var rootCompilationUID = "65534"
@@ -136,7 +137,7 @@ func CompileSourcePackage(archiveFilename, outputDirectory string, skipChecks bo
} else { } else {
env = append(env, "BPM_PKG_ARCH="+GetArch()) 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 // Execute prepare and build functions in source.sh script
cmd := exec.Command("bash", "-c", cmd := exec.Command("bash", "-c",
+38 -18
View File
@@ -1,41 +1,61 @@
package bpmlib package bpmlib
import ( import (
"gopkg.in/yaml.v3"
"os" "os"
"gopkg.in/yaml.v3"
) )
type BPMConfigStruct struct { type MainBPMConfigStruct struct {
IgnorePackages []string `yaml:"ignore_packages"` IgnorePackages []string `yaml:"ignore_packages"`
PrivilegeEscalatorCmd string `yaml:"privilege_escalator_cmd"`
CompilationEnvironment []string `yaml:"compilation_env"`
CleanupMakeDependencies bool `yaml:"cleanup_make_dependencies"` CleanupMakeDependencies bool `yaml:"cleanup_make_dependencies"`
Databases []*BPMDatabase `yaml:"databases"` 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) { func ReadConfig() (err error) {
if _, err = os.Stat("/etc/bpm.conf"); os.IsNotExist(err) { var file *os.File
return err
}
bytes, err := os.ReadFile("/etc/bpm.conf") // Set default config options
if err != nil { MainBPMConfig = MainBPMConfigStruct{
return err
}
BPMConfig = BPMConfigStruct{
CleanupMakeDependencies: true, CleanupMakeDependencies: true,
} }
err = yaml.Unmarshal(bytes, &BPMConfig)
// Read main BPM config
file, err = os.Open("/etc/bpm.conf")
if err != nil { if err != nil {
return err return err
} }
err = yaml.NewDecoder(file).Decode(&MainBPMConfig)
if err != nil {
return err
}
file.Close()
for i := len(BPMConfig.Databases) - 1; i >= 0; i-- { // Read compilation BPM config
if BPMConfig.Databases[i].Disabled != nil && *BPMConfig.Databases[i].Disabled { if _, err := os.Stat("/etc/bpm-compilation.conf"); err == nil {
BPMConfig.Databases = append(BPMConfig.Databases[:i], BPMConfig.Databases[i+1:]...) 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:]...)
} }
} }
+7 -6
View File
@@ -3,13 +3,14 @@ package bpmlib
import ( import (
"errors" "errors"
"fmt" "fmt"
"gopkg.in/yaml.v3"
"io" "io"
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"path" "path"
"strings" "strings"
"gopkg.in/yaml.v3"
) )
type BPMDatabase struct { type BPMDatabase struct {
@@ -172,7 +173,7 @@ func (db *BPMDatabase) SyncLocalDatabaseFile() error {
} }
func ReadLocalDatabaseFiles() (err error) { func ReadLocalDatabaseFiles() (err error) {
for _, db := range BPMConfig.Databases { for _, db := range MainBPMConfig.Databases {
// Initialize struct values // Initialize struct values
db.Entries = make(map[string]*BPMDatabaseEntry) db.Entries = make(map[string]*BPMDatabaseEntry)
db.VirtualPackages = make(map[string][]string) db.VirtualPackages = make(map[string][]string)
@@ -188,7 +189,7 @@ func ReadLocalDatabaseFiles() (err error) {
} }
func GetDatabase(name string) *BPMDatabase { func GetDatabase(name string) *BPMDatabase {
for _, db := range BPMConfig.Databases { for _, db := range MainBPMConfig.Databases {
if db.Name == name { if db.Name == name {
return db return db
} }
@@ -203,7 +204,7 @@ func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) {
if pkgName == "" { if pkgName == "" {
return nil, nil, errors.New("could not find database entry for this package") 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) { if db.ContainsPackage(pkgName) {
return db.Entries[pkgName], db, nil return db.Entries[pkgName], db, nil
} }
@@ -226,7 +227,7 @@ func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) {
} }
func FindReplacement(pkg string) *BPMDatabaseEntry { func FindReplacement(pkg string) *BPMDatabaseEntry {
for _, db := range BPMConfig.Databases { for _, db := range MainBPMConfig.Databases {
for _, entry := range db.Entries { for _, entry := range db.Entries {
for _, replaced := range entry.Info.Replaces { for _, replaced := range entry.Info.Replaces {
if replaced == pkg { if replaced == pkg {
@@ -240,7 +241,7 @@ func FindReplacement(pkg string) *BPMDatabaseEntry {
} }
func ResolveVirtualPackage(vpkg string) *BPMDatabaseEntry { func ResolveVirtualPackage(vpkg string) *BPMDatabaseEntry {
for _, db := range BPMConfig.Databases { for _, db := range MainBPMConfig.Databases {
if v, ok := db.VirtualPackages[vpkg]; ok { if v, ok := db.VirtualPackages[vpkg]; ok {
for _, pkg := range v { for _, pkg := range v {
return db.Entries[pkg] return db.Entries[pkg]
+2 -2
View File
@@ -362,7 +362,7 @@ func UpdatePackages(rootDir string, syncDatabase bool, installOptionalDependenci
// Search for packages // Search for packages
for _, pkg := range pkgs { for _, pkg := range pkgs {
if slices.Contains(BPMConfig.IgnorePackages, pkg) { if slices.Contains(MainBPMConfig.IgnorePackages, pkg) {
continue continue
} }
var entry *BPMDatabaseEntry var entry *BPMDatabaseEntry
@@ -407,7 +407,7 @@ func UpdatePackages(rootDir string, syncDatabase bool, installOptionalDependenci
// SyncDatabase syncs all databases declared in /etc/bpm.conf // SyncDatabase syncs all databases declared in /etc/bpm.conf
func SyncDatabase(verbose bool) (err error) { func SyncDatabase(verbose bool) (err error) {
for _, db := range BPMConfig.Databases { for _, db := range MainBPMConfig.Databases {
if verbose { if verbose {
fmt.Printf("Fetching package database file for database (%s)...\n", db.Name) fmt.Printf("Fetching package database file for database (%s)...\n", db.Name)
} }