]> git.ipfire.org Git - thirdparty/dracut.git/blame - install.d/50-dracut.install
fix(install.d): respect more kernel-install env variables
[thirdparty/dracut.git] / install.d / 50-dracut.install
CommitLineData
69395a52 1#!/bin/bash
9dd9d81f 2
ccb8ce04
HH
3COMMAND="$1"
4KERNEL_VERSION="$2"
5BOOT_DIR_ABS="$3"
6KERNEL_IMAGE="$4"
83bb0893 7
b71d162a
YW
8# If KERNEL_INSTALL_MACHINE_ID is defined but empty, BOOT_DIR_ABS is a fake directory.
9# So, let's skip to create initrd.
10if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then
11 exit 0
12fi
13
a037634a
AA
14# Mismatching the install layout and the --uefi/--no-uefi opts just creates a mess.
15if [[ "$KERNEL_INSTALL_LAYOUT" == "uki" && -n "$KERNEL_INSTALL_STAGING_AREA" ]]; then
16 BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
17 IMAGE="uki.efi"
18 UEFI_OPTS="--uefi"
19elif [[ "$KERNEL_INSTALL_LAYOUT" == "bls" && -n "$KERNEL_INSTALL_STAGING_AREA" ]]; then
20 BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
21 IMAGE="initrd"
22 UEFI_OPTS="--no-uefi"
b39b8452 23else
a037634a
AA
24 # No layout information, use users --uefi/--no-uefi preference
25 UEFI_OPTS=""
26 if [[ -d "$BOOT_DIR_ABS" ]]; then
27 IMAGE="initrd"
28 else
29 BOOT_DIR_ABS="/boot"
30 IMAGE="initramfs-${KERNEL_VERSION}.img"
31 fi
b39b8452
JMC
32fi
33
ccb8ce04
HH
34ret=0
35case "$COMMAND" in
36 add)
a037634a
AA
37 if [[ "$IMAGE" == "uki.efi" ]]; then
38 IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/uki.efi
39 else
40 IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd
41 fi
42 if [[ -f ${IMAGE_PREGENERATED} ]]; then
43 # we found an initrd or uki.efi at the same place as the kernel
bc140a0b 44 # use this and don't generate a new one
a037634a
AA
45 cp --reflink=auto "$IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$IMAGE" \
46 && chown root:root "$BOOT_DIR_ABS/$IMAGE" \
47 && chmod 0600 "$BOOT_DIR_ABS/$IMAGE" \
bc140a0b
HH
48 && exit 0
49 fi
50
ccb8ce04 51 if [[ -f /etc/kernel/cmdline ]]; then
a6018700 52 read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
a7d3ad67 53 elif [[ -f /usr/lib/kernel/cmdline ]]; then
a6018700 54 read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
38b4f4b2 55 else
b1c5cae6
ZJS
56 declare -a BOOT_OPTIONS
57
58 read -r -d '' -a line < /proc/cmdline
59 for i in "${line[@]}"; do
60 [[ "${i#initrd=*}" != "$i" ]] && continue
61 BOOT_OPTIONS+=("$i")
62 done
ccb8ce04 63 fi
83bb0893 64
ccb8ce04 65 unset noimageifnotneeded
83bb0893 66
ccb8ce04 67 for ((i=0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
95013ffc 68 # shellcheck disable=SC1001
ccb8ce04
HH
69 if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
70 noimageifnotneeded="yes"
71 break
72 fi
73 done
846a8453
DDM
74
75 dracut -f \
76 ${noimageifnotneeded:+--noimageifnotneeded} \
77 $([[ "$KERNEL_INSTALL_VERBOSE" == 1 ]] && echo --verbose) \
a037634a
AA
78 $([[ -n "$KERNEL_IMAGE" ]] && echo --kernel-image "${KERNEL_IMAGE}") \
79 "$UEFI_OPTS" \
80 "$BOOT_DIR_ABS/$IMAGE" \
846a8453 81 "$KERNEL_VERSION"
9dd9d81f
HH
82 ret=$?
83 ;;
84 remove)
a037634a 85 rm -f -- "$BOOT_DIR_ABS/$IMAGE"
9dd9d81f
HH
86 ret=$?
87 ;;
88esac
89exit $ret