initramfs: Refactor alpm hooks to prevent harmless errors on kernel installation

Based on the way kdumpst alpm hooks were coded, we have currently one hook
per initrd system supported (mkinitcpio, mkinitcpio-git, dracut). When a
kernel package is installed/upgraded/removed, all of them are triggered;
but usually users only have one initrd system (enough headaches with just
one, imagine having more heh).

The net effect of this, due to the "verbiage" of alpm, is that harmless
error messages were shown, like the following one:

"error: unable to run hook 99-kdump-dracut.hook: could not satisfy
dependencies"

This one was quite common since the vast majority of Arch users rely
on mkinitcpio. And this message would show at *every* kernel package
operation, leading users to wonder what's wrong (may they pay attention
to error messages, of course).

In order to fix that, we hereby follow a great and simple suggestion from
Antiz at #archlinux-projects/Libera (thanks!): let's use a shell call to
encompass the tests for different initrd systems. With that, was easy also
to remove the redundant mkinitcpio-git hook. No functional change should
be expected from this change.

Closes: #14 ("Minimal initramfs pacman hooks should not present error messages on different init systems")
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
This commit is contained in:
Guilherme G. Piccoli
2024-01-04 04:50:37 +00:00
parent 512cd8ff4a
commit 462eef9828
3 changed files with 27 additions and 19 deletions

View File

@ -16,7 +16,7 @@ kdumpst-load.sh: kdumpst-load.header common.sh kdumpst-load.sh.in
save-dumps.sh: save-dumps.header common.sh save-dumps.sh.in
cat $^ > $@
99-kdump-dracut.hook: initramfs/alpm-hook.generic
99-kdump-dracut.hook: initramfs/alpm-hook.INITRD
sed 's/INITRD/dracut/g' $^ > initramfs/$@
kdump-dracut-hook.sh: common.sh initramfs/dracut/dracut-common.sh
@ -31,12 +31,9 @@ module-setup.sh: initramfs/dracut/module-setup.header common.sh initramfs/dracut
.PHONY: dracut
dracut: 99-kdump-dracut.hook kdump-dracut-hook.sh module-setup.sh
99-kdump-mkinitcpio.hook: initramfs/alpm-hook.generic
99-kdump-mkinitcpio.hook: initramfs/alpm-hook.INITRD
sed 's/INITRD/mkinitcpio/g' $^ > initramfs/$@
99-kdump-mkinitcpio-git.hook: initramfs/alpm-hook.generic
sed 's/INITRD/mkinitcpio-git/g' $^ > initramfs/$@
kdump-mkinitcpio-hook.sh: common.sh initramfs/initcpio/initcpio-common.sh
sed 's/INITRD/mkinitcpio/g' initramfs/alpm-script.header > initramfs/alpm-header-initcpio
sed 's/INITRD/mkinitcpio/g' initramfs/alpm-script.sh.in > initramfs/alpm-script.sh.in-initcpio
@ -51,7 +48,7 @@ kdump.install: initramfs/initcpio/kdump.install.header common.sh initramfs/initc
cat $^ > initramfs/initcpio/$@
.PHONY: mkinitcpio
mkinitcpio: 99-kdump-mkinitcpio.hook 99-kdump-mkinitcpio-git.hook kdump-mkinitcpio-hook.sh kdump.hook kdump.install
mkinitcpio: 99-kdump-mkinitcpio.hook kdump-mkinitcpio-hook.sh kdump.hook kdump.install
all: kdumpst-load.sh save-dumps.sh dracut mkinitcpio
@ -64,17 +61,16 @@ install: all
install -D -m0644 00-default.conf $(DESTDIR)$(sharedir)/kdumpst.d/00-default
install -D -m0644 initramfs/99-kdump-dracut.hook $(DESTDIR)$(alpmhooksdir)/99-kdump-dracut.hook
install -D -m0644 initramfs/99-kdump-mkinitcpio.hook $(DESTDIR)$(alpmhooksdir)/99-kdump-mkinitcpio.hook
install -D -m0644 initramfs/99-kdump-mkinitcpio-git.hook $(DESTDIR)$(alpmhooksdir)/99-kdump-mkinitcpio-git.hook
install -D -m0644 initramfs/99-kdump-kernel.hook $(DESTDIR)$(alpmhooksdir)/99-kdump-kernel.hook
install -D -m0755 initramfs/dracut/kdump-dracut-hook.sh $(DESTDIR)$(libdir)/kdumpst/kdump-dracut-hook.sh
install -D -m0755 initramfs/kdump-collect.sh $(DESTDIR)$(libdir)/kdumpst/dracut/kdump-collect.sh
install -D -m0755 initramfs/dracut/module-setup.sh $(DESTDIR)$(libdir)/kdumpst/dracut/module-setup.sh
install -D -m0755 initramfs/initcpio/kdump-mkinitcpio-hook.sh $(DESTDIR)$(libdir)/kdumpst/kdump-mkinitcpio-hook.sh
install -D -m0755 initramfs/initcpio/kdump-mkinitcpio-hook.sh $(DESTDIR)$(libdir)/kdumpst/kdump-mkinitcpio-git-hook.sh
install -D -m0644 initramfs/initcpio/kdump.hook $(DESTDIR)$(libdir)/kdumpst/initcpio/kdump.hook
install -D -m0644 initramfs/initcpio/kdump.install $(DESTDIR)$(libdir)/kdumpst/initcpio/kdump.install
clean:
rm -f kdumpst-load.sh save-dumps.sh
rm -f initramfs/99-kdump-*
rm -f initramfs/99-kdump-{mkinitcpio,dracut}.hook
rm -f initramfs/dracut/{kdump-dracut-hook.sh,module-setup.sh}
rm -f initramfs/initcpio/kdump{-mkinitcpio-hook.sh,.hook,.install}

View File

@ -4,8 +4,8 @@
# Maintainer: Guilherme G. Piccoli <gpiccoli@igalia.com>
#
# alpm hook to deal with the kdump initramfs creation/deletion
# for INITRD users. This hook would act upon kernel installation,
# upgrade and removal, also on INITRD package installation.
# for initcpio or dracut. This hook would act upon kernel
# installation, upgrade and removal.
#
[Trigger]
Type = Path
@ -14,14 +14,8 @@ Operation = Remove
Operation = Upgrade
Target = usr/lib/modules/*/vmlinuz
[Trigger]
Type = Package
Operation = Install
Target = INITRD
[Action]
Description = Managing kdump minimal initramfs and INITRD hooks...
Depends=INITRD
Description = Managing kdump minimal initramfs
When = PostTransaction
Exec = /usr/lib/kdumpst/kdump-INITRD-hook.sh
Exec =/bin/bash -s -c 'if command -v mkinitcpio > /dev/null; then /usr/lib/kdumpst/kdump-mkinitcpio-hook.sh; fi && if command -v dracut > /dev/null; then /usr/lib/kdumpst/kdump-dracut-hook.sh; fi'
NeedsTargets

View File

@ -0,0 +1,18 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# Copyright (c) 2022 Valve.
# Maintainer: Guilherme G. Piccoli <gpiccoli@igalia.com>
#
# alpm hook to deal with the kdump initramfs creation/deletion
# for INITRD. This hook would act upon INITRD package installation.
#
[Trigger]
Type = Path
Operation = Install
Target = usr/bin/INITRD
[Action]
Description = Managing kdump minimal initramfs for INITRD installation
When = PostTransaction
Exec = /usr/lib/kdumpst/kdump-INITRD-hook.sh
NeedsTargets