]> git.ipfire.org Git - thirdparty/dracut.git/blobdiff - lsinitrd.sh
iscsi: always popd, even if there is no iscsi device
[thirdparty/dracut.git] / lsinitrd.sh
index dbcc330f85b9204f3675341302d4f79c45ffc29a..0b42b9a48bc19d33c976691a2f37be2200874340 100755 (executable)
@@ -28,7 +28,10 @@ usage()
         echo "-m, --mod                   list modules."
         echo "-f, --file <filename>       print the contents of <filename>."
         echo "--unpack                    unpack the initramfs, instead of displaying the contents."
+        echo "                            If optional filenames are given, will only unpack specified files,"
+        echo "                            else the whole image will be unpacked. Won't unpack anything from early cpio part."
         echo "--unpackearly               unpack the early microcode part of the initramfs."
+        echo "                            Same as --unpack, but only unpack files from early cpio part."
         echo "-v, --verbose               unpack verbosely."
         echo "-k, --kver <kernel version> inspect the initramfs of <kernel version>."
         echo
@@ -157,10 +160,32 @@ list_files()
     echo "========================================================================"
 }
 
+list_squash_content()
+{
+    SQUASH_IMG="squash/root.img"
+    SQUASH_TMPFILE="$(mktemp -t --suffix=.root.sqsh lsinitrd.XXXXXX)"
+    trap "rm -f '$SQUASH_TMPFILE'" EXIT
+    $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout -- \
+        $SQUASH_IMG > "$SQUASH_TMPFILE" 2>/dev/null
+    if [[ -s $SQUASH_TMPFILE ]]; then
+        echo "Squashed content ($SQUASH_IMG):"
+        echo "========================================================================"
+        unsquashfs -ll "$SQUASH_TMPFILE" | tail -n +4
+        echo "========================================================================"
+    fi
+}
+
 unpack_files()
 {
-    $CAT "$image" 2>/dev/null | cpio -id --quiet $verbose
-    ((ret+=$?))
+    if (( ${#filenames[@]} > 0 )); then
+        for f in "${!filenames[@]}"; do
+            $CAT "$image" 2>/dev/null | cpio -id --quiet $verbose $f
+            ((ret+=$?))
+        done
+    else
+        $CAT "$image" 2>/dev/null | cpio -id --quiet $verbose
+        ((ret+=$?))
+    fi
 }
 
 
@@ -175,7 +200,10 @@ case $bin in
         CAT="cat --"
         is_early=$(cpio --extract --verbose --quiet --to-stdout -- 'early_cpio' < "$image" 2>/dev/null)
         if [[ "$is_early" ]]; then
-            if [[ -n "$unpackearly" ]]; then
+            if [[ -n "$unpack" ]]; then
+                # should use --unpackearly for early CPIO
+                :
+            elif [[ -n "$unpackearly" ]]; then
                 unpack_files
             elif (( ${#filenames[@]} > 0 )); then
                 extract_files
@@ -219,7 +247,7 @@ case $bin in
     $'\x89'LZO$'\0'*)
         CAT="lzop -d -c"
         ;;
-    $'0xFD2FB528'*)
+    $'\x28\xB5\x2F\xFD'*)
         CAT="zstd -d -c"
         ;;
     *)
@@ -241,6 +269,17 @@ if [[ $SKIP ]]; then
     CAT=skipcpio
 fi
 
+if (( ${#filenames[@]} > 1 )); then
+    TMPFILE="$(mktemp -t --suffix=.cpio lsinitrd.XXXXXX)"
+    $CAT "$image" 2>/dev/null > $TMPFILE
+    trap "rm -f '$TMPFILE'" EXIT
+    pre_decompress()
+    {
+        cat $TMPFILE
+    }
+    CAT=pre_decompress
+fi
+
 ret=0
 
 if [[ -n "$unpack" ]]; then
@@ -263,6 +302,7 @@ else
         echo
         list_modules
         list_files
+        list_squash_content
     fi
 fi