From 5473f46cf3f5e846b0562b42e8cf6f1a8488daea Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Mon, 9 Nov 2026 20:08:08 +0100 Subject: [PATCH] Do not autoactivate LVM on local disks on diskless boot An old stateful OS on LVM was activated at diskless boot and kept the disk busy, so repartitioning it for scratch failed. Set an empty auto_activation_volume_list unless the image sets one. Ubuntu also needs it in the initramfs, whose udev rules activate LVM earlier. --- .../el10-diskless/profiles/default/scripts/imageboot.sh | 4 ++++ .../el7-diskless/profiles/default/scripts/imageboot.sh | 4 ++++ .../el8-diskless/profiles/default/scripts/imageboot.sh | 4 ++++ .../el9-diskless/profiles/default/scripts/imageboot.sh | 4 ++++ .../suse15-diskless/profiles/default/scripts/imageboot.sh | 4 ++++ .../suse16-diskless/profiles/default/scripts/imageboot.sh | 4 ++++ .../ubuntu20.04-diskless/initramfs/conf/conf.d/confluent | 4 ++++ .../profiles/default/scripts/imageboot.sh | 4 ++++ 8 files changed, 32 insertions(+) diff --git a/confluent_osdeploy/el10-diskless/profiles/default/scripts/imageboot.sh b/confluent_osdeploy/el10-diskless/profiles/default/scripts/imageboot.sh index d1acfe83..57c32a7b 100644 --- a/confluent_osdeploy/el10-diskless/profiles/default/scripts/imageboot.sh +++ b/confluent_osdeploy/el10-diskless/profiles/default/scripts/imageboot.sh @@ -159,6 +159,10 @@ if [ ${#machineid} -eq 32 ]; then echo $machineid > /sysroot/etc/machine-id chmod 444 /sysroot/etc/machine-id fi +# Do not autoactivate LVM on local disks unless the image sets auto_activation_volume_list +if [ -e /sysroot/etc/lvm/lvm.conf ] && ! grep -qs '^[[:space:]]*auto_activation_volume_list' /sysroot/etc/lvm/lvm.conf /sysroot/etc/lvm/lvmlocal.conf; then + printf 'activation {\n\tauto_activation_volume_list = []\n}\n' >> /sysroot/etc/lvm/lvmlocal.conf +fi if [ -x /sysroot/usr/sbin/matchpathcon ] && grep -Eq '^SELINUX=(enforcing|permissive)' /sysroot/etc/selinux/config 2> /dev/null; then # Files written to /sysroot before policy load are unlabeled. selinuxpolicy=$(sed -n 's/^SELINUXTYPE=//p' /sysroot/etc/selinux/config) diff --git a/confluent_osdeploy/el7-diskless/profiles/default/scripts/imageboot.sh b/confluent_osdeploy/el7-diskless/profiles/default/scripts/imageboot.sh index 1e82e84d..4ff8517f 100644 --- a/confluent_osdeploy/el7-diskless/profiles/default/scripts/imageboot.sh +++ b/confluent_osdeploy/el7-diskless/profiles/default/scripts/imageboot.sh @@ -133,6 +133,10 @@ if [ ${#machineid} -eq 32 ]; then echo $machineid > /sysroot/etc/machine-id chmod 444 /sysroot/etc/machine-id fi +# Do not autoactivate LVM on local disks unless the image sets auto_activation_volume_list +if [ -e /sysroot/etc/lvm/lvm.conf ] && ! grep -qs '^[[:space:]]*auto_activation_volume_list' /sysroot/etc/lvm/lvm.conf /sysroot/etc/lvm/lvmlocal.conf; then + printf 'activation {\n\tauto_activation_volume_list = []\n}\n' >> /sysroot/etc/lvm/lvmlocal.conf +fi if grep installtodisk /proc/cmdline > /dev/null; then . /etc/confluent/functions run_remote installimage diff --git a/confluent_osdeploy/el8-diskless/profiles/default/scripts/imageboot.sh b/confluent_osdeploy/el8-diskless/profiles/default/scripts/imageboot.sh index 747b28b8..fb599b62 100644 --- a/confluent_osdeploy/el8-diskless/profiles/default/scripts/imageboot.sh +++ b/confluent_osdeploy/el8-diskless/profiles/default/scripts/imageboot.sh @@ -137,6 +137,10 @@ if [ ${#machineid} -eq 32 ]; then echo $machineid > /sysroot/etc/machine-id chmod 444 /sysroot/etc/machine-id fi +# Do not autoactivate LVM on local disks unless the image sets auto_activation_volume_list +if [ -e /sysroot/etc/lvm/lvm.conf ] && ! grep -qs '^[[:space:]]*auto_activation_volume_list' /sysroot/etc/lvm/lvm.conf /sysroot/etc/lvm/lvmlocal.conf; then + printf 'activation {\n\tauto_activation_volume_list = []\n}\n' >> /sysroot/etc/lvm/lvmlocal.conf +fi if [ -x /sysroot/usr/sbin/matchpathcon ] && grep -Eq '^SELINUX=(enforcing|permissive)' /sysroot/etc/selinux/config 2> /dev/null; then # Files written to the upper layer before policy load are unlabeled. # Label only those, using globstar since the initramfs has no find. diff --git a/confluent_osdeploy/el9-diskless/profiles/default/scripts/imageboot.sh b/confluent_osdeploy/el9-diskless/profiles/default/scripts/imageboot.sh index c94b25f6..6c9fc7ee 100644 --- a/confluent_osdeploy/el9-diskless/profiles/default/scripts/imageboot.sh +++ b/confluent_osdeploy/el9-diskless/profiles/default/scripts/imageboot.sh @@ -161,6 +161,10 @@ if [ ${#machineid} -eq 32 ]; then echo $machineid > /sysroot/etc/machine-id chmod 444 /sysroot/etc/machine-id fi +# Do not autoactivate LVM on local disks unless the image sets auto_activation_volume_list +if [ -e /sysroot/etc/lvm/lvm.conf ] && ! grep -qs '^[[:space:]]*auto_activation_volume_list' /sysroot/etc/lvm/lvm.conf /sysroot/etc/lvm/lvmlocal.conf; then + printf 'activation {\n\tauto_activation_volume_list = []\n}\n' >> /sysroot/etc/lvm/lvmlocal.conf +fi rm -f /sysroot/etc/dracut.conf.d/diskless.conf # remove diskless dracut from runtime, to make kdump happier if [ -x /sysroot/usr/sbin/matchpathcon ] && grep -Eq '^SELINUX=(enforcing|permissive)' /sysroot/etc/selinux/config 2> /dev/null; then # Files written to /sysroot before policy load are unlabeled. diff --git a/confluent_osdeploy/suse15-diskless/profiles/default/scripts/imageboot.sh b/confluent_osdeploy/suse15-diskless/profiles/default/scripts/imageboot.sh index 5e077464..a83ba995 100644 --- a/confluent_osdeploy/suse15-diskless/profiles/default/scripts/imageboot.sh +++ b/confluent_osdeploy/suse15-diskless/profiles/default/scripts/imageboot.sh @@ -121,6 +121,10 @@ if [ ${#machineid} -eq 32 ]; then echo $machineid > /sysroot/etc/machine-id chmod 444 /sysroot/etc/machine-id fi +# Do not autoactivate LVM on local disks unless the image sets auto_activation_volume_list +if [ -e /sysroot/etc/lvm/lvm.conf ] && ! grep -qs '^[[:space:]]*auto_activation_volume_list' /sysroot/etc/lvm/lvm.conf /sysroot/etc/lvm/lvmlocal.conf; then + printf 'activation {\n\tauto_activation_volume_list = []\n}\n' >> /sysroot/etc/lvm/lvmlocal.conf +fi nameserversec=0 nameservers="" diff --git a/confluent_osdeploy/suse16-diskless/profiles/default/scripts/imageboot.sh b/confluent_osdeploy/suse16-diskless/profiles/default/scripts/imageboot.sh index 2c47b672..875421b1 100644 --- a/confluent_osdeploy/suse16-diskless/profiles/default/scripts/imageboot.sh +++ b/confluent_osdeploy/suse16-diskless/profiles/default/scripts/imageboot.sh @@ -121,6 +121,10 @@ if [ ${#machineid} -eq 32 ]; then echo $machineid > /sysroot/etc/machine-id chmod 444 /sysroot/etc/machine-id fi +# Do not autoactivate LVM on local disks unless the image sets auto_activation_volume_list +if [ -e /sysroot/etc/lvm/lvm.conf ] && ! grep -qs '^[[:space:]]*auto_activation_volume_list' /sysroot/etc/lvm/lvm.conf /sysroot/etc/lvm/lvmlocal.conf; then + printf 'activation {\n\tauto_activation_volume_list = []\n}\n' >> /sysroot/etc/lvm/lvmlocal.conf +fi # Hand NetworkManager the connection the initramfs is already using. Without # this it claims the interface on its own terms and the tethered root diff --git a/confluent_osdeploy/ubuntu20.04-diskless/initramfs/conf/conf.d/confluent b/confluent_osdeploy/ubuntu20.04-diskless/initramfs/conf/conf.d/confluent index 79787074..561880b0 100644 --- a/confluent_osdeploy/ubuntu20.04-diskless/initramfs/conf/conf.d/confluent +++ b/confluent_osdeploy/ubuntu20.04-diskless/initramfs/conf/conf.d/confluent @@ -7,3 +7,7 @@ if ! grep console= /proc/cmdline > /dev/null; then fi fi echo . /scripts/init-premount/confluent >> /scripts/init-premount/ORDER +# Same as imageboot.sh, but for the lvm2 udev rules in this initramfs +if [ -e /etc/lvm/lvm.conf ] && ! grep -qs '^[[:space:]]*auto_activation_volume_list' /etc/lvm/lvm.conf /etc/lvm/lvmlocal.conf; then + printf 'activation {\n\tauto_activation_volume_list = []\n}\n' >> /etc/lvm/lvmlocal.conf +fi diff --git a/confluent_osdeploy/ubuntu20.04-diskless/profiles/default/scripts/imageboot.sh b/confluent_osdeploy/ubuntu20.04-diskless/profiles/default/scripts/imageboot.sh index ef029575..3828e671 100644 --- a/confluent_osdeploy/ubuntu20.04-diskless/profiles/default/scripts/imageboot.sh +++ b/confluent_osdeploy/ubuntu20.04-diskless/profiles/default/scripts/imageboot.sh @@ -208,6 +208,10 @@ else hostname | sha512sum | head -c 32 > /sysroot/etc/machine-id fi echo >> /sysroot/etc/machine-id +# Do not autoactivate LVM on local disks unless the image sets auto_activation_volume_list +if [ -e /sysroot/etc/lvm/lvm.conf ] && ! grep -qs '^[[:space:]]*auto_activation_volume_list' /sysroot/etc/lvm/lvm.conf /sysroot/etc/lvm/lvmlocal.conf; then + printf 'activation {\n\tauto_activation_volume_list = []\n}\n' >> /sysroot/etc/lvm/lvmlocal.conf +fi ipv4=$(grep ^ipv4_address: /etc/confluent/confluent.deploycfg | awk '{print $2}') ipv4method=$(grep ^ipv4_method: /etc/confluent/confluent.deploycfg | awk '{print $2}') ipv4gateway=$(grep ^ipv4_gateway: /etc/confluent/confluent.deploycfg | awk '{print $2}')