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>
This commit is contained in:
66
Makefile
66
Makefile
@ -1,3 +1,4 @@
|
||||
SHELL := /bin/bash
|
||||
prefix := /usr
|
||||
|
||||
libdir := $(prefix)/lib
|
||||
@ -7,26 +8,73 @@ systemdunitsdir := $(shell pkg-config --define-variable=prefix=$(prefix) --varia
|
||||
|| echo $(libdir)/systemd/system/)
|
||||
sysctldir := $(shell pkg-config --define-variable=prefix=$(prefix) --variable=sysctldir systemd 2>/dev/null \
|
||||
|| echo $(libdir)/sysctl.d/)
|
||||
dracutmodulesdir := $(shell pkg-config --define-variable=prefix=$(prefix) --variable=dracutmodulesdir dracut 2>/dev/null \
|
||||
|| echo $(libdir)/dracut/modules.d/)
|
||||
alpmhooksdir := $(shell echo $(sharedir)/libalpm/hooks/)
|
||||
|
||||
kdump-load.sh: kdump-load.header common.sh kdump-load.sh.in
|
||||
cat $^ > $@
|
||||
|
||||
module-setup.sh: module-setup.header common.sh module-setup.sh.in
|
||||
cat $^ > $@
|
||||
|
||||
save-dumps.sh: save-dumps.header common.sh save-dumps.sh.in
|
||||
cat $^ > $@
|
||||
|
||||
all: kdump-load.sh module-setup.sh save-dumps.sh
|
||||
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 -m0755 kdump-collect.sh $(DESTDIR)$(dracutmodulesdir)/55kdump/kdump-collect.sh
|
||||
install -D -m0755 module-setup.sh $(DESTDIR)$(dracutmodulesdir)/55kdump/module-setup.sh
|
||||
install -D -m0644 README.md $(DESTDIR)$(dracutmodulesdir)/55kdump/README
|
||||
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}
|
||||
|
||||
Reference in New Issue
Block a user