You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
5.8 KiB
136 lines
5.8 KiB
From c68126eeb93cac03b3a674ab47604e8381a4e5e2 Mon Sep 17 00:00:00 2001 |
|
From: Lennart Poettering <lennart@poettering.net> |
|
Date: Wed, 9 Feb 2022 14:29:19 +0100 |
|
Subject: [PATCH] kernel-install: add a new $ENTRY_TOKEN variable for naming |
|
boot entries |
|
MIME-Version: 1.0 |
|
Content-Type: text/plain; charset=UTF-8 |
|
Content-Transfer-Encoding: 8bit |
|
|
|
This cleans up naming of boot loader spec boot entries a bit (i.e. the |
|
naming of the .conf snippet files, and the directory in $BOOT where the |
|
kernel images and initrds are placed), and isolates it from the actual machine |
|
ID concept. |
|
|
|
Previously there was a sinlge concept for both things, because typically |
|
the entries are just named after the machine ID. However one could also |
|
use a different identifier, i.e. not a 128bit ID in which cases issues |
|
pop up everywhere. For example, the "machine-id" field in the generated |
|
snippets would not be a machine ID anymore, and the newly added |
|
systemd.machine_id= kernel parameter would possibly get passed invalid |
|
data. |
|
|
|
Hence clean this up: |
|
|
|
$MACHINE_ID → always a valid 128bit ID. |
|
|
|
$ENTRY_TOKEN → usually the $MACHINE_ID but can be any other string too. |
|
This is used to name the directory to put kernels/initrds in. It's also |
|
used for naming the *.conf snippets that implement the Boot Loader Type |
|
1 spec. |
|
|
|
(cherry picked from commit 3907044ffa568aedf076d0f9807489ec78f87502) |
|
|
|
Related: #2065061 |
|
--- |
|
src/kernel-install/90-loaderentry.install | 11 ++++++----- |
|
src/kernel-install/kernel-install | 21 +++++++++++++++++---- |
|
2 files changed, 23 insertions(+), 9 deletions(-) |
|
|
|
diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install |
|
index 046771169c..46261a2c11 100644 |
|
--- a/src/kernel-install/90-loaderentry.install |
|
+++ b/src/kernel-install/90-loaderentry.install |
|
@@ -29,6 +29,7 @@ INITRD_OPTIONS_SHIFT=4 |
|
[ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0 |
|
|
|
MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" |
|
+ENTRY_TOKEN="$KERNEL_INSTALL_ENTRY_TOKEN" |
|
BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT" |
|
|
|
BOOT_MNT="$(stat -c %m "$BOOT_ROOT")" |
|
@@ -41,10 +42,10 @@ fi |
|
case "$COMMAND" in |
|
remove) |
|
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ |
|
- echo "Removing $BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION*.conf" |
|
+ echo "Removing $BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION*.conf" |
|
exec rm -f \ |
|
- "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \ |
|
- "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf" |
|
+ "$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf" \ |
|
+ "$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION+"*".conf" |
|
;; |
|
add) |
|
;; |
|
@@ -80,9 +81,9 @@ if [ -r /etc/kernel/tries ]; then |
|
echo "/etc/kernel/tries does not contain an integer." >&2 |
|
exit 1 |
|
fi |
|
- LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+$TRIES.conf" |
|
+ LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION+$TRIES.conf" |
|
else |
|
- LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" |
|
+ LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf" |
|
fi |
|
|
|
if ! [ -d "$ENTRY_DIR_ABS" ]; then |
|
diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install |
|
index e94aa79bc6..75a31c62d4 100755 |
|
--- a/src/kernel-install/kernel-install |
|
+++ b/src/kernel-install/kernel-install |
|
@@ -97,7 +97,19 @@ fi |
|
[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ] && read -r MACHINE_ID </etc/machine-id |
|
[ -z "$MACHINE_ID" ] && MACHINE_ID="$(systemd-id128 new)" |
|
|
|
-[ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do |
|
+# Now that we determined the machine ID to use, let's determine the "token" for |
|
+# the boot loader entry to generate. We use that for naming the directory below |
|
+# $BOOT where we want to place the kernel/initrd and related resources, as well |
|
+# for naming the .conf boot loader spec entry. Typically this is just the |
|
+# machine ID, but it can be anything else, too, if we are told so. |
|
+[ -z "$ENTRY_TOKEN" ] && [ -r /etc/kernel/entry-token ] && read -r ENTRY_TOKEN </etc/kernel/entry-token |
|
+[ -z "$ENTRY_TOKEN" ] && ENTRY_TOKEN="$MACHINE_ID" |
|
+ |
|
+# NB: The $MACHINE_ID is guaranteed to be a valid machine ID, but |
|
+# $ENTRY_TOKEN can be any string that fits into a VFAT filename, though |
|
+# typically is just the machine ID. |
|
+ |
|
+[ -z "$BOOT_ROOT" ] && for suff in "$ENTRY_TOKEN" "loader/entries"; do |
|
for pref in "/efi" "/boot" "/boot/efi" ; do |
|
if [ -d "$pref/$suff" ]; then |
|
BOOT_ROOT="$pref" |
|
@@ -117,14 +129,14 @@ done |
|
|
|
if [ -z "$layout" ]; then |
|
# Administrative decision: if not present, some scripts generate into /boot. |
|
- if [ -d "$BOOT_ROOT/$MACHINE_ID" ]; then |
|
+ if [ -d "$BOOT_ROOT/$ENTRY_TOKEN" ]; then |
|
layout="bls" |
|
else |
|
layout="other" |
|
fi |
|
fi |
|
|
|
-ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION" |
|
+ENTRY_DIR_ABS="$BOOT_ROOT/$ENTRY_TOKEN/$KERNEL_VERSION" |
|
|
|
# Provide a directory where to store generated initrds |
|
cleanup() { |
|
@@ -136,6 +148,7 @@ trap cleanup EXIT |
|
KERNEL_INSTALL_STAGING_AREA="$(mktemp -d -t -p /tmp kernel-install.staging.XXXXXXX)" |
|
|
|
export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID" |
|
+export KERNEL_INSTALL_ENTRY_TOKEN="$ENTRY_TOKEN" |
|
export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT" |
|
export KERNEL_INSTALL_LAYOUT="$layout" |
|
export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator" |
|
@@ -168,7 +181,7 @@ case "$COMMAND" in |
|
fi |
|
|
|
if [ "$MAKE_ENTRY_DIR_ABS" -eq 0 ]; then |
|
- # Compatibility with earlier versions that used the presence of $BOOT_ROOT/$MACHINE_ID |
|
+ # Compatibility with earlier versions that used the presence of $BOOT_ROOT/$ENTRY_TOKEN |
|
# to signal to 00-entry-directory to create $ENTRY_DIR_ABS |
|
# to serve as the indication to use or to not use the BLS |
|
if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
|
|
|