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 save-dumps.sh: save-dumps.header common.sh save-dumps.sh.in
cat $^ > $@ cat $^ > $@
99-kdump-dracut.hook: initramfs/alpm-hook.generic 99-kdump-dracut.hook: initramfs/alpm-hook.INITRD
sed 's/INITRD/dracut/g' $^ > initramfs/$@ sed 's/INITRD/dracut/g' $^ > initramfs/$@
kdump-dracut-hook.sh: common.sh initramfs/dracut/dracut-common.sh 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 .PHONY: dracut
dracut: 99-kdump-dracut.hook kdump-dracut-hook.sh module-setup.sh 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/$@ 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 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.header > initramfs/alpm-header-initcpio
sed 's/INITRD/mkinitcpio/g' initramfs/alpm-script.sh.in > initramfs/alpm-script.sh.in-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/$@ cat $^ > initramfs/initcpio/$@
.PHONY: mkinitcpio .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 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 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-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.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/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/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/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-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.hook $(DESTDIR)$(libdir)/kdumpst/initcpio/kdump.hook
install -D -m0644 initramfs/initcpio/kdump.install $(DESTDIR)$(libdir)/kdumpst/initcpio/kdump.install install -D -m0644 initramfs/initcpio/kdump.install $(DESTDIR)$(libdir)/kdumpst/initcpio/kdump.install
clean: clean:
rm -f kdumpst-load.sh save-dumps.sh 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/dracut/{kdump-dracut-hook.sh,module-setup.sh}
rm -f initramfs/initcpio/kdump{-mkinitcpio-hook.sh,.hook,.install} rm -f initramfs/initcpio/kdump{-mkinitcpio-hook.sh,.hook,.install}

View File

@ -4,8 +4,8 @@
# Maintainer: Guilherme G. Piccoli <gpiccoli@igalia.com> # Maintainer: Guilherme G. Piccoli <gpiccoli@igalia.com>
# #
# alpm hook to deal with the kdump initramfs creation/deletion # alpm hook to deal with the kdump initramfs creation/deletion
# for INITRD users. This hook would act upon kernel installation, # for initcpio or dracut. This hook would act upon kernel
# upgrade and removal, also on INITRD package installation. # installation, upgrade and removal.
# #
[Trigger] [Trigger]
Type = Path Type = Path
@ -14,14 +14,8 @@ Operation = Remove
Operation = Upgrade Operation = Upgrade
Target = usr/lib/modules/*/vmlinuz Target = usr/lib/modules/*/vmlinuz
[Trigger]
Type = Package
Operation = Install
Target = INITRD
[Action] [Action]
Description = Managing kdump minimal initramfs and INITRD hooks... Description = Managing kdump minimal initramfs
Depends=INITRD
When = PostTransaction 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 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