From 462eef9828060e09e9e1dc32a151dc9f20a5b2de Mon Sep 17 00:00:00 2001 From: "Guilherme G. Piccoli" Date: Thu, 4 Jan 2024 04:50:37 +0000 Subject: [PATCH] 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 --- Makefile | 14 +++++--------- ...{alpm-hook.generic => 99-kdump-kernel.hook} | 14 ++++---------- initramfs/alpm-hook.INITRD | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 19 deletions(-) rename initramfs/{alpm-hook.generic => 99-kdump-kernel.hook} (51%) create mode 100644 initramfs/alpm-hook.INITRD diff --git a/Makefile b/Makefile index d03f1d7..afe9a05 100644 --- a/Makefile +++ b/Makefile @@ -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} diff --git a/initramfs/alpm-hook.generic b/initramfs/99-kdump-kernel.hook similarity index 51% rename from initramfs/alpm-hook.generic rename to initramfs/99-kdump-kernel.hook index 0d3cc0e..4f072b4 100644 --- a/initramfs/alpm-hook.generic +++ b/initramfs/99-kdump-kernel.hook @@ -4,8 +4,8 @@ # Maintainer: Guilherme G. Piccoli # # 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 diff --git a/initramfs/alpm-hook.INITRD b/initramfs/alpm-hook.INITRD new file mode 100644 index 0000000..d088feb --- /dev/null +++ b/initramfs/alpm-hook.INITRD @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# Copyright (c) 2022 Valve. +# Maintainer: Guilherme G. Piccoli +# +# 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