From 0d2983f7dbc1f5fbaa60735c839ea111d3f5d4e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 18 Jan 2022 18:08:42 +0100 Subject: [PATCH 03/32] feat(kernel-install): do nothing when $KERNEL_INSTALL_INITRD_GENERATOR says so dracut may be installed without being actually used. This is very common in binary distros where a package may be pulled in through dependencies, even though the user does not need it in a particular setup. KERNEL_INSTALL_INITRD_GENERATOR is being added in systemd's kernel-install to select which of the possibly many initrd generation mechanisms will be used. For backwards compat, if it not set, continue as before. But if set to something else, skip our kernel-install plugins. (Cherry-picked commit f47bcdd7342ca0d46b889e712a1c7446e18434bc from PR#1825) --- install.d/50-dracut.install | 31 ++++++------------------------ install.d/51-dracut-rescue.install | 12 +++++++++--- 2 files changed, 15 insertions(+), 28 deletions(-) diff --git a/install.d/50-dracut.install b/install.d/50-dracut.install index 441414ac..efb184cd 100755 --- a/install.d/50-dracut.install +++ b/install.d/50-dracut.install @@ -6,38 +6,19 @@ BOOT_DIR_ABS="$3" KERNEL_IMAGE="$4" # If KERNEL_INSTALL_MACHINE_ID is defined but empty, BOOT_DIR_ABS is a fake directory. -# So, let's skip to create initrd. +# In this case, do not create the initrd. if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then exit 0 fi -# Do not attempt to create initramfs if the supplied image is already a UKI -if [[ "$KERNEL_INSTALL_IMAGE_TYPE" = "uki" ]]; then +# Skip this plugin if we're using a different generator. If nothing is specified, +# assume we're wanted since we're installed. +if [ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" != "dracut" ]; then exit 0 fi -# Mismatching the install layout and the --uefi/--no-uefi opts just creates a mess. -if [[ $KERNEL_INSTALL_LAYOUT == "uki" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then - BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA" - if [[ -z $KERNEL_INSTALL_UKI_GENERATOR || $KERNEL_INSTALL_UKI_GENERATOR == "dracut" ]]; then - # No uki generator preference set or we have been chosen - IMAGE="uki.efi" - UEFI_OPTS="--uefi" - elif [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then - # We aren't the uki generator, but we have been requested to make the initrd - IMAGE="initrd" - UEFI_OPTS="--no-uefi" - else - exit 0 - fi -elif [[ $KERNEL_INSTALL_LAYOUT == "bls" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then - BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA" - if [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then - IMAGE="initrd" - UEFI_OPTS="--no-uefi" - else - exit 0 - fi +if [[ -d "$BOOT_DIR_ABS" ]]; then + INITRD="initrd" else # No layout information, use users --uefi/--no-uefi preference UEFI_OPTS="" diff --git a/install.d/51-dracut-rescue.install b/install.d/51-dracut-rescue.install index aa0ccdc5..be4172b5 100755 --- a/install.d/51-dracut-rescue.install +++ b/install.d/51-dracut-rescue.install @@ -7,9 +7,15 @@ KERNEL_VERSION="$2" BOOT_DIR_ABS="${3%/*}/0-rescue" KERNEL_IMAGE="$4" -dropindirs_sort() { - suffix=$1 - shift +# Skip this plugin if we're using a different generator. If nothing is specified, +# assume we're wanted since we're installed. +if [ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" != "dracut" ]; then + exit 0 +fi + +dropindirs_sort() +{ + suffix=$1; shift args=("$@") files=$( while (($# > 0)); do -- 2.42.0