@@ -22,7 +22,13 @@ NEWROOT="$3"
22
22
[ " ${nroot%%:* } " = " nbd" ] || return
23
23
24
24
nroot=${nroot# nbd: }
25
- nbdserver=${nroot%%:* } ; nroot=${nroot#*: }
25
+ nbdserver=${nroot%%:* } ;
26
+ if [ " ${nbdserver% " ${nbdserver# ?} " } " = " [" ]; then
27
+ nbdserver=${nroot# [}
28
+ nbdserver=${nbdserver%% ]:* } ; nroot=${nroot#* ]: }
29
+ else
30
+ nroot=${nroot#*: }
31
+ fi
26
32
nbdport=${nroot%%:* } ; nroot=${nroot#*: }
27
33
nbdfstype=${nroot%%:* } ; nroot=${nroot#*: }
28
34
nbdflags=${nroot%%:* }
91
97
# If we didn't get a root= on the command line, then we need to
92
98
# add the udev rules for mounting the nbd0 device
93
99
if [ " $root " = " block:/dev/root" -o " $root " = " dhcp" ]; then
94
- printf ' KERNEL=="nbd0", ENV{DEVTYPE}!="partition", ENV{ID_FS_TYPE}=="?*", SYMLINK+="root"\n' >> /etc/udev/rules.d/99-nbd-root.rules
100
+ printf ' KERNEL=="nbd0", ENV{DEVTYPE}!="partition", ENV{ID_FS_TYPE}=="?*", SYMLINK+="root"\n' > /etc/udev/rules.d/99-nbd-root.rules
95
101
udevadm control --reload
96
- type write_fs_tab > /dev/null 2>&1 || . /lib/fs-lib.sh
97
- write_fs_tab /dev/root " $nbdfstype " " $fsopts "
98
102
wait_for_dev -n /dev/root
99
103
100
104
if [ -z " $DRACUT_SYSTEMD " ]; then
105
+ type write_fs_tab > /dev/null 2>&1 || . /lib/fs-lib.sh
106
+
107
+ write_fs_tab /dev/root " $nbdfstype " " $fsopts "
108
+
101
109
printf ' /bin/mount %s\n' \
102
110
" $NEWROOT " \
103
111
> $hookdir /mount/01-$$ -nbd.sh
104
112
fi
113
+ # if we're on systemd, use the nbd-generator script
114
+ # to create the /sysroot mount.
105
115
fi
106
116
117
+ # supported since nbd 3.8 via 77e97612
107
118
if strstr " $( nbd-client --help 2>&1 ) " " systemd-mark" ; then
108
- preopts=" -- systemd-mark $preopts "
119
+ preopts=" -systemd-mark $preopts "
109
120
fi
110
121
111
122
if [ " $nbdport " -gt 0 ] 2> /dev/null; then
112
- nbd-client " $nbdserver " $ nbdport /dev/nbd0 $preopts $opts || exit 1
123
+ nbdport= " $ nbdport"
113
124
else
114
- nbd-client - name " $nbdport " " $nbdserver " /dev/nbd0 $preopts $opts || exit 1
125
+ nbdport= " - name $nbdport "
115
126
fi
116
127
128
+ nbd-client -check /dev/nbd0 > /dev/null || \
129
+ nbd-client " $nbdserver " $nbdport /dev/nbd0 $preopts $opts || exit 1
130
+
117
131
# NBD doesn't emit uevents when it gets connected, so kick it
118
132
echo change > /sys/block/nbd0/uevent
119
133
udevadm settle
0 commit comments