1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-03-07 16:58:21 +03:00

kernel-install: ignore extra args passed when invoked as installkernel

kernel's 'make install' invokes install.sh which calls /sbin/install-kernel.
Thus we are invoked as e.g.
  /sbin/installkernel 5.18.0 arch/x86/boot/bzImage System.map /boot
The last two arguments would be passed as "initrds".

Before , we would just quitely ignore
/boot, because it doesn't pass the 'test -f' test, and possibly try to do
something with System.map. 742561efbe938c45936f2e4f5d81b3ff6b352882 tightened
the check, so we now throw an error.

It seems that the correct thing is to ignore those two arguments, because
our plugin syntax has no notion of System.map. And the installation directory
we can figure out ourselves better. Effectively, this makes things behave
like before, but less by accident.

Fixes #23490.

(cherry picked from commit 620ecc9c4bb8769b2acb6c1b9b64b330d0f76fc1)
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2022-05-24 22:19:05 +02:00
parent 011161de61
commit dcda9f3d07

View File

@ -81,9 +81,11 @@ fi
if [ "${0##*/}" = "installkernel" ]; then
COMMAND=add
# make install doesn't pass any initrds
no_initrds=1
else
COMMAND="$1"
[ $# -ge 1 ] && shift
no_initrds=0
fi
if [ "$COMMAND" = "inspect" ]; then
@ -318,8 +320,17 @@ case "$COMMAND" in
fi
for f in $PLUGINS; do
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $*"
"$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$@"
if [ "$no_initrds" = 1 ]; then
# kernel's install.sh invokes us as
# /sbin/installkernel <version> <vmlinuz> <map> <installation-dir>
# We ignore the last two arguments.
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $1"
"$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$1"
else
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $*"
"$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$@"
fi
err=$?
[ $err -eq $skip_remaining ] && break
ret=$(( ret + err ))