]>
Commit | Line | Data |
---|---|---|
9ecbe2e4 DD |
1 | #!/bin/bash |
2 | TEST_DESCRIPTION="root filesystem on NBD" | |
3 | ||
4 | KVERSION=${KVERSION-$(uname -r)} | |
5 | ||
6 | # Uncomment this to debug failures | |
7 | #DEBUGFAIL="rdinitdebug rdnetdebug rdbreak" | |
8 | ||
9 | run_server() { | |
10 | # Start server first | |
11 | echo "NBD TEST SETUP: Starting DHCP/NFS server" | |
12 | ||
13 | $testdir/run-qemu -hda server.ext2 -hdb nbd.ext2 -m 512M -nographic \ | |
14 | -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ | |
15 | -net socket,mcast=230.0.0.1:1234 \ | |
16 | -serial udp:127.0.0.1:9999 \ | |
17 | -kernel /boot/vmlinuz-$KVERSION \ | |
18 | -append "root=/dev/sda rw quiet console=ttyS0,115200n81" \ | |
19 | -initrd initramfs.server -pidfile server.pid -daemonize || return 1 | |
20 | sudo chmod 644 server.pid || return 1 | |
21 | ||
22 | # Cleanup the terminal if we have one | |
23 | tty -s && stty sane | |
24 | ||
25 | echo Sleeping 10 seconds to give the server a head start | |
26 | sleep 10 | |
27 | } | |
28 | ||
29 | client_test() { | |
30 | local test_name="$1" | |
31 | local mac=$2 | |
32 | local cmdline="$3" | |
33 | ||
34 | echo "CLIENT TEST START: $test_name" | |
35 | ||
36 | # Clear out the flags for each test | |
37 | if ! dd if=/dev/zero of=flag.img bs=1M count=1; then | |
38 | echo "Unable to make client sda image" 1>&2 | |
39 | return 1 | |
40 | fi | |
41 | ||
42 | $testdir/run-qemu -hda flag.img -m 512M -nographic \ | |
43 | -net nic,macaddr=$mac,model=e1000 \ | |
44 | -net socket,mcast=230.0.0.1:1234 \ | |
45 | -kernel /boot/vmlinuz-$KVERSION \ | |
46 | -append "$cmdline $DEBUGFAIL ro quiet console=ttyS0,115200n81" \ | |
47 | -initrd initramfs.testing | |
48 | ||
49 | if [[ $? -ne 0 ]] || ! grep -m 1 -q nbd-OK flag.img; then | |
50 | echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" | |
51 | return 1 | |
52 | fi | |
53 | ||
54 | echo "CLIENT TEST END: $test_name [OK]" | |
55 | } | |
56 | ||
57 | test_run() { | |
58 | if ! run_server; then | |
59 | echo "Failed to start server" 1>&2 | |
60 | return 1 | |
61 | fi | |
62 | ||
63 | client_test "NBD root=nbd:..." 52:54:00:12:34:00 \ | |
64 | "root=nbd:192.168.50.1:2000" || return 1 | |
65 | ||
66 | client_test "NBD root=nbd nbdroot=srv:port" 52:54:00:12:34:00 \ | |
67 | "root=nbd nbdroot=192.168.50.1:2000" || return 1 | |
68 | ||
69 | client_test "NBD root=dhcp nbdroot=srv:port" 52:54:00:12:34:00 \ | |
70 | "root=dhcp nbdroot=192.168.50.1:2000" || return 1 | |
71 | ||
72 | client_test "NBD root=nbd nbdroot=srv,port" 52:54:00:12:34:00 \ | |
73 | "root=nbd nbdroot=192.168.50.1,2000" || return 1 | |
74 | ||
75 | client_test "NBD root=dhcp nbdroot=srv,port" 52:54:00:12:34:00 \ | |
76 | "root=dhcp nbdroot=192.168.50.1,2000" || return 1 | |
77 | ||
78 | client_test "NBD root=dhcp DHCP root-path nbd:srv:port" 52:54:00:12:34:01 \ | |
79 | "root=dhcp" || return 1 | |
80 | } | |
81 | ||
82 | make_client_root() { | |
83 | dd if=/dev/zero of=nbd.ext2 bs=1M count=30 | |
84 | mke2fs -F nbd.ext2 | |
85 | mkdir mnt | |
86 | sudo mount -o loop nbd.ext2 mnt | |
87 | ||
88 | kernel=$KVERSION | |
89 | ( | |
90 | initdir=mnt | |
91 | . $basedir/dracut-functions | |
92 | dracut_install sh ls shutdown poweroff stty cat ps ln ip \ | |
93 | /lib/terminfo/l/linux dmesg mkdir cp ping | |
94 | inst ./client-init /sbin/init | |
95 | ( | |
96 | cd "$initdir"; | |
97 | mkdir -p dev sys proc etc var/run tmp | |
98 | ) | |
99 | inst /etc/nsswitch.conf /etc/nsswitch.conf | |
100 | inst /etc/passwd /etc/passwd | |
101 | inst /etc/group /etc/group | |
102 | for i in /lib*/libnss_files**;do | |
103 | inst_library $i | |
104 | done | |
105 | ||
106 | ldconfig -n -r "$initdir" /lib* /usr/lib* | |
107 | ) | |
108 | ||
109 | sudo umount mnt | |
110 | rm -fr mnt | |
111 | } | |
112 | ||
113 | make_server_root() { | |
114 | dd if=/dev/zero of=server.ext2 bs=1M count=30 | |
115 | mke2fs -F server.ext2 | |
116 | mkdir mnt | |
117 | sudo mount -o loop server.ext2 mnt | |
118 | ||
119 | kernel=$KVERSION | |
120 | ( | |
121 | initdir=mnt | |
122 | . $basedir/dracut-functions | |
123 | dracut_install sh ls shutdown poweroff stty cat ps ln ip \ | |
124 | /lib/terminfo/l/linux dmesg mkdir cp ping grep dhcpd \ | |
125 | sleep nbd-server | |
126 | inst ./server-init /sbin/init | |
127 | inst ./hosts /etc/hosts | |
128 | inst ./dhcpd.conf /etc/dhcpd.conf | |
129 | ( | |
130 | cd "$initdir"; | |
131 | mkdir -p dev sys proc etc var/run var/lib/dhcpd tmp | |
132 | ) | |
133 | inst /etc/nsswitch.conf /etc/nsswitch.conf | |
134 | inst /etc/passwd /etc/passwd | |
135 | inst /etc/group /etc/group | |
136 | for i in /lib*/libnss_files**;do | |
137 | inst_library $i | |
138 | done | |
139 | ||
140 | ldconfig -n -r "$initdir" /lib* /usr/lib* | |
141 | ) | |
142 | ||
143 | sudo umount mnt | |
144 | rm -fr mnt | |
145 | } | |
146 | ||
147 | test_setup() { | |
148 | make_client_root || return 1 | |
149 | make_server_root || return 1 | |
150 | ||
151 | # Make the test image | |
152 | ( | |
153 | initdir=overlay | |
154 | . $basedir/dracut-functions | |
155 | dracut_install poweroff shutdown | |
156 | inst_simple ./hard-off.sh /emergency/01hard-off.sh | |
157 | ) | |
158 | ||
159 | sudo $basedir/dracut -l -i overlay / \ | |
160 | -m "dash crypt lvm mdraid udev-rules rootfs-block base debug" \ | |
161 | -d "ata_piix ext2 sd_mod e1000" \ | |
162 | -f initramfs.server $KVERSION || return 1 | |
163 | ||
164 | sudo $basedir/dracut -l -i overlay / \ | |
165 | -m "dash crypt lvm mdraid udev-rules base rootfs-block nbd debug" \ | |
166 | -d "ata_piix ext2 sd_mod e1000" \ | |
167 | -f initramfs.testing $KVERSION || return 1 | |
168 | } | |
169 | ||
170 | test_cleanup() { | |
171 | if [[ -s server.pid ]]; then | |
172 | sudo kill -TERM $(cat server.pid) | |
173 | rm -f server.pid | |
174 | fi | |
175 | rm -fr overlay mnt | |
176 | rm -f flag.img server.ext2 nbd.ext2 initramfs.server initramfs.testing | |
177 | } | |
178 | ||
179 | . $testdir/test-functions |