From fd93f47d3f41bde8886889fd01ef6d55944aba86 Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Fri, 6 Jan 2023 14:03:38 +0100 Subject: [PATCH] distro/rhel8: image type separation: qcow2 and openstack Continuing image type splitting. Constructor for qcow2 type requires the distribution object to determine whether to add RHSM to the image config (RHEL only). --- internal/distro/rhel8/distro.go | 72 +---------- internal/distro/rhel8/package_sets.go | 102 --------------- internal/distro/rhel8/qcow2.go | 176 ++++++++++++++++++++++++++ 3 files changed, 183 insertions(+), 167 deletions(-) create mode 100644 internal/distro/rhel8/qcow2.go diff --git a/internal/distro/rhel8/distro.go b/internal/distro/rhel8/distro.go index a96ad2b80..f5386cb7d 100644 --- a/internal/distro/rhel8/distro.go +++ b/internal/distro/rhel8/distro.go @@ -215,43 +215,6 @@ func newDistro(name string, minor int) *distribution { bootType: distro.LegacyBootType, } - // Image Definitions - qcow2ImgType := imageType{ - name: "qcow2", - filename: "disk.qcow2", - mimeType: "application/x-qemu-disk", - kernelOptions: "console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto", - packageSets: map[string]packageSetFunc{ - buildPkgsKey: distroBuildPackageSet, - osPkgsKey: qcow2CommonPackageSet, - }, - packageSetChains: map[string][]string{ - osPkgsKey: {osPkgsKey, blueprintPkgsKey}, - }, - defaultImageConfig: &distro.ImageConfig{ - DefaultTarget: common.ToPtr("multi-user.target"), - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { - DnfPlugins: &osbuild.RHSMStageOptionsDnfPlugins{ - ProductID: &osbuild.RHSMStageOptionsDnfPlugin{ - Enabled: false, - }, - SubscriptionManager: &osbuild.RHSMStageOptionsDnfPlugin{ - Enabled: false, - }, - }, - }, - }, - }, - bootable: true, - defaultSize: 10 * common.GibiByte, - pipelines: qcow2Pipelines, - buildPipelines: []string{"build"}, - payloadPipelines: []string{"os", "image", "qcow2"}, - exports: []string{"qcow2"}, - basePartitionTables: defaultBasePartitionTables, - } - vmdkImgType := imageType{ name: "vmdk", filename: "disk.vmdk", @@ -273,27 +236,6 @@ func newDistro(name string, minor int) *distribution { basePartitionTables: defaultBasePartitionTables, } - openstackImgType := imageType{ - name: "openstack", - filename: "disk.qcow2", - mimeType: "application/x-qemu-disk", - packageSets: map[string]packageSetFunc{ - buildPkgsKey: distroBuildPackageSet, - osPkgsKey: openstackCommonPackageSet, - }, - packageSetChains: map[string][]string{ - osPkgsKey: {osPkgsKey, blueprintPkgsKey}, - }, - kernelOptions: "ro net.ifnames=0", - bootable: true, - defaultSize: 4 * common.GibiByte, - pipelines: openstackPipelines, - buildPipelines: []string{"build"}, - payloadPipelines: []string{"os", "image", "qcow2"}, - exports: []string{"qcow2"}, - basePartitionTables: defaultBasePartitionTables, - } - // GCE BYOS image defaultGceByosImageConfig := &distro.ImageConfig{ Timezone: common.ToPtr("UTC"), @@ -537,7 +479,7 @@ func newDistro(name string, minor int) *distribution { exports: []string{"bootiso"}, } - ociImgType := qcow2ImgType + ociImgType := qcow2ImgType(rd) ociImgType.name = "oci" x86_64.addImageTypes( @@ -549,7 +491,7 @@ func newDistro(name string, minor int) *distribution { QCOW2Compat: "0.10", }, }, - qcow2ImgType, + qcow2ImgType(rd), ociImgType, ) @@ -561,7 +503,7 @@ func newDistro(name string, minor int) *distribution { ImageFormat: platform.FORMAT_QCOW2, }, }, - openstackImgType, + openstackImgType(), ) rawX86Platform := &platform.X86{ @@ -641,7 +583,7 @@ func newDistro(name string, minor int) *distribution { QCOW2Compat: "0.10", }, }, - qcow2ImgType, + qcow2ImgType(rd), ) aarch64.addImageTypes( @@ -651,7 +593,7 @@ func newDistro(name string, minor int) *distribution { ImageFormat: platform.FORMAT_QCOW2, }, }, - openstackImgType, + openstackImgType(), ) aarch64.addImageTypes( @@ -692,7 +634,7 @@ func newDistro(name string, minor int) *distribution { QCOW2Compat: "0.10", }, }, - qcow2ImgType, + qcow2ImgType(rd), ) ppc64le.addImageTypes( @@ -708,7 +650,7 @@ func newDistro(name string, minor int) *distribution { QCOW2Compat: "0.10", }, }, - qcow2ImgType, + qcow2ImgType(rd), ) s390x.addImageTypes( diff --git a/internal/distro/rhel8/package_sets.go b/internal/distro/rhel8/package_sets.go index 37953e416..8079f3622 100644 --- a/internal/distro/rhel8/package_sets.go +++ b/internal/distro/rhel8/package_sets.go @@ -243,91 +243,6 @@ func s390xLegacyBootPackageSet(t *imageType) rpmmd.PackageSet { // OS package sets -func qcow2CommonPackageSet(t *imageType) rpmmd.PackageSet { - ps := rpmmd.PackageSet{ - Include: []string{ - "@core", - "authselect-compat", - "chrony", - "cloud-init", - "cloud-utils-growpart", - "cockpit-system", - "cockpit-ws", - "dhcp-client", - "dnf", - "dnf-utils", - "dosfstools", - "dracut-norescue", - "net-tools", - "NetworkManager", - "nfs-utils", - "oddjob", - "oddjob-mkhomedir", - "psmisc", - "python3-jsonschema", - "qemu-guest-agent", - "redhat-release", - "redhat-release-eula", - "rsync", - "tar", - "tcpdump", - "yum", - }, - Exclude: []string{ - "aic94xx-firmware", - "alsa-firmware", - "alsa-lib", - "alsa-tools-firmware", - "biosdevname", - "dnf-plugin-spacewalk", - "dracut-config-rescue", - "fedora-release", - "fedora-repos", - "firewalld", - "fwupd", - "iprutils", - "ivtv-firmware", - "iwl1000-firmware", - "iwl100-firmware", - "iwl105-firmware", - "iwl135-firmware", - "iwl2000-firmware", - "iwl2030-firmware", - "iwl3160-firmware", - "iwl3945-firmware", - "iwl4965-firmware", - "iwl5000-firmware", - "iwl5150-firmware", - "iwl6000-firmware", - "iwl6000g2a-firmware", - "iwl6000g2b-firmware", - "iwl6050-firmware", - "iwl7260-firmware", - "langpacks-*", - "langpacks-en", - "langpacks-en", - "libertas-sd8686-firmware", - "libertas-sd8787-firmware", - "libertas-usb8388-firmware", - "nss", - "plymouth", - "rng-tools", - "udisks2", - }, - }.Append(bootPackageSet(t)).Append(distroSpecificPackageSet(t)) - - // Ensure to not pull in subscription-manager on non-RHEL distro - if t.arch.distro.isRHEL() { - ps = ps.Append(rpmmd.PackageSet{ - Include: []string{ - "subscription-manager-cockpit", - }, - }) - } - - return ps -} - func vmdkCommonPackageSet(t *imageType) rpmmd.PackageSet { return rpmmd.PackageSet{ Include: []string{ @@ -347,23 +262,6 @@ func vmdkCommonPackageSet(t *imageType) rpmmd.PackageSet { } -func openstackCommonPackageSet(t *imageType) rpmmd.PackageSet { - return rpmmd.PackageSet{ - Include: []string{ - // Defaults - "@Core", "langpacks-en", - - // From the lorax kickstart - "selinux-policy-targeted", "cloud-init", "qemu-guest-agent", - "spice-vdagent", - }, - Exclude: []string{ - "dracut-config-rescue", "rng-tools", - }, - }.Append(bootPackageSet(t)) - -} - // common GCE image func gceCommonPackageSet(t *imageType) rpmmd.PackageSet { return rpmmd.PackageSet{ diff --git a/internal/distro/rhel8/qcow2.go b/internal/distro/rhel8/qcow2.go new file mode 100644 index 000000000..f5aa19873 --- /dev/null +++ b/internal/distro/rhel8/qcow2.go @@ -0,0 +1,176 @@ +package rhel8 + +import ( + "github.com/osbuild/osbuild-composer/internal/common" + "github.com/osbuild/osbuild-composer/internal/distro" + "github.com/osbuild/osbuild-composer/internal/osbuild" + "github.com/osbuild/osbuild-composer/internal/rpmmd" +) + +func qcow2ImgType(rd distribution) imageType { + it := imageType{ + name: "qcow2", + filename: "disk.qcow2", + mimeType: "application/x-qemu-disk", + kernelOptions: "console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto", + packageSets: map[string]packageSetFunc{ + buildPkgsKey: distroBuildPackageSet, + osPkgsKey: qcow2CommonPackageSet, + }, + packageSetChains: map[string][]string{ + osPkgsKey: {osPkgsKey, blueprintPkgsKey}, + }, + defaultImageConfig: &distro.ImageConfig{ + DefaultTarget: common.ToPtr("multi-user.target"), + }, + bootable: true, + defaultSize: 10 * common.GibiByte, + pipelines: qcow2Pipelines, + buildPipelines: []string{"build"}, + payloadPipelines: []string{"os", "image", "qcow2"}, + exports: []string{"qcow2"}, + basePartitionTables: defaultBasePartitionTables, + } + + if rd.isRHEL() { + it.defaultImageConfig.RHSMConfig = map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ + distro.RHSMConfigNoSubscription: { + DnfPlugins: &osbuild.RHSMStageOptionsDnfPlugins{ + ProductID: &osbuild.RHSMStageOptionsDnfPlugin{ + Enabled: false, + }, + SubscriptionManager: &osbuild.RHSMStageOptionsDnfPlugin{ + Enabled: false, + }, + }, + }, + } + } + + return it +} + +func openstackImgType() imageType { + return imageType{ + name: "openstack", + filename: "disk.qcow2", + mimeType: "application/x-qemu-disk", + packageSets: map[string]packageSetFunc{ + buildPkgsKey: distroBuildPackageSet, + osPkgsKey: openstackCommonPackageSet, + }, + packageSetChains: map[string][]string{ + osPkgsKey: {osPkgsKey, blueprintPkgsKey}, + }, + kernelOptions: "ro net.ifnames=0", + bootable: true, + defaultSize: 4 * common.GibiByte, + pipelines: openstackPipelines, + buildPipelines: []string{"build"}, + payloadPipelines: []string{"os", "image", "qcow2"}, + exports: []string{"qcow2"}, + basePartitionTables: defaultBasePartitionTables, + } +} + +func qcow2CommonPackageSet(t *imageType) rpmmd.PackageSet { + ps := rpmmd.PackageSet{ + Include: []string{ + "@core", + "authselect-compat", + "chrony", + "cloud-init", + "cloud-utils-growpart", + "cockpit-system", + "cockpit-ws", + "dhcp-client", + "dnf", + "dnf-utils", + "dosfstools", + "dracut-norescue", + "net-tools", + "NetworkManager", + "nfs-utils", + "oddjob", + "oddjob-mkhomedir", + "psmisc", + "python3-jsonschema", + "qemu-guest-agent", + "redhat-release", + "redhat-release-eula", + "rsync", + "tar", + "tcpdump", + "yum", + }, + Exclude: []string{ + "aic94xx-firmware", + "alsa-firmware", + "alsa-lib", + "alsa-tools-firmware", + "biosdevname", + "dnf-plugin-spacewalk", + "dracut-config-rescue", + "fedora-release", + "fedora-repos", + "firewalld", + "fwupd", + "iprutils", + "ivtv-firmware", + "iwl1000-firmware", + "iwl100-firmware", + "iwl105-firmware", + "iwl135-firmware", + "iwl2000-firmware", + "iwl2030-firmware", + "iwl3160-firmware", + "iwl3945-firmware", + "iwl4965-firmware", + "iwl5000-firmware", + "iwl5150-firmware", + "iwl6000-firmware", + "iwl6000g2a-firmware", + "iwl6000g2b-firmware", + "iwl6050-firmware", + "iwl7260-firmware", + "langpacks-*", + "langpacks-en", + "langpacks-en", + "libertas-sd8686-firmware", + "libertas-sd8787-firmware", + "libertas-usb8388-firmware", + "nss", + "plymouth", + "rng-tools", + "udisks2", + }, + }.Append(bootPackageSet(t)).Append(distroSpecificPackageSet(t)) + + // Ensure to not pull in subscription-manager on non-RHEL distro + if t.arch.distro.isRHEL() { + ps = ps.Append(rpmmd.PackageSet{ + Include: []string{ + "subscription-manager-cockpit", + }, + }) + } + + return ps +} + +func openstackCommonPackageSet(t *imageType) rpmmd.PackageSet { + return rpmmd.PackageSet{ + Include: []string{ + // Defaults + "@Core", "langpacks-en", + + // From the lorax kickstart + "selinux-policy-targeted", "cloud-init", "qemu-guest-agent", + "spice-vdagent", + }, + Exclude: []string{ + "dracut-config-rescue", "rng-tools", + }, + }.Append(bootPackageSet(t)) + +}