systemd/SOURCES/1191-kernel-install-add-entry-type-type1-type2-option-to-.patch

126 lines
4.7 KiB
Diff

From 1ff8791c68726c97d745ed0c8ec8f1f6f97255cf Mon Sep 17 00:00:00 2001
From: Li Tian <litian@redhat.com>
Date: Wed, 16 Jul 2025 11:41:22 +0800
Subject: [PATCH] kernel-install: add --entry-type=type1|type2 option to
kernel-install
Both kernel-core and kernel-uki-virt call kernel-install
upon removal. Need an additional argument to avoid complete
removal for both traditional kernel and UKI.
And because kernel-install in RHEL9 is a shell script,
we need a specific solution.
Signed-off-by: Li Tian <litian@redhat.com>
(cherry picked from commit b6d499768394297b1d313cdc72dab0720dc315f6)
Resolves: RHEL-83932
---
shell-completion/bash/kernel-install | 14 ++++++++++++++
src/kernel-install/50-depmod.install | 6 ++++++
src/kernel-install/90-loaderentry.install | 5 +++++
src/kernel-install/90-uki-copy.install | 5 +++++
src/kernel-install/test-kernel-install.sh | 7 +++++++
5 files changed, 37 insertions(+)
diff --git a/shell-completion/bash/kernel-install b/shell-completion/bash/kernel-install
index 4708777507..a06ffb471a 100644
--- a/shell-completion/bash/kernel-install
+++ b/shell-completion/bash/kernel-install
@@ -20,6 +20,15 @@ _kernel_install() {
local comps
local MACHINE_ID
local cur=${COMP_WORDS[COMP_CWORD]}
+ local prev=${COMP_WORDS[COMP_CWORD-1]}
+ local entry_types="type1 type2 all"
+
+ case "$prev" in
+ --entry-type)
+ COMPREPLY=( $(compgen -W "$entry_types" -- "$cur") )
+ return 0
+ ;;
+ esac
case $COMP_CWORD in
1)
@@ -41,6 +50,11 @@ _kernel_install() {
;;
esac
+ if [[ "${COMP_WORDS[1]}" == "remove" ]] && [[ $cur == -* ]]; then
+ COMPREPLY=( $(compgen -W '--entry-type' -- "$cur") )
+ return 0
+ fi
+
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install
index 43bd87c7ed..a3e06c3dbf 100755
--- a/src/kernel-install/50-depmod.install
+++ b/src/kernel-install/50-depmod.install
@@ -31,6 +31,12 @@ case "$COMMAND" in
exec depmod -a "$KERNEL_VERSION"
;;
remove)
+ [ "$KERNEL_INSTALL_BOOT_ENTRY_TYPE" = "type2" ] || \
+ [ "$KERNEL_INSTALL_BOOT_ENTRY_TYPE" = "type1" ] && \
+ [ -d "/lib/modules/$KERNEL_VERSION/kernel" ] && \
+ echo "Multiple entry types exist, not removing modules.dep or associated files." && \
+ exit 0
+
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files"
exec rm -f \
diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
index 41a05534b9..896231e784 100755
--- a/src/kernel-install/90-loaderentry.install
+++ b/src/kernel-install/90-loaderentry.install
@@ -41,6 +41,11 @@ fi
case "$COMMAND" in
remove)
+ if [ -f "/lib/modules/$KERNEL_VERSION/vmlinuz" ] && [ "$KERNEL_INSTALL_BOOT_ENTRY_TYPE" = "type2" ]; then
+ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+ echo "BOOT_ENTRY_TYPE=type2, not removing loader entries."
+ exit 0
+ fi
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
echo "Removing $BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION*.conf"
exec rm -f \
diff --git a/src/kernel-install/90-uki-copy.install b/src/kernel-install/90-uki-copy.install
index d443c4b401..c35cd53592 100755
--- a/src/kernel-install/90-uki-copy.install
+++ b/src/kernel-install/90-uki-copy.install
@@ -33,6 +33,11 @@ UKI_DIR="$BOOT_ROOT/EFI/Linux"
case "$COMMAND" in
remove)
+ if [ "$KERNEL_INSTALL_BOOT_ENTRY_TYPE" = "type1" ]; then
+ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
+ echo "BOOT_ENTRY_TYPE=type1, not removing UKI related."
+ exit 0
+ fi
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
echo "Removing $UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION*.efi"
exec rm -f \
diff --git a/src/kernel-install/test-kernel-install.sh b/src/kernel-install/test-kernel-install.sh
index 3b9ff76e60..23f3c2cf4a 100755
--- a/src/kernel-install/test-kernel-install.sh
+++ b/src/kernel-install/test-kernel-install.sh
@@ -54,6 +54,13 @@ test ! -f "$entry"
test ! -f "$BOOT_ROOT/the-token/1.1.1/linux"
test ! -f "$BOOT_ROOT/the-token/1.1.1/initrd"
+# Test --entry-type options
+"$kernel_install" -v add 1.1.1 "$D/sources/linux" "$D/sources/initrd"
+"$kernel_install" -v remove 1.1.1 --entry-type=type1
+test ! -e "$entry"
+test ! -e "$BOOT_ROOT/the-token/1.1.1/linux"
+test ! -e "$BOOT_ROOT/the-token/1.1.1/initrd"
+
# Invoke kernel-install as installkernel
ln -s --relative -v "$kernel_install" "$D/sources/installkernel"
"$D/sources/installkernel" -v 1.1.2 "$D/sources/linux" System.map /somedirignored