From 85eb991993e538343bd57ba5587a56fe4d23700e Mon Sep 17 00:00:00 2001 From: dalto Date: Sun, 1 Oct 2023 10:37:30 -0500 Subject: [PATCH 1/4] Fix non-kernel triggers --- src/usr/share/libalpm/hooks/90-kernel-install.hook | 8 +++++++- src/usr/share/libalpm/scripts/kernel-install | 14 +++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/usr/share/libalpm/hooks/90-kernel-install.hook b/src/usr/share/libalpm/hooks/90-kernel-install.hook index 9f895d1..a7b3de4 100644 --- a/src/usr/share/libalpm/hooks/90-kernel-install.hook +++ b/src/usr/share/libalpm/hooks/90-kernel-install.hook @@ -2,7 +2,7 @@ Type = Path Operation = Install Operation = Upgrade -Target = usr/lib/modules/*/vmlinuz +Operation = Remove Target = usr/lib/initcpio/* Target = usr/lib/firmware/* Target = usr/src/*/dkms.conf @@ -15,6 +15,12 @@ Operation = Remove Target = amd-ucode Target = intel-ucode +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Target = usr/lib/modules/*/vmlinuz + [Action] Description = Installing kernel... When = PostTransaction diff --git a/src/usr/share/libalpm/scripts/kernel-install b/src/usr/share/libalpm/scripts/kernel-install index 39ef3af..92c7801 100755 --- a/src/usr/share/libalpm/scripts/kernel-install +++ b/src/usr/share/libalpm/scripts/kernel-install @@ -6,14 +6,22 @@ while read -r line; do echo ":: kernel-install removing kernel $version" kernel-install remove "${version}" elif [[ $1 == "add" ]]; then - echo ":: kernel-install installing kernel $version" - kernel-install add "${version}" "${line}" + if [[ line =~ ".*vmlinuz$" ]]; then + echo ":: kernel-install installing kernel $version" + kernel-install add "${version}" "${line}" + else + install_all=1 + break + fi else echo ":: Invalid option passed to kernel-install script" fi - version=$(basename "${line%/vmlinuz}") done +if [[ $install_all == 1 ]]; then + reinstall-kernels +fi + # first check if we are running in a chroot if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then echo 'Running in a chroot, skipping cmdline generation' From fadcb7ab769308a2908d3da3272f1a626640b37c Mon Sep 17 00:00:00 2001 From: dalto Date: Sat, 30 Dec 2023 14:44:10 -0600 Subject: [PATCH 2/4] Add support for optionally omitting the fallback initrd --- src/etc/kernel-install-mkinitcpio.conf | 4 ++++ .../lib/kernel/install.d/50-mkinitcpio-fallback.install | 6 ++++++ .../lib/kernel/install.d/90-loaderentry-fallback.install | 7 +++++++ 3 files changed, 17 insertions(+) create mode 100644 src/etc/kernel-install-mkinitcpio.conf diff --git a/src/etc/kernel-install-mkinitcpio.conf b/src/etc/kernel-install-mkinitcpio.conf new file mode 100644 index 0000000..b0f10b3 --- /dev/null +++ b/src/etc/kernel-install-mkinitcpio.conf @@ -0,0 +1,4 @@ +# This config file controls the automation provided by kernel-install-mkinitcpio + +# When NO_FALLBACK is set to true, no fallback initrd will be generated +#KIM_NO_FALLBACK="false" diff --git a/src/usr/lib/kernel/install.d/50-mkinitcpio-fallback.install b/src/usr/lib/kernel/install.d/50-mkinitcpio-fallback.install index 775945a..662fbbd 100755 --- a/src/usr/lib/kernel/install.d/50-mkinitcpio-fallback.install +++ b/src/usr/lib/kernel/install.d/50-mkinitcpio-fallback.install @@ -11,6 +11,12 @@ KERNEL_IMAGE="$4" [[ "$COMMAND" == "add" ]] || exit 0 +# Read the optional config file +[[ -f /etc/kernel-install-mkinitcpio.conf ]] && source /etc/kernel-install-mkinitcpio.conf + +# Do nothing if the user has elected to omit the fallback initrd +[[ ${KIM_NO_FALLBACK} == "true" ]] && exit 0 + GENERATOR_CMD=(mkinitcpio -k "$KERNEL_VERSION") BLS_ARGS=(-g "$KERNEL_INSTALL_STAGING_AREA/initrd-fallback") diff --git a/src/usr/lib/kernel/install.d/90-loaderentry-fallback.install b/src/usr/lib/kernel/install.d/90-loaderentry-fallback.install index 9839e72..ed64335 100755 --- a/src/usr/lib/kernel/install.d/90-loaderentry-fallback.install +++ b/src/usr/lib/kernel/install.d/90-loaderentry-fallback.install @@ -28,6 +28,10 @@ INITRD_OPTIONS_SHIFT=4 [ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0 + +# Read the optional config file +[[ -f /etc/kernel-install-mkinitcpio.conf ]] && source /etc/kernel-install-mkinitcpio.conf + MACHINE_ID="${KERNEL_INSTALL_MACHINE_ID:?}" ENTRY_TOKEN="${KERNEL_INSTALL_ENTRY_TOKEN:?}" BOOT_ROOT="${KERNEL_INSTALL_BOOT_ROOT:?}" @@ -58,6 +62,9 @@ case "$COMMAND" in ;; esac +# Do nothing if the user has elected to omit the fallback initrd +[[ ${KIM_NO_FALLBACK} == "true" ]] && exit 0 + if [ -f /etc/os-release ]; then # shellcheck source=/dev/null . /etc/os-release From e3374d38af1195aa998012f7317f005eaf5e1575 Mon Sep 17 00:00:00 2001 From: dalto Date: Sat, 30 Dec 2023 14:45:26 -0600 Subject: [PATCH 3/4] Remove 40-microcode.install now that upstream has added support --- src/etc/kernel/install.d/40-microcode.install | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100755 src/etc/kernel/install.d/40-microcode.install diff --git a/src/etc/kernel/install.d/40-microcode.install b/src/etc/kernel/install.d/40-microcode.install deleted file mode 100755 index 259d583..0000000 --- a/src/etc/kernel/install.d/40-microcode.install +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# SPDX-License-Identifier: GPL-2.0-only - -COMMAND="${1:?}" -# shellcheck disable=SC2034 -KERNEL_VERSION="${2:?}" -# shellcheck disable=SC2034 -ENTRY_DIR_ABS="$3" -# shellcheck disable=SC2034 -KERNEL_IMAGE="$4" - -set -e - -[[ "$COMMAND" = "add" ]] || exit 0 - -for dir in "${KERNEL_INSTALL_BOOT_ROOT}" "/boot"; do - for microcode in "intel-ucode.img" "amd-ucode.img"; do - if [[ -f "${dir}/${microcode}" ]]; then - install -m 0644 "${dir}/${microcode}" "${KERNEL_INSTALL_STAGING_AREA}/microcode-${microcode}" || { - echo "Error: could not copy '$microcode' to the staging area." >&2 - exit 1 - } - (( KERNEL_INSTALL_VERBOSE )) && printf "+ Found microcode image %s\n" "$microcode" || exit 0 - fi - done -done From c67ca7f88d8615061ca668bfa657d155e7ef5fb6 Mon Sep 17 00:00:00 2001 From: Sohrab Behdani Date: Mon, 10 Feb 2025 20:01:18 +0330 Subject: [PATCH 4/4] Fixed hook running in chroot --- src/usr/share/libalpm/scripts/kernel-install | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/usr/share/libalpm/scripts/kernel-install b/src/usr/share/libalpm/scripts/kernel-install index 92c7801..50bcb8c 100755 --- a/src/usr/share/libalpm/scripts/kernel-install +++ b/src/usr/share/libalpm/scripts/kernel-install @@ -1,4 +1,8 @@ #!/usr/bin/env bash +if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then + echo "Skipping hook execution in chroot." + exit 0 +fi while read -r line; do version=$(basename "${line%/vmlinuz}")