From 73f04a37497c6c11d6b2934126d87ffdd8d5867d Mon Sep 17 00:00:00 2001 From: Lichen Liu Date: Tue, 5 Nov 2024 12:07:42 +0800 Subject: [PATCH] Add kdump dracut config In some cases, customizing the first kernel's initrd is necessary by modifying the dracut `omit_dracutmodules` options, such as in Bootc or CoreOS scenarios [1]. However, these changes can unintentionally break existing functionality in kdump. For instance, setting `omit_dracutmodules='nfs'` prevents the `nfs` module from being added. Additionally, some dracut configurations [2] use `dracutmodules+='some modules'` instead of `add_dracutmodules+='some modules'`. When `dracutmodules` is non-empty, dracut includes only the specified modules, which can result in an initrd that lacks necessary modules, causing kdump to fail. Dracut upstream support --add-confdir now, kdump can use this option when building kdump initramfs. This patch moved the hardcoded dracutmodules from mkdumprd to the new conf file /lib/kdump/dracut.conf.d/99-kdump.conf, it is easier to check and modify to omit or add certain modules. This patch also initialize dracutmodules to empty to avoid the influence of other configurations. See also: [1] https://github.com/rhkdump/kdump-utils/issues/11 [2] https://issues.redhat.com/browse/RHEL-49590?focusedId=25197134&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-25197134 Suggested-by: Dave Young Suggested-by: Colin Walters Signed-off-by: Lichen Liu --- 99-kdump.conf | 3 +++ Makefile | 3 ++- mkdumprd | 11 +++++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 99-kdump.conf diff --git a/99-kdump.conf b/99-kdump.conf new file mode 100644 index 00000000..80d6e43b --- /dev/null +++ b/99-kdump.conf @@ -0,0 +1,3 @@ +dracutmodules='' +add_dracutmodules=' kdumpbase ' +omit_dracutmodules=' rdma plymouth resume ifcfg earlykdump ' diff --git a/Makefile b/Makefile index 5029a59c..5e402f03 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ manpages: install -D -m 644 kdump.conf.5 $(DESTDIR)$(mandir)/man5/kdump.conf.5 install: dracut-modules kdump-conf kdump-sysconfig manpages - mkdir -p $(DESTDIR)$(pkglibdir) + mkdir -p $(DESTDIR)$(pkglibdir)/dracut.conf.d mkdir -p -m755 $(DESTDIR)$(sysconfdir)/kdump/pre.d mkdir -p -m755 $(DESTDIR)$(sysconfdir)/kdump/post.d mkdir -p -m755 $(DESTDIR)$(localstatedir)/crash @@ -46,6 +46,7 @@ install: dracut-modules kdump-conf kdump-sysconfig manpages install -D -m 644 kdump.conf $(DESTDIR)$(sysconfdir) install -D -m 644 kdump.sysconfig $(DESTDIR)$(sysconfdir)/sysconfig/kdump install -D -m 755 kdump-lib.sh kdump-lib-initramfs.sh kdump-logger.sh -t $(DESTDIR)$(pkglibdir) + install -D -m 644 99-kdump.conf -t $(DESTDIR)$(pkglibdir)/dracut.conf.d ifeq ($(ARCH), $(filter ppc64le ppc64,$(ARCH))) install -m 755 mkfadumprd $(DESTDIR)$(sbindir) diff --git a/mkdumprd b/mkdumprd index 19333a0c..a6bdebbb 100644 --- a/mkdumprd +++ b/mkdumprd @@ -29,7 +29,6 @@ SSH_KEY_LOCATION=$DEFAULT_SSHKEY SAVE_PATH=$(get_save_path) declare -a dracut_args -dracut_args+=(--add kdumpbase) dracut_args+=(--quiet) dracut_args+=(--hostonly) dracut_args+=(--hostonly-cmdline) @@ -37,7 +36,6 @@ dracut_args+=(--hostonly-i18n) dracut_args+=(--hostonly-mode strict) dracut_args+=(--hostonly-nics '') dracut_args+=(--aggressive-strip) -dracut_args+=(--omit "rdma plymouth resume ifcfg earlykdump") MKDUMPRD_TMPDIR="$(mktemp -d -t mkdumprd.XXXXXX)" [ -d "$MKDUMPRD_TMPDIR" ] || perror_exit "dracut: mktemp -p -d -t dracut.XXXXXX failed." @@ -441,4 +439,13 @@ elif ! is_fadump_capable && \ add_mount "$status_target" fi +# Use kdump managed dracut profile. +[[ $kdump_dracut_confdir ]] || kdump_dracut_confdir=/lib/kdump/dracut.conf.d +if [[ "$(dracut --help)" == *--add-confdir* ]] && [[ -d "$kdump_dracut_confdir" ]]; then + dracut_args+=("--add-confdir" "$kdump_dracut_confdir") +else + dracut_args+=(--add kdumpbase) + dracut_args+=(--omit "rdma plymouth resume ifcfg earlykdump") +fi + dracut "${dracut_args[@]}" "$@"