From 6fbddeea35be8235ad334734cae27d69a5b67801 Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Wed, 27 Apr 2022 15:34:12 +0200 Subject: [PATCH] composer+worker: make dnf-json path externally configurable The default value is the installation path. --- cmd/osbuild-composer/composer.go | 1 + cmd/osbuild-composer/config.go | 2 ++ cmd/osbuild-worker/jobimpl-depsolve.go | 4 ++-- cmd/osbuild-worker/main.go | 8 +++++++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cmd/osbuild-composer/composer.go b/cmd/osbuild-composer/composer.go index d01dbb657..40c380daf 100644 --- a/cmd/osbuild-composer/composer.go +++ b/cmd/osbuild-composer/composer.go @@ -74,6 +74,7 @@ func NewComposer(config *ComposerConfigFile, stateDir, cacheDir string) (*Compos logrus.Infof("Loaded %d distros", len(c.distros.List())) c.solver = dnfjson.NewBaseSolver(path.Join(c.cacheDir, "rpmmd")) + c.solver.SetDNFJSONPath(c.config.DNFJson) var jobs jobqueue.JobQueue if config.Worker.PGDatabase != "" { diff --git a/cmd/osbuild-composer/config.go b/cmd/osbuild-composer/config.go index ea19a3c8d..5770e698d 100644 --- a/cmd/osbuild-composer/config.go +++ b/cmd/osbuild-composer/config.go @@ -17,6 +17,7 @@ type ComposerConfigFile struct { SyslogServer string `toml:"syslog_server" env:"SYSLOG_SERVER"` LogLevel string `toml:"log_level"` LogFormat string `toml:"log_format"` + DNFJson string `toml:"dnf-json"` } type KojiAPIConfig struct { @@ -108,6 +109,7 @@ func GetDefaultConfig() *ComposerConfigFile { }, LogLevel: "info", LogFormat: "text", + DNFJson: "/usr/libexec/osbuild-composer/dnf-json", } } diff --git a/cmd/osbuild-worker/jobimpl-depsolve.go b/cmd/osbuild-worker/jobimpl-depsolve.go index b35a3739c..7d382ea8a 100644 --- a/cmd/osbuild-worker/jobimpl-depsolve.go +++ b/cmd/osbuild-worker/jobimpl-depsolve.go @@ -12,7 +12,7 @@ import ( ) type DepsolveJobImpl struct { - RPMMDCache string + Solver *dnfjson.BaseSolver } // depsolve each package set in the pacakgeSets map. The repositories defined @@ -20,7 +20,7 @@ type DepsolveJobImpl struct { // packageSetsRepos are only used for the package set with the same name // (matching map keys). func (impl *DepsolveJobImpl) depsolve(packageSetsChains map[string][]string, packageSets map[string]rpmmd.PackageSet, repos []rpmmd.RepoConfig, packageSetsRepos map[string][]rpmmd.RepoConfig, modulePlatformID, arch, releasever string) (map[string][]rpmmd.PackageSpec, error) { - solver := dnfjson.NewSolver(modulePlatformID, releasever, arch, impl.RPMMDCache) + solver := impl.Solver.NewWithConfig(modulePlatformID, releasever, arch) depsolvedSets := make(map[string][]rpmmd.PackageSpec) // first depsolve package sets that are part of a chain diff --git a/cmd/osbuild-worker/main.go b/cmd/osbuild-worker/main.go index 655f0fb22..be2d528d4 100644 --- a/cmd/osbuild-worker/main.go +++ b/cmd/osbuild-worker/main.go @@ -22,6 +22,7 @@ import ( "github.com/sirupsen/logrus" "github.com/osbuild/osbuild-composer/internal/common" + "github.com/osbuild/osbuild-composer/internal/dnfjson" "github.com/osbuild/osbuild-composer/internal/upload/azure" "github.com/osbuild/osbuild-composer/internal/upload/koji" "github.com/osbuild/osbuild-composer/internal/worker" @@ -223,6 +224,7 @@ func main() { } `toml:"authentication"` RelaxTimeoutFactor uint `toml:"RelaxTimeoutFactor"` BasePath string `toml:"base_path"` + DNFJson string `toml:"dnf-json"` } var unix bool flag.BoolVar(&unix, "unix", false, "Interpret 'address' as a path to a unix domain socket instead of a network address") @@ -396,11 +398,15 @@ func main() { // depsolve jobs can be done during other jobs depsolveCtx, depsolveCtxCancel := context.WithCancel(context.Background()) + solver := dnfjson.NewBaseSolver(rpmmd_cache) + if config.DNFJson != "" { + solver.SetDNFJSONPath(config.DNFJson) + } defer depsolveCtxCancel() go func() { jobImpls := map[string]JobImplementation{ "depsolve": &DepsolveJobImpl{ - RPMMDCache: rpmmd_cache, + Solver: solver, }, } acceptedJobTypes := []string{}