summaryrefslogtreecommitdiffstats
path: root/install.d/50-dracut.install
diff options
context:
space:
mode:
Diffstat (limited to 'install.d/50-dracut.install')
-rwxr-xr-xinstall.d/50-dracut.install152
1 files changed, 57 insertions, 95 deletions
diff --git a/install.d/50-dracut.install b/install.d/50-dracut.install
index 441414a..14f8772 100755
--- a/install.d/50-dracut.install
+++ b/install.d/50-dracut.install
@@ -1,13 +1,13 @@
#!/bin/bash
-COMMAND="$1"
-KERNEL_VERSION="$2"
+COMMAND="${1:?}"
+KERNEL_VERSION="${2:?}"
+#shellcheck disable=SC2034
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
+# If the initrd was provided on the kernel command line, we shouldn't generate our own.
+if [[ "$COMMAND" != "add" || "$#" -gt 4 ]]; then
exit 0
fi
@@ -16,102 +16,64 @@ if [[ "$KERNEL_INSTALL_IMAGE_TYPE" = "uki" ]]; then
exit 0
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
- BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
- if [[ -z $KERNEL_INSTALL_UKI_GENERATOR || $KERNEL_INSTALL_UKI_GENERATOR == "dracut" ]]; then
- # No uki generator preference set or we have been chosen
- IMAGE="uki.efi"
- UEFI_OPTS="--uefi"
- elif [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then
- # We aren't the uki generator, but we have been requested to make the initrd
- IMAGE="initrd"
- UEFI_OPTS="--no-uefi"
- else
- exit 0
- fi
-elif [[ $KERNEL_INSTALL_LAYOUT == "bls" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
- BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
- if [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then
- IMAGE="initrd"
- UEFI_OPTS="--no-uefi"
- else
- exit 0
- fi
+if [[ "${KERNEL_INSTALL_INITRD_GENERATOR:-dracut}" = "dracut" ]]; then
+ # We are the initrd generator
+ IMAGE="initrd"
+ UEFI_OPTS="--no-uefi"
else
- # No layout information, use users --uefi/--no-uefi preference
- UEFI_OPTS=""
- if [[ -d $BOOT_DIR_ABS ]]; then
- IMAGE="initrd"
- else
- BOOT_DIR_ABS="/boot"
- IMAGE="initramfs-${KERNEL_VERSION}.img"
- fi
+ exit 0
fi
-ret=0
-
-case "$COMMAND" in
- add)
- if [[ $IMAGE == "uki.efi" ]]; then
- IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/uki.efi
- else
- IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd
- fi
- 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 [ -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
- else
- declare -a BOOT_OPTIONS
+if [[ "$KERNEL_INSTALL_UKI_GENERATOR" = "dracut" ]]; then
+ # We are chosen to generate the UKI as well as initrd
+ IMAGE="uki.efi"
+ UEFI_OPTS="--uefi"
+fi
- read -r -d '' -a line < /proc/cmdline
- for i in "${line[@]}"; do
- [[ ${i#initrd=*} != "$i" ]] && continue
- BOOT_OPTIONS+=("$i")
- done
- fi
+if [[ -f ${KERNEL_IMAGE%/*}/$IMAGE ]]; 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 "${KERNEL_IMAGE%/*}/$IMAGE" "$KERNEL_INSTALL_STAGING_AREA/$IMAGE" \
+ && chown root:root "$KERNEL_INSTALL_STAGING_AREA/$IMAGE" \
+ && chmod 0600 "$KERNEL_INSTALL_STAGING_AREA/$IMAGE" \
+ && exit 0
+fi
- unset noimageifnotneeded
+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
+else
+ declare -a BOOT_OPTIONS
- for ((i = 0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
- # shellcheck disable=SC1001
- if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
- noimageifnotneeded="yes"
- break
- fi
- done
+ read -r -d '' -a line < /proc/cmdline
+ for i in "${line[@]}"; do
+ [[ ${i#initrd=*} != "$i" ]] && continue
+ BOOT_OPTIONS+=("$i")
+ done
+fi
- # shellcheck disable=SC2046
- dracut -f \
- ${noimageifnotneeded:+--noimageifnotneeded} \
- $([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
- $([[ -n $KERNEL_IMAGE ]] && echo --kernel-image "$KERNEL_IMAGE") \
- "$UEFI_OPTS" \
- --kver "$KERNEL_VERSION" \
- "$BOOT_DIR_ABS/$IMAGE"
- ret=$?
- ;;
+unset noimageifnotneeded
- remove)
- rm -f -- "$BOOT_DIR_ABS/$IMAGE"
- ret=$?
- ;;
-esac
+for ((i = 0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
+ # shellcheck disable=SC1001
+ if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
+ noimageifnotneeded="yes"
+ break
+ fi
+done
-exit $ret
+# shellcheck disable=SC2046
+dracut -f \
+ ${noimageifnotneeded:+--noimageifnotneeded} \
+ $([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
+ $([[ -n $KERNEL_IMAGE ]] && echo --kernel-image "$KERNEL_IMAGE") \
+ "$UEFI_OPTS" \
+ --kver "$KERNEL_VERSION" \
+ "$KERNEL_INSTALL_STAGING_AREA/$IMAGE" || exit 1