70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash
 | |
| 
 | |
| COMMAND="$1"
 | |
| KERNEL_VERSION="$2"
 | |
| BOOT_DIR_ABS="$3"
 | |
| KERNEL_IMAGE="$4"
 | |
| 
 | |
| # Read the optional config file for automation
 | |
| [[ -f /etc/kernel-install-for-dracut.conf ]] && source /etc/kernel-install-for-dracut.conf
 | |
| 
 | |
| # 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_QUIET} == "true" ]] && DRACUT_EXTRA_PARAMS=" --quiet"
 | |
|         dracut --hostonly --no-hostonly-cmdline -f${DRACUT_EXTRA_PARAMS} ${noimageifnotneeded:+--noimageifnotneeded} "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
 | |
|         ret=$?
 | |
| 	;;
 | |
|     remove)
 | |
|         rm -f -- "$BOOT_DIR_ABS/$INITRD"
 | |
|         ret=$?
 | |
| 	;;
 | |
| esac
 | |
| exit $ret
 |