]> git.ipfire.org Git - thirdparty/dracut.git/blob - modules.d/95nbd/parse-nbdroot.sh
Renamed all shell scripts to *.sh
[thirdparty/dracut.git] / modules.d / 95nbd / parse-nbdroot.sh
1 #!/bin/sh
2 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
3 # ex: ts=8 sw=4 sts=4 et filetype=sh
4 #
5 # Preferred format:
6 # root=nbd:srv:port[:fstype[:rootflags[:nbdopts]]]
7 # [root=*] netroot=nbd:srv:port[:fstype[:rootflags[:nbdopts]]]
8 #
9 # nbdopts is a comma separated list of options to give to nbd-client
10 #
11 # root= takes precedence over netroot= if root=nbd[...]
12 #
13
14 # Sadly there's no easy way to split ':' separated lines into variables
15 netroot_to_var() {
16 local v=${1}:
17 set --
18 while [ -n "$v" ]; do
19 set -- "$@" "${v%%:*}"
20 v=${v#*:}
21 done
22
23 unset server port
24 server=$2; port=$3;
25 }
26
27 # This script is sourced, so root should be set. But let's be paranoid
28 [ -z "$root" ] && root=$(getarg root=)
29 [ -z "$netroot" ] && netroot=$(getarg netroot=)
30
31 # Root takes precedence over netroot
32 if [ "${root%%:*}" = "nbd" ] ; then
33
34 # Don't continue if root is ok
35 [ -n "$rootok" ] && return
36
37 if [ -n "$netroot" ] ; then
38 warn "root takes precedence over netroot. Ignoring netroot"
39
40 fi
41 netroot=$root
42 unset root
43 fi
44
45 # If it's not nbd we don't continue
46 [ "${netroot%%:*}" = "nbd" ] || return
47
48 # Check required arguments
49 netroot_to_var $netroot
50 [ -z "$server" ] && die "Argument server for nbdroot is missing"
51 [ -z "$port" ] && die "Argument port for nbdroot is missing"
52
53 # NBD actually supported?
54 incol2 /proc/devices nbd || modprobe nbd || die "nbdroot requested but kernel/initrd does not support nbd"
55
56 # Done, all good!
57 rootok=1
58
59 # Shut up init error check
60 if [ -z "$root" ]; then
61 root=block:/dev/root
62 wait_for_dev /dev/root
63 fi
64