Seperate dracut and dracut-squash compressor for zstd
Upstream: fedora
Resolves: bz2045949
Resolves: bz2044804
Conflict: none
commit fc1c79ffd2
Author: Tao Liu <ltao@redhat.com>
Date:   Sat Oct 8 12:09:08 2022 +0800
    Seperate dracut and dracut-squash compressor for zstd
    Previously kexec-tools will pass "--compress zstd" to dracut. It
    will make dracut to decide whether: a) call mksquashfs to make a
    zstd format squash-root.img, b) call cmd zstd to make a initramfs.
    Since dracut(>= 057) has decoupled the compressor for dracut and
    dracut-squash, So in this patch, we will pass the compressor seperately.
    Note:
    The is_squash_available && !dracut_has_option --squash-compressor
    && !is_zsdt_command_available case is left unprocessed on purpose.
    Actually, the situation when we want to call zstd compression is:
    1) If squash function OK, we want dracut to invoke mksquashfs to make
    a zstd format squash-root.img within initramfs.
    2) If squash function is not OK, and cmd zstd presents, we want dracut
    to invoke cmd zstd to make a zstd format initramfs.
    is_zstd_command_available check can handle case 2 completely.
    However, for the is_squash_available check, it cannot handle case 1
    completely. It only checks if the kernel supports squashfs, it doesn't
    check whether the squash module has been added by dracut when making
    initramfs. In fact, in kexec-tools we are unable to do the check,
    there are multiple ways to forbit dracut to load a module, such as
    "dracut -o module" and "omit_dracutmodules in dracut.conf".
    When squash dracut module is omitted, is_squash_available check will
    still pass, so "--compress zstd" will be appended to dracut cmdline,
    and it will call cmd zstd to do the compression. However cmd zstd may
    not exist, so it fails.
    The previous "--compress zstd" is ambiguous, after the intro of
    "--squash-compressor", "--squash-compressor" only effect for
    mksquashfs and "--compress" only effect for specific cmd.
    So for the is_squash_available && !dracut_has_option
    --squash-compressor && !is_zsdt_command_available case, we just leave
    it to be handled the default way.
    Reviewed-by: Philipp Rudo <prudo@redhat.com>
    Signed-off-by: Tao Liu <ltao@redhat.com>
Signed-off-by: Tao Liu <ltao@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									8b72bcfbab
								
							
						
					
					
						commit
						b5a9e54629
					
				@ -34,6 +34,12 @@ is_zstd_command_available()
 | 
			
		||||
	[[ -x "$(command -v zstd)" ]]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dracut_have_option()
 | 
			
		||||
{
 | 
			
		||||
	local _option=$1
 | 
			
		||||
	! dracut "$_option" 2>&1 | grep -q "unrecognized option"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
perror_exit()
 | 
			
		||||
{
 | 
			
		||||
	derror "$@"
 | 
			
		||||
@ -448,8 +454,7 @@ is_wdt_active()
 | 
			
		||||
 | 
			
		||||
have_compression_in_dracut_args()
 | 
			
		||||
{
 | 
			
		||||
	[[ "$(kdump_get_conf_val dracut_args)" =~ \
 | 
			
		||||
		(^|[[:space:]])--(gzip|bzip2|lzma|xz|lzo|lz4|zstd|no-compress|compress)([[:space:]]|$) ]]
 | 
			
		||||
	[[ "$(kdump_get_conf_val dracut_args)" =~ (^|[[:space:]])--(gzip|bzip2|lzma|xz|lzo|lz4|zstd|no-compress|compress|squash-compressor)([[:space:]]|$) ]]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# If "dracut_args" contains "--mount" information, use it
 | 
			
		||||
 | 
			
		||||
@ -71,7 +71,6 @@ Requires: dracut >= 050
 | 
			
		||||
Requires: dracut-network >= 050
 | 
			
		||||
Requires: dracut-squash >= 050
 | 
			
		||||
Requires: ethtool
 | 
			
		||||
Recommends: zstd
 | 
			
		||||
Recommends: grubby
 | 
			
		||||
Recommends: hostname
 | 
			
		||||
BuildRequires: make
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								mkdumprd
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								mkdumprd
									
									
									
									
									
								
							@ -432,10 +432,9 @@ done <<< "$(kdump_read_conf)"
 | 
			
		||||
handle_default_dump_target
 | 
			
		||||
 | 
			
		||||
if ! have_compression_in_dracut_args; then
 | 
			
		||||
	# Here zstd is set as the default compression method. If squash module
 | 
			
		||||
	# is available for dracut, libzstd will be used by mksquashfs. If
 | 
			
		||||
	# squash module is unavailable, command zstd will be used instead.
 | 
			
		||||
	if is_squash_available || is_zstd_command_available; then
 | 
			
		||||
	if is_squash_available && dracut_have_option "--squash-compressor"; then
 | 
			
		||||
		add_dracut_arg "--squash-compressor" "zstd"
 | 
			
		||||
	elif is_zstd_command_available; then
 | 
			
		||||
		add_dracut_arg "--compress" "zstd"
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@ -64,7 +64,9 @@ fi
 | 
			
		||||
 | 
			
		||||
# Same as setting zstd in mkdumprd
 | 
			
		||||
if ! have_compression_in_dracut_args; then
 | 
			
		||||
	if is_squash_available || is_zstd_command_available; then
 | 
			
		||||
	if is_squash_available && dracut_have_option "--squash-compressor"; then
 | 
			
		||||
		_dracut_isolate_args+=(--squash-compressor zstd)
 | 
			
		||||
	elif is_zstd_command_available; then
 | 
			
		||||
		_dracut_isolate_args+=(--compress zstd)
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user