diff options
Diffstat (limited to 'install.d/50-dracut.install')
-rwxr-xr-x | install.d/50-dracut.install | 152 |
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 |