Skip to content

Commit 17b8649

Browse files
fix(install.d): respect even more kernel-install vars, plus style fixes
- More verbose with KERNEL_INSTALL_VERBOSE=1 - Use KERNEL_INSTALL_CONF_ROOT if defined - Fallback to /usr/lib/os-release if /etc/os-release does not exist - Fallback to "Linux $KERNEL_VERSION" if no PRETTY_NAME found - Styling fixes Co-authored-by: Antonio Alvarez Feijoo <[email protected]> Signed-off-by: Andrew Ammerlaan <[email protected]>
1 parent a037634 commit 17b8649

File tree

2 files changed

+64
-36
lines changed

2 files changed

+64
-36
lines changed

install.d/50-dracut.install

+23-13
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then
1212
fi
1313

1414
# 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
15+
if [[ $KERNEL_INSTALL_LAYOUT == "uki" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
1616
BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
1717
IMAGE="uki.efi"
1818
UEFI_OPTS="--uefi"
19-
elif [[ "$KERNEL_INSTALL_LAYOUT" == "bls" && -n "$KERNEL_INSTALL_STAGING_AREA" ]]; then
19+
elif [[ $KERNEL_INSTALL_LAYOUT == "bls" && -n $KERNEL_INSTALL_STAGING_AREA ]]; then
2020
BOOT_DIR_ABS="$KERNEL_INSTALL_STAGING_AREA"
2121
IMAGE="initrd"
2222
UEFI_OPTS="--no-uefi"
2323
else
2424
# No layout information, use users --uefi/--no-uefi preference
2525
UEFI_OPTS=""
26-
if [[ -d "$BOOT_DIR_ABS" ]]; then
26+
if [[ -d $BOOT_DIR_ABS ]]; then
2727
IMAGE="initrd"
2828
else
2929
BOOT_DIR_ABS="/boot"
@@ -32,23 +32,30 @@ else
3232
fi
3333

3434
ret=0
35+
3536
case "$COMMAND" in
3637
add)
37-
if [[ "$IMAGE" == "uki.efi" ]]; then
38+
if [[ $IMAGE == "uki.efi" ]]; then
3839
IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/uki.efi
3940
else
4041
IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd
4142
fi
4243
if [[ -f ${IMAGE_PREGENERATED} ]]; then
4344
# we found an initrd or uki.efi at the same place as the kernel
4445
# use this and don't generate a new one
46+
[[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo \
47+
"There is an ${IMAGE} image at the same place as the kernel, skipping generating a new one"
4548
cp --reflink=auto "$IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$IMAGE" \
4649
&& chown root:root "$BOOT_DIR_ABS/$IMAGE" \
4750
&& chmod 0600 "$BOOT_DIR_ABS/$IMAGE" \
4851
&& exit 0
4952
fi
5053

51-
if [[ -f /etc/kernel/cmdline ]]; then
54+
if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
55+
if [ -f "$KERNEL_INSTALL_CONF_ROOT/cmdline" ]; then
56+
read -r -d '' -a BOOT_OPTIONS < "$KERNEL_INSTALL_CONF_ROOT/cmdline"
57+
fi
58+
elif [[ -f /etc/kernel/cmdline ]]; then
5259
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
5360
elif [[ -f /usr/lib/kernel/cmdline ]]; then
5461
read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
@@ -57,33 +64,36 @@ case "$COMMAND" in
5764

5865
read -r -d '' -a line < /proc/cmdline
5966
for i in "${line[@]}"; do
60-
[[ "${i#initrd=*}" != "$i" ]] && continue
67+
[[ ${i#initrd=*} != "$i" ]] && continue
6168
BOOT_OPTIONS+=("$i")
6269
done
6370
fi
6471

6572
unset noimageifnotneeded
6673

67-
for ((i=0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
74+
for ((i = 0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
6875
# shellcheck disable=SC1001
6976
if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
7077
noimageifnotneeded="yes"
7178
break
7279
fi
7380
done
7481

82+
# shellcheck disable=SC2046
7583
dracut -f \
7684
${noimageifnotneeded:+--noimageifnotneeded} \
77-
$([[ "$KERNEL_INSTALL_VERBOSE" == 1 ]] && echo --verbose) \
78-
$([[ -n "$KERNEL_IMAGE" ]] && echo --kernel-image "${KERNEL_IMAGE}") \
85+
$([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
86+
$([[ -n $KERNEL_IMAGE ]] && echo --kernel-image "$KERNEL_IMAGE") \
7987
"$UEFI_OPTS" \
80-
"$BOOT_DIR_ABS/$IMAGE" \
81-
"$KERNEL_VERSION"
88+
--kver "$KERNEL_VERSION" \
89+
"$BOOT_DIR_ABS/$IMAGE"
8290
ret=$?
83-
;;
91+
;;
92+
8493
remove)
8594
rm -f -- "$BOOT_DIR_ABS/$IMAGE"
8695
ret=$?
87-
;;
96+
;;
8897
esac
98+
8999
exit $ret

install.d/51-dracut-rescue.install

+41-23
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@ KERNEL_VERSION="$2"
77
BOOT_DIR_ABS="${3%/*}/0-rescue"
88
KERNEL_IMAGE="$4"
99

10-
11-
dropindirs_sort()
12-
{
13-
suffix=$1; shift
10+
dropindirs_sort() {
11+
suffix=$1
12+
shift
1413
args=("$@")
1514
files=$(
16-
while (( $# > 0 )); do
15+
while (($# > 0)); do
1716
for i in "${1}"/*"${suffix}"; do
1817
[[ -f $i ]] && echo "${i##*/}"
1918
done
@@ -31,19 +30,29 @@ dropindirs_sort()
3130
done
3231
}
3332

34-
[[ -f /etc/os-release ]] && . /etc/os-release
33+
if [[ -f /etc/os-release ]]; then
34+
. /etc/os-release
35+
elif [[ -f /usr/lib/os-release ]]; then
36+
. /usr/lib/os-release
37+
fi
38+
39+
[[ -n $PRETTY_NAME ]] || PRETTY_NAME="Linux $KERNEL_VERSION"
3540

3641
if [[ ${KERNEL_INSTALL_MACHINE_ID+x} ]]; then
3742
MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
38-
elif [[ -f /etc/machine-id ]] ; then
43+
elif [[ -f /etc/machine-id ]]; then
3944
read -r MACHINE_ID < /etc/machine-id
4045
fi
4146

4247
if ! [[ $MACHINE_ID ]]; then
4348
exit 0
4449
fi
4550

46-
if [[ -f /etc/kernel/cmdline ]]; then
51+
if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
52+
if [ -f "$KERNEL_INSTALL_CONF_ROOT/cmdline" ]; then
53+
read -r -d '' -a BOOT_OPTIONS < "$KERNEL_INSTALL_CONF_ROOT/cmdline"
54+
fi
55+
elif [[ -f /etc/kernel/cmdline ]]; then
4756
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
4857
elif [[ -f /usr/lib/kernel/cmdline ]]; then
4958
read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline
@@ -52,14 +61,14 @@ else
5261

5362
read -r -d '' -a line < /proc/cmdline
5463
for i in "${line[@]}"; do
55-
[[ "${i#initrd=*}" != "$i" ]] && continue
64+
[[ ${i#initrd=*} != "$i" ]] && continue
5665
BOOT_OPTIONS+=("$i")
5766
done
5867
fi
5968

60-
if [[ -d "${BOOT_DIR_ABS%/*}" ]]; then
69+
if [[ -d ${BOOT_DIR_ABS%/*} ]]; then
6170
BOOT_DIR="/${MACHINE_ID}/0-rescue"
62-
BOOT_ROOT=${BOOT_DIR_ABS%$BOOT_DIR}
71+
BOOT_ROOT=${BOOT_DIR_ABS%"$BOOT_DIR"}
6372
LOADER_ENTRY="$BOOT_ROOT/loader/entries/${MACHINE_ID}-0-rescue.conf"
6473
KERNEL="linux"
6574
INITRD="initrd"
@@ -75,8 +84,12 @@ ret=0
7584

7685
case "$COMMAND" in
7786
add)
78-
[[ -f "$LOADER_ENTRY" ]] && [[ -f "$BOOT_DIR_ABS/$KERNEL" ]] \
79-
&& [[ -f "$BOOT_DIR_ABS/$INITRD" ]] && exit 0
87+
if [[ -f $LOADER_ENTRY ]] && [[ -f "$BOOT_DIR_ABS/$KERNEL" ]] \
88+
&& [[ -f "$BOOT_DIR_ABS/$INITRD" ]]; then
89+
[[ $KERNEL_INSTALL_VERBOSE == 1 ]] \
90+
&& echo "Skipping, there is already a rescue image generated with the same input parameters"
91+
exit 0
92+
fi
8093

8194
# source our config dir
8295
for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do
@@ -87,22 +100,30 @@ case "$COMMAND" in
87100
done
88101

89102
# shellcheck disable=SC2154
90-
[[ $dracut_rescue_image != "yes" ]] && exit 0
103+
if [[ $dracut_rescue_image != "yes" ]]; then
104+
[[ $KERNEL_INSTALL_VERBOSE == 1 ]] \
105+
&& echo "Skipping, 'dracut_rescue_image' not set to 'yes' in any dracut configuration file"
106+
exit 0
107+
fi
91108

92-
[[ -d "$BOOT_DIR_ABS" ]] || mkdir -p "$BOOT_DIR_ABS"
109+
[[ -d $BOOT_DIR_ABS ]] || mkdir -p "$BOOT_DIR_ABS"
93110

94111
if ! cp --reflink=auto "$KERNEL_IMAGE" "$BOOT_DIR_ABS/$KERNEL"; then
95112
echo "Can't copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/$KERNEL'!" >&2
96113
fi
97114

98115
if [[ ! -f "$BOOT_DIR_ABS/$INITRD" ]]; then
116+
# shellcheck disable=SC2046
99117
dracut -f --no-hostonly --no-uefi \
100-
$([[ -n "$KERNEL_IMAGE" ]] && echo --kernel-image "${KERNEL_IMAGE}") \
101-
-a "rescue" "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
102-
((ret+=$?))
118+
-a "rescue" \
119+
$([[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo --verbose) \
120+
--kver "$KERNEL_VERSION" \
121+
"$BOOT_DIR_ABS/$INITRD"
122+
((ret += $?))
103123
fi
104124

105-
if [[ "${BOOT_DIR_ABS}" != "/boot" ]]; then
125+
[[ $KERNEL_INSTALL_VERBOSE == 1 ]] && echo "Creating $LOADER_ENTRY"
126+
if [[ ${BOOT_DIR_ABS} != "/boot" ]]; then
106127
{
107128
echo "title $PRETTY_NAME - Rescue Image"
108129
echo "version $KERNEL_VERSION"
@@ -120,16 +141,13 @@ case "$COMMAND" in
120141
sed -i "s/${KERNEL_VERSION}/0-rescue-${MACHINE_ID}/" "$LOADER_ENTRY"
121142
fi
122143

123-
((ret+=$?))
144+
((ret += $?))
124145
;;
125146

126147
remove)
127148
exit 0
128149
;;
129150

130-
*)
131-
usage
132-
ret=1;;
133151
esac
134152

135153
exit $ret

0 commit comments

Comments
 (0)