summaryrefslogtreecommitdiff
path: root/src/kernel-install
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2017-05-30 22:45:10 +0900
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2017-05-30 09:45:10 -0400
commit9d8813b3b4f69d9428e7759ed8a2956d8846b0fb (patch)
treea38871ace65629726380791f07237f842e80858e /src/kernel-install
parente74d0a9a5cdd8562aeaab1994ebd9c4cd07e82c3 (diff)
downloadsystemd-9d8813b3b4f69d9428e7759ed8a2956d8846b0fb.tar.gz
kernel-install: support the case /etc/machine-id is missing or empty (#5975)
Some .install plugins does not require that machine ID is set such as 20-grubby.install for Fedora and 50-depmod.install. To support such plugins to run without valid machine-id, this commit makes the following change: * if /etc/machine-id is missing or empty, create temporary directory and set its path to BOOT_DIR_ABS, * run the .install helpers with KERNEL_INSTALL_MACHINE_ID environment variable that'd be empty if /etc/machine-id is missing or empty. This may be useful for installing kernel for e.g. stateless systems which initialize machine-id while booting the systems.
Diffstat (limited to 'src/kernel-install')
-rw-r--r--src/kernel-install/90-loaderentry.install8
-rw-r--r--src/kernel-install/kernel-install27
2 files changed, 21 insertions, 14 deletions
diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
index a0bca05c9a..305ea8f5c9 100644
--- a/src/kernel-install/90-loaderentry.install
+++ b/src/kernel-install/90-loaderentry.install
@@ -7,13 +7,11 @@ KERNEL_VERSION="$2"
BOOT_DIR_ABS="$3"
KERNEL_IMAGE="$4"
-if [[ -f /etc/machine-id ]]; then
- read MACHINE_ID < /etc/machine-id
+if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
+ exit 0
fi
-if ! [[ $MACHINE_ID ]]; then
- exit 1
-fi
+MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
BOOT_DIR="/$MACHINE_ID/$KERNEL_VERSION"
BOOT_ROOT=${BOOT_DIR_ABS%$BOOT_DIR}
diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
index c7d9f4eea9..66bc4a6e8e 100644
--- a/src/kernel-install/kernel-install
+++ b/src/kernel-install/kernel-install
@@ -77,18 +77,15 @@ if [[ -f /etc/machine-id ]]; then
read MACHINE_ID < /etc/machine-id
fi
-if ! [[ $MACHINE_ID ]]; then
- echo "Could not determine your machine ID from /etc/machine-id." >&2
- echo "Please run 'systemd-machine-id-setup' as root. See man:machine-id(5)" >&2
- exit 1
-fi
-
if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
echo "Not enough arguments" >&2
exit 1
fi
-if [[ -d /efi/loader/entries ]] || [[ -d /efi/$MACHINE_ID ]]; then
+if ! [[ $MACHINE_ID ]]; then
+ BOOT_DIR_ABS=$(mktemp -d /tmp/kernel-install.XXXXX) || exit 1
+ trap "rm -rf '$BOOT_DIR_ABS'" EXIT INT QUIT PIPE
+elif [[ -d /efi/loader/entries ]] || [[ -d /efi/$MACHINE_ID ]]; then
BOOT_DIR_ABS="/efi/$MACHINE_ID/$KERNEL_VERSION"
elif [[ -d /boot/loader/entries ]] || [[ -d /boot/$MACHINE_ID ]]; then
BOOT_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
@@ -102,6 +99,8 @@ else
BOOT_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
fi
+export KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID
+
ret=0
readarray -t PLUGINS <<<"$(
@@ -127,11 +126,20 @@ case $COMMAND in
"$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE"
x=$?
if [[ $x == $SKIP_REMAINING ]]; then
- exit 0
+ ret=0
+ break
fi
((ret+=$x))
fi
done
+
+ if ! [[ $MACHINE_ID ]] && ! rmdir "$BOOT_DIR_ABS"; then
+ echo "Warning: In kernel-install plugins, requiring BOOT_DIR_ABS to be preset is deprecated." >&2
+ echo " All plugins should not put anything in BOOT_DIR_ABS if the environment" >&2
+ echo " variable KERNEL_INSTALL_MACHINE_ID is empty." >&2
+ rm -rf "$BOOT_DIR_ABS"
+ ((ret+=$?))
+ fi
;;
remove)
@@ -140,7 +148,8 @@ case $COMMAND in
"$f" remove "$KERNEL_VERSION" "$BOOT_DIR_ABS"
x=$?
if [[ $x == $SKIP_REMAINING ]]; then
- exit 0
+ ret=0
+ break
fi
((ret+=$x))
fi