]> git.ipfire.org Git - thirdparty/dracut.git/blobdiff - 50-dracut.install
dracut-install: Add support for compressed kernel modules
[thirdparty/dracut.git] / 50-dracut.install
index d05abb9a577922ddffac5740bda8fa63c2b5a729..bbb73442b7e12ee4c82fc14616541a001d4d7503 100755 (executable)
@@ -1,10 +1,23 @@
-#!/bin/sh
+#!/bin/bash
 
 COMMAND="$1"
 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,20 +25,20 @@ 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 "$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
 
         if [[ -f /etc/kernel/cmdline ]]; then
-            readarray -t BOOT_OPTIONS < /etc/kernel/cmdline
+            read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
         elif [[ -f /usr/lib/kernel/cmdline ]]; then
-            readarray -t BOOT_OPTIONS < /usr/lib/kernel/cmdline
+            read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
         fi
 
-        if ! [[ "${BOOT_OPTIONS[@]}" ]]; then
-            read -ar BOOT_OPTIONS < /proc/cmdline
+        if ! [[ ${BOOT_OPTIONS[*]} ]]; then
+            read -r -d '' -a BOOT_OPTIONS < /proc/cmdline
         fi
 
         unset noimageifnotneeded
@@ -36,11 +49,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