]> git.ipfire.org Git - thirdparty/dracut.git/blobdiff - 50-dracut.install
multipath: require kpartx binary
[thirdparty/dracut.git] / 50-dracut.install
index 54c71d4ec5bd59a0b8b6741afbbc81e9f558d3c8..7ea5e170e60877e646bef8cc3736072aa2f72681 100755 (executable)
@@ -5,6 +5,19 @@ KERNEL_VERSION="$2"
 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.
+if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then
+    exit 0
+fi
+
+if [[ -d "$BOOT_DIR_ABS" ]]; then
+    INITRD="initrd"
+else
+    BOOT_DIR_ABS="/boot"
+    INITRD="initramfs-${KERNEL_VERSION}.img"
+fi
+
 ret=0
 case "$COMMAND" in
     add)
@@ -12,9 +25,9 @@ case "$COMMAND" in
         if [[ -f ${INITRD_IMAGE_PREGENERATED} ]]; then
             # we found an initrd at the same place as the kernel
             # use this and don't generate a new one
-            cp --reflink=auto "$INITRD_IMAGE_PREGENERATED" "$BOOT_DIR_ABS/initrd" \
-                && chown root:root "$BOOT_DIR_ABS/initrd" \
-                && chmod 0600 "$BOOT_DIR_ABS/initrd" \
+            cp --reflink=auto "$INITRD_IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$INITRD" \
+                && chown root:root "$BOOT_DIR_ABS/$INITRD" \
+                && chmod 0600 "$BOOT_DIR_ABS/$INITRD" \
                 && exit 0
         fi
 
@@ -22,10 +35,14 @@ case "$COMMAND" in
             read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
         elif [[ -f /usr/lib/kernel/cmdline ]]; then
             read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
-        fi
+        else
+            declare -a BOOT_OPTIONS
 
-        if ! [[ ${BOOT_OPTIONS[*]} ]]; then
-            read -r -d '' -a BOOT_OPTIONS < /proc/cmdline
+            read -r -d '' -a line < /proc/cmdline
+            for i in "${line[@]}"; do
+                [[ "${i#initrd=*}" != "$i" ]] && continue
+                BOOT_OPTIONS+=("$i")
+            done
         fi
 
         unset noimageifnotneeded
@@ -36,11 +53,11 @@ case "$COMMAND" in
                 break
             fi
         done
-       dracut ${noimageifnotneeded:+--noimageifnotneeded} "$BOOT_DIR_ABS"/initrd "$KERNEL_VERSION"
+       dracut -f ${noimageifnotneeded:+--noimageifnotneeded} "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
         ret=$?
        ;;
     remove)
-        rm -f -- "$BOOT_DIR_ABS"/initrd
+        rm -f -- "$BOOT_DIR_ABS/$INITRD"
         ret=$?
        ;;
 esac