Modify nbd hostonly checking to use check_block_and_slaves.
authorVictor Lowther <victor.lowther@gmail.com>
Sun, 16 Aug 2009 23:22:21 +0000 (18:22 -0500)
committerVictor Lowther <victor.lowther@gmail.com>
Sun, 16 Aug 2009 23:22:21 +0000 (18:22 -0500)
This allows hostonly nbd checking to work in more exotic situations,
such as mdraid/dmraid/lvm/crypt on top of nbd.

modules.d/95nbd/check

index f94d63b..1443129 100755 (executable)
@@ -1,11 +1,20 @@
-#!/bin/sh
+#!/bin/bash
 # We depend on network modules being loaded
 [ "$1" = "-d" ] && echo network
 
-# If hostonly was requested, fail the check if we are not actually
-# booting from root.
-[ "$1" = "-h" ] && ! egrep -q '/ /dev/nbd[0-9]*' /proc/mounts && exit 1
-
-# If our prerequisites are not met, fail anyways.
+# If our prerequisites are not met, fail.
 which nbd-client >/dev/null 2>&1 || exit 1
+
+is_nbd() { [[ -b /dev/block/$1 && $1 == 43:* ]] }
+
+. $dracutfunctions
+
+# if an nbd device is not somewhere in the chain of devices root is mounted on,
+# fail the hostonly check.
+[ "$1" = "-h" ] && {
+    rootdev=$(find_root_block_device)
+    [[ -b /dev/block/$rootdev ]] || exit 1
+    check_block_and_slaves is_nbd "$rootdev" || exit 1
+}
+
 exit 0