]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix(install.d): respect even more kernel-install vars, plus style fixes
authorAndrew Ammerlaan <andrewammerlaan@gentoo.org>
Thu, 22 Jun 2023 07:45:36 +0000 (09:45 +0200)
committerAntonio Álvarez Feijoo <antonio.feijoo@suse.com>
Mon, 26 Jun 2023 07:39:24 +0000 (09:39 +0200)
- More verbose with KERNEL_INSTALL_VERBOSE=1

- Use KERNEL_INSTALL_CONF_ROOT if defined

- Fallback to /usr/lib/os-release if /etc/os-release does not exist

- Fallback to "Linux $KERNEL_VERSION" if no PRETTY_NAME found

- Styling fixes

Co-authored-by: Antonio Alvarez Feijoo <antonio.feijoo@suse.com>
Signed-off-by: Andrew Ammerlaan <andrewammerlaan@gentoo.org>
install.d/50-dracut.install
install.d/51-dracut-rescue.install

index eae3084974074740c3fbc3deeb1d32def47c5222..1caa2d7cac73795af087f26018d507dbb8e7bf0a 100755 (executable)
@@ -12,18 +12,18 @@ if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then
 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
+if [[ $KERNEL_INSTALL_LAYOUT == "uki" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
     BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
     IMAGE="uki.efi"
     UEFI_OPTS="--uefi"
-elif [[ "$KERNEL_INSTALL_LAYOUT" == "bls" && -n "$KERNEL_INSTALL_STAGING_AREA" ]]; then
+elif [[ $KERNEL_INSTALL_LAYOUT == "bls" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
     BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
     IMAGE="initrd"
     UEFI_OPTS="--no-uefi"
 else
     # No layout information, use users --uefi/--no-uefi preference
     UEFI_OPTS=""
-    if [[ -d "$BOOT_DIR_ABS" ]]; then
+    if [[ -d $BOOT_DIR_ABS ]]; then
         IMAGE="initrd"
     else
         BOOT_DIR_ABS="/boot"
@@ -32,9 +32,10 @@ else
 fi
 
 ret=0
+
 case "$COMMAND" in
     add)
-        if [[ "$IMAGE" == "uki.efi" ]]; then
+        if [[ $IMAGE == "uki.efi" ]]; then
             IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/uki.efi
         else
             IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd
@@ -42,13 +43,19 @@ case "$COMMAND" in
         if [[ -f ${IMAGE_PREGENERATED} ]]; then
             # we found an initrd or uki.efi at the same place as the kernel
             # use this and don't generate a new one
+            [[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo \
+                "There is an ${IMAGE} image at the same place as the kernel, skipping generating a new one"
             cp --reflink=auto "$IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$IMAGE" \
                 && chown root:root "$BOOT_DIR_ABS/$IMAGE" \
                 && chmod 0600 "$BOOT_DIR_ABS/$IMAGE" \
                 && exit 0
         fi
 
-        if [[ -f /etc/kernel/cmdline ]]; then
+        if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
+            if [ -f "$KERNEL_INSTALL_CONF_ROOT/cmdline" ]; then
+                read -r -d '' -a BOOT_OPTIONS < "$KERNEL_INSTALL_CONF_ROOT/cmdline"
+            fi
+        elif [[ -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
@@ -57,14 +64,14 @@ case "$COMMAND" in
 
             read -r -d '' -a line < /proc/cmdline
             for i in "${line[@]}"; do
-                [[ "${i#initrd=*}" != "$i" ]] && continue
+                [[ ${i#initrd=*} != "$i" ]] && continue
                 BOOT_OPTIONS+=("$i")
             done
         fi
 
         unset noimageifnotneeded
 
-        for ((i=0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
+        for ((i = 0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
             # shellcheck disable=SC1001
             if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
                 noimageifnotneeded="yes"
@@ -72,18 +79,21 @@ case "$COMMAND" in
             fi
         done
 
+        # shellcheck disable=SC2046
         dracut -f \
             ${noimageifnotneeded:+--noimageifnotneeded} \
-            $([[ "$KERNEL_INSTALL_VERBOSE" == 1 ]] && echo --verbose) \
-            $([[ -n "$KERNEL_IMAGE" ]] && echo --kernel-image "${KERNEL_IMAGE}") \
+            $([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
+            $([[ -n $KERNEL_IMAGE ]] && echo --kernel-image "$KERNEL_IMAGE") \
             "$UEFI_OPTS" \
-            "$BOOT_DIR_ABS/$IMAGE" \
-            "$KERNEL_VERSION"
+            --kver "$KERNEL_VERSION" \
+            "$BOOT_DIR_ABS/$IMAGE"
         ret=$?
-       ;;
+        ;;
+
     remove)
         rm -f -- "$BOOT_DIR_ABS/$IMAGE"
         ret=$?
-       ;;
+        ;;
 esac
+
 exit $ret
index 562ffcbd7bbb1a582984a7bb355fea1c79f3d99c..2b16818747c7124fc278195713ac7a686c21754c 100755 (executable)
@@ -7,13 +7,12 @@ KERNEL_VERSION="$2"
 BOOT_DIR_ABS="${3%/*}/0-rescue"
 KERNEL_IMAGE="$4"
 
-
-dropindirs_sort()
-{
-    suffix=$1; shift
+dropindirs_sort() {
+    suffix=$1
+    shift
     args=("$@")
     files=$(
-        while (( $# > 0 )); do
+        while (($# > 0)); do
             for i in "${1}"/*"${suffix}"; do
                 [[ -f $i ]] && echo "${i##*/}"
             done
@@ -31,11 +30,17 @@ dropindirs_sort()
     done
 }
 
-[[ -f /etc/os-release ]] && . /etc/os-release
+if [[ -f /etc/os-release ]]; then
+    . /etc/os-release
+elif [[ -f /usr/lib/os-release ]]; then
+    . /usr/lib/os-release
+fi
+
+[[ -n $PRETTY_NAME ]] || PRETTY_NAME="Linux $KERNEL_VERSION"
 
 if [[ ${KERNEL_INSTALL_MACHINE_ID+x} ]]; then
     MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
-elif [[ -f /etc/machine-id ]] ; then
+elif [[ -f /etc/machine-id ]]; then
     read -r MACHINE_ID < /etc/machine-id
 fi
 
@@ -43,7 +48,11 @@ if ! [[ $MACHINE_ID ]]; then
     exit 0
 fi
 
-if [[ -f /etc/kernel/cmdline ]]; then
+if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
+    if [ -f "$KERNEL_INSTALL_CONF_ROOT/cmdline" ]; then
+        read -r -d '' -a BOOT_OPTIONS < "$KERNEL_INSTALL_CONF_ROOT/cmdline"
+    fi
+elif [[ -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
@@ -52,14 +61,14 @@ else
 
     read -r -d '' -a line < /proc/cmdline
     for i in "${line[@]}"; do
-        [[ "${i#initrd=*}" != "$i" ]] && continue
+        [[ ${i#initrd=*} != "$i" ]] && continue
         BOOT_OPTIONS+=("$i")
     done
 fi
 
-if [[ -d "${BOOT_DIR_ABS%/*}" ]]; then
+if [[ -d ${BOOT_DIR_ABS%/*} ]]; then
     BOOT_DIR="/${MACHINE_ID}/0-rescue"
-    BOOT_ROOT=${BOOT_DIR_ABS%$BOOT_DIR}
+    BOOT_ROOT=${BOOT_DIR_ABS%"$BOOT_DIR"}
     LOADER_ENTRY="$BOOT_ROOT/loader/entries/${MACHINE_ID}-0-rescue.conf"
     KERNEL="linux"
     INITRD="initrd"
@@ -75,8 +84,12 @@ ret=0
 
 case "$COMMAND" in
     add)
-        [[ -f "$LOADER_ENTRY" ]] && [[ -f "$BOOT_DIR_ABS/$KERNEL" ]] \
-            && [[ -f "$BOOT_DIR_ABS/$INITRD" ]] && exit 0
+        if [[ -f $LOADER_ENTRY ]] && [[ -f "$BOOT_DIR_ABS/$KERNEL" ]] \
+            && [[ -f "$BOOT_DIR_ABS/$INITRD" ]]; then
+            [[ $KERNEL_INSTALL_VERBOSE == 1 ]] \
+                && echo "Skipping, there is already a rescue image generated with the same input parameters"
+            exit 0
+        fi
 
         # source our config dir
         for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do
@@ -87,22 +100,30 @@ case "$COMMAND" in
         done
 
         # shellcheck disable=SC2154
-        [[ $dracut_rescue_image != "yes" ]] && exit 0
+        if [[ $dracut_rescue_image != "yes" ]]; then
+            [[ $KERNEL_INSTALL_VERBOSE == 1 ]] \
+                && echo "Skipping, 'dracut_rescue_image' not set to 'yes' in any dracut configuration file"
+            exit 0
+        fi
 
-        [[ -d "$BOOT_DIR_ABS" ]] || mkdir -p "$BOOT_DIR_ABS"
+        [[ -d $BOOT_DIR_ABS ]] || mkdir -p "$BOOT_DIR_ABS"
 
         if ! cp --reflink=auto "$KERNEL_IMAGE" "$BOOT_DIR_ABS/$KERNEL"; then
             echo "Can't copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/$KERNEL'!" >&2
         fi
 
         if [[ ! -f "$BOOT_DIR_ABS/$INITRD" ]]; then
+            # shellcheck disable=SC2046
             dracut -f --no-hostonly --no-uefi \
-                $([[ -n "$KERNEL_IMAGE" ]] && echo --kernel-image "${KERNEL_IMAGE}") \
-                -a "rescue" "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
-            ((ret+=$?))
+                -a "rescue" \
+                $([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
+                --kver "$KERNEL_VERSION" \
+                "$BOOT_DIR_ABS/$INITRD"
+            ((ret += $?))
         fi
 
-        if [[ "${BOOT_DIR_ABS}" != "/boot" ]]; then
+        [[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo "Creating $LOADER_ENTRY"
+        if [[ ${BOOT_DIR_ABS} != "/boot" ]]; then
             {
                 echo "title      $PRETTY_NAME - Rescue Image"
                 echo "version    $KERNEL_VERSION"
@@ -120,16 +141,13 @@ case "$COMMAND" in
             sed -i "s/${KERNEL_VERSION}/0-rescue-${MACHINE_ID}/" "$LOADER_ENTRY"
         fi
 
-        ((ret+=$?))
+        ((ret += $?))
         ;;
 
     remove)
         exit 0
         ;;
 
-    *)
-        usage
-        ret=1;;
 esac
 
 exit $ret