From 97bbba6938fc22605026b4cff3c5cc524c7bdf38 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Thu, 17 Mar 2016 14:45:24 +0100 Subject: [PATCH] lsinitrd: add "--unpack" to lsinitrd also "--unpackearly" and "--verbose" --- lsinitrd.1.asc | 9 +++++++++ lsinitrd.sh | 43 ++++++++++++++++++++++++++++++++----------- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/lsinitrd.1.asc b/lsinitrd.1.asc index 4293910..b6a704c 100644 --- a/lsinitrd.1.asc +++ b/lsinitrd.1.asc @@ -34,6 +34,15 @@ OPTIONS **-k, --kver** __:: inspect the initramfs of . +**--unpack**:: + unpack the initramfs to the current directory, instead of displaying the contents. + +**--unpackearly**:: + unpack the early microcode initramfs to the current directory, instead of displaying the contents. + +**-v, --verbose**:: + unpack verbosely + AVAILABILITY ------------ The lsinitrd command is part of the dracut package and is available from diff --git a/lsinitrd.sh b/lsinitrd.sh index 441fb92..224b9c1 100755 --- a/lsinitrd.sh +++ b/lsinitrd.sh @@ -27,6 +27,9 @@ usage() echo "-s, --size sort the contents of the initramfs by size." echo "-m, --mod list modules." echo "-f, --file print the contents of ." + echo "--unpack unpack the initramfs, instead of displaying the contents." + echo "--unpackearly unpack the early microcode part of the initramfs." + echo "-v, --verbose unpack verbosely." echo "-k, --kver inspect the initramfs of ." echo } >&2 @@ -37,16 +40,21 @@ usage() sorted=0 modules=0 +unpack=0 +unset verbose declare -A filenames unset POSIXLY_CORRECT TEMP=$(getopt \ - -o "shmf:k:" \ + -o "vshmf:k:" \ --long kver: \ --long file: \ --long mod \ --long help \ --long size \ + --long unpack \ + --long unpackearly \ + --long verbose \ -- "$@") if (( $? != 0 )); then @@ -58,13 +66,16 @@ eval set -- "$TEMP" while (($# > 0)); do case $1 in - -k|--kver) KERNEL_VERSION="$2"; shift;; - -f|--file) filenames[${2#/}]=1; shift;; - -s|--size) sorted=1;; - -h|--help) usage; exit 0;; - -m|--mod) modules=1;; - --) shift;break;; - *) usage; exit 1;; + -k|--kver) KERNEL_VERSION="$2"; shift;; + -f|--file) filenames[${2#/}]=1; shift;; + -s|--size) sorted=1;; + -h|--help) usage; exit 0;; + -m|--mod) modules=1;; + -v|--verbose) verbose="--verbose";; + --unpack) unpack=1;; + --unpackearly) unpackearly=1;; + --) shift;break;; + *) usage; exit 1;; esac shift done @@ -147,8 +158,14 @@ list_files() echo "========================================================================" } +unpack_files() +{ + $CAT "$image" | cpio -id --quiet $verbose + ((ret+=$?)) +} + -if (( ${#filenames[@]} <= 0 )); then +if (( ${#filenames[@]} <= 0 )) && [[ -z "$unpack" ]] && [[ -z "$unpackearly" ]]; then echo "Image: $image: $(du -h $image | while read a b || [ -n "$a" ]; do echo $a;done)" echo "========================================================================" fi @@ -159,7 +176,9 @@ case $bin in CAT="cat --" is_early=$(cpio --extract --verbose --quiet --to-stdout -- 'early_cpio' < "$image" 2>/dev/null) if [[ "$is_early" ]]; then - if (( ${#filenames[@]} > 0 )); then + if [[ -n "$unpackearly" ]]; then + unpack_files + elif (( ${#filenames[@]} > 0 )); then extract_files else echo "Early CPIO image" @@ -218,7 +237,9 @@ fi ret=0 -if (( ${#filenames[@]} > 0 )); then +if [[ -n "$unpack" ]]; then + unpack_files +elif (( ${#filenames[@]} > 0 )); then extract_files else version=$($CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- \