From 63c2d6ff98947a63da6b9adcbc4c8501e4e85837 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 28 Oct 2025 09:48:33 +0100 Subject: [PATCH 1/5] go.mod: update images to v0.214.0 Also update for the renaming of image.NewAnacondaContainerInstaller to image.NewAnacondaContainerInstallerLegacy --- bib/cmd/bootc-image-builder/legacy_iso.go | 2 +- bib/go.mod | 2 +- bib/go.sum | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bib/cmd/bootc-image-builder/legacy_iso.go b/bib/cmd/bootc-image-builder/legacy_iso.go index b5b84a77c..7f71e88ec 100644 --- a/bib/cmd/bootc-image-builder/legacy_iso.go +++ b/bib/cmd/bootc-image-builder/legacy_iso.go @@ -305,7 +305,7 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro // The ref is not needed and will be removed from the ctor later // in time - img := image.NewAnacondaContainerInstaller(platform, filename, containerSource, "") + img := image.NewAnacondaContainerInstallerLegacy(platform, filename, containerSource, "") img.ContainerRemoveSignatures = true img.RootfsCompression = "zstd" diff --git a/bib/go.mod b/bib/go.mod index 38c8ef835..622a94ba4 100644 --- a/bib/go.mod +++ b/bib/go.mod @@ -9,7 +9,7 @@ require ( github.com/hashicorp/go-version v1.7.0 github.com/osbuild/blueprint v1.16.0 github.com/osbuild/image-builder-cli v0.0.0-20250924085931-15de5139f521 - github.com/osbuild/images v0.209.0 + github.com/osbuild/images v0.214.0 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.10.1 github.com/spf13/pflag v1.0.10 diff --git a/bib/go.sum b/bib/go.sum index 579249fb2..19d3a4e76 100644 --- a/bib/go.sum +++ b/bib/go.sum @@ -235,6 +235,8 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvo5/images v0.0.0-20251028085624-65ddc2a44aa1 h1:yR14hRmFpYRKOupGTNibLttThBKpKbEYifkGBNzv8+E= +github.com/mvo5/images v0.0.0-20251028085624-65ddc2a44aa1/go.mod h1:Cs7zFV8rmbVHn+19ArNdjd1AtFk+LC9dOOHuxiSLghw= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= @@ -247,8 +249,8 @@ github.com/osbuild/blueprint v1.16.0 h1:f/kHih+xpeJ1v7wtIfzdHPZTsiXsqKeDQ1+rrue6 github.com/osbuild/blueprint v1.16.0/go.mod h1:HPlJzkEl7q5g8hzaGksUk7ifFAy9QFw9LmzhuFOAVm4= github.com/osbuild/image-builder-cli v0.0.0-20250924085931-15de5139f521 h1:Mo1htXYyEoKrBQD+/RC/kluAWu4+E0oEjPorujVn/K8= github.com/osbuild/image-builder-cli v0.0.0-20250924085931-15de5139f521/go.mod h1:oTn9T+bV9g/760hM/jX7AV0c4vuVIn6FjAnaVM9RzRo= -github.com/osbuild/images v0.209.0 h1:9BRf+N0op1WbQkc+7zVRBZxg4dqS4lty3i2stF3G9lo= -github.com/osbuild/images v0.209.0/go.mod h1:tZqcrs3eNUA0VPs1h3YCnbnpAskVVfo36CIi2USSfDs= +github.com/osbuild/images v0.214.0 h1:uS73cWGlleIBrDDzJsjaaT8Gc6lHnxSm8YFVDFtI6Lg= +github.com/osbuild/images v0.214.0/go.mod h1:Cs7zFV8rmbVHn+19ArNdjd1AtFk+LC9dOOHuxiSLghw= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= From 018dc9d3d09c947956f792a73f5a12f3c5d3dc8a Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 6 Oct 2025 09:41:19 +0200 Subject: [PATCH 2/5] many: drop custom `distrodefs` and use images DistroYAML Instead of having a separate implementation of the required packages and the required lorax templates and similar we now reuse the images `data/distrodefs` YAML so that all the packages/definitions are maintained in a central place. --- Containerfile | 1 - bib/cmd/bootc-image-builder/legacy_iso.go | 79 ++++------ bib/data/defs/almalinux-10.yaml | 1 - bib/data/defs/almalinux-9.yaml | 1 - bib/data/defs/aurora-40.yaml | 1 - bib/data/defs/aurora-helium-10.yaml | 1 - bib/data/defs/bazzite-40.yaml | 1 - bib/data/defs/bluefin-40.yaml | 1 - bib/data/defs/centos-10.yaml | 93 ----------- bib/data/defs/centos-9.yaml | 108 ------------- bib/data/defs/fedora-40.yaml | 112 ------------- bib/data/defs/fedora-42.yaml | 1 - bib/data/defs/heliumos-10.yaml | 1 - bib/data/defs/heliumos-9.yaml | 1 - bib/data/defs/rhel-10.yaml | 1 - bib/data/defs/rhel-9.yaml | 1 - bib/data/defs/rocky-10.yaml | 1 - bib/data/defs/rocky-9.yaml | 1 - bib/internal/distrodef/distrodef.go | 98 ------------ bib/internal/distrodef/distrodef_test.go | 148 ------------------ .../distrodef/test_defs/fedoratest-41.yaml | 4 - 21 files changed, 29 insertions(+), 627 deletions(-) delete mode 120000 bib/data/defs/almalinux-10.yaml delete mode 120000 bib/data/defs/almalinux-9.yaml delete mode 120000 bib/data/defs/aurora-40.yaml delete mode 120000 bib/data/defs/aurora-helium-10.yaml delete mode 120000 bib/data/defs/bazzite-40.yaml delete mode 120000 bib/data/defs/bluefin-40.yaml delete mode 100644 bib/data/defs/centos-10.yaml delete mode 100644 bib/data/defs/centos-9.yaml delete mode 100644 bib/data/defs/fedora-40.yaml delete mode 120000 bib/data/defs/fedora-42.yaml delete mode 120000 bib/data/defs/heliumos-10.yaml delete mode 120000 bib/data/defs/heliumos-9.yaml delete mode 120000 bib/data/defs/rhel-10.yaml delete mode 120000 bib/data/defs/rhel-9.yaml delete mode 120000 bib/data/defs/rocky-10.yaml delete mode 120000 bib/data/defs/rocky-9.yaml delete mode 100644 bib/internal/distrodef/distrodef.go delete mode 100644 bib/internal/distrodef/distrodef_test.go delete mode 100644 bib/internal/distrodef/test_defs/fedoratest-41.yaml diff --git a/Containerfile b/Containerfile index 00b860307..fb180e920 100644 --- a/Containerfile +++ b/Containerfile @@ -16,7 +16,6 @@ COPY ./group_osbuild-osbuild-fedora.repo /etc/yum.repos.d/ COPY ./package-requires.txt . RUN grep -vE '^#' package-requires.txt | xargs dnf install -y && rm -f package-requires.txt && dnf clean all COPY --from=builder /build/bin/* /usr/bin/ -COPY bib/data /usr/share/bootc-image-builder ENTRYPOINT ["/usr/bin/bootc-image-builder"] VOLUME /output diff --git a/bib/cmd/bootc-image-builder/legacy_iso.go b/bib/cmd/bootc-image-builder/legacy_iso.go index 7f71e88ec..9da78584f 100644 --- a/bib/cmd/bootc-image-builder/legacy_iso.go +++ b/bib/cmd/bootc-image-builder/legacy_iso.go @@ -3,7 +3,6 @@ package main import ( "fmt" "math/rand" - "slices" "strconv" "strings" @@ -15,6 +14,8 @@ import ( "github.com/osbuild/images/pkg/customizations/kickstart" "github.com/osbuild/images/pkg/depsolvednf" "github.com/osbuild/images/pkg/disk" + "github.com/osbuild/images/pkg/distro" + "github.com/osbuild/images/pkg/distro/defs" "github.com/osbuild/images/pkg/image" "github.com/osbuild/images/pkg/manifest" "github.com/osbuild/images/pkg/osbuild" @@ -24,19 +25,8 @@ import ( "github.com/sirupsen/logrus" podman_container "github.com/osbuild/images/pkg/bib/container" - - "github.com/osbuild/bootc-image-builder/bib/internal/distrodef" ) -// all possible locations for the bib's distro definitions -// ./data/defs and ./bib/data/defs are for development -// /usr/share/bootc-image-builder/defs is for the production, containerized version -var distroDefPaths = []string{ - "./data/defs", - "./bib/data/defs", - "/usr/share/bootc-image-builder/defs", -} - type ManifestConfig struct { // OCI image path (without the transport, that is always docker://) Imgref string @@ -134,7 +124,6 @@ func manifestFromCobraForLegacyISO(imgref, buildImgref, imgTypeStr, rootFs, rpmC Config: config, Imgref: imgref, BuildImgref: buildImgref, - DistroDefPaths: distroDefPaths, SourceInfo: sourceinfo, BuildSourceInfo: buildSourceinfo, RootFSType: rootfsType, @@ -233,45 +222,36 @@ func labelForISO(os *osinfo.OSRelease, arch *arch.Arch) string { } } -// from:https://github.com/osbuild/images/blob/v0.207.0/data/distrodefs/rhel-10/imagetypes.yaml#L169 -var loraxRhelTemplates = []manifest.InstallerLoraxTemplate{ - manifest.InstallerLoraxTemplate{Path: "80-rhel/runtime-postinstall.tmpl"}, - manifest.InstallerLoraxTemplate{Path: "80-rhel/runtime-cleanup.tmpl", AfterDracut: true}, -} - -// from:https://github.com/osbuild/images/blob/v0.207.0/data/distrodefs/fedora/imagetypes.yaml#L408 -var loraxFedoraTemplates = []manifest.InstallerLoraxTemplate{ - manifest.InstallerLoraxTemplate{Path: "99-generic/runtime-postinstall.tmpl"}, - manifest.InstallerLoraxTemplate{Path: "99-generic/runtime-cleanup.tmpl", AfterDracut: true}, -} - -func loraxTemplates(si osinfo.OSRelease) []manifest.InstallerLoraxTemplate { - switch { - case si.ID == "rhel" || slices.Contains(si.IDLike, "rhel") || si.VersionID == "eln": - return loraxRhelTemplates - default: - return loraxFedoraTemplates - } -} - -func loraxTemplatePackage(si osinfo.OSRelease) string { - switch { - case si.ID == "rhel" || slices.Contains(si.IDLike, "rhel") || si.VersionID == "eln": - return "lorax-templates-rhel" - default: - return "lorax-templates-generic" - } -} - func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, error) { if c.Imgref == "" { return nil, fmt.Errorf("pipeline: no base image defined") } - imageDef, err := distrodef.LoadImageDef(c.DistroDefPaths, c.SourceInfo.OSRelease.ID, c.SourceInfo.OSRelease.VersionID, "anaconda-iso") + nameVer := fmt.Sprintf("%s-%s", c.SourceInfo.OSRelease.ID, c.SourceInfo.OSRelease.VersionID) + id, err := distro.ParseID(nameVer) + if err != nil { + return nil, err + } + // XXX: ensure all aliases we have for bib are available in + // images + distroYAML, err := defs.NewDistroYAML(nameVer) if err != nil { return nil, err } + // XXX: or "bootc-legacy-installer"? + installerImgTypeName := "bootc-rpm-installer" + imgType, ok := distroYAML.ImageTypes()[installerImgTypeName] + if !ok { + return nil, fmt.Errorf("cannot find image definition for %v", installerImgTypeName) + } + installerPkgSet, ok := imgType.PackageSets(*id, c.Architecture.String())["installer"] + if !ok { + return nil, fmt.Errorf("cannot find installer package set for %v", installerImgTypeName) + } + installerConfig := imgType.InstallerConfig(*id, c.Architecture.String()) + if installerConfig == nil { + return nil, fmt.Errorf("empty installer config for %s", installerImgTypeName) + } containerSource := container.SourceSpec{ Source: c.Imgref, @@ -316,10 +296,7 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro img.InstallerCustomizations.Product = c.SourceInfo.OSRelease.Name img.InstallerCustomizations.OSVersion = c.SourceInfo.OSRelease.VersionID img.InstallerCustomizations.ISOLabel = labelForISO(&c.SourceInfo.OSRelease, &c.Architecture) - - img.ExtraBasePackages = rpmmd.PackageSet{ - Include: imageDef.Packages, - } + img.ExtraBasePackages = installerPkgSet var customizations *blueprint.Customizations if c.Config != nil { @@ -358,8 +335,10 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro img.Kickstart.OSTree = &kickstart.OSTree{ OSName: "default", } - img.InstallerCustomizations.LoraxTemplates = loraxTemplates(c.SourceInfo.OSRelease) - img.InstallerCustomizations.LoraxTemplatePackage = loraxTemplatePackage(c.SourceInfo.OSRelease) + img.InstallerCustomizations.LoraxTemplates = installerConfig.LoraxTemplates + if installerConfig.LoraxTemplatePackage != nil { + img.InstallerCustomizations.LoraxTemplatePackage = *installerConfig.LoraxTemplatePackage + } // see https://github.com/osbuild/bootc-image-builder/issues/733 img.InstallerCustomizations.ISORootfsType = manifest.SquashfsRootfs diff --git a/bib/data/defs/almalinux-10.yaml b/bib/data/defs/almalinux-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/almalinux-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/almalinux-9.yaml b/bib/data/defs/almalinux-9.yaml deleted file mode 120000 index f09a87265..000000000 --- a/bib/data/defs/almalinux-9.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-9.yaml \ No newline at end of file diff --git a/bib/data/defs/aurora-40.yaml b/bib/data/defs/aurora-40.yaml deleted file mode 120000 index b77da5759..000000000 --- a/bib/data/defs/aurora-40.yaml +++ /dev/null @@ -1 +0,0 @@ -fedora-40.yaml \ No newline at end of file diff --git a/bib/data/defs/aurora-helium-10.yaml b/bib/data/defs/aurora-helium-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/aurora-helium-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/bazzite-40.yaml b/bib/data/defs/bazzite-40.yaml deleted file mode 120000 index b77da5759..000000000 --- a/bib/data/defs/bazzite-40.yaml +++ /dev/null @@ -1 +0,0 @@ -fedora-40.yaml \ No newline at end of file diff --git a/bib/data/defs/bluefin-40.yaml b/bib/data/defs/bluefin-40.yaml deleted file mode 120000 index b77da5759..000000000 --- a/bib/data/defs/bluefin-40.yaml +++ /dev/null @@ -1 +0,0 @@ -fedora-40.yaml \ No newline at end of file diff --git a/bib/data/defs/centos-10.yaml b/bib/data/defs/centos-10.yaml deleted file mode 100644 index dcf78f042..000000000 --- a/bib/data/defs/centos-10.yaml +++ /dev/null @@ -1,93 +0,0 @@ -anaconda-iso: - packages: - - "@hardware-support" - - alsa-firmware - - alsa-tools-firmware - - anaconda - - anaconda-dracut - - anaconda-install-img-deps - - anaconda-widgets - - audit - - bind-utils - - bzip2 - - cryptsetup - - curl - - dbus-x11 - - dejavu-sans-fonts - - dejavu-sans-mono-fonts - - device-mapper-persistent-data - - dmidecode - - dnf - - dracut-config-generic - - dracut-network - - efibootmgr - - ethtool - - fcoe-utils - - ftp - - gdb-gdbserver - - glibc-all-langpacks - - gnome-kiosk - - google-noto-sans-cjk-ttc-fonts - - grub2-tools - - grub2-tools-extra - - grub2-tools-minimal - - grubby - - gsettings-desktop-schemas - - hdparm - - hexedit - - hostname - - initscripts - - ipmitool - - jomolhari-fonts - - kbd - - kbd-misc - - kdump-anaconda-addon - - kernel - - less - - libblockdev-lvm-dbus - - libibverbs - - librsvg2 - - linux-firmware - - lldpad - - lsof - - madan-fonts - - mt-st - - mtr - - net-tools - - nfs-utils - - nm-connection-editor - - nmap-ncat - - nss-tools - - openssh-clients - - openssh-server - - ostree - - pciutils - - perl-interpreter - - pigz - - plymouth - - prefixdevname - - python3-pyatspi - - rdma-core - - rng-tools - - rpcbind - - rpm-ostree - - rsync - - rsyslog - - selinux-policy-targeted - - sg3_utils - - sil-padauk-fonts - - smartmontools - - spice-vdagent - - strace - - systemd - - tar - - udisks2 - - udisks2-iscsi - - usbutils - - vim-minimal - - volume_key - - wget - - xfsdump - - xfsprogs - - xrdb - - xz diff --git a/bib/data/defs/centos-9.yaml b/bib/data/defs/centos-9.yaml deleted file mode 100644 index 431642ca7..000000000 --- a/bib/data/defs/centos-9.yaml +++ /dev/null @@ -1,108 +0,0 @@ -anaconda-iso: - # This is the same set as the Fedora one, but without packages not available in CentOS/RHEL: - # atheros-firmware, brcmfmac-firmware, iwlwifi-dvm-firmware, iwlwifi-mvm-firmware, realtek-firmware, rit-meera-new-fonts - packages: - - aajohan-comfortaa-fonts - - abattis-cantarell-fonts - - alsa-firmware - - alsa-tools-firmware - - anaconda - - anaconda-dracut - - anaconda-install-env-deps - - anaconda-widgets - - audit - - bind-utils - - bitmap-fangsongti-fonts - - bzip2 - - cryptsetup - - curl - - dbus-x11 - - dejavu-sans-fonts - - dejavu-sans-mono-fonts - - device-mapper-persistent-data - - dmidecode - - dnf - - dracut-config-generic - - dracut-network - - efibootmgr - - ethtool - - fcoe-utils - - ftp - - gdb-gdbserver - - gdisk - - glibc-all-langpacks - - gnome-kiosk - - google-noto-sans-cjk-ttc-fonts - - grub2-tools - - grub2-tools-extra - - grub2-tools-minimal - - grubby - - gsettings-desktop-schemas - - hdparm - - hexedit - - hostname - - initscripts - - ipmitool - - jomolhari-fonts - - kbd - - kbd-misc - - kdump-anaconda-addon - - kernel - - khmeros-base-fonts - - less - - libblockdev-lvm-dbus - - libibverbs - - libreport-plugin-bugzilla - - libreport-plugin-reportuploader - - librsvg2 - - linux-firmware - - lldpad - - lsof - - madan-fonts - - mt-st - - mtr - - net-tools - - nfs-utils - - nm-connection-editor - - nmap-ncat - - nss-tools - - openssh-clients - - openssh-server - - ostree - - pciutils - - perl-interpreter - - pigz - - plymouth - - prefixdevname - - python3-pyatspi - - rdma-core - - rng-tools - - rpcbind - - rpm-ostree - - rsync - - rsyslog - - selinux-policy-targeted - - sg3_utils - - sil-abyssinica-fonts - - sil-padauk-fonts - - smartmontools - - spice-vdagent - - strace - - systemd - - tar - - tigervnc-server-minimal - - tigervnc-server-module - - udisks2 - - udisks2-iscsi - - usbutils - - vim-minimal - - volume_key - - wget - - xfsdump - - xfsprogs - - xorg-x11-drivers - - xorg-x11-fonts-misc - - xorg-x11-server-Xorg - - xorg-x11-xauth - - xrdb - - xz diff --git a/bib/data/defs/fedora-40.yaml b/bib/data/defs/fedora-40.yaml deleted file mode 100644 index c1431a18a..000000000 --- a/bib/data/defs/fedora-40.yaml +++ /dev/null @@ -1,112 +0,0 @@ -anaconda-iso: - packages: - - aajohan-comfortaa-fonts - - abattis-cantarell-fonts - - alsa-firmware - - alsa-tools-firmware - - anaconda - - anaconda-dracut - - anaconda-install-img-deps - - anaconda-widgets - - atheros-firmware - - audit - - bind-utils - - bitmap-fangsongti-fonts - - brcmfmac-firmware - - bzip2 - - cryptsetup - - curl - - dbus-x11 - - dejavu-sans-fonts - - dejavu-sans-mono-fonts - - device-mapper-persistent-data - - dmidecode - - dnf - - dracut-config-generic - - dracut-network - - efibootmgr - - ethtool - - fcoe-utils - - ftp - - gdb-gdbserver - - gdisk - - glibc-all-langpacks - - gnome-kiosk - - google-noto-sans-cjk-ttc-fonts - - grub2-tools - - grub2-tools-extra - - grub2-tools-minimal - - grubby - - gsettings-desktop-schemas - - hdparm - - hexedit - - hostname - - initscripts - - ipmitool - - iwlwifi-dvm-firmware - - iwlwifi-mvm-firmware - - jomolhari-fonts - - kbd - - kbd-misc - - kdump-anaconda-addon - - kernel - - khmeros-base-fonts - - less - - libblockdev-lvm-dbus - - libibverbs - - libreport-plugin-bugzilla - - libreport-plugin-reportuploader - - librsvg2 - - linux-firmware - - lldpad - - lsof - - madan-fonts - - mt-st - - mtr - - net-tools - - nfs-utils - - nm-connection-editor - - nmap-ncat - - nss-tools - - openssh-clients - - openssh-server - - ostree - - pciutils - - perl-interpreter - - pigz - - plymouth - - prefixdevname - - python3-pyatspi - - rdma-core - - realtek-firmware - - rit-meera-new-fonts - - rng-tools - - rpcbind - - rpm-ostree - - rsync - - rsyslog - - selinux-policy-targeted - - sg3_utils - - sil-abyssinica-fonts - - sil-padauk-fonts - - smartmontools - - spice-vdagent - - strace - - systemd - - tar - - tigervnc-server-minimal - - tigervnc-server-module - - udisks2 - - udisks2-iscsi - - usbutils - - vim-minimal - - volume_key - - wget - - xfsdump - - xfsprogs - - xorg-x11-drivers - - xorg-x11-fonts-misc - - xorg-x11-server-Xorg - - xorg-x11-xauth - - xrdb - - xz diff --git a/bib/data/defs/fedora-42.yaml b/bib/data/defs/fedora-42.yaml deleted file mode 120000 index b77da5759..000000000 --- a/bib/data/defs/fedora-42.yaml +++ /dev/null @@ -1 +0,0 @@ -fedora-40.yaml \ No newline at end of file diff --git a/bib/data/defs/heliumos-10.yaml b/bib/data/defs/heliumos-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/heliumos-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/heliumos-9.yaml b/bib/data/defs/heliumos-9.yaml deleted file mode 120000 index f09a87265..000000000 --- a/bib/data/defs/heliumos-9.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-9.yaml \ No newline at end of file diff --git a/bib/data/defs/rhel-10.yaml b/bib/data/defs/rhel-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/rhel-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/rhel-9.yaml b/bib/data/defs/rhel-9.yaml deleted file mode 120000 index f09a87265..000000000 --- a/bib/data/defs/rhel-9.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-9.yaml \ No newline at end of file diff --git a/bib/data/defs/rocky-10.yaml b/bib/data/defs/rocky-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/rocky-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/rocky-9.yaml b/bib/data/defs/rocky-9.yaml deleted file mode 120000 index f09a87265..000000000 --- a/bib/data/defs/rocky-9.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-9.yaml \ No newline at end of file diff --git a/bib/internal/distrodef/distrodef.go b/bib/internal/distrodef/distrodef.go deleted file mode 100644 index 2ad279444..000000000 --- a/bib/internal/distrodef/distrodef.go +++ /dev/null @@ -1,98 +0,0 @@ -package distrodef - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "golang.org/x/exp/maps" - "go.yaml.in/yaml/v3" - - "github.com/hashicorp/go-version" -) - -// ImageDef is a structure containing extra information needed to build an image that cannot be extracted -// from the container image itself. Currently, this is only the list of packages needed for the installer -// ISO. -type ImageDef struct { - Packages []string `yaml:"packages"` -} - -func findDistroDef(defDirs []string, distro, wantedVerStr string) (string, error) { - var bestFuzzyMatch string - - bestFuzzyVer := &version.Version{} - wantedVer, err := version.NewVersion(wantedVerStr) - if err != nil { - return "", fmt.Errorf("cannot parse wanted version string: %w", err) - } - - for _, defDir := range defDirs { - // exact match - matches, err := filepath.Glob(filepath.Join(defDir, fmt.Sprintf("%s-%s.yaml", distro, wantedVerStr))) - if err != nil { - return "", err - } - if len(matches) == 1 { - return matches[0], nil - } - - // fuzzy match - matches, err = filepath.Glob(filepath.Join(defDir, fmt.Sprintf("%s-[0-9]*.yaml", distro))) - if err != nil { - return "", err - } - for _, m := range matches { - baseNoExt := strings.TrimSuffix(filepath.Base(m), ".yaml") - haveVerStr := strings.SplitN(baseNoExt, "-", 2)[1] - // this should never error (because of the glob above) but be defensive - haveVer, err := version.NewVersion(haveVerStr) - if err != nil { - return "", fmt.Errorf("cannot parse distro version from %q: %w", m, err) - } - if wantedVer.Compare(haveVer) >= 0 && haveVer.Compare(bestFuzzyVer) > 0 { - bestFuzzyVer = haveVer - bestFuzzyMatch = m - } - } - } - if bestFuzzyMatch == "" { - return "", fmt.Errorf("could not find def file for distro %s-%s", distro, wantedVerStr) - } - - return bestFuzzyMatch, nil -} - -func loadFile(defDirs []string, distro, ver string) ([]byte, error) { - defPath, err := findDistroDef(defDirs, distro, ver) - if err != nil { - return nil, err - } - - content, err := os.ReadFile(defPath) - if err != nil { - return nil, fmt.Errorf("could not read def file %s for distro %s-%s: %v", defPath, distro, ver, err) - } - return content, nil -} - -// Loads a definition file for a given distro and image type -func LoadImageDef(defDirs []string, distro, ver, it string) (*ImageDef, error) { - data, err := loadFile(defDirs, distro, ver) - if err != nil { - return nil, err - } - - var defs map[string]ImageDef - if err := yaml.Unmarshal(data, &defs); err != nil { - return nil, fmt.Errorf("could not unmarshal def file for distro %s: %v", distro, err) - } - - d, ok := defs[it] - if !ok { - return nil, fmt.Errorf("could not find def for distro %s and image type %s, available types: %s", distro, it, strings.Join(maps.Keys(defs), ", ")) - } - - return &d, nil -} diff --git a/bib/internal/distrodef/distrodef_test.go b/bib/internal/distrodef/distrodef_test.go deleted file mode 100644 index 1b5f86f5f..000000000 --- a/bib/internal/distrodef/distrodef_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package distrodef - -import ( - "os" - "path/filepath" - "slices" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -const testDefLocation = "test_defs" - -func TestLoadSimple(t *testing.T) { - def, err := LoadImageDef([]string{testDefLocation}, "fedoratest", "41", "anaconda-iso") - require.NoError(t, err) - assert.NotEmpty(t, def.Packages) -} - -func TestLoadFuzzy(t *testing.T) { - def, err := LoadImageDef([]string{testDefLocation}, "fedoratest", "99", "anaconda-iso") - require.NoError(t, err) - assert.NotEmpty(t, def.Packages) -} - -func TestLoadUnhappy(t *testing.T) { - _, err := LoadImageDef([]string{testDefLocation}, "lizard", "42", "anaconda-iso") - assert.ErrorContains(t, err, "could not find def file for distro lizard-42") - _, err = LoadImageDef([]string{testDefLocation}, "fedoratest", "0", "anaconda-iso") - assert.ErrorContains(t, err, "could not find def file for distro fedoratest-0") - - _, err = LoadImageDef([]string{testDefLocation}, "fedoratest", "41", "anaconda-disk") - assert.ErrorContains(t, err, "could not find def for distro fedoratest and image type anaconda-disk") - - _, err = LoadImageDef([]string{testDefLocation}, "fedoratest", "xxx", "anaconda-disk") - assert.ErrorContains(t, err, `cannot parse wanted version string: `) -} - -const fakeDefFileContent = "anaconda-iso:\n packages: \n - foo\n" - -func makeFakeDistrodefRoot(t *testing.T, defFiles []string) (searchPaths []string) { - tmp := t.TempDir() - - for _, defFile := range defFiles { - p := filepath.Join(tmp, defFile) - err := os.MkdirAll(filepath.Dir(p), 0755) - require.NoError(t, err) - err = os.WriteFile(p, []byte(fakeDefFileContent), 0644) - require.NoError(t, err) - - if !slices.Contains(searchPaths, filepath.Dir(p)) { - searchPaths = append(searchPaths, filepath.Dir(p)) - } - } - - return searchPaths -} - -func TestFindDistroDefMultiDirs(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-39.yaml", - "b/fedora-41.yaml", - "c/fedora-41.yaml", - }) - assert.Equal(t, 3, len(defDirs)) - - def, err := findDistroDef(defDirs, "fedora", "41") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "b/fedora-41.yaml")) -} - -func TestFindDistroDefMultiDirsIgnoreENOENT(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-41.yaml", - }) - defDirs = append([]string{"/no/such/path"}, defDirs...) - - def, err := findDistroDef(defDirs, "fedora", "41") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "a/fedora-41.yaml")) -} - -func TestFindDistroDefMultiFuzzy(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-39.yaml", - "b/fedora-41.yaml", - "b/b/fedora-42.yaml", - "c/fedora-41.yaml", - }) - // no fedora-99, pick the closest - def, err := findDistroDef(defDirs, "fedora", "99") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "b/b/fedora-42.yaml")) -} - -func TestFindDistroDefMultiFuzzyMinorReleases(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/centos-8.9.yaml", - "b/centos-7.yaml", - "c/centos-9.1.yaml", - "d/centos-9.1.1.yaml", - "b/b/centos-9.10.yaml", - }) - def, err := findDistroDef(defDirs, "centos", "9.11") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "b/b/centos-9.10.yaml"), def) -} - -func TestFindDistroDefMultiFuzzyMinorReleasesIsZero(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/centos-9.yaml", - "a/centos-10.yaml", - }) - def, err := findDistroDef(defDirs, "centos", "10.0") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "a/centos-10.yaml"), def) -} - -func TestFindDistroDefMultiFuzzyError(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-40.yaml", - }) - // the best version we have is newer than what is requested, this - // is an error - _, err := findDistroDef(defDirs, "fedora", "30") - assert.ErrorContains(t, err, "could not find def file for distro fedora-30") -} - -func TestFindDistroDefBadNumberIgnoresBadFiles(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-NaN.yaml", - }) - _, err := findDistroDef(defDirs, "fedora", "40") - assert.ErrorContains(t, err, "could not find def file for distro fedora-40") -} - -func TestFindDistroDefCornerCases(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-.yaml", - "b/fedora-1.yaml", - "c/fedora.yaml", - }) - def, err := findDistroDef(defDirs, "fedora", "2") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "b/fedora-1.yaml")) -} diff --git a/bib/internal/distrodef/test_defs/fedoratest-41.yaml b/bib/internal/distrodef/test_defs/fedoratest-41.yaml deleted file mode 100644 index c010ec5a7..000000000 --- a/bib/internal/distrodef/test_defs/fedoratest-41.yaml +++ /dev/null @@ -1,4 +0,0 @@ -anaconda-iso: - packages: - - anaconda - - curl From 09d266fd19134f52c12d843434d6c330104311e7 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 28 Oct 2025 10:32:51 +0100 Subject: [PATCH 3/5] bib: add support for ID_LIKE when finding the distro YAML This commit adds a fallback check when no direct match for the distro ID from the bootc image is found. As long as the bootc container sets a correct `ID_LIKE` we should automatically have the same behavior as before when we used symlinks as aliases. If needed we might need to reintroduce an explicit mapping like: ```go // mapping of distro IDs that are compatible with var distroCompat = map[string]string{ "almalinux": "rhel", "aurora": "fedora", "aurora-helium": "rhel", "bazzite": "fedora", "bluefin": "fedora", "heliumos": "rhel", "rocky": "rhel", } ``` but lets hope we don't need this. Note that these tests use the "real" distros.yaml from the images library so make sure that if rhel-9 goes away the test is updated for rhel-XY (only the version needs to change) --- bib/cmd/bootc-image-builder/export_test.go | 1 + bib/cmd/bootc-image-builder/legacy_iso.go | 33 ++++++++---- .../bootc-image-builder/legacy_iso_test.go | 51 +++++++++++++++++++ 3 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 bib/cmd/bootc-image-builder/legacy_iso_test.go diff --git a/bib/cmd/bootc-image-builder/export_test.go b/bib/cmd/bootc-image-builder/export_test.go index e174182c0..ef7a1afd6 100644 --- a/bib/cmd/bootc-image-builder/export_test.go +++ b/bib/cmd/bootc-image-builder/export_test.go @@ -11,6 +11,7 @@ var ( CreateRand = createRand BuildCobraCmdline = buildCobraCmdline HandleAWSFlags = handleAWSFlags + NewDistroYAMLFrom = newDistroYAMLFrom ) func MockOsGetuid(new func() int) (restore func()) { diff --git a/bib/cmd/bootc-image-builder/legacy_iso.go b/bib/cmd/bootc-image-builder/legacy_iso.go index 9da78584f..2e2b3109d 100644 --- a/bib/cmd/bootc-image-builder/legacy_iso.go +++ b/bib/cmd/bootc-image-builder/legacy_iso.go @@ -222,22 +222,37 @@ func labelForISO(os *osinfo.OSRelease, arch *arch.Arch) string { } } +// newDistroYAMLFrom() returns the distroYAML for the given sourceInfo, +// if no direct match can be found it will it will use the ID_LIKE. +// This should ensure we work on every bootc image that puts a correct +// ID_LIKE= in /etc/os-release +func newDistroYAMLFrom(sourceInfo *osinfo.Info) (*defs.DistroYAML, *distro.ID, error) { + for _, distroID := range append([]string{sourceInfo.OSRelease.ID}, sourceInfo.OSRelease.IDLike...) { + nameVer := fmt.Sprintf("%s-%s", distroID, sourceInfo.OSRelease.VersionID) + id, err := distro.ParseID(nameVer) + if err != nil { + return nil, nil, err + } + distroYAML, err := defs.NewDistroYAML(nameVer) + if err != nil { + return nil, nil, err + } + if distroYAML != nil { + return distroYAML, id, nil + } + } + return nil, nil, fmt.Errorf("cannot load distro definitions for %s-%s or any of %v", sourceInfo.OSRelease.ID, sourceInfo.OSRelease.VersionID, sourceInfo.OSRelease.IDLike) +} + func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, error) { if c.Imgref == "" { return nil, fmt.Errorf("pipeline: no base image defined") } - - nameVer := fmt.Sprintf("%s-%s", c.SourceInfo.OSRelease.ID, c.SourceInfo.OSRelease.VersionID) - id, err := distro.ParseID(nameVer) - if err != nil { - return nil, err - } - // XXX: ensure all aliases we have for bib are available in - // images - distroYAML, err := defs.NewDistroYAML(nameVer) + distroYAML, id, err := newDistroYAMLFrom(c.SourceInfo) if err != nil { return nil, err } + // XXX: or "bootc-legacy-installer"? installerImgTypeName := "bootc-rpm-installer" imgType, ok := distroYAML.ImageTypes()[installerImgTypeName] diff --git a/bib/cmd/bootc-image-builder/legacy_iso_test.go b/bib/cmd/bootc-image-builder/legacy_iso_test.go new file mode 100644 index 000000000..9f5fddf98 --- /dev/null +++ b/bib/cmd/bootc-image-builder/legacy_iso_test.go @@ -0,0 +1,51 @@ +package main_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/osbuild/images/pkg/bib/osinfo" + "github.com/osbuild/images/pkg/distro" + + main "github.com/osbuild/bootc-image-builder/bib/cmd/bootc-image-builder" +) + +func TestNewDistroYAMLFromError(t *testing.T) { + si := &osinfo.Info{ + OSRelease: osinfo.OSRelease{ + ID: "weirdos", + VersionID: "2.71", + IDLike: []string{"waffleos", "barky"}, + }, + } + _, _, err := main.NewDistroYAMLFrom(si) + assert.EqualError(t, err, "cannot load distro definitions for weirdos-2.71 or any of [waffleos barky]") +} + +func TestNewDistroYAMLFromDirect(t *testing.T) { + si := &osinfo.Info{ + OSRelease: osinfo.OSRelease{ + ID: "centos", + VersionID: "10", + }, + } + distroYAML, id, err := main.NewDistroYAMLFrom(si) + assert.NoError(t, err) + assert.Equal(t, &distro.ID{Name: "centos", MajorVersion: 10, MinorVersion: -1}, id) + assert.Equal(t, "centos-10", distroYAML.Name) +} + +func TestNewDistroYAMLFromFallback(t *testing.T) { + si := &osinfo.Info{ + OSRelease: osinfo.OSRelease{ + ID: "blmblinux", + VersionID: "9.6", + IDLike: []string{"non-existing", "rhel", "centos", "fedora"}, + }, + } + distroYAML, id, err := main.NewDistroYAMLFrom(si) + assert.NoError(t, err) + assert.Equal(t, &distro.ID{Name: "rhel", MajorVersion: 9, MinorVersion: 6}, id) + assert.Equal(t, "rhel-9.6", distroYAML.Name) +} From 006d4a01b5d6b8f047c2963e9cce77e67e02736b Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 29 Oct 2025 12:52:30 +0100 Subject: [PATCH 4/5] bib: use `images` library for shared bootc helpers Reuse the helpers from the `images` library for to do: - labelForISO() - getDistroAndRunner() This code moved into images as part of https://github.com/osbuild/images/pull/1906 and we can now reuse it here instead of duplicating it. --- bib/cmd/bootc-image-builder/export_test.go | 11 ++- bib/cmd/bootc-image-builder/image_test.go | 58 --------------- bib/cmd/bootc-image-builder/legacy_iso.go | 87 +--------------------- 3 files changed, 8 insertions(+), 148 deletions(-) delete mode 100644 bib/cmd/bootc-image-builder/image_test.go diff --git a/bib/cmd/bootc-image-builder/export_test.go b/bib/cmd/bootc-image-builder/export_test.go index ef7a1afd6..680c243c2 100644 --- a/bib/cmd/bootc-image-builder/export_test.go +++ b/bib/cmd/bootc-image-builder/export_test.go @@ -6,12 +6,11 @@ import ( ) var ( - CanChownInPath = canChownInPath - GetDistroAndRunner = getDistroAndRunner - CreateRand = createRand - BuildCobraCmdline = buildCobraCmdline - HandleAWSFlags = handleAWSFlags - NewDistroYAMLFrom = newDistroYAMLFrom + CanChownInPath = canChownInPath + CreateRand = createRand + BuildCobraCmdline = buildCobraCmdline + HandleAWSFlags = handleAWSFlags + NewDistroYAMLFrom = newDistroYAMLFrom ) func MockOsGetuid(new func() int) (restore func()) { diff --git a/bib/cmd/bootc-image-builder/image_test.go b/bib/cmd/bootc-image-builder/image_test.go deleted file mode 100644 index a204b1811..000000000 --- a/bib/cmd/bootc-image-builder/image_test.go +++ /dev/null @@ -1,58 +0,0 @@ -package main_test - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/osbuild/images/pkg/manifest" - "github.com/osbuild/images/pkg/runner" - - bib "github.com/osbuild/bootc-image-builder/bib/cmd/bootc-image-builder" - "github.com/osbuild/images/pkg/bib/osinfo" -) - -func TestGetDistroAndRunner(t *testing.T) { - cases := []struct { - id string - versionID string - expectedDistro manifest.Distro - expectedRunner runner.Runner - expectedErr string - }{ - // Happy - {"fedora", "40", manifest.DISTRO_FEDORA, &runner.Fedora{Version: 40}, ""}, - {"centos", "9", manifest.DISTRO_EL9, &runner.CentOS{Version: 9}, ""}, - {"centos", "10", manifest.DISTRO_EL10, &runner.CentOS{Version: 10}, ""}, - {"centos", "11", manifest.DISTRO_NULL, &runner.CentOS{Version: 11}, ""}, - {"rhel", "9.4", manifest.DISTRO_EL9, &runner.RHEL{Major: 9, Minor: 4}, ""}, - {"rhel", "10.4", manifest.DISTRO_EL10, &runner.RHEL{Major: 10, Minor: 4}, ""}, - {"rhel", "11.4", manifest.DISTRO_NULL, &runner.RHEL{Major: 11, Minor: 4}, ""}, - {"toucanos", "42", manifest.DISTRO_NULL, &runner.Linux{}, ""}, - - // Sad - {"fedora", "asdf", manifest.DISTRO_NULL, nil, "cannot parse Fedora version (asdf)"}, - {"centos", "asdf", manifest.DISTRO_NULL, nil, "cannot parse CentOS version (asdf)"}, - {"rhel", "10", manifest.DISTRO_NULL, nil, "invalid RHEL version format: 10"}, - {"rhel", "10.asdf", manifest.DISTRO_NULL, nil, "cannot parse RHEL minor version (asdf)"}, - } - - for _, c := range cases { - t.Run(fmt.Sprintf("%s-%s", c.id, c.versionID), func(t *testing.T) { - osRelease := osinfo.OSRelease{ - ID: c.id, - VersionID: c.versionID, - } - distro, runner, err := bib.GetDistroAndRunner(osRelease) - if c.expectedErr != "" { - assert.ErrorContains(t, err, c.expectedErr) - } else { - require.NoError(t, err) - assert.Equal(t, c.expectedDistro, distro) - assert.Equal(t, c.expectedRunner, runner) - } - }) - } -} diff --git a/bib/cmd/bootc-image-builder/legacy_iso.go b/bib/cmd/bootc-image-builder/legacy_iso.go index 2e2b3109d..f541e6852 100644 --- a/bib/cmd/bootc-image-builder/legacy_iso.go +++ b/bib/cmd/bootc-image-builder/legacy_iso.go @@ -3,8 +3,6 @@ package main import ( "fmt" "math/rand" - "strconv" - "strings" "github.com/osbuild/blueprint/pkg/blueprint" "github.com/osbuild/images/pkg/arch" @@ -15,13 +13,13 @@ import ( "github.com/osbuild/images/pkg/depsolvednf" "github.com/osbuild/images/pkg/disk" "github.com/osbuild/images/pkg/distro" + "github.com/osbuild/images/pkg/distro/bootc" "github.com/osbuild/images/pkg/distro/defs" "github.com/osbuild/images/pkg/image" "github.com/osbuild/images/pkg/manifest" "github.com/osbuild/images/pkg/osbuild" "github.com/osbuild/images/pkg/platform" "github.com/osbuild/images/pkg/rpmmd" - "github.com/osbuild/images/pkg/runner" "github.com/sirupsen/logrus" podman_container "github.com/osbuild/images/pkg/bib/container" @@ -204,24 +202,6 @@ func makeISOManifest(c *ManifestConfig, solver *depsolvednf.Solver, cacheRoot st return mf, depsolvedRepos, nil } -func labelForISO(os *osinfo.OSRelease, arch *arch.Arch) string { - switch os.ID { - case "fedora": - return fmt.Sprintf("Fedora-S-dvd-%s-%s", arch, os.VersionID) - case "centos": - labelTemplate := "CentOS-Stream-%s-BaseOS-%s" - if os.VersionID == "8" { - labelTemplate = "CentOS-Stream-%s-%s-dvd" - } - return fmt.Sprintf(labelTemplate, os.VersionID, arch) - case "rhel": - version := strings.ReplaceAll(os.VersionID, ".", "-") - return fmt.Sprintf("RHEL-%s-BaseOS-%s", version, arch) - default: - return fmt.Sprintf("Container-Installer-%s", arch) - } -} - // newDistroYAMLFrom() returns the distroYAML for the given sourceInfo, // if no direct match can be found it will it will use the ID_LIKE. // This should ensure we work on every bootc image that puts a correct @@ -310,7 +290,7 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro img.InstallerCustomizations.Product = c.SourceInfo.OSRelease.Name img.InstallerCustomizations.OSVersion = c.SourceInfo.OSRelease.VersionID - img.InstallerCustomizations.ISOLabel = labelForISO(&c.SourceInfo.OSRelease, &c.Architecture) + img.InstallerCustomizations.ISOLabel = bootc.LabelForISO(&c.SourceInfo.OSRelease, c.Architecture.String()) img.ExtraBasePackages = installerPkgSet var customizations *blueprint.Customizations @@ -366,7 +346,7 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro mf := manifest.New() - foundDistro, foundRunner, err := getDistroAndRunner(c.SourceInfo.OSRelease) + foundDistro, foundRunner, err := bootc.GetDistroAndRunner(c.SourceInfo.OSRelease) if err != nil { return nil, fmt.Errorf("failed to infer distro and runner: %w", err) } @@ -375,64 +355,3 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro _, err = img.InstantiateManifest(&mf, nil, foundRunner, rng) return &mf, err } - -func getDistroAndRunner(osRelease osinfo.OSRelease) (manifest.Distro, runner.Runner, error) { - switch osRelease.ID { - case "fedora": - version, err := strconv.ParseUint(osRelease.VersionID, 10, 64) - if err != nil { - return manifest.DISTRO_NULL, nil, fmt.Errorf("cannot parse Fedora version (%s): %w", osRelease.VersionID, err) - } - - return manifest.DISTRO_FEDORA, &runner.Fedora{ - Version: version, - }, nil - case "centos": - version, err := strconv.ParseUint(osRelease.VersionID, 10, 64) - if err != nil { - return manifest.DISTRO_NULL, nil, fmt.Errorf("cannot parse CentOS version (%s): %w", osRelease.VersionID, err) - } - r := &runner.CentOS{ - Version: version, - } - switch version { - case 9: - return manifest.DISTRO_EL9, r, nil - case 10: - return manifest.DISTRO_EL10, r, nil - default: - logrus.Warnf("Unknown CentOS version %d, using default distro for manifest generation", version) - return manifest.DISTRO_NULL, r, nil - } - - case "rhel": - versionParts := strings.Split(osRelease.VersionID, ".") - if len(versionParts) != 2 { - return manifest.DISTRO_NULL, nil, fmt.Errorf("invalid RHEL version format: %s", osRelease.VersionID) - } - major, err := strconv.ParseUint(versionParts[0], 10, 64) - if err != nil { - return manifest.DISTRO_NULL, nil, fmt.Errorf("cannot parse RHEL major version (%s): %w", versionParts[0], err) - } - minor, err := strconv.ParseUint(versionParts[1], 10, 64) - if err != nil { - return manifest.DISTRO_NULL, nil, fmt.Errorf("cannot parse RHEL minor version (%s): %w", versionParts[1], err) - } - r := &runner.RHEL{ - Major: major, - Minor: minor, - } - switch major { - case 9: - return manifest.DISTRO_EL9, r, nil - case 10: - return manifest.DISTRO_EL10, r, nil - default: - logrus.Warnf("Unknown RHEL version %d, using default distro for manifest generation", major) - return manifest.DISTRO_NULL, r, nil - } - } - - logrus.Warnf("Unknown distro %s, using default runner", osRelease.ID) - return manifest.DISTRO_NULL, &runner.Linux{}, nil -} From 848ef51eb253f6bed64bff50f4ba25b1cb3642bc Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 29 Oct 2025 12:56:19 +0100 Subject: [PATCH 5/5] bib: drop no-longer used NullWorkload Workloads are no longer used in the images library. This NullWorkload is also no longer used so drop it. --- bib/cmd/bootc-image-builder/workload.go | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 bib/cmd/bootc-image-builder/workload.go diff --git a/bib/cmd/bootc-image-builder/workload.go b/bib/cmd/bootc-image-builder/workload.go deleted file mode 100644 index d2667fa7e..000000000 --- a/bib/cmd/bootc-image-builder/workload.go +++ /dev/null @@ -1,24 +0,0 @@ -package main - -import "github.com/osbuild/images/pkg/rpmmd" - -// NullWorkload implements the images Workload interface but returns only nil -// from all its methods and holds no data. -type NullWorkload struct { -} - -func (p *NullWorkload) GetRepos() []rpmmd.RepoConfig { - return nil -} - -func (p *NullWorkload) GetPackages() []string { - return nil -} - -func (p *NullWorkload) GetServices() []string { - return nil -} - -func (p *NullWorkload) GetDisabledServices() []string { - return nil -}