From: Koen Kooi Date: Thu, 16 Jan 2014 10:00:54 +0000 (+0100) Subject: dracut-initramfs-restore,lsinitrd: add LZ4 support X-Git-Tag: 035~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=149965bd130dae5d724340f4d9d47bed818b9144;p=thirdparty%2Fdracut.git dracut-initramfs-restore,lsinitrd: add LZ4 support Dracut claims to have LZ4 support, but trying to use it will result in an xzcat failure at the end due to missing CAT support. The lz4 command chokes on '--', so abstract that out into the CAT select. Something similar will need to be done for LZO. Signed-off-by: Koen Kooi --- diff --git a/dracut-initramfs-restore.sh b/dracut-initramfs-restore.sh index ec5fe180f..f29c8146e 100644 --- a/dracut-initramfs-restore.sh +++ b/dracut-initramfs-restore.sh @@ -20,6 +20,8 @@ if zcat "$IMG" | cpio -id --quiet >/dev/null; then rm -f -- .need_shutdown elif xzcat "$IMG" | cpio -id --quiet >/dev/null; then rm -f -- .need_shutdown +elif lz4 -d -c "$IMG" | cpio -id --quiet >/dev/null; then + rm -f -- .need_shutdown else # something failed, so we clean up echo "Unpacking of $IMG to /run/initramfs failed" >&2 diff --git a/lsinitrd.sh b/lsinitrd.sh index 584c29a97..f9f243bbc 100755 --- a/lsinitrd.sh +++ b/lsinitrd.sh @@ -106,15 +106,17 @@ fi read -N 6 bin < "$image" case $bin in $'\x1f\x8b'*) - CAT="zcat";; + CAT="zcat --";; BZh*) - CAT="bzcat";; + CAT="bzcat --";; $'\x71\xc7'*|070701) - CAT="cat";; + CAT="cat --";; + $'\x04\x22'*) + CAT="lz4 -d -c";; *) - CAT="xzcat"; + CAT="xzcat --"; if echo "test"|xz|xzcat --single-stream >/dev/null 2>&1; then - CAT="xzcat --single-stream" + CAT="xzcat --single-stream --" fi ;; esac @@ -126,7 +128,7 @@ if (( ${#filenames[@]} > 0 )); then for f in ${!filenames[@]}; do [[ $nofileinfo ]] || echo "initramfs:/$f" [[ $nofileinfo ]] || echo "========================================================================" - $CAT -- $image | cpio --extract --verbose --quiet --to-stdout $f 2>/dev/null + $CAT $image | cpio --extract --verbose --quiet --to-stdout $f 2>/dev/null ((ret+=$?)) [[ $nofileinfo ]] || echo "========================================================================" [[ $nofileinfo ]] || echo @@ -134,16 +136,16 @@ if (( ${#filenames[@]} > 0 )); then else echo "Image: $image: $(du -h $image | while read a b; do echo $a;done)" echo "========================================================================" - version=$($CAT -- "$image" | cpio --extract --verbose --quiet --to-stdout -- '*lib/dracut/dracut-*' 2>/dev/null) + version=$($CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- '*lib/dracut/dracut-*' 2>/dev/null) ((ret+=$?)) echo "$version with dracut modules:" - $CAT -- "$image" | cpio --extract --verbose --quiet --to-stdout -- '*lib/dracut/modules.txt' 2>/dev/null + $CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- '*lib/dracut/modules.txt' 2>/dev/null ((ret+=$?)) echo "========================================================================" if [ "$sorted" -eq 1 ]; then - $CAT -- "$image" | cpio --extract --verbose --quiet --list | sort -n -k5 + $CAT "$image" | cpio --extract --verbose --quiet --list | sort -n -k5 else - $CAT -- "$image" | cpio --extract --verbose --quiet --list | sort -k9 + $CAT "$image" | cpio --extract --verbose --quiet --list | sort -k9 fi ((ret+=$?)) echo "========================================================================"