Blame 0027-lsinitrd-switch-to-getopt-and-add-f-and-k-parameter.patch

Harald Hoyer adf00e
From 7d9bb76ac7cf6996318a0cfbc8576d8d307bff3e Mon Sep 17 00:00:00 2001
Harald Hoyer adf00e
From: Harald Hoyer <harald@redhat.com>
Harald Hoyer adf00e
Date: Tue, 16 Apr 2013 10:44:56 +0200
Harald Hoyer adf00e
Subject: [PATCH] lsinitrd: switch to getopt and add "-f" and "-k" parameter
Harald Hoyer adf00e
Harald Hoyer adf00e
---
Harald Hoyer adf00e
 lsinitrd.1.asc | 10 +++++++++-
Harald Hoyer adf00e
 lsinitrd.sh    | 61 +++++++++++++++++++++++++++++++++++++++++++---------------
Harald Hoyer adf00e
 2 files changed, 54 insertions(+), 17 deletions(-)
Harald Hoyer adf00e
Harald Hoyer adf00e
diff --git a/lsinitrd.1.asc b/lsinitrd.1.asc
Harald Hoyer adf00e
index fd98161..4293910 100644
Harald Hoyer adf00e
--- a/lsinitrd.1.asc
Harald Hoyer adf00e
+++ b/lsinitrd.1.asc
Harald Hoyer adf00e
@@ -10,7 +10,9 @@ lsinitrd - tool to show the contents of an initramfs image
Harald Hoyer adf00e
 
Harald Hoyer adf00e
 SYNOPSIS
Harald Hoyer adf00e
 --------
Harald Hoyer adf00e
-*lsinitrd* ['OPTION...'] [<image>]
Harald Hoyer adf00e
+*lsinitrd* ['OPTION...'] [<image> [<filename> [<filename> [...] ]]]
Harald Hoyer adf00e
+
Harald Hoyer adf00e
+*lsinitrd* ['OPTION...'] -k <kernel-version>
Harald Hoyer adf00e
 
Harald Hoyer adf00e
 DESCRIPTION
Harald Hoyer adf00e
 -----------
Harald Hoyer adf00e
@@ -26,6 +28,12 @@ OPTIONS
Harald Hoyer adf00e
 **-s, --size**::
Harald Hoyer adf00e
     sort the contents of the initramfs by size.
Harald Hoyer adf00e
 
Harald Hoyer adf00e
+**-f, --file** _<filename>_::
Harald Hoyer adf00e
+    print the contents of <filename>.
Harald Hoyer adf00e
+
Harald Hoyer adf00e
+**-k, --kver** _<kernel version>_::
Harald Hoyer adf00e
+    inspect the initramfs of <kernel version>.
Harald Hoyer adf00e
+
Harald Hoyer adf00e
 AVAILABILITY
Harald Hoyer adf00e
 ------------
Harald Hoyer adf00e
 The lsinitrd command is part of the dracut package and is available from
Harald Hoyer adf00e
diff --git a/lsinitrd.sh b/lsinitrd.sh
Harald Hoyer adf00e
index 1b27393..42e30d9 100755
Harald Hoyer adf00e
--- a/lsinitrd.sh
Harald Hoyer adf00e
+++ b/lsinitrd.sh
Harald Hoyer adf00e
@@ -22,29 +22,51 @@
Harald Hoyer adf00e
 usage()
Harald Hoyer adf00e
 {
Harald Hoyer adf00e
     {
Harald Hoyer adf00e
-        echo "Usage: ${0##*/} [-s] [<initramfs file> [<filename>]]"
Harald Hoyer adf00e
+        echo "Usage: ${0##*/} [options] [<initramfs file> [<filename> [<filename> [...] ]]]"
Harald Hoyer adf00e
+        echo "Usage: ${0##*/} [options] -k <kernel version>"
Harald Hoyer adf00e
         echo
Harald Hoyer adf00e
-        echo "-h, --help     print a help message and exit."
Harald Hoyer adf00e
-        echo "-s, --size     sort the contents of the initramfs by size."
Harald Hoyer adf00e
+        echo "-h, --help                  print a help message and exit."
Harald Hoyer adf00e
+        echo "-s, --size                  sort the contents of the initramfs by size."
Harald Hoyer adf00e
+        echo "-f, --file <filename>       print the contents of <filename>."
Harald Hoyer adf00e
+        echo "-k, --kver <kernel version> inspect the initramfs of <kernel version>."
Harald Hoyer adf00e
         echo
Harald Hoyer adf00e
     } >&2
Harald Hoyer adf00e
 }
Harald Hoyer adf00e
 
Harald Hoyer adf00e
-[[ $# -le 2 ]] || { usage ; exit 1 ; }
Harald Hoyer adf00e
-
Harald Hoyer adf00e
 sorted=0
Harald Hoyer adf00e
-while getopts "s" opt; do
Harald Hoyer adf00e
-    case $opt in
Harald Hoyer adf00e
-        s)  sorted=1;;
Harald Hoyer adf00e
-        h)  usage; exit 0;;
Harald Hoyer adf00e
-        \?) usage; exit 1;;
Harald Hoyer adf00e
+declare -A filenames
Harald Hoyer adf00e
+
Harald Hoyer adf00e
+unset POSIXLY_CORRECT
Harald Hoyer adf00e
+TEMP=$(getopt \
Harald Hoyer adf00e
+    -o "shf:k:" \
Harald Hoyer adf00e
+    --long kver: \
Harald Hoyer adf00e
+    --long file: \
Harald Hoyer adf00e
+    --long help \
Harald Hoyer adf00e
+    --long size \
Harald Hoyer adf00e
+    -- "$@")
Harald Hoyer adf00e
+
Harald Hoyer adf00e
+if (( $? != 0 )); then
Harald Hoyer adf00e
+    usage
Harald Hoyer adf00e
+    exit 1
Harald Hoyer adf00e
+fi
Harald Hoyer adf00e
+
Harald Hoyer adf00e
+eval set -- "$TEMP"
Harald Hoyer adf00e
+
Harald Hoyer adf00e
+while (($# > 0)); do
Harald Hoyer adf00e
+    case $1 in
Harald Hoyer adf00e
+        -k|--kver)  KERNEL_VERSION="$2"; shift;;
Harald Hoyer adf00e
+        -f|--file)  filenames[${2#/}]=1; shift;;
Harald Hoyer adf00e
+        -s|--size)  sorted=1;;
Harald Hoyer adf00e
+        -h|--help)  usage; exit 0;;
Harald Hoyer adf00e
+        --)         shift;break;;
Harald Hoyer adf00e
+        *)          usage; exit 1;;
Harald Hoyer adf00e
     esac
Harald Hoyer adf00e
+    shift
Harald Hoyer adf00e
 done
Harald Hoyer adf00e
-shift $((OPTIND-1))
Harald Hoyer adf00e
 
Harald Hoyer adf00e
-KERNEL_VERSION="$(uname -r)"
Harald Hoyer adf00e
+[[ $KERNEL_VERSION ]] || KERNEL_VERSION="$(uname -r)"
Harald Hoyer adf00e
 
Harald Hoyer adf00e
-if [[ "$1" ]]; then
Harald Hoyer adf00e
+if [[ $1 ]]; then
Harald Hoyer adf00e
     image="$1"
Harald Hoyer adf00e
     if ! [[ -f "$image" ]]; then
Harald Hoyer adf00e
         {
Harald Hoyer adf00e
@@ -57,13 +79,20 @@ if [[ "$1" ]]; then
Harald Hoyer adf00e
 else
Harald Hoyer adf00e
     [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
Harald Hoyer adf00e
 
Harald Hoyer adf00e
-    if [[ $MACHINE_ID ]] && [[ -d /boot/${MACHINE_ID} || -L /boot/${MACHINE_ID} ]] ; then
Harald Hoyer adf00e
+    if [[ -d /boot/loader/entries || -L /boot/loader/entries ]] \
Harald Hoyer adf00e
+        && [[ $MACHINE_ID ]] \
Harald Hoyer adf00e
+        && [[ -d /boot/${MACHINE_ID} || -L /boot/${MACHINE_ID} ]] ; then
Harald Hoyer adf00e
         image="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
Harald Hoyer adf00e
     else
Harald Hoyer adf00e
         image="/boot/initramfs-${KERNEL_VERSION}.img"
Harald Hoyer adf00e
     fi
Harald Hoyer adf00e
 fi
Harald Hoyer adf00e
 
Harald Hoyer adf00e
+shift
Harald Hoyer adf00e
+while (($# > 0)); do
Harald Hoyer adf00e
+    filenames[${1#/}]=1;
Harald Hoyer adf00e
+    shift
Harald Hoyer adf00e
+done
Harald Hoyer adf00e
 
Harald Hoyer adf00e
 if ! [[ -f "$image" ]]; then
Harald Hoyer adf00e
     {
Harald Hoyer adf00e
@@ -93,8 +122,8 @@ elif [[ "$FILE_T" =~ :\ data ]]; then
Harald Hoyer adf00e
     CAT="xzcat $XZ_SINGLE_STREAM"
Harald Hoyer adf00e
 fi
Harald Hoyer adf00e
 
Harald Hoyer adf00e
-if [[ $# -eq 2 ]]; then
Harald Hoyer adf00e
-    $CAT $image | cpio --extract --verbose --quiet --to-stdout ${2#/} 2>/dev/null
Harald Hoyer adf00e
+if (( ${#filenames[@]} > 0 )); then
Harald Hoyer adf00e
+    $CAT $image | cpio --extract --verbose --quiet --to-stdout ${!filenames[@]} 2>/dev/null
Harald Hoyer adf00e
     exit $?
Harald Hoyer adf00e
 fi
Harald Hoyer adf00e