Author: glen
Date: Wed Feb  7 11:51:26 2007
New Revision: 8235

Modified:
   geninitrd/trunk/geninitrd
Log:
- use only blkid to resolve UUID and LABEL, so now it works with any fs not 
just xfs,ext{2,3}
- cleanup find_root() function

Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd   (original)
+++ geninitrd/trunk/geninitrd   Wed Feb  7 11:51:26 2007
@@ -43,6 +43,8 @@
 insmod="insmod"
 modext=".o"
 rootdev_nr=0
+# device node for rootfs from fstab
+rootdev=""
 # default bootsplash is off, if it have to be on, install bootsplash package
 BOOT_SPLASH=no
 # default same as bootsplash, if on install splashutils and some splashutils 
theme
@@ -219,157 +221,51 @@
        cp "$1" "$2"
 }
 
-get_label_ext2 () {
-       /sbin/e2label $1 2> /dev/null
-}
-
-get_uuid_ext2 () {
-       /sbin/tune2fs -l $1 2> /dev/null | awk -F: '/UUID:/ {gsub(" ",""); 
print $2}'
-}
-
-get_label_xfs () {
-       /usr/sbin/xfs_admin -l "$1"  2>/dev/null | awk -F'"' '/label =/{print 
$2}'
-}
-
-get_uuid_xfs () {
-       /usr/sbin/xfs_admin -u "$1" 2>/dev/null | awk -F= '{print $2}' | xargs
-}
-
+# sets globals:
+# - $rootdev
+# - $rootFS
 find_root() {
-       eval `awk '/^[\t ]*#/ {next} {if ( $2 == "/" ) {print "rootdev=\"" $1 
"\"\nrootFs=\"" $3 "\""}}' $fstab`
+       eval $(awk '/^[\t ]*#/ {next} {if ( $2 == "/" ) {print "rootdev=\"" $1 
"\"\nrootFs=\"" $3 "\""}}' $fstab)
+       if [ -z "$rootdev" ]; then
+               echo >&2 "geninitrd can't find real device for rootfs"
+               exit 1
+       fi
+
        case $rootdev in
        LABEL=*)
-               # new way, using blkid
-               if [ -x /sbin/blkid ]; then
-                       label=${rootdev#"LABEL="}
-                       dev=$(/sbin/blkid -t LABEL="$label" -o device)
-
-                       if [ "$dev" -a -r "$dev" ]; then
-                               debug "Using $dev as device for rootfs"
-                               rootdev=$dev
-                               rootdev_found=1
-                               rootdev1=${rootdev} # XXX neccessary?
-                               return
-                       fi
-                       echo >&2 "geninitrd can't find real device for 
LABEL=$label"
+               if [ ! -x /sbin/blkid ]; then
+                       echo >&2 "/sbin/blkid is missing"
                        exit 1
                fi
 
-               # old way, using various tools
-               if [ -x /sbin/findfs -a \( "$rootFs." = "ext2." -o "$rootFs." = 
"ext3." \) ] ; then
-                       rootdev2="`/sbin/findfs $rootdev 2>/dev/null`"
-                       if [ -n "$rootdev2" ] ; then
-                               rootdev=$rootdev2
-                               rootdev_found=1
-                       fi
-               fi
-               if [ "$rootdev_found." != "1." ] ; then
-                       case $rootFs in
-                       ext2|ext3)
-                               if [ ! -x /sbin/e2label ] ; then
-                                       echo >&2 "/sbin/e2label is missing"
-                                       exit 1
-                               fi
-                               get_label="get_label_ext2"
-                               ;;
-                       xfs)
-                               if [ ! -x /usr/sbin/xfs_db ] ; then
-                                       echo >&2 "/usr/sbin/xfs_db is missing"
-                                       exit 1
-                               fi
-                               get_label="get_label_xfs"
-                               ;;
-                       *)
-                               echo >&2 "LABEL on $rootFs in not supported by 
geninitrd"
-                               exit 1
-                               ;;
-                       esac
-                       if [ ! -r /proc/partitions ] ; then
-                               echo >&2 '/proc/partitions is not readable'
-                               exit 1
-                       fi
-                       label=${rootdev#"LABEL="}
-                       for dev in `awk 'BEGIN {getline;getline} {print "/dev/" 
$4}' /proc/partitions` ; do
-                               if [ -r $dev ] && [ "$label" = "`$get_label 
$dev`" ] ; then
-                                       debug "Using $dev as device for rootfs"
-                                       rootdev=$dev
-                                       rootdev_found=1
-                                       break
-                               fi
-                       done
-                       if [ "$rootdev_found." != "1." ] ; then
-                               echo >&2 "geninitrd can't find real device for 
LABEL=$label"
-                               exit 1
-                       fi
+               local label=${rootdev#"LABEL="}
+               local dev=$(/sbin/blkid -t LABEL="$label" -o device)
+               if [ "$dev" -a -r "$dev" ]; then
+                       debug "Using $dev as device for rootfs"
+                       rootdev=$dev
                fi
                ;;
+
        UUID=*)
-               # new way, using blkid
-               if [ -x /sbin/blkid ]; then
-                       uuid=${rootdev#"UUID="}
-                       dev=$(/sbin/blkid -t UUID="$uuid" -o device)
-
-                       if [ "$dev" -a -r "$dev" ]; then
-                               debug "Using $dev as device for rootfs"
-                               rootdev=$dev
-                               rootdev_found=1
-                               rootdev1=${rootdev} # XXX neccessary?
-                               return
-                       fi
-                       echo >&2 "geninitrd can't find real device for 
UUID=$uuid"
+               if [ ! -x /sbin/blkid ]; then
+                       echo >&2 "/sbin/blkid is missing"
                        exit 1
                fi
 
-               # old way, using various tools
-               if [ -x /sbin/findfs -a \( "$rootFs." = "ext2." -o "$rootFs." = 
"ext3." \) ] ; then
-                       rootdev2="`/sbin/findfs $rootdev 2>/dev/null`"
-                       if [ -n "$rootdev2" ] ; then
-                               rootdev=$rootdev2
-                               rootdev_found=1
-                       fi
-               fi
-               if [ "$rootdev_found." != "1." ] ; then
-                       case $rootFs in
-                       ext2|ext3)
-                               if [ ! -x /sbin/tune2fs ] ; then
-                                       echo >&2 "/sbin/tune2fs is missing"
-                                       exit 1
-                               fi
-                               get_uuid="get_uuid_ext2"
-                               ;;
-                       xfs)
-                               if [ ! -x /usr/sbin/xfs_admin ] ; then
-                                       echo >&2 "/usr/sbin/xfs_admin is 
missing"
-                                       exit 1
-                               fi
-                               get_uuid="get_uuid_xfs"
-                               ;;
-                       *)
-                               echo >&2 "UUID on $rootFs in not supported by 
geninitrd"
-                               exit 1
-                               ;;
-                       esac
-                       if [ ! -r /proc/partitions ] ; then
-                               echo >&2 '/proc/partitions is not readable'
-                               exit 1
-                       fi
-                       uuid=${rootdev#"UUID="}
-                       for dev in $(awk 'BEGIN {getline;getline} {print 
"/dev/" $4}' /proc/partitions); do
-                               if [ -r $dev ] && [ "$uuid" = "`$get_uuid 
$dev`" ] ; then
-                                       debug "Using $dev as device for rootfs"
-                                       rootdev=$dev
-                                       rootdev_found=1
-                                       break
-                               fi
-                       done
-                       if [ "$rootdev_found" != 1 ] ; then
-                               echo >&2 "geninitrd can't find real device for 
UUID=$uuid"
-                               exit 1
-                       fi
+               local uuid=${rootdev#"UUID="}
+               local dev=$(/sbin/blkid -t UUID="$uuid" -o device)
+
+               if [ "$dev" -a -r "$dev" ]; then
+                       debug "Using $dev as device for rootfs"
+                       rootdev=$dev
                fi
                ;;
        esac
-       rootdev1=${rootdev}
+
+       if [ ! -r "$rootdev" ]; then
+               echo >&2 "geninitrd can't find real device for $rootdev"
+               exit 1
+       fi
 }
 
 find_modules_softraid() {
@@ -1096,9 +992,9 @@
 
 find_root
 
-org_rootdev="$rootdev1"
+org_rootdev="$rootdev"
 
-find_modules_for "$rootdev1"
+find_modules_for "$rootdev"
 
 findmodule "-$rootFs"
 
@@ -1179,11 +1075,11 @@
 #      fi
 #
 #      cp -a "$loopDev" "$MNTIMAGE/dev"
-#      cp -a "$rootdev1" "$MNTIMAGE/dev"
+#      cp -a "$rootdev" "$MNTIMAGE/dev"
 #      echo "echo Mounting device containing loopback root filesystem" >> 
"$RCFILE"
 #      echo "mount -t $loopFs $loopDev /loopfs" >> "$RCFILE"
-#      echo "echo Setting up loopback device $rootdev1" >> $RCFILE
-#      echo "losetup $rootdev1 /loopfs$loopFile" >> "$RCFILE"
+#      echo "echo Setting up loopback device $rootdev" >> $RCFILE
+#      echo "losetup $rootdev /loopfs$loopFile" >> "$RCFILE"
 #fi
 
 initrd_gen_suspend() {
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to