]>
Commit | Line | Data |
---|---|---|
69395a52 | 1 | #!/bin/bash |
9dd9d81f | 2 | |
ccb8ce04 HH |
3 | COMMAND="$1" |
4 | KERNEL_VERSION="$2" | |
5 | BOOT_DIR_ABS="$3" | |
6 | KERNEL_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. | |
10 | if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then | |
11 | exit 0 | |
12 | fi | |
13 | ||
b2af8c8b VK |
14 | # Do not attempt to create initramfs if the supplied image is already a UKI |
15 | if [[ "$KERNEL_INSTALL_IMAGE_TYPE" = "uki" ]]; then | |
16 | exit 0 | |
17 | fi | |
18 | ||
a037634a | 19 | # Mismatching the install layout and the --uefi/--no-uefi opts just creates a mess. |
17b8649e | 20 | if [[ $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 | 33 | elif [[ $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 | 41 | else |
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 |
50 | fi |
51 | ||
ccb8ce04 | 52 | ret=0 |
17b8649e | 53 | |
ccb8ce04 HH |
54 | case "$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 | 115 | esac |
17b8649e | 116 | |
9dd9d81f | 117 | exit $ret |