ec3ccd
From f47bcdd7342ca0d46b889e712a1c7446e18434bc Mon Sep 17 00:00:00 2001
ec3ccd
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
ec3ccd
Date: Tue, 18 Jan 2022 18:08:42 +0100
ec3ccd
Subject: [PATCH 1/2] feat(kernel-install): do nothing when
ec3ccd
 $KERNEL_INSTALL_INITRD_GENERATOR says so
ec3ccd
ec3ccd
dracut may be installed without being actually used. This is very common in
ec3ccd
binary distros where a package may be pulled in through dependencies, even
ec3ccd
though the user does not need it in a particular setup. KERNEL_INSTALL_INITRD_GENERATOR
ec3ccd
is being added in systemd's kernel-install to select which of the possibly many
ec3ccd
initrd generation mechanisms will be used.
ec3ccd
ec3ccd
For backwards compat, if it not set, continue as before. But if set to
ec3ccd
something else, skip our kernel-install plugins.
ec3ccd
---
ec3ccd
 install.d/50-dracut.install        | 8 +++++++-
ec3ccd
 install.d/51-dracut-rescue.install | 5 +++++
ec3ccd
 2 files changed, 12 insertions(+), 1 deletion(-)
ec3ccd
ec3ccd
diff --git a/install.d/50-dracut.install b/install.d/50-dracut.install
ec3ccd
index 70632ec7f..552fd0338 100755
ec3ccd
--- a/install.d/50-dracut.install
ec3ccd
+++ b/install.d/50-dracut.install
ec3ccd
@@ -6,11 +6,17 @@ BOOT_DIR_ABS="$3"
ec3ccd
 KERNEL_IMAGE="$4"
ec3ccd
 
ec3ccd
 # If KERNEL_INSTALL_MACHINE_ID is defined but empty, BOOT_DIR_ABS is a fake directory.
ec3ccd
-# So, let's skip to create initrd.
ec3ccd
+# In this case, do not create the initrd.
ec3ccd
 if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then
ec3ccd
     exit 0
ec3ccd
 fi
ec3ccd
 
ec3ccd
+# Skip this plugin if we're using a different generator. If nothing is specified,
ec3ccd
+# assume we're wanted since we're installed.
ec3ccd
+if [ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" != "dracut" ]; then
ec3ccd
+    exit 0
ec3ccd
+fi
ec3ccd
+
ec3ccd
 if [[ -d "$BOOT_DIR_ABS" ]]; then
ec3ccd
     INITRD="initrd"
ec3ccd
 else
ec3ccd
diff --git a/install.d/51-dracut-rescue.install b/install.d/51-dracut-rescue.install
ec3ccd
index 8bf9a6d95..93483931a 100755
ec3ccd
--- a/install.d/51-dracut-rescue.install
ec3ccd
+++ b/install.d/51-dracut-rescue.install
ec3ccd
@@ -7,6 +7,11 @@ KERNEL_VERSION="$2"
ec3ccd
 BOOT_DIR_ABS="${3%/*}/0-rescue"
ec3ccd
 KERNEL_IMAGE="$4"
ec3ccd
 
ec3ccd
+# Skip this plugin if we're using a different generator. If nothing is specified,
ec3ccd
+# assume we're wanted since we're installed.
ec3ccd
+if [ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" != "dracut" ]; then
ec3ccd
+    exit 0
ec3ccd
+fi
ec3ccd
 
ec3ccd
 dropindirs_sort()
ec3ccd
 {
ec3ccd
ec3ccd
From 0b72cf5c4eca0e0db76e3e210cfdc48e6b49bb74 Mon Sep 17 00:00:00 2001
ec3ccd
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
ec3ccd
Date: Tue, 18 Jan 2022 18:58:58 +0100
ec3ccd
Subject: [PATCH 2/2] fix(kernel-install): do not generate an initrd when one
ec3ccd
 was specified
ec3ccd
ec3ccd
According to the synopsis, kernel-install can be called with an
ec3ccd
already-prepared initrd. In that case, no initrd should be generated by dracut.
ec3ccd
---
ec3ccd
 install.d/50-dracut.install | 4 ++++
ec3ccd
 1 file changed, 4 insertions(+)
ec3ccd
ec3ccd
diff --git a/install.d/50-dracut.install b/install.d/50-dracut.install
ec3ccd
index 552fd0338..836251e92 100755
ec3ccd
--- a/install.d/50-dracut.install
ec3ccd
+++ b/install.d/50-dracut.install
ec3ccd
@@ -4,6 +4,7 @@ COMMAND="$1"
ec3ccd
 KERNEL_VERSION="$2"
ec3ccd
 BOOT_DIR_ABS="$3"
ec3ccd
 KERNEL_IMAGE="$4"
ec3ccd
+INITRD_OPTIONS_SHIFT=4
ec3ccd
 
ec3ccd
 # If KERNEL_INSTALL_MACHINE_ID is defined but empty, BOOT_DIR_ABS is a fake directory.
ec3ccd
 # In this case, do not create the initrd.
ec3ccd
@@ -27,6 +28,9 @@ fi
ec3ccd
 ret=0
ec3ccd
 case "$COMMAND" in
ec3ccd
     add)
ec3ccd
+        # If the initrd was provided on the kernel command line, we shouldn't generate our own.
ec3ccd
+        [ "$#" -gt "$INITRD_OPTIONS_SHIFT" ] && exit 0
ec3ccd
+
ec3ccd
         INITRD_IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd
ec3ccd
         if [[ -f ${INITRD_IMAGE_PREGENERATED} ]]; then
ec3ccd
             # we found an initrd at the same place as the kernel