voxpupuli / puppet-augeasproviders_grub

Augeas-based grub type and providers
Apache License 2.0
9 stars 33 forks source link

RHEL >= 9.3 - `grub2-mkconfig` does not update BLS kernel options anymore per default #95

Closed cruelsmith closed 2 months ago

cruelsmith commented 7 months ago

Affected Puppet, Ruby, OS and module versions/distributions

How to reproduce (e.g Puppet code you use)

What are you seeing

kernel_parameter type (via grub2-mkconfig) does not update kernel options of BLS entries to the ones defined in GRUB_CMDLINE_LINUX.

What behaviour did you expect instead

kernel_parameter type (via grub2-mkconfig) updates the kernel options of BLS entries as before.

Output log

n.a.

Any additional information you'd like to impart

RHEL 9.3 did a change which require to call grub2-mkconfig -o /path/to/grub.cfg --update-bls-cmdline to restore the old why of functioning. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/9.3_release_notes/index#new-features-boot-loader

loicbr commented 5 months ago

I confirm that kernel_parameter setting is broken on RHEL 9.3. Support was added for BLS in grub_menuentry version 3.2 but it should be added in the other parts of the module.

As a quick patch, I changed the following but something better integrated should be done (by someone who knows the code) :

24a25,37
>   # Add BLS specific option to mkconfig command if needed
>   #
>   # @return (String) The commandline
>   def self.mkconfig_cmdline
>     cmdline = [self.mkconfig_path]
>     if ((Facter.value(:os) && Facter.value(:os)['name']) == 'RedHat')
>       if ((Facter.value(:os)['release']['major'].to_i == 9) && (Facter.value(:os)['release']['minor'].to_i >= 3)) || (Facter.value(:os)['release']['major'].to_i > 9)
>         cmdline = cmdline.append("--update-bls-cmdline")
>       end
>     end
>     cmdline
>   end
> 
35c48
<     execute(self.class.mkconfig_path, { failonfail: true, combine: false })
---
>     execute(self.class.mkconfig_cmdline, { failonfail: true, combine: false })