-
Notifications
You must be signed in to change notification settings - Fork 292
/
dracut_unified_kernel_install.sh
executable file
路74 lines (65 loc) 路 2.21 KB
/
dracut_unified_kernel_install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash -e
COMMAND="$1"
KERNEL_VERSION="$2"
BOOT_DIR_ABS="$3"
KERNEL_IMAGE="$4"
# If KERNEL_INSTALL_MACHINE_ID is defined but empty, BOOT_DIR_ABS is a fake directory so let's skip creating
# the unified kernel image.
if [[ -z "${KERNEL_INSTALL_MACHINE_ID-unset}" ]]; then
exit 0
fi
# Strip machine ID and kernel version to get the boot directory.
PREFIX=$(dirname "$(dirname "$BOOT_DIR_ABS")")
# Pick a default prefix name for the unified kernel binary
if [[ -n "$IMAGE_ID" ]] ; then
if [[ -n "$IMAGE_VERSION" ]]; then
PARTLABEL="${IMAGE_ID}_${IMAGE_VERSION}"
else
PARTLABEL="${IMAGE_ID}"
fi
else
IMAGE_ID=linux
fi
if [[ -n "$IMAGE_VERSION" ]] ; then
BOOT_BINARY="${PREFIX}/EFI/Linux/${IMAGE_ID}_${IMAGE_VERSION}.efi"
elif [[ -n "$ROOTHASH" ]] ; then
BOOT_BINARY="${PREFIX}/EFI/Linux/${IMAGE_ID}-${KERNEL_VERSION}-${ROOTHASH}.efi"
elif [[ -n "$USRHASH" ]] ; then
BOOT_BINARY="${PREFIX}/EFI/Linux/${IMAGE_ID}-${KERNEL_VERSION}-${USRHASH}.efi"
else
BOOT_BINARY="${PREFIX}/EFI/Linux/${IMAGE_ID}-${KERNEL_VERSION}.efi"
fi
case "$COMMAND" in
add)
if [[ -f /etc/kernel/cmdline ]]; then
read -r -d '' BOOT_OPTIONS < /etc/kernel/cmdline || true
elif [[ -f /usr/lib/kernel/cmdline ]]; then
read -r -d '' BOOT_OPTIONS < /usr/lib/kernel/cmdline || true
else
read -r -d '' BOOT_OPTIONS < /proc/cmdline || true
fi
if [[ -n "$ROOTHASH" ]]; then
BOOT_OPTIONS="${BOOT_OPTIONS} roothash=${ROOTHASH}"
elif [[ -n "$USRHASH" ]]; then
BOOT_OPTIONS="${BOOT_OPTIONS} usrhash=${USRHASH}"
elif [[ -n "$PARTLABEL" ]]; then
BOOT_OPTIONS="${BOOT_OPTIONS} root=PARTLABEL=${PARTLABEL}"
fi
if [[ -n "$KERNEL_IMAGE" ]]; then
DRACUT_KERNEL_IMAGE_OPTION="--kernel-image ${KERNEL_IMAGE}"
else
DRACUT_KERNEL_IMAGE_OPTION=""
fi
# shellcheck disable=SC2086
dracut \
--uefi \
--kver "$KERNEL_VERSION" \
$DRACUT_KERNEL_IMAGE_OPTION \
--kernel-cmdline "$BOOT_OPTIONS" \
--force \
"$BOOT_BINARY"
;;
remove)
rm -f -- "$BOOT_BINARY"
;;
esac