]>
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 | ||
a037634a AA |
14 | # Mismatching the install layout and the --uefi/--no-uefi opts just creates a mess. |
15 | if [[ "$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" | |
19 | elif [[ "$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 | 23 | else |
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 |
32 | fi |
33 | ||
ccb8ce04 HH |
34 | ret=0 |
35 | case "$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 | ;; | |
88 | esac | |
89 | exit $ret |