Files
kdumpst/Makefile
Guilherme G. Piccoli b834754cf9 initramfs: Switch to the alpm-hooks approach, supporting both initcpio/dracut
This is one of the major changes/refactors so far, touches a lot of
files, and more important, it completely changes some premises.
With this patch, we now support fully both dracut-based and initcpio
initramfs systems.

For that to happen, we needed to decouple the initramfs creation from
scripts, by using alpm-hooks. These hooks allow scripts to be run on
events like kernel package installation or in the installation of the very
package responsible to create the initramfs image. We still have the
"kdump-load create-initrd" command though.

One of the biggest modifications here was in the Makefile, that now
composes multiple files by changing keywords (like INITRD) to the
respective initramfs system (dracut or mkinitcpio). Notice that this
brought some extra complexity to the package.

The logic used for supporting both initramfs systems was basically
de-duplicate all possible code (having dup code in common files),
using Makefile tricks to merge such files and have the unique
bits in dracut/initcpio specific files. We currently support dracut
and both mkinitcpio and mkinitcpio-git packages.

Caveats: currently the initramfs specific package removal is not handled
here. So, if the user has dracut and installs kdump, we install the
dracut hooks. In case this user decides to remove dracut and installs
mkinitcpio, we install the mkinitcpio hooks and all should work, but
the previous dracut hooks installed are not unistalled by us; likely
the dracut package removal would drop the files itself.

This was a deliberate move to avoid even more alpm-hooks, should be
a rare case and as said, the package removal should clear the files
itself, without requiring our interaction. Also, by using the
alpm-hooks, we see "errors" (warnings really) about the other
initramfs package not being present - not sure if it's possible to
disable this behavior.

Finally, while at it:

* Added a new approach to dracut initramfs creation to pick the most
common block drivers - since it's hostonly, it doesn't add the ones
that aren't loaded, hence image is not bloated by that.

* Chenged the "command -v makedumpfile" validation to something
more elegant - thanks for the suggestion Clayton (@craftyguy).

Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
2023-03-31 15:34:42 -03:00

81 lines
4.1 KiB
Makefile

SHELL := /bin/bash
prefix := /usr
libdir := $(prefix)/lib
sharedir := $(prefix)/share
systemdunitsdir := $(shell pkg-config --define-variable=prefix=$(prefix) --variable=systemdsystemunitdir systemd 2>/dev/null \
|| echo $(libdir)/systemd/system/)
sysctldir := $(shell pkg-config --define-variable=prefix=$(prefix) --variable=sysctldir systemd 2>/dev/null \
|| echo $(libdir)/sysctl.d/)
alpmhooksdir := $(shell echo $(sharedir)/libalpm/hooks/)
kdump-load.sh: kdump-load.header common.sh kdump-load.sh.in
cat $^ > $@
save-dumps.sh: save-dumps.header common.sh save-dumps.sh.in
cat $^ > $@
99-kdump-dracut.hook: initramfs/alpm-hook.generic
sed 's/INITRD/dracut/g' $^ > initramfs/$@
kdump-dracut-hook.sh: common.sh initramfs/dracut/dracut-common.sh
sed 's/INITRD/dracut/g' initramfs/alpm-script.header > initramfs/alpm-header-dracut
sed 's/INITRD/dracut/g' initramfs/alpm-script.sh.in > initramfs/alpm-script.sh.in-dracut
cat initramfs/alpm-header-dracut $^ initramfs/alpm-script.sh.in-dracut > initramfs/dracut/$@
rm -f initramfs/alpm-header-dracut initramfs/alpm-script.sh.in-dracut
module-setup.sh: initramfs/dracut/module-setup.header common.sh initramfs/dracut/module-setup.sh.in
cat $^ > initramfs/dracut/$@
.PHONY: dracut
dracut: 99-kdump-dracut.hook kdump-dracut-hook.sh module-setup.sh
99-kdump-mkinitcpio.hook: initramfs/alpm-hook.generic
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
cat initramfs/alpm-header-initcpio $^ initramfs/alpm-script.sh.in-initcpio > initramfs/initcpio/$@
rm -f initramfs/alpm-header-initcpio initramfs/alpm-script.sh.in-initcpio
kdump.hook: initramfs/kdump-collect.sh
sed 's/\#ENTRY POINT/run_hook() \{/g' $^ > initramfs/initcpio/$@
sed -i 's/\#END/\}/g' initramfs/initcpio/$@
kdump.install: initramfs/initcpio/kdump.install.header common.sh initramfs/initcpio/kdump.install.in
cat $^ > initramfs/initcpio/$@
.PHONY: mkinitcpio
mkinitcpio: 99-kdump-mkinitcpio.hook 99-kdump-mkinitcpio-git.hook kdump-mkinitcpio-hook.sh kdump.hook kdump.install
all: kdump-load.sh save-dumps.sh dracut mkinitcpio
install: all
install -D -m0644 kdump-init.service $(DESTDIR)$(systemdunitsdir)/kdump-init.service
install -D -m0644 20-panic-sysctls.conf $(DESTDIR)$(sysctldir)/20-panic-sysctls.conf
install -D -m0644 README.md $(DESTDIR)$(libdir)/kdump/README.md
install -D -m0755 kdump-load.sh $(DESTDIR)$(libdir)/kdump/kdump-load.sh
install -D -m0755 save-dumps.sh $(DESTDIR)$(libdir)/kdump/save-dumps.sh
install -D -m0644 00-default.conf $(DESTDIR)$(sharedir)/kdump.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 -m0755 initramfs/dracut/kdump-dracut-hook.sh $(DESTDIR)$(libdir)/kdump/kdump-dracut-hook.sh
install -D -m0755 initramfs/kdump-collect.sh $(DESTDIR)$(libdir)/kdump/dracut/kdump-collect.sh
install -D -m0755 initramfs/dracut/module-setup.sh $(DESTDIR)$(libdir)/kdump/dracut/module-setup.sh
install -D -m0755 initramfs/initcpio/kdump-mkinitcpio-hook.sh $(DESTDIR)$(libdir)/kdump/kdump-mkinitcpio-hook.sh
install -D -m0755 initramfs/initcpio/kdump-mkinitcpio-hook.sh $(DESTDIR)$(libdir)/kdump/kdump-mkinitcpio-git-hook.sh
install -D -m0644 initramfs/initcpio/kdump.hook $(DESTDIR)$(libdir)/kdump/initcpio/kdump.hook
install -D -m0644 initramfs/initcpio/kdump.install $(DESTDIR)$(libdir)/kdump/initcpio/kdump.install
clean:
rm -f kdump-load.sh save-dumps.sh
rm -f initramfs/99-kdump-*
rm -f initramfs/dracut/{kdump-dracut-hook.sh,module-setup.sh}
rm -f initramfs/initcpio/kdump{-mkinitcpio-hook.sh,.hook,.install}