]> git.ipfire.org Git - thirdparty/dracut.git/blame - install.d/50-dracut.install
fix(install.d): do not create initramfs if the supplied image is UKI
[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
b2af8c8b
VK
14# Do not attempt to create initramfs if the supplied image is already a UKI
15if [[ "$KERNEL_INSTALL_IMAGE_TYPE" = "uki" ]]; then
16 exit 0
17fi
18
a037634a 19# Mismatching the install layout and the --uefi/--no-uefi opts just creates a mess.
17b8649e 20if [[ $KERNEL_INSTALL_LAYOUT == "uki" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
a037634a 21 BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
16645633
AA
22 if [[ -z $KERNEL_INSTALL_UKI_GENERATOR || $KERNEL_INSTALL_UKI_GENERATOR == "dracut" ]]; then
23 # No uki generator preference set or we have been chosen
24 IMAGE="uki.efi"
25 UEFI_OPTS="--uefi"
26 elif [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then
27 # We aren't the uki generator, but we have been requested to make the initrd
28 IMAGE="initrd"
29 UEFI_OPTS="--no-uefi"
30 else
31 exit 0
32 fi
17b8649e 33elif [[ $KERNEL_INSTALL_LAYOUT == "bls" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
a037634a 34 BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
16645633
AA
35 if [[ -z $KERNEL_INSTALL_INITRD_GENERATOR || $KERNEL_INSTALL_INITRD_GENERATOR == "dracut" ]]; then
36 IMAGE="initrd"
37 UEFI_OPTS="--no-uefi"
38 else
39 exit 0
40 fi
b39b8452 41else
a037634a
AA
42 # No layout information, use users --uefi/--no-uefi preference
43 UEFI_OPTS=""
17b8649e 44 if [[ -d $BOOT_DIR_ABS ]]; then
a037634a
AA
45 IMAGE="initrd"
46 else
47 BOOT_DIR_ABS="/boot"
48 IMAGE="initramfs-${KERNEL_VERSION}.img"
49 fi
b39b8452
JMC
50fi
51
ccb8ce04 52ret=0
17b8649e 53
ccb8ce04
HH
54case "$COMMAND" in
55 add)
17b8649e 56 if [[ $IMAGE == "uki.efi" ]]; then
a037634a
AA
57 IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/uki.efi
58 else
59 IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd
60 fi
61 if [[ -f ${IMAGE_PREGENERATED} ]]; then
62 # we found an initrd or uki.efi at the same place as the kernel
bc140a0b 63 # use this and don't generate a new one
17b8649e
AA
64 [[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo \
65 "There is an ${IMAGE} image at the same place as the kernel, skipping generating a new one"
a037634a
AA
66 cp --reflink=auto "$IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$IMAGE" \
67 && chown root:root "$BOOT_DIR_ABS/$IMAGE" \
68 && chmod 0600 "$BOOT_DIR_ABS/$IMAGE" \
bc140a0b
HH
69 && exit 0
70 fi
71
17b8649e
AA
72 if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
73 if [ -f "$KERNEL_INSTALL_CONF_ROOT/cmdline" ]; then
74 read -r -d '' -a BOOT_OPTIONS < "$KERNEL_INSTALL_CONF_ROOT/cmdline"
75 fi
76 elif [[ -f /etc/kernel/cmdline ]]; then
a6018700 77 read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
a7d3ad67 78 elif [[ -f /usr/lib/kernel/cmdline ]]; then
a6018700 79 read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
38b4f4b2 80 else
b1c5cae6
ZJS
81 declare -a BOOT_OPTIONS
82
83 read -r -d '' -a line < /proc/cmdline
84 for i in "${line[@]}"; do
17b8649e 85 [[ ${i#initrd=*} != "$i" ]] && continue
b1c5cae6
ZJS
86 BOOT_OPTIONS+=("$i")
87 done
ccb8ce04 88 fi
83bb0893 89
ccb8ce04 90 unset noimageifnotneeded
83bb0893 91
17b8649e 92 for ((i = 0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
95013ffc 93 # shellcheck disable=SC1001
ccb8ce04
HH
94 if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
95 noimageifnotneeded="yes"
96 break
97 fi
98 done
846a8453 99
17b8649e 100 # shellcheck disable=SC2046
846a8453
DDM
101 dracut -f \
102 ${noimageifnotneeded:+--noimageifnotneeded} \
17b8649e
AA
103 $([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
104 $([[ -n $KERNEL_IMAGE ]] && echo --kernel-image "$KERNEL_IMAGE") \
a037634a 105 "$UEFI_OPTS" \
17b8649e
AA
106 --kver "$KERNEL_VERSION" \
107 "$BOOT_DIR_ABS/$IMAGE"
9dd9d81f 108 ret=$?
17b8649e
AA
109 ;;
110
9dd9d81f 111 remove)
a037634a 112 rm -f -- "$BOOT_DIR_ABS/$IMAGE"
9dd9d81f 113 ret=$?
17b8649e 114 ;;
9dd9d81f 115esac
17b8649e 116
9dd9d81f 117exit $ret