#!/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 # Do not attempt to create initramfs if the supplied image is already a UKI 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 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 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 read -r -d '' -a line < /proc/cmdline for i in "${line[@]}"; do [[ ${i#initrd=*} != "$i" ]] && continue BOOT_OPTIONS+=("$i") done fi unset noimageifnotneeded for ((i = 0; i < "${#BOOT_OPTIONS[@]}"; i++)); do # shellcheck disable=SC1001 if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then noimageifnotneeded="yes" break fi done # 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=$? ;; remove) rm -f -- "$BOOT_DIR_ABS/$IMAGE" ret=$? ;; esac exit $ret