]> git.ipfire.org Git - thirdparty/dracut-ng.git/commitdiff
feat(dracut): support setting compression level separately
authorBenjamin Drung <benjamin.drung@canonical.com>
Sun, 28 Sep 2025 11:58:00 +0000 (13:58 +0200)
committerNeal Gompa (ニール・ゴンパ) <ngompa13@gmail.com>
Tue, 30 Sep 2025 20:50:45 +0000 (16:50 -0400)
Extend the Dracut configuration to configure the default compression
level for each compression format (e. g. `compress_level_zstd` for
zstd). Add `--compress-level` option to `dracut` to override the
compression level from the configuration.

Then users could just call `dracut --zstd --compress-level 3` instead of
`dracut --compress="zstd -3 -T0 -q"`.

dracut.conf.d/opensuse/01-dist.conf
dracut.sh
man/dracut.conf.5.adoc
shell-completion/bash/dracut

index d97280a5f2eb239ceee4f5ef965de611dc6cfc7a..b19b5087f654522191d76698919e53bc877fe3f5 100644 (file)
@@ -8,7 +8,8 @@ hostonly="yes"
 hostonly_cmdline="yes"
 
 initrdname="initrd-$kernel"
-compress="zstd -3 -T0 -q"
+compress="zstd"
+compress_level_zstd="3"
 
 i18n_vars="/etc/sysconfig/language:RC_LANG-LANG,RC_LC_ALL-LC_ALL /etc/sysconfig/console:CONSOLE_UNICODEMAP-FONT_UNIMAP,CONSOLE_FONT-FONT,CONSOLE_SCREENMAP-FONT_MAP /etc/sysconfig/keyboard:KEYTABLE-KEYMAP"
 omit_drivers+=" i2o_scsi "
index a0b24280d35356d79bc8b97c170a5a2a2779c043..0e976f7c51e04844ccfd0bdb937de7a4d5b2dd30 100755 (executable)
--- a/dracut.sh
+++ b/dracut.sh
@@ -264,6 +264,8 @@ Creates initial ramdisk images for preloading modules
                          passed compression program.  Make sure your kernel
                          knows how to decompress the generated initramfs,
                          otherwise you will not be able to boot.
+  --compress-level [LEVEL]
+                        Compression level passed to compression program.
   --no-compress         Do not compress the generated initramfs. This will
                          override any other compression options.
   --squash-compressor [COMPRESSION]
@@ -419,6 +421,7 @@ rearrange_params() {
             --long sysroot: \
             --long stdlog: \
             --long compress: \
+            --long compress-level: \
             --long squash-compressor: \
             --long prefix: \
             --long rebuild: \
@@ -753,6 +756,11 @@ while :; do
             PARMS_TO_STORE+=" '$2'"
             shift
             ;;
+        --compress-level)
+            compress_level_l="$2"
+            PARMS_TO_STORE+=" '$2'"
+            shift
+            ;;
         --squash-compressor)
             squash_compress_l="$2"
             PARMS_TO_STORE+=" '$2'"
@@ -1155,6 +1163,15 @@ drivers_dir="${drivers_dir%"${drivers_dir##*[!/]}"}"
 [[ $tmpdir ]] || tmpdir="${dracutsysrootdir-}"/var/tmp
 [[ $INITRD_COMPRESS ]] && compress=$INITRD_COMPRESS
 [[ $compress_l ]] && compress=$compress_l
+[[ $compress_level_l ]] && {
+    compress_level_bzip2=$compress_level_l
+    compress_level_gzip=$compress_level_l
+    compress_level_lz4=$compress_level_l
+    compress_level_lzma=$compress_level_l
+    compress_level_lzop=$compress_level_l
+    compress_level_xz=$compress_level_l
+    compress_level_zstd=$compress_level_l
+}
 [[ $squash_compress_l ]] && squash_compress=$squash_compress_l
 [[ $enhanced_cpio_l ]] && enhanced_cpio=$enhanced_cpio_l
 [[ $show_modules_l ]] && show_modules=$show_modules_l
@@ -2641,41 +2658,41 @@ fi
 case $compress in
     bzip2 | lbzip2)
         if [[ $compress == lbzip2 ]] || command -v "$DRACUT_COMPRESS_LBZIP2" &> /dev/null; then
-            compress="$DRACUT_COMPRESS_LBZIP2 -9"
+            compress="$DRACUT_COMPRESS_LBZIP2 -${compress_level_bzip2-9}"
         else
-            compress="$DRACUT_COMPRESS_BZIP2 -9"
+            compress="$DRACUT_COMPRESS_BZIP2 -${compress_level_bzip2-9}"
         fi
-        compress_3cpio="bzip2 -9"
+        compress_3cpio="bzip2 -${compress_level_bzip2-9}"
         ;;
     lzma)
-        compress="$DRACUT_COMPRESS_LZMA -9 -T0"
-        compress_3cpio="lzma -9"
+        compress="$DRACUT_COMPRESS_LZMA -${compress_level_lzma-9} -T0"
+        compress_3cpio="lzma -${compress_level_lzma-9}"
         ;;
     xz)
-        compress="$DRACUT_COMPRESS_XZ --check=crc32 --lzma2=dict=1MiB -T0"
-        compress_3cpio=xz
+        compress="${DRACUT_COMPRESS_XZ}${compress_level_xz:+" -${compress_level_xz}"} --check=crc32 --lzma2=dict=1MiB -T0"
+        compress_3cpio="xz${compress_level_xz:+" -${compress_level_xz}"}"
         ;;
     gzip | pigz)
         if [[ $compress == pigz ]] || command -v "$DRACUT_COMPRESS_PIGZ" &> /dev/null; then
-            compress="$DRACUT_COMPRESS_PIGZ -9 -n -T -R"
+            compress="$DRACUT_COMPRESS_PIGZ -${compress_level_gzip-9} -n -T -R"
         elif command -v gzip &> /dev/null && $DRACUT_COMPRESS_GZIP --help 2>&1 | grep -q rsyncable; then
-            compress="$DRACUT_COMPRESS_GZIP -n -9 --rsyncable"
+            compress="$DRACUT_COMPRESS_GZIP -n -${compress_level_gzip-9} --rsyncable"
         else
-            compress="$DRACUT_COMPRESS_GZIP -n -9"
+            compress="$DRACUT_COMPRESS_GZIP -n -${compress_level_gzip-9}"
         fi
-        compress_3cpio="gzip -9"
+        compress_3cpio="gzip -${compress_level_gzip-9}"
         ;;
     lzo | lzop)
-        compress="$DRACUT_COMPRESS_LZOP -9"
-        compress_3cpio="lzop -9"
+        compress="$DRACUT_COMPRESS_LZOP -${compress_level_lzop-9}"
+        compress_3cpio="lzop -${compress_level_lzop-9}"
         ;;
     lz4)
-        compress="$DRACUT_COMPRESS_LZ4 -l -9"
-        compress_3cpio="lz4 -9"
+        compress="$DRACUT_COMPRESS_LZ4 -l -${compress_level_lz4-9}"
+        compress_3cpio="lz4 -${compress_level_lz4-9}"
         ;;
     zstd)
-        compress="$DRACUT_COMPRESS_ZSTD -15 -q -T0"
-        compress_3cpio="zstd -15"
+        compress="$DRACUT_COMPRESS_ZSTD -${compress_level_zstd-15} -q -T0"
+        compress_3cpio="zstd -${compress_level_zstd-15}"
         ;;
     cat)
         compress_3cpio=
@@ -2685,25 +2702,25 @@ esac
 if [[ $CPIO == 3cpio ]] && ! [[ -v compress_3cpio ]]; then
     case "${compress%% *}" in
         "$DRACUT_COMPRESS_LBZIP2" | "$DRACUT_COMPRESS_BZIP2" | lbzip2 | bzip2 | */lbzip2 | */bzip2)
-            compress_3cpio="bzip2 -9"
+            compress_3cpio="bzip2 -${compress_level_bzip2-9}"
             ;;
         "$DRACUT_COMPRESS_LZMA" | lzma | */lzma)
-            compress_3cpio="lzma -9"
+            compress_3cpio="lzma -${compress_level_lzma-9}"
             ;;
         "$DRACUT_COMPRESS_XZ" | xz | */xz)
-            compress_3cpio=xz
+            compress_3cpio="xz${compress_level_xz:+" -${compress_level_xz}"}"
             ;;
         "$DRACUT_COMPRESS_PIGZ" | "$DRACUT_COMPRESS_GZIP" | pigz | gzip | */pigz | */gzip)
-            compress_3cpio="gzip -9"
+            compress_3cpio="gzip -${compress_level_gzip-9}"
             ;;
         "$DRACUT_COMPRESS_LZOP" | lzop | */lzop)
-            compress_3cpio="lzop -9"
+            compress_3cpio="lzop -${compress_level_lzop-9}"
             ;;
         "$DRACUT_COMPRESS_ZSTD" | zstd | */zstd)
-            compress_3cpio="zstd -15"
+            compress_3cpio="zstd -${compress_level_zstd-15}"
             ;;
         "$DRACUT_COMPRESS_LZ4" | lz4 | */lz4)
-            compress_3cpio="lz4 -9"
+            compress_3cpio="lz4 -${compress_level_lz4-9}"
             ;;
         "$DRACUT_COMPRESS_CAT" | cat | */cat)
             compress_3cpio=
index d455914882e1aa98fbb1335fd8de21d0737f53b8..ba27382efe61254c55426279fdb767fbe75ef7ea 100644 (file)
@@ -130,6 +130,27 @@ kernel cannot decompress.
 +
 To disable compression, use "cat".
 
+*compress_level_bzip2=*"__\{1-9\}__"::
+Compression level when using bzip2 compression (default=9).
+
+*compress_level_gzip=*"__\{1-9\}__"::
+Compression level when using gzip compression (default=9).
+
+*compress_level_lz4=*"__\{1-12\}__"::
+Compression level when using lz4 compression (default=9).
+
+*compress_level_lzma=*"__\{0-9\}__"::
+Compression level when using lzma compression (default=9).
+
+*compress_level_lzop=*"__\{1-9\}__"::
+Compression level when using lzop compression (default=9).
+
+*compress_level_xz=*"__\{0-9\}__"::
+Compression level when using xz compression (default=unset, i.e. use xz default).
+
+*compress_level_zstd=*"__\{1-19\}__"::
+Compression level when using zstd compression (default=15).
+
 *squash_compress=*"__{<compressor [args ...]>}__"::
 Compress the squashfs image using the passed compressor and compressor specific
 options for `mksquashfs`.  You can refer to `mksquashfs` manual for supported
index 51bd33c7b8bc11dc7f3da26ac8f6a69e43af270b..0ef38e54e63f50f4ebf0bd6d1d90cea3dcbf6283 100644 (file)
@@ -47,7 +47,7 @@ _dracut() {
             --kernel-cmdline --sshkey --persistent-policy --install-optional
             --loginstall --uefi-stub --kernel-image --squash-compressor
             --sysroot --hostonly-mode --hostonly-nics --include --logfile
-            --uefi-splash-image --sbat --add-confdir
+            --uefi-splash-image --sbat --add-confdir --compress-level
             '
     )
 
@@ -66,6 +66,9 @@ _dracut() {
             -a | -m | -o | --add | --modules | --omit)
                 comps=$(dracut --list-modules 2> /dev/null)
                 ;;
+            --compress-level)
+                comps="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19"
+                ;;
             --persistent-policy)
                 comps=$(
                     cd /dev/disk/ || return 0