[arch-projects] [RFC 09/23] Add function for finding and waiting on a device

Matthew Monaco dgbaley27 at 0x01b.net
Fri May 18 12:22:03 EDT 2012


From: Matthew Monaco <matthew.monaco at 0x01b.net>

This will be for the encrypted device and if the key is a file on an
external device.
---
 cryptmount.sh |   35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/cryptmount.sh b/cryptmount.sh
index 88771bc..55a6944 100755
--- a/cryptmount.sh
+++ b/cryptmount.sh
@@ -324,6 +324,41 @@ ct_unmap() {
 	fi
 }
 
+ct_resolve_device() {
+
+	local tmp="" device="$1" seconds=$WAITTIME tag tagval
+
+	case "$device" in
+		UUID=*|PARTUUID=*|LABEL=*)
+			tmp="$(blkid -l -o device -t "$device")"
+			if [ -z "$tmp" ]; then
+				if [ $UDEVRUNNING -eq 1 ]; then
+					tag="$(awk -v t="${device%%=*}" 'BEGIN { print tolower(t) }')"
+					tagval="${device#*=}"
+					device="/dev/disk/by-$tag/$tagval"
+				fi
+			else
+				device="$tmp"
+			fi
+	esac
+
+	if [ ! -e "$device" -a "${device:0:5}" = "/dev/" -a "$UDEVRUNNING" -eq 1 ]; then
+		msg "Waiting $seconds seconds for '$device'..."
+		until [ -e "$device" -o $seconds -eq 0 ]; do
+			sleep 1
+			seconds=$(( seconds - 1 ))
+		done
+	fi
+
+	printf "%s" "$device"
+
+	if [ -e "$device" ]; then
+		info "resolve: found '$device'"
+	else
+		error "resolve: unable to find '$device'"
+		return 1
+	fi
+}
 #                                                                              #
 # ---------------------------------------------------------------------------- #
 
-- 
1.7.10.2



More information about the arch-projects mailing list