Skip to content

Commit 7790644

Browse files
committed
fix(nbd): make nbd work again with systemd
* Correct the systemd generated sysroot.mount unit with the options received by the DHCP request and do a `daemon-reload`. * Inject the `nbd-client -check /dev/nbd0` in the finished initqueue. * Reactivate the NBD tests and prepare them for NetworkManager tests.
1 parent 8cd5023 commit 7790644

File tree

3 files changed

+41
-42
lines changed

3 files changed

+41
-42
lines changed

modules.d/95nbd/nbdroot.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,16 @@ if [ "$root" = "block:/dev/root" -o "$root" = "dhcp" ]; then
113113
printf '/bin/mount %s\n' \
114114
"$NEWROOT" \
115115
> "$hookdir"/mount/01-$$-nbd.sh
116+
else
117+
mkdir -p /run/systemd/system/sysroot.mount.d
118+
cat << EOF > /run/systemd/system/sysroot.mount.d/dhcp.conf
119+
[Mount]
120+
Where=/sysroot
121+
What=/dev/root
122+
Type=$nbdfstype
123+
Options=$fsopts
124+
EOF
125+
systemctl --no-block daemon-reload
116126
fi
117127
# if we're on systemd, use the nbd-generator script
118128
# to create the /sysroot mount.

modules.d/95nbd/parse-nbdroot.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,5 @@ if [ -z "$root" ]; then
6060
root=block:/dev/root
6161
# the device is created and waited for in ./nbdroot.sh
6262
fi
63+
64+
echo 'nbd-client -check /dev/nbd0 > /dev/null 2>&1' > "$hookdir"/initqueue/finished/nbdroot.sh

test/TEST-40-NBD/test.sh

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
#!/bin/bash
22

3+
if [[ $NM ]]; then
4+
USE_NETWORK="network-manager"
5+
OMIT_NETWORK="network-legacy"
6+
else
7+
USE_NETWORK="network-legacy"
8+
OMIT_NETWORK="network-manager"
9+
fi
10+
311
# shellcheck disable=SC2034
4-
TEST_DESCRIPTION="root filesystem on NBD"
12+
TEST_DESCRIPTION="root filesystem on NBD with $USE_NETWORK"
513

614
KVERSION=${KVERSION-$(uname -r)}
715

@@ -10,9 +18,6 @@ KVERSION=${KVERSION-$(uname -r)}
1018
#SERIAL="tcp:127.0.0.1:9999"
1119

1220
test_check() {
13-
# NBD is still too flaky and hangs hard sometimes
14-
return 1
15-
1621
if ! type -p nbd-server 2> /dev/null; then
1722
echo "Test needs nbd-server... Skipping"
1823
return 1
@@ -90,7 +95,7 @@ client_test() {
9095
fi
9196

9297
# nbdinfo=( fstype fsoptions )
93-
read -a -r nbdinfo < <(awk '{print $2, $3; exit}' "$TESTDIR"/flag.img)
98+
read -r -a nbdinfo < <(awk '{print $2, $3; exit}' "$TESTDIR"/flag.img)
9499

95100
if [[ ${nbdinfo[0]} != "$fstype" ]]; then
96101
echo "CLIENT TEST END: $test_name [FAILED - WRONG FS TYPE] \"${nbdinfo[0]}\" != \"$fstype\""
@@ -140,45 +145,27 @@ client_run() {
140145
"root=nbd:192.168.50.1:raw:ext3:errors=panic rd.luks=0" \
141146
ext3 errors=panic || return 1
142147

143-
#
144-
# FIXME! These fail, but probably shouldn't
145-
#
146-
147-
# There doesn't seem to be a good way to validate the NBD options, so
148-
# just check that we don't screw up the other options
149-
#
150-
# client_test "NBD root=nbd:IP:port:::NBD opts" 52:54:00:12:34:00 \
151-
# "root=nbd:192.168.50.1:raw:::bs=2048 rd.luks=0" || return 1
152-
#
153-
# client_test "NBD root=nbd:IP:port:fstype::NBD opts" 52:54:00:12:34:00 \
154-
# "root=nbd:192.168.50.1:raw:ext3::bs=2048 rd.luks=0" ext3 || return 1
155-
#
156-
# client_test "NBD root=nbd:IP:port:fstype:fsopts:NBD opts" \
157-
# 52:54:00:12:34:00 \
158-
# "root=nbd:192.168.50.1:raw:ext3:errors=panic:bs=2048 rd.luks=0" \
159-
# ext3 errors=panic || return 1
160-
161148
# DHCP root-path parsing
162149

163-
client_test "NBD root=dhcp DHCP root-path nbd:srv:port" 52:54:00:12:34:01 \
164-
"root=dhcp rd.luks=0" || return 1
150+
client_test "NBD root=/dev/root netroot=dhcp DHCP root-path nbd:srv:port" 52:54:00:12:34:01 \
151+
"root=/dev/root netroot=dhcp ip=dhcp rd.luks=0" || return 1
165152

166-
client_test "NBD root=dhcp DHCP root-path nbd:srv:port:fstype" \
167-
52:54:00:12:34:02 "root=dhcp rd.luks=0" ext3 || return 1
153+
client_test "NBD root=/dev/root netroot=dhcp DHCP root-path nbd:srv:port:fstype" \
154+
52:54:00:12:34:02 "root=/dev/root netroot=dhcp ip=dhcp rd.luks=0" ext2 || return 1
168155

169-
client_test "NBD root=dhcp DHCP root-path nbd:srv:port::fsopts" \
170-
52:54:00:12:34:03 "root=dhcp rd.luks=0" ext3 errors=panic || return 1
156+
client_test "NBD root=/dev/root netroot=dhcp DHCP root-path nbd:srv:port::fsopts" \
157+
52:54:00:12:34:03 "root=/dev/root netroot=dhcp ip=dhcp rd.luks=0" ext3 errors=panic || return 1
171158

172-
client_test "NBD root=dhcp DHCP root-path nbd:srv:port:fstype:fsopts" \
173-
52:54:00:12:34:04 "root=dhcp rd.luks=0" ext3 errors=panic || return 1
159+
client_test "NBD root=/dev/root netroot=dhcp DHCP root-path nbd:srv:port:fstype:fsopts" \
160+
52:54:00:12:34:04 "root=/dev/root netroot=dhcp ip=dhcp rd.luks=0" ext2 errors=panic || return 1
174161

175162
# netroot handling
176163

177164
client_test "NBD netroot=nbd:IP:port" 52:54:00:12:34:00 \
178-
"netroot=nbd:192.168.50.1:raw rd.luks=0" || return 1
165+
"root=LABEL=dracut netroot=nbd:192.168.50.1:raw ip=dhcp rd.luks=0" || return 1
179166

180-
client_test "NBD netroot=dhcp DHCP root-path nbd:srv:port:fstype:fsopts" \
181-
52:54:00:12:34:04 "netroot=dhcp rd.luks=0" ext3 errors=panic || return 1
167+
client_test "NBD root=/dev/root netroot=dhcp DHCP root-path nbd:srv:port:fstype:fsopts" \
168+
52:54:00:12:34:04 "root=/dev/root netroot=dhcp ip=dhcp rd.luks=0" ext2 errors=panic || return 1
182169

183170
# Encrypted root handling via LVM/LUKS over NBD
184171

@@ -187,7 +174,7 @@ client_run() {
187174

188175
client_test "NBD root=LABEL=dracut netroot=nbd:IP:port" \
189176
52:54:00:12:34:00 \
190-
"root=LABEL=dracut rd.luks.uuid=$ID_FS_UUID rd.lv.vg=dracut netroot=nbd:192.168.50.1:encrypted" || return 1
177+
"root=LABEL=dracut rd.luks.uuid=$ID_FS_UUID rd.lv.vg=dracut ip=dhcp netroot=nbd:192.168.50.1:encrypted" || return 1
191178

192179
# XXX This should be ext3,errors=panic but that doesn't currently
193180
# XXX work when you have a real root= line in addition to netroot=
@@ -219,7 +206,7 @@ make_encrypted_root() {
219206
mkdir -p "$initdir"
220207
(
221208
cd "$initdir" || exit
222-
mkdir -p -- dev sys proc etc var/run tmp
209+
mkdir -p dev sys proc etc run var/run tmp
223210
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
224211
for i in bin sbin lib lib64; do
225212
ln -sfnr usr/$i $i
@@ -254,7 +241,7 @@ make_encrypted_root() {
254241
done
255242
ln -s ../run var/run
256243
)
257-
inst_multiple mkfs.ext3 poweroff cp umount dd
244+
inst_multiple mkfs.ext3 poweroff cp umount dd sync
258245
inst_hook shutdown-emergency 000 ./hard-off.sh
259246
inst_hook emergency 000 ./hard-off.sh
260247
inst_hook initqueue 01 ./create-encrypted-root.sh
@@ -298,7 +285,7 @@ make_client_root() {
298285
mkdir -p "$initdir"
299286
(
300287
cd "$initdir" || exit
301-
mkdir -p -- dev sys proc etc var/run tmp
288+
mkdir -p dev sys proc etc run var/run tmp
302289
mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
303290
for i in bin sbin lib lib64; do
304291
ln -sfnr usr/$i $i
@@ -361,7 +348,7 @@ make_server_root() {
361348
dd if=/dev/zero of="$TESTDIR"/flag.img bs=1M count=1
362349

363350
rm -fr "$TESTDIR"/overlay
364-
kernel=$KVERSION
351+
export kernel=$KVERSION
365352
(
366353
mkdir -p "$TESTDIR"/overlay/source
367354
# shellcheck disable=SC2030
@@ -419,7 +406,7 @@ EOF
419406
export initdir=$TESTDIR/overlay
420407
# shellcheck disable=SC1090
421408
. "$basedir"/dracut-init.sh
422-
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd
409+
inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd sync
423410
inst_hook initqueue 01 ./create-server-root.sh
424411
inst_hook initqueue/finished 01 ./finished-false.sh
425412
inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
@@ -480,8 +467,8 @@ test_setup() {
480467
-f "$TESTDIR"/initramfs.server "$KVERSION" || return 1
481468

482469
"$basedir"/dracut.sh -l -i "$TESTDIR"/overlay / \
483-
-o "plymouth" \
484-
-a "debug watchdog" \
470+
-o "plymouth dash iscsi nfs ${OMIT_NETWORK}" \
471+
-a "debug watchdog ${USE_NETWORK}" \
485472
-d "af_packet piix ide-gd_mod ata_piix ext3 ext3 sd_mod e1000 i6300esb ib700wdt" \
486473
--no-hostonly-cmdline -N \
487474
-f "$TESTDIR"/initramfs.testing "$KVERSION" || return 1

0 commit comments

Comments
 (0)