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