[projects/geninitrd] Allow usage of UUID/LABEL in /etc/crypttab.
arekm
arekm at pld-linux.org
Mon Nov 9 13:02:55 CET 2015
commit 52c1e558745ccaa5f8222da05959e1cd2341392d
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
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
More information about the pld-cvs-commit
mailing list