From 26bab2b0a8948fedab3605701240a6e7549c8dfb Mon Sep 17 00:00:00 2001 From: Samir Noir Date: Tue, 17 Nov 2020 14:50:52 +0100 Subject: [PATCH] Correctly set the kernel to use when creating Debian images It can happen that after the initial upgrade, a kernel upgrade occures. In such case, the links /{vmlinuz,/initrd.img} point to the "old" kernel version. Also, the Nvidia driver is compiled for the currently running kernel. Now, the last kernel while be used to correct both cases. --- .../env/lib/facter/installed_kernelreleases.rb | 12 ++++++++++++ .../big/configure_nvidia_gpu/drivers.pp | 2 +- .../setup/puppet/modules/env/manifests/min.pp | 4 ++++ ...nfigure_kernel_and_blacklist_some_modules.pp | 4 ++++ .../env/manifests/min/kernel/remove_old.pp | 17 +++++++++++++++++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb create mode 100644 steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp diff --git a/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb b/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb new file mode 100644 index 00000000..71f91fbc --- /dev/null +++ b/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb @@ -0,0 +1,12 @@ +Facter.add(:installed_kernelreleases) do + setcode do + kernels = Dir.glob('/boot/{vmlinuz,vmlinux}-*') + + kernels.sort_by! do |k| + m = /^\/boot\/vmlinu[zx]-(\d+)\.(\d+)\.(\d+)(_|-)(\d+).*$/.match(k) + [m[1].to_i, m[2].to_i, m[3].to_i, m[5].to_i] + end + + kernels.map { |k| k.gsub(/\/boot\/vmlinu[zx]-(\d+\.\d+\.\d+(_|-)\d+.*)/, '\1') } + end +end diff --git a/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp b/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp index 39b26118..73bab5dd 100644 --- a/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp +++ b/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp @@ -29,7 +29,7 @@ class env::big::configure_nvidia_gpu::drivers () { user => root, require => Package['module-assistant']; 'install_nvidia_driver': - command => "/tmp/NVIDIA-Linux.run -qa --no-cc-version-check --ui=none --dkms; /bin/rm /tmp/NVIDIA-Linux.run", + command => "/tmp/NVIDIA-Linux.run -qa --no-cc-version-check --ui=none --dkms -k ${installed_kernelreleases[-1]}; /bin/rm /tmp/NVIDIA-Linux.run", timeout => 1200, # 20 min, user => root, require => [Exec['prepare_kernel_module_build'], File['/tmp/NVIDIA-Linux.run'], Package['dkms']]; diff --git a/steps/data/setup/puppet/modules/env/manifests/min.pp b/steps/data/setup/puppet/modules/env/manifests/min.pp index 45b0c8d6..48ca9c02 100644 --- a/steps/data/setup/puppet/modules/env/manifests/min.pp +++ b/steps/data/setup/puppet/modules/env/manifests/min.pp @@ -2,6 +2,10 @@ class env::min ( $variant = "min", $parent_parameters = {} ) { + stage { 'last': + require => Stage['main'], + } + $min_parameters = { misc_root_pwd => '$1$qzZwnZXQ$Ak1xs7Oma6HUHw/xDJ8q91', } diff --git a/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp b/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp index 7243f6a9..f32ca3e9 100644 --- a/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp +++ b/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp @@ -11,4 +11,8 @@ class env::min::configure_kernel_and_blacklist_some_modules { # initramfs regeneration declaration include env::min::kernel::initramfs + # Remove old kernel if exist: it can happen that the running kernel (the installer's one) is not the most recent (installed after upgrade) + class { 'env::min::kernel::remove_old': + stage => last, + } } diff --git a/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp b/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp new file mode 100644 index 00000000..9d44b98c --- /dev/null +++ b/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp @@ -0,0 +1,17 @@ +class env::min::kernel::remove_old { + # Remove the current kernel if it's not the last one + if $kernelrelease != $installed_kernelreleases[-1] { + package { "linux-image-$kernelrelease": + ensure => 'purged' + } + + file { + "/lib/modules/$kernelrelease": + ensure => absent, + force => true; + "/usr/lib/modules/$kernelrelease": + ensure => absent, + force => true; + } + } +} -- GitLab