Browse Source

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>
master
Koen Kooi 11 years ago committed by Harald Hoyer
parent
commit
149965bd13
  1. 2
      dracut-initramfs-restore.sh
  2. 22
      lsinitrd.sh

2
dracut-initramfs-restore.sh

@ -20,6 +20,8 @@ if zcat "$IMG" | cpio -id --quiet >/dev/null; then @@ -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

22
lsinitrd.sh

@ -106,15 +106,17 @@ fi @@ -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 @@ -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 @@ -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 "========================================================================"

Loading…
Cancel
Save