commit 52c1e558745ccaa5f8222da05959e1cd2341392d
Author: Arkadiusz Miƛkiewicz <[email protected]>
Date:   Mon Nov 9 13:02:48 2015 +0100

    Allow usage of UUID/LABEL in /etc/crypttab.

 functions   | 64 ++++++++++++++++++++++++++++++++++++-------------------------
 mod-luks.sh |  3 +++
 2 files changed, 41 insertions(+), 26 deletions(-)
---
diff --git a/functions b/functions
index f4d9acb..9015cc3 100644
--- a/functions
+++ b/functions
@@ -2,45 +2,30 @@
 #
 # geninitrd functions
 
-# Find root device from fstab.
-#
-# @param       string  $fstab location of /etc/fstab
+# Get device name from UUID/LABEL
+# @param       string  device path or UUID/LABEL name
 # @return      false on failure
 #
-# Sets global variables:
-# - $rootdev
-# - $rootdev_add
-# - $rootFS
-#
-find_root() {
-       local fstab="$1"
-       local function="${PROGRAM:+$PROGRAM: }find_root"
-       local rootopt
+find_devname() {
+       local outname name="$1"
+       local function="${PROGRAM:+$PROGRAM: }find_devname"
 
-       eval $(awk '!/^[\t ]*#/ && $2 == "/" 
{printf("rootdev=\"%s\"\nrootFs=\"%s\"\nrootopt=\"%s\"\n", $1, $3, $4)}' $fstab)
-       if [ -z "$rootdev" ]; then
-               echo >&2 "$function: can't find fstab entry for root mountpoint"
-               return 1
-       fi
-
-       # additional devices needed (xfs logdev)
-       rootdev_add=$(echo "$rootopt" | awk -F',' '{ for (i=1; i<=NF; i++) { if 
($i ~ /^logdev=/) { gsub(/^logdev=/, NIL, $i); print $i; } } }')
-
-       case $rootdev in
+       outname="$name"
+       case $name in
        LABEL=*)
                if [ ! -x /sbin/blkid ]; then
                        echo >&2 "$function: /sbin/blkid is missing"
                        return 2
                fi
 
-               local label=${rootdev#"LABEL="}
+               local label=${name#"LABEL="}
                local dev=$(/sbin/blkid -l -t LABEL="$label" -o device)
                if [ "$dev" ]; then
                        if [ ! -r "$dev" ]; then
                                echo >&2 "$function: blkid returned device $dev 
which doesn't exist"
                                return 2
                        fi
-                       rootdev=$dev
+                       outname=$dev
                fi
                ;;
 
@@ -50,7 +35,7 @@ find_root() {
                        return 2
                fi
 
-               local uuid=${rootdev#"UUID="}
+               local uuid=${name#"UUID="}
                local dev=$(/sbin/blkid -l -t UUID="$uuid" -o device)
 
                if [ "$dev" ]; then
@@ -58,11 +43,38 @@ find_root() {
                                echo >&2 "$function: blkid returned device $dev 
which doesn't exist"
                                return 2
                        fi
-                       rootdev=$dev
+                       outname=$dev
                fi
                ;;
        esac
+       echo $outname
+}
+
+# Find root device from fstab.
+#
+# @param       string  $fstab location of /etc/fstab
+# @return      false on failure
+#
+# Sets global variables:
+# - $rootdev
+# - $rootdev_add
+# - $rootFS
+#
+find_root() {
+       local fstab="$1"
+       local function="${PROGRAM:+$PROGRAM: }find_root"
+       local rootopt
+
+       eval $(awk '!/^[\t ]*#/ && $2 == "/" 
{printf("rootdev=\"%s\"\nrootFs=\"%s\"\nrootopt=\"%s\"\n", $1, $3, $4)}' $fstab)
+       if [ -z "$rootdev" ]; then
+               echo >&2 "$function: can't find fstab entry for root mountpoint"
+               return 1
+       fi
+
+       # additional devices needed (xfs logdev)
+       rootdev_add=$(echo "$rootopt" | awk -F',' '{ for (i=1; i<=NF; i++) { if 
($i ~ /^logdev=/) { gsub(/^logdev=/, NIL, $i); print $i; } } }')
 
+       rootdev=$(find_devname "$rootdev")
        case $rootdev in
        /dev/dm-*)
                local node
diff --git a/mod-luks.sh b/mod-luks.sh
index 43bdcaa..09e31d3 100644
--- a/mod-luks.sh
+++ b/mod-luks.sh
@@ -38,6 +38,7 @@ is_luks() {
 
        dev=$(awk -vdm_name="$dm_name" '$1 == dm_name { print $2 }' 
/etc/crypttab)
        if [ "$dev" ]; then
+               dev=$(find_devname "$dev")
                /sbin/cryptsetup isLuks $dev
                rc=$?
        else
@@ -70,6 +71,7 @@ find_modules_luks() {
        # recurse
        dev=$(awk -vLUKSNAME="$LUKSNAME" '$1 == LUKSNAME { print $2 }' 
/etc/crypttab)
        if [ -n "$dev" ]; then
+               dev=$(find_devname "$dev")
                find_modules_for_devpath $dev
                have_luks=yes
        else
@@ -130,6 +132,7 @@ luks_crypttab() {
                        key=""
                fi
 
+               src=$(find_devname "$src")
                if /sbin/cryptsetup isLuks "$src" 2>/dev/null; then
                        if key_is_random "$key"; then
                                die "$dst: LUKS requires non-random key, 
skipping"
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/geninitrd.git/commitdiff/52c1e558745ccaa5f8222da05959e1cd2341392d

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to