From a0b85db18e163a14144230ae67c43ac23246b7ea Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 16 Jan 2014 11:00:54 +0100 Subject: [PATCH] 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 --- dracut-initramfs-restore.sh | 2 ++ lsinitrd.sh | 22 ++++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/dracut-initramfs-restore.sh b/dracut-initramfs-restore.sh index ec5fe180..f29c8146 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 584c29a9..f9f243bb 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 "========================================================================"