lsinitrd: use /boot/<machine-id>/<kernel-version>/initrd as the default image
authorHarald Hoyer <harald@redhat.com>
Thu, 7 Mar 2013 11:54:02 +0000 (12:54 +0100)
committerHarald Hoyer <harald@redhat.com>
Thu, 7 Mar 2013 12:03:24 +0000 (13:03 +0100)
if /boot/<machine-id> exists; then
use /boot/<machine-id>/<kernel-version>/initrd as the default image;
else fallback to /boot/initramfs-<kernel-version>.img

lsinitrd.1.asc
lsinitrd.sh

index 5b0c62e..fd98161 100644 (file)
@@ -10,12 +10,13 @@ lsinitrd - tool to show the contents of an initramfs image
 
 SYNOPSIS
 --------
-*lsinit* ['OPTION...'] [<image>]
+*lsinitrd* ['OPTION...'] [<image>]
 
 DESCRIPTION
 -----------
 lsinitrd shows the contents of an initramfs image. if <image> is omitted, then
-lsinitrd uses the default image /boot/initramfs-<kernel version>.img.
+lsinitrd uses the default image _/boot/<machine-id>/<kernel-version>/initrd_ or
+_/boot/initramfs-<kernel-version>.img_.
 
 OPTIONS
 -------
index 77a15c5..7a09423 100755 (executable)
 
 usage()
 {
-    echo "Usage: $(${0##*/}) [-s] [<initramfs file> [<filename>]]"
+    {
+        echo "Usage: ${0##*/} [-s] [<initramfs file> [<filename>]]"
+        echo
+        echo "-h, --help     print a help message and exit."
+        echo "-s, --size     sort the contents of the initramfs by size."
+        echo
+    } >&2
 }
 
 [[ $# -le 2 ]] || { usage ; exit 1 ; }
@@ -36,8 +42,36 @@ while getopts "s" opt; do
 done
 shift $((OPTIND-1))
 
-image="${1:-/boot/initramfs-$(uname -r).img}"
-[[ -f "$image" ]]    || { echo "$image does not exist" ; exit 1 ; }
+KERNEL_VERSION="$(uname -r)"
+
+if [[ "$1" ]]; then
+    image="$1"
+    if ! [[ -f "$image" ]]; then
+        {
+            echo "$image does not exist"
+            echo
+        } >&2
+        usage
+        exit 1
+    fi
+fi
+
+[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
+
+if [[ $MACHINE_ID ]] && ( [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]] ); then
+    image="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
+else
+    image="/boot/initramfs-${KERNEL_VERSION}.img}"
+fi
+
+if ! [[ -f "$image" ]]; then
+    {
+        echo "No <initramfs file> specified and the default image '$image' cannot be accessed!"
+        echo
+    } >&2
+    usage
+    exit 1
+fi
 
 CAT=zcat
 FILE_T=$(file --dereference "$image")