From 2f96cc7051232c66783f1e5f07195012227c7eed Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Fri, 27 Jan 2023 16:11:45 +0100 Subject: [PATCH] manifest: fix dracut modules and drivers for Anaconda installers When the image definitions were updated to the new framework, I failed to update the dracut modules for Anaconda installers to match the existing ones. The changes in the manifest are at commit c4af0a188611a41bf97e0618ffaee6cca15b9bb5. The nvdimm module and the additional drivers were removed. The nvdimm module in particular is required for http boot but should only be specified for RHEL 9. In RHEL 8 it is part of the default set of modules. See 02bb7a0b4f3607d6856e231cc2fd1bf0d4421aec and dc95382ba3a356e9540f05880d33622c44fd0a1f for the original commits that introduced these changes. --- internal/distro/rhel9/images.go | 14 ++++++++++++-- internal/image/image_installer.go | 2 ++ internal/image/ostree_installer.go | 2 ++ internal/manifest/anaconda.go | 7 +++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/internal/distro/rhel9/images.go b/internal/distro/rhel9/images.go index 3e6025927..a16a9fedd 100644 --- a/internal/distro/rhel9/images.go +++ b/internal/distro/rhel9/images.go @@ -301,7 +301,12 @@ func edgeInstallerImage(workload workload.Workload, img.Groups = users.GroupsFromBP(customizations.GetGroups()) img.SquashfsCompression = "xz" - img.AdditionalDracutModules = []string{"prefixdevname", "prefixdevname-tools"} + img.AdditionalDracutModules = []string{ + "nvdimm", // non-volatile DIMM firmware (provides nfit, cuse, and nd_e820) + "prefixdevname", + "prefixdevname-tools", + } + img.AdditionalDrivers = []string{"cuse", "ipmi_devintf", "ipmi_msghandler"} if len(img.Users)+len(img.Groups) > 0 { // only enable the users module if needed @@ -477,7 +482,12 @@ func imageInstallerImage(workload workload.Workload, img.Users = users.UsersFromBP(customizations.GetUsers()) img.Groups = users.GroupsFromBP(customizations.GetGroups()) - img.AdditionalDracutModules = []string{"prefixdevname", "prefixdevname-tools"} + img.AdditionalDracutModules = []string{ + "nvdimm", // non-volatile DIMM firmware (provides nfit, cuse, and nd_e820) + "prefixdevname", + "prefixdevname-tools", + } + img.AdditionalDrivers = []string{"cuse", "ipmi_devintf", "ipmi_msghandler"} img.AdditionalAnacondaModules = []string{"org.fedoraproject.Anaconda.Modules.Users"} img.SquashfsCompression = "xz" diff --git a/internal/image/image_installer.go b/internal/image/image_installer.go index 463574150..f5b66b54d 100644 --- a/internal/image/image_installer.go +++ b/internal/image/image_installer.go @@ -49,6 +49,7 @@ type ImageInstaller struct { AdditionalKernelOpts []string AdditionalAnacondaModules []string AdditionalDracutModules []string + AdditionalDrivers []string } func NewImageInstaller() *ImageInstaller { @@ -80,6 +81,7 @@ func (img *ImageInstaller) InstantiateManifest(m *manifest.Manifest, anacondaPipeline.Biosdevname = (img.Platform.GetArch() == platform.ARCH_X86_64) anacondaPipeline.AdditionalAnacondaModules = img.AdditionalAnacondaModules anacondaPipeline.AdditionalDracutModules = img.AdditionalDracutModules + anacondaPipeline.AdditionalDrivers = img.AdditionalDrivers tarPath := "/liveimg.tar.gz" diff --git a/internal/image/ostree_installer.go b/internal/image/ostree_installer.go index 40164fd8c..409b3c717 100644 --- a/internal/image/ostree_installer.go +++ b/internal/image/ostree_installer.go @@ -37,6 +37,7 @@ type OSTreeInstaller struct { AdditionalDracutModules []string AdditionalAnacondaModules []string + AdditionalDrivers []string } func NewOSTreeInstaller(commit ostree.CommitSpec) *OSTreeInstaller { @@ -69,6 +70,7 @@ func (img *OSTreeInstaller) InstantiateManifest(m *manifest.Manifest, anacondaPipeline.Checkpoint() anacondaPipeline.AdditionalDracutModules = img.AdditionalDracutModules anacondaPipeline.AdditionalAnacondaModules = img.AdditionalAnacondaModules + anacondaPipeline.AdditionalDrivers = img.AdditionalDrivers rootfsPartitionTable := &disk.PartitionTable{ Size: 20 * common.MebiByte, diff --git a/internal/manifest/anaconda.go b/internal/manifest/anaconda.go index 1f2939405..feac38302 100644 --- a/internal/manifest/anaconda.go +++ b/internal/manifest/anaconda.go @@ -48,8 +48,9 @@ type Anaconda struct { // Additional anaconda modules to enable AdditionalAnacondaModules []string - // Additional dracut modules to enable + // Additional dracut modules and drivers to enable AdditionalDracutModules []string + AdditionalDrivers []string } // NewAnaconda creates an anaconda pipeline object. repos and packages @@ -216,7 +217,9 @@ func (p *Anaconda) serialize() osbuild.Pipeline { "lunmask", "nfs", ) - pipeline.AddStage(osbuild.NewDracutStage(dracutStageOptions(p.kernelVer, p.Biosdevname, dracutModules))) + dracutOptions := dracutStageOptions(p.kernelVer, p.Biosdevname, dracutModules) + dracutOptions.AddDrivers = p.AdditionalDrivers + pipeline.AddStage(osbuild.NewDracutStage(dracutOptions)) pipeline.AddStage(osbuild.NewSELinuxConfigStage(&osbuild.SELinuxConfigStageOptions{State: osbuild.SELinuxStatePermissive})) if p.InteractiveDefaults != nil {