]> git.ipfire.org Git - thirdparty/dracut.git/blobdiff - 50-dracut.install
network-manager: remove useless use of basename
[thirdparty/dracut.git] / 50-dracut.install
index a0623a1c380882f404d042deb9afefbe2b399800..bbb73442b7e12ee4c82fc14616541a001d4d7503 100755 (executable)
@@ -1,32 +1,59 @@
-#!/bin/sh
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
-# ex: ts=8 sw=4 sts=4 et filetype=sh
+#!/bin/bash
 
-if [[ -f /etc/kernel/cmdline ]]; then
-    readarray -t BOOT_OPTIONS < /etc/kernel/cmdline
-fi
+COMMAND="$1"
+KERNEL_VERSION="$2"
+BOOT_DIR_ABS="$3"
+KERNEL_IMAGE="$4"
 
-if ! [[ "${BOOT_OPTIONS[@]}" ]]; then
-    readarray -t BOOT_OPTIONS < /proc/cmdline
+# 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
 
-unset noimageifnotneeded
-
-for ((i=0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
-    if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
-        noimageifnotneeded="yes"
-        break
-    fi
-done
+if [[ -d "$BOOT_DIR_ABS" ]]; then
+    INITRD="initrd"
+else
+    BOOT_DIR_ABS="/boot"
+    INITRD="initramfs-${KERNEL_VERSION}.img"
+fi
 
 ret=0
-case "$1" in
+case "$COMMAND" in
     add)
-       dracut ${noimageifnotneeded+--noimageifnotneeded} "$3"/initrd "$2"
+        INITRD_IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd
+        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" \
+                && exit 0
+        fi
+
+        if [[ -f /etc/kernel/cmdline ]]; then
+            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
+
+        if ! [[ ${BOOT_OPTIONS[*]} ]]; then
+            read -r -d '' -a BOOT_OPTIONS < /proc/cmdline
+        fi
+
+        unset noimageifnotneeded
+
+        for ((i=0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
+            if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
+                noimageifnotneeded="yes"
+                break
+            fi
+        done
+       dracut -f ${noimageifnotneeded:+--noimageifnotneeded} "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
         ret=$?
        ;;
     remove)
-        rm -f -- "$3"/initrd
+        rm -f -- "$BOOT_DIR_ABS/$INITRD"
         ret=$?
        ;;
 esac