]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
kernel-install: export $BOOT_ROOT and use it in downstreams
authorнаб <nabijaczleweli@nabijaczleweli.xyz>
Tue, 16 Mar 2021 16:02:59 +0000 (17:02 +0100)
committerнаб <nabijaczleweli@nabijaczleweli.xyz>
Wed, 8 Dec 2021 12:43:19 +0000 (13:43 +0100)
The previous approach, to strip "$MACHINE_ID/$KERNEL_VERSION" from the
end, is pretty bad and encourages this for users, which makes them
inflexible to this being modified locally

src/kernel-install/00-entry-directory.install
src/kernel-install/90-loaderentry.install
src/kernel-install/kernel-install

index ab616b2823f980888aa63fc9b517551ff15627ec..5576179d524dc8af8459553a57d6741c691bcc3d 100644 (file)
@@ -32,10 +32,9 @@ if [[ $COMMAND != add ]]; then
     exit 0
 fi
 
-# If the boot dir exists (e.g. $ESP/<machine-id>),
-# create the entry directory ($ESP/<machine-id>/<kernel-version>).
-# This is the only function of this plugin.
-MACHINE_ID_DIR="${ENTRY_DIR_ABS%/*}"
+# Create the entry directory if its parent exists ‒
+# this is an administrative decision and the only function of this plugin.
+MACHINE_ID_DIR="$KERNEL_INSTALL_BOOT_ROOT/$KERNEL_INSTALL_MACHINE_ID"
 if ! [ -d "$MACHINE_ID_DIR" ]; then
     exit 0
 fi
index 9f0d61cb771258b90795229dd21ec8c7676605bb..a4dba1396da195284ec115715b6379848ebc1f11 100644 (file)
@@ -32,14 +32,14 @@ if ! [[ -d "$ENTRY_DIR_ABS" ]]; then
     exit 0
 fi
 
-MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
+MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
+BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT"
 
-BOOT_ROOT=${ENTRY_DIR_ABS%/$MACHINE_ID/$KERNEL_VERSION}
-BOOT_MNT=$(stat -c %m $BOOT_ROOT)
-if [[ $BOOT_MNT == '/' ]]; then
-    ENTRY_DIR=$ENTRY_DIR_ABS
+BOOT_MNT="$(stat -c %m "$BOOT_ROOT")"
+if [[ "$BOOT_MNT" == '/' ]]; then
+    ENTRY_DIR="$ENTRY_DIR_ABS"
 else
-    ENTRY_DIR=${ENTRY_DIR_ABS#$BOOT_MNT}
+    ENTRY_DIR="${ENTRY_DIR_ABS#$BOOT_MNT}"
 fi
 
 if [[ $COMMAND == remove ]]; then
index 89f0074417871058a9bd95dcef4432901974d560..9999b86ed87c8dcb966e3594f90a5ec840d38f1b 100755 (executable)
@@ -93,21 +93,28 @@ fi
 [ -z "$MACHINE_ID" ] && [ -f /etc/machine-id ] && [ "$(stat -fc %T /etc/machine-id)" != "tmpfs" ] && read -r MACHINE_ID < /etc/machine-id
 [ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
 
-if [[ -d /efi/loader/entries ]] || [[ -d /efi/$MACHINE_ID ]]; then
-    ENTRY_DIR_ABS="/efi/$MACHINE_ID/$KERNEL_VERSION"
-elif [[ -d /boot/loader/entries ]] || [[ -d /boot/$MACHINE_ID ]]; then
-    ENTRY_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
-elif [[ -d /boot/efi/loader/entries ]] || [[ -d /boot/efi/$MACHINE_ID ]]; then
-    ENTRY_DIR_ABS="/boot/efi/$MACHINE_ID/$KERNEL_VERSION"
-elif mountpoint -q /efi; then
-    ENTRY_DIR_ABS="/efi/$MACHINE_ID/$KERNEL_VERSION"
-elif mountpoint -q /boot/efi; then
-    ENTRY_DIR_ABS="/boot/efi/$MACHINE_ID/$KERNEL_VERSION"
-else
-    ENTRY_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
-fi
+[ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "Default" "loader/entries"; do
+    for pref in "/efi" "/boot/efi" "/boot"; do
+        if [ -d "$pref/$suff" ]; then
+            BOOT_ROOT="$pref"
+            break 2
+        fi
+    done
+done
+
+[ -z "$BOOT_ROOT" ] && for pref in "/efi" "/boot/efi"; do
+    if mountpoint -q "$pref"; then
+        BOOT_ROOT="$pref"
+        break
+    fi
+done
+[ -z "$BOOT_ROOT" ] && BOOT_ROOT="/boot"
+
+
+ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION"
 
 export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID"
+export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT"
 
 ret=0