diff --git a/internal/distro/distro.go b/internal/distro/distro.go index 6ad98df55..e2a581cea 100644 --- a/internal/distro/distro.go +++ b/internal/distro/distro.go @@ -107,11 +107,6 @@ type ImageType interface { // Returns the corresponding boot mode ("legacy", "uefi", "hybrid") or "none" BootMode() BootMode - // Returns the sets of packages to include and exclude when building the image. - // Indexed by a string label. How each set is labeled and used depends on the - // image type. - PackageSets(bp blueprint.Blueprint, options ImageOptions, repos []rpmmd.RepoConfig) map[string][]rpmmd.PackageSet - // Returns the names of the pipelines that set up the build environment (buildroot). BuildPipelines() []string diff --git a/internal/distro/fedora/imagetype.go b/internal/distro/fedora/imagetype.go index a52bbb93a..086ff5820 100644 --- a/internal/distro/fedora/imagetype.go +++ b/internal/distro/fedora/imagetype.go @@ -14,12 +14,10 @@ import ( "github.com/osbuild/osbuild-composer/internal/image" "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/oscap" - "github.com/osbuild/osbuild-composer/internal/ostree" "github.com/osbuild/osbuild-composer/internal/pathpolicy" "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/workload" - "github.com/sirupsen/logrus" "golang.org/x/exp/slices" ) @@ -91,103 +89,6 @@ func (t *imageType) Size(size uint64) uint64 { return size } -func (t *imageType) PackageSets(bp blueprint.Blueprint, options distro.ImageOptions, repos []rpmmd.RepoConfig) map[string][]rpmmd.PackageSet { - // merge package sets that appear in the image type with the package sets - // of the same name from the distro and arch - packageSets := make(map[string]rpmmd.PackageSet) - - for name, getter := range t.packageSets { - packageSets[name] = getter(t) - } - - // amend with repository information - for _, repo := range repos { - if len(repo.PackageSets) > 0 { - // only apply the repo to the listed package sets - for _, psName := range repo.PackageSets { - ps := packageSets[psName] - ps.Repositories = append(ps.Repositories, repo) - packageSets[psName] = ps - } - } - } - - // For iot-commit and iot-container, we need to set an ImageRef if one - // isn't defined already in order to properly initialize the manifest and - // package selection. - if options.OSTree == nil { - options.OSTree = &ostree.ImageOptions{ - ImageRef: t.OSTreeRef(), - } - } - - // In case of Cloud API, this method is called before the ostree commit - // is resolved. Unfortunately, initializeManifest when called for - // an ostree installer returns an error. - // - // Work around this by providing a dummy FetchChecksum to convince the - // method that it's fine to initialize the manifest. Note that the ostree - // content has no effect on the package sets, so this is fine. - // - // See: https://github.com/osbuild/osbuild-composer/issues/3125 - // - // TODO: Remove me when it's possible the get the package set chain without - // resolving the ostree reference before. Also remove the test for - // this workaround - if t.rpmOstree && t.bootISO && options.OSTree.FetchChecksum == "" { - options.OSTree.FetchChecksum = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - logrus.Warn("FIXME: Requesting package sets for iot-installer without a resolved ostree ref. Faking one.") - } - - // create a temporary container spec array with the info from the blueprint - // to initialize the manifest - containers := make([]container.Spec, len(bp.Containers)) - for idx := range bp.Containers { - containers[idx] = container.Spec{ - Source: bp.Containers[idx].Source, - TLSVerify: bp.Containers[idx].TLSVerify, - LocalName: bp.Containers[idx].Name, - } - } - - _, err := t.checkOptions(&bp, options) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - - // TODO: let image types specify valid workloads, rather than - // always assume Custom. - w := &workload.Custom{ - BaseWorkload: workload.BaseWorkload{ - Repos: packageSets[blueprintPkgsKey].Repositories, - }, - Packages: bp.GetPackagesEx(false), - } - if services := bp.Customizations.GetServices(); services != nil { - w.Services = services.Enabled - w.DisabledServices = services.Disabled - } - - source := rand.NewSource(0) - // math/rand is good enough in this case - /* #nosec G404 */ - rng := rand.New(source) - - img, err := t.image(w, t, bp.Customizations, options, packageSets, nil, rng) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - manifest := manifest.New() - _, err = img.InstantiateManifest(&manifest, repos, t.arch.distro.runner, rng) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - return manifest.GetPackageSetChains() -} - func (t *imageType) BuildPipelines() []string { return t.buildPipelines } diff --git a/internal/distro/rhel7/imagetype.go b/internal/distro/rhel7/imagetype.go index 7512db62f..781887e4a 100644 --- a/internal/distro/rhel7/imagetype.go +++ b/internal/distro/rhel7/imagetype.go @@ -15,7 +15,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/workload" - "github.com/sirupsen/logrus" "golang.org/x/exp/slices" ) @@ -228,87 +227,6 @@ func (t *imageType) Manifest(bp *blueprint.Blueprint, return &manifest, warnings, err } -func (t *imageType) PackageSets(bp blueprint.Blueprint, options distro.ImageOptions, repos []rpmmd.RepoConfig) map[string][]rpmmd.PackageSet { - // merge package sets that appear in the image type with the package sets - // of the same name from the distro and arch - packageSets := make(map[string]rpmmd.PackageSet) - - for name, getter := range t.packageSets { - packageSets[name] = getter(t) - } - - // amend with repository information - for _, repo := range repos { - if len(repo.PackageSets) > 0 { - // only apply the repo to the listed package sets - for _, psName := range repo.PackageSets { - ps := packageSets[psName] - ps.Repositories = append(ps.Repositories, repo) - packageSets[psName] = ps - } - } - } - - // Similar to above, for edge-commit and edge-container, we need to set an - // ImageRef in order to properly initialize the manifest and package - // selection. - options.OSTree.ImageRef = t.OSTreeRef() - - // create a temporary container spec array with the info from the blueprint - // to initialize the manifest - containers := make([]container.Spec, len(bp.Containers)) - for idx := range bp.Containers { - containers[idx] = container.Spec{ - Source: bp.Containers[idx].Source, - TLSVerify: bp.Containers[idx].TLSVerify, - LocalName: bp.Containers[idx].Name, - } - } - - _, err := t.checkOptions(&bp, options) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - - w := t.workload - if w == nil { - cw := &workload.Custom{ - BaseWorkload: workload.BaseWorkload{ - Repos: packageSets[blueprintPkgsKey].Repositories, - }, - Packages: bp.GetPackagesEx(false), - } - if services := bp.Customizations.GetServices(); services != nil { - cw.Services = services.Enabled - cw.DisabledServices = services.Disabled - } - w = cw - } - - source := rand.NewSource(0) - // math/rand is good enough in this case - /* #nosec G404 */ - rng := rand.New(source) - - if t.image == nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - img, err := t.image(w, t, bp.Customizations, options, packageSets, nil, rng) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - manifest := manifest.New() - _, err = img.InstantiateManifest(&manifest, repos, t.arch.distro.runner, rng) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - return overridePackageNamesInSets(manifest.GetPackageSetChains()) -} - // Runs overridePackageNames() on each package set's Include and Exclude list // and replaces package names. func overridePackageNamesInSets(chains map[string][]rpmmd.PackageSet) map[string][]rpmmd.PackageSet { diff --git a/internal/distro/rhel8/imagetype.go b/internal/distro/rhel8/imagetype.go index d5f0a3053..43f053275 100644 --- a/internal/distro/rhel8/imagetype.go +++ b/internal/distro/rhel8/imagetype.go @@ -6,7 +6,6 @@ import ( "math/rand" "strings" - "github.com/sirupsen/logrus" "golang.org/x/exp/slices" "github.com/osbuild/osbuild-composer/internal/blueprint" @@ -18,7 +17,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/image" "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/oscap" - "github.com/osbuild/osbuild-composer/internal/ostree" "github.com/osbuild/osbuild-composer/internal/pathpolicy" "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" @@ -262,106 +260,6 @@ func (t *imageType) Manifest(bp *blueprint.Blueprint, return &manifest, warnings, err } -func (t *imageType) PackageSets(bp blueprint.Blueprint, options distro.ImageOptions, repos []rpmmd.RepoConfig) map[string][]rpmmd.PackageSet { - // merge package sets that appear in the image type with the package sets - // of the same name from the distro and arch - packageSets := make(map[string]rpmmd.PackageSet) - - for name, getter := range t.packageSets { - packageSets[name] = getter(t) - } - - // amend with repository information - for _, repo := range repos { - if len(repo.PackageSets) > 0 { - // only apply the repo to the listed package sets - for _, psName := range repo.PackageSets { - ps := packageSets[psName] - ps.Repositories = append(ps.Repositories, repo) - packageSets[psName] = ps - } - } - } - - // For edge-commit and edge-container, we need to set an ImageRef if one - // isn't defined already in order to properly initialize the manifest and - // package selection. - if options.OSTree == nil { - options.OSTree = &ostree.ImageOptions{ - ImageRef: t.OSTreeRef(), - } - } - - // In case of Cloud API, this method is called before the ostree commit - // is resolved. Unfortunately, initializeManifest when called for - // an ostree installer returns an error. - // - // Work around this by providing a dummy FetchChecksum to convince the - // method that it's fine to initialize the manifest. Note that the ostree - // content has no effect on the package sets, so this is fine. - // - // See: https://github.com/osbuild/osbuild-composer/issues/3125 - // - // TODO: Remove me when it's possible the get the package set chain without - // resolving the ostree reference before. Also remove the test for - // this workaround - if t.rpmOstree && t.bootISO && options.OSTree.FetchChecksum == "" { - options.OSTree.FetchChecksum = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - logrus.Warn("FIXME: Requesting package sets for iot-installer without a resolved ostree ref. Faking one.") - } - - // create a temporary container spec array with the info from the blueprint - // to initialize the manifest - containers := make([]container.Spec, len(bp.Containers)) - for idx := range bp.Containers { - containers[idx] = container.Spec{ - Source: bp.Containers[idx].Source, - TLSVerify: bp.Containers[idx].TLSVerify, - LocalName: bp.Containers[idx].Name, - } - } - - _, err := t.checkOptions(&bp, options) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - - w := t.workload - if w == nil { - cw := &workload.Custom{ - BaseWorkload: workload.BaseWorkload{ - Repos: packageSets[blueprintPkgsKey].Repositories, - }, - Packages: bp.GetPackagesEx(false), - } - if services := bp.Customizations.GetServices(); services != nil { - cw.Services = services.Enabled - cw.DisabledServices = services.Disabled - } - w = cw - } - - source := rand.NewSource(0) - // math/rand is good enough in this case - /* #nosec G404 */ - rng := rand.New(source) - - img, err := t.image(w, t, bp.Customizations, options, packageSets, nil, rng) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - manifest := manifest.New() - _, err = img.InstantiateManifest(&manifest, repos, t.arch.distro.runner, rng) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - - return overridePackageNamesInSets(manifest.GetPackageSetChains()) -} - // Runs overridePackageNames() on each package set's Include and Exclude list // and replaces package names. func overridePackageNamesInSets(chains map[string][]rpmmd.PackageSet) map[string][]rpmmd.PackageSet { diff --git a/internal/distro/rhel9/imagetype.go b/internal/distro/rhel9/imagetype.go index 6a2551e13..4291d842b 100644 --- a/internal/distro/rhel9/imagetype.go +++ b/internal/distro/rhel9/imagetype.go @@ -6,7 +6,6 @@ import ( "math/rand" "strings" - "github.com/sirupsen/logrus" "golang.org/x/exp/slices" "github.com/osbuild/osbuild-composer/internal/blueprint" @@ -18,7 +17,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/image" "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/oscap" - "github.com/osbuild/osbuild-composer/internal/ostree" "github.com/osbuild/osbuild-composer/internal/pathpolicy" "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" @@ -262,105 +260,6 @@ func (t *imageType) Manifest(bp *blueprint.Blueprint, return &manifest, warnings, err } -func (t *imageType) PackageSets(bp blueprint.Blueprint, options distro.ImageOptions, repos []rpmmd.RepoConfig) map[string][]rpmmd.PackageSet { - // merge package sets that appear in the image type with the package sets - // of the same name from the distro and arch - packageSets := make(map[string]rpmmd.PackageSet) - - for name, getter := range t.packageSets { - packageSets[name] = getter(t) - } - - // amend with repository information - for _, repo := range repos { - if len(repo.PackageSets) > 0 { - // only apply the repo to the listed package sets - for _, psName := range repo.PackageSets { - ps := packageSets[psName] - ps.Repositories = append(ps.Repositories, repo) - packageSets[psName] = ps - } - } - } - - // For edge-commit and edge-container, we need to set an ImageRef if one - // isn't defined already in order to properly initialize the manifest and - // package selection. - if options.OSTree == nil { - options.OSTree = &ostree.ImageOptions{ - ImageRef: t.OSTreeRef(), - } - } - - // In case of Cloud API, this method is called before the ostree commit - // is resolved. Unfortunately, initializeManifest when called for - // an ostree installer returns an error. - // - // Work around this by providing a dummy FetchChecksum to convince the - // method that it's fine to initialize the manifest. Note that the ostree - // content has no effect on the package sets, so this is fine. - // - // See: https://github.com/osbuild/osbuild-composer/issues/3125 - // - // TODO: Remove me when it's possible the get the package set chain without - // resolving the ostree reference before. Also remove the test for - // this workaround - if t.rpmOstree && t.bootISO && options.OSTree.FetchChecksum == "" { - options.OSTree.FetchChecksum = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - logrus.Warn("FIXME: Requesting package sets for iot-installer without a resolved ostree ref. Faking one.") - } - - // create a temporary container spec array with the info from the blueprint - // to initialize the manifest - containers := make([]container.Spec, len(bp.Containers)) - for idx := range bp.Containers { - containers[idx] = container.Spec{ - Source: bp.Containers[idx].Source, - TLSVerify: bp.Containers[idx].TLSVerify, - LocalName: bp.Containers[idx].Name, - } - } - - _, err := t.checkOptions(&bp, options) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - - w := t.workload - if w == nil { - cw := &workload.Custom{ - BaseWorkload: workload.BaseWorkload{ - Repos: packageSets[blueprintPkgsKey].Repositories, - }, - Packages: bp.GetPackagesEx(false), - } - if services := bp.Customizations.GetServices(); services != nil { - cw.Services = services.Enabled - cw.DisabledServices = services.Disabled - } - w = cw - } - - source := rand.NewSource(0) - // math/rand is good enough in this case - /* #nosec G404 */ - rng := rand.New(source) - - img, err := t.image(w, t, bp.Customizations, options, packageSets, nil, rng) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - manifest := manifest.New() - _, err = img.InstantiateManifest(&manifest, repos, t.arch.distro.runner, rng) - if err != nil { - logrus.Errorf("Initializing the manifest failed for %s (%s/%s): %v", t.Name(), t.arch.distro.Name(), t.arch.Name(), err) - return nil - } - return manifest.GetPackageSetChains() -} - // checkOptions checks the validity and compatibility of options and customizations for the image type. // Returns ([]string, error) where []string, if non-nil, will hold any generated warnings (e.g. deprecation notices). func (t *imageType) checkOptions(bp *blueprint.Blueprint, options distro.ImageOptions) ([]string, error) { diff --git a/internal/distro/test_distro/distro.go b/internal/distro/test_distro/distro.go index 5439cf524..711a524b7 100644 --- a/internal/distro/test_distro/distro.go +++ b/internal/distro/test_distro/distro.go @@ -193,32 +193,6 @@ func (t *TestImageType) BootMode() distro.BootMode { return distro.BOOT_HYBRID } -func (t *TestImageType) PackageSets(bp blueprint.Blueprint, options distro.ImageOptions, repos []rpmmd.RepoConfig) map[string][]rpmmd.PackageSet { - return map[string][]rpmmd.PackageSet{ - buildPkgsKey: {{ - Include: []string{ - "dep-package1", - "dep-package2", - "dep-package3", - }, - Repositories: repos, - }, - }, - blueprintPkgsKey: {{ - Include: bp.GetPackages(), - Repositories: repos, - }}, - osPkgsKey: {{ - Include: []string{ - "dep-package1", - "dep-package2", - "dep-package3", - }, - Repositories: repos, - }}, - } -} - func (t *TestImageType) BuildPipelines() []string { return distro.BuildPipelinesFallback() }