]> git.pld-linux.org Git - projects/geninitrd.git/commitdiff
Allow usage of UUID/LABEL in /etc/crypttab. 12757
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Mon, 9 Nov 2015 12:02:48 +0000 (13:02 +0100)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Mon, 9 Nov 2015 12:02:48 +0000 (13:02 +0100)
functions
mod-luks.sh

index f4d9acb18b05abab9adbbaba4ca9f3d136c4de17..9015cc3c7107f27567a73e53247539a2e456a765 100644 (file)
--- 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
index 43bdcaa090c6c2ec2f4176e85dd05a745a4777d8..09e31d3203f052216df9a126928790bcea23681b 100644 (file)
@@ -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"
This page took 0.531557 seconds and 4 git commands to generate.