kdump-utils/0015-mkdumprd-explicitly-add-dracut-99squash-module.patch
Philipp Rudo d38412baaf Enable erofs support for the kdump initrd
Resolves: RHEL-50942
Upstream: https://github.com/rhkdump/kdump-utils.git
Conflict: Dropped hunks concerning OVS bridge support in patch 3 and 5
	   due to missing 224d310 ("Support setting up Open vSwitch
	   (Ovs) Bridge network")

Also contains upstream commit

commit 2970176d9e9b7b6a1191a9ee54423d2f1c56fbaf
Author: Philipp Rudo <prudo@redhat.com>
Date:   Tue Sep 24 10:39:32 2024 +0200

    spec: fix patching of files in subdirectories

    With 23df04b ("dracut: create sub-directories for dracut modules") the
    dracut modules were moved to subdirectories. This causes problems when
    someone wants to include a patch to the spec file to change one of the
    files in those subdirectories. Reason is that '%autosetup' in the spec
    file calls 'patch' per default. 'patch' however, will strip all
    directories when it is called without option -p. Which means that it
    will search the file in the root directory and then fail because it
    cannot find it. Thus add option -p1 to '%autosetup' which will be passed
    on to 'patch'. Choose -p1 as that will work with the most common patch
    creation tools like git and packit.

    Signed-off-by: Philipp Rudo <prudo@redhat.com>

Signed-off-by: Philipp Rudo <prudo@redhat.com>
2024-09-27 15:48:12 +02:00

112 lines
4.0 KiB
Diff

From 70212dd7796cfe0df6a9fe9e3cb9c7b62231ba33 Mon Sep 17 00:00:00 2001
From: Philipp Rudo <prudo@redhat.com>
Date: Tue, 13 Aug 2024 17:09:32 +0200
Subject: [PATCH 15/16] mkdumprd: explicitly add dracut 99squash module
The handling of compression in the initrd currently is a total mess.
There are multiple problems:
1) It is handled in two different locations, mkdumprd and
99kdumpbase, making the code unnecessarily complex.
2) While mkdumprd only adds the --squash-compressor option when there is
no compression requested in kdump.conf:dracut_args, 99kdumpbase
unconditionally adds the 99squash module. But once 99squash is added
dracut ignores all compression options passed on the command line and
produces an uncompressed initrd (assuming the compression is done in
the squashfs image). So adding a compression option to dracut_args
will neither compress the initrd nor the squashfs image.
3) To depend on 99squash, 99kdumpbase only checks whether the required
kernel modules are present but doesn't check whether the
squashfs-tools are installed. This can lead to failures when building
the initrd as 99squash fails to install. At the moment this only
works as the dracut-squash rpm depends on the squashfs-tools. But
once support for erofs is added this might no longer be the case.
4) In case 99squash cannot be used mkdumprd compresses the initrd with
zstd. But that doesn't really makes sense. For one compressing the
initrd only reduces the on-disk size but not the memory usage during
runtime of the initrd. Plus in case no compression is specified
dracut will automatically compress the initrd. For that it checks for
the 'best' available compression algorithm with zstd being the
default.
Clean this mess up be moving everything to mkdumprd, only addding
99squash when there is no compression given in the dracut_args, drop
setting the --compress option and, only include 99squash when the
squashfs-tools are installed.
Note: Only checking the squashfs-tools is sufficient as it doesn't make
sense to have them installed, when the kernel doesn't support squashfs.
There might be a use case to build images that then get used on an other
machine where the kernel supports it. But as the initrd is build with
--hostonly that is no use case we need to consider for kdump.
Signed-off-by: Philipp Rudo <prudo@redhat.com>
---
dracut/99kdumpbase/module-setup.sh | 6 ------
kdump-lib.sh | 10 ----------
mkdumprd | 7 +++----
3 files changed, 3 insertions(+), 20 deletions(-)
diff --git a/dracut/99kdumpbase/module-setup.sh b/dracut/99kdumpbase/module-setup.sh
index 7508851..34593e4 100755
--- a/dracut/99kdumpbase/module-setup.sh
+++ b/dracut/99kdumpbase/module-setup.sh
@@ -44,12 +44,6 @@ depends() {
[[ " $omit_dracutmodules " != *\ $1\ * ]] && _dep="$_dep $1"
}
- if is_squash_available; then
- add_opt_module squash
- else
- dwarning "Required modules to build a squashed kdump image is missing!"
- fi
-
if is_wdt_active; then
add_opt_module watchdog
fi
diff --git a/kdump-lib.sh b/kdump-lib.sh
index ba853d9..c14e75e 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -43,16 +43,6 @@ is_sme_or_sev_active()
journalctl -q --dmesg --grep "^Memory Encryption Features active: AMD (SME|SEV)$" >/dev/null 2>&1
}
-is_squash_available()
-{
- local _version kmodule
-
- _version=$(_get_kdump_kernel_version)
- for kmodule in squashfs overlay loop; do
- modprobe -S "$_version" --dry-run $kmodule &> /dev/null || return 1
- done
-}
-
has_command()
{
[[ -x $(command -v "$1") ]]
diff --git a/mkdumprd b/mkdumprd
index 517ce19..366bcdb 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -379,10 +379,9 @@ done <<< "$(kdump_read_conf)"
handle_default_dump_target
if ! have_compression_in_dracut_args; then
- if is_squash_available; then
- dracut_args+=("--squash-compressor" "zstd")
- elif has_command zstd; then
- dracut_args+=("--compress" "zstd")
+ if has_command mksquashfs; then
+ dracut_args+=(--add squash)
+ dracut_args+=(--squash-compressor zstd)
fi
fi
--
2.46.1