#!/usr/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

if [[ -d "$BOOT_DIR_ABS" ]]; then
    INITRD="initrd"
else
    BOOT_DIR_ABS="/boot"
    INITRD="initramfs-${KERNEL_VERSION}.img"
fi

ret=0
case "$COMMAND" in
    add)
        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
        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
	dracut -f ${noimageifnotneeded:+--noimageifnotneeded} "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
        ret=$?
	;;
    remove)
        rm -f -- "$BOOT_DIR_ABS/$INITRD"
        ret=$?
	;;
esac
exit $ret
