Blob Blame History Raw
From a0b85db18e163a14144230ae67c43ac23246b7ea Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@dominion.thruhere.net>
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 <koen@dominion.thruhere.net>
---
 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 "========================================================================"