]> git.ipfire.org Git - thirdparty/dracut.git/blob - test/TEST-30-ISCSI/test.sh
008aa3d0bdd320e22f69fe26f2aeb5ae1aeeebc1
[thirdparty/dracut.git] / test / TEST-30-ISCSI / test.sh
1 #!/bin/bash
2 TEST_DESCRIPTION="root filesystem over iSCSI"
3
4 KVERSION=${KVERSION-$(uname -r)}
5
6 #DEBUGFAIL="rdshell"
7
8 run_server() {
9 # Start server first
10 echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server"
11
12 $testdir/run-qemu -hda server.ext2 -hdb root.ext2 -m 256M -nographic \
13 -net nic,macaddr=52:54:00:12:34:56,model=e1000 \
14 -net socket,mcast=230.0.0.1:1235 \
15 -serial udp:127.0.0.1:9999 \
16 -kernel /boot/vmlinuz-$KVERSION \
17 -append "root=/dev/sda rw quiet console=ttyS0,115200n81 selinux=0" \
18 -initrd initramfs.server -pidfile server.pid -daemonize || return 1
19 sudo chmod 644 server.pid || return 1
20
21 # Cleanup the terminal if we have one
22 tty -s && stty sane
23
24 echo Sleeping 10 seconds to give the server a head start
25 sleep 10
26 }
27
28 run_client() {
29
30 # Need this so kvm-qemu will boot (needs non-/dev/zero local disk)
31 if ! dd if=/dev/zero of=client.img bs=1M count=1; then
32 echo "Unable to make client sda image" 1>&2
33 return 1
34 fi
35
36 $testdir/run-qemu -hda client.img -m 256M -nographic \
37 -net nic,macaddr=52:54:00:12:34:00,model=e1000 \
38 -net socket,mcast=230.0.0.1:1235 \
39 -kernel /boot/vmlinuz-$KVERSION \
40 -append "root=dhcp rw quiet rdinitdebug rdinfo rdnetdebug console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" \
41 -initrd initramfs.testing
42 grep -m 1 -q iscsi-OK client.img || return 1
43 }
44
45 test_run() {
46 if ! run_server; then
47 echo "Failed to start server" 1>&2
48 return 1
49 fi
50 run_client
51 ret=$?
52 if [[ -s server.pid ]]; then
53 sudo kill -TERM $(cat server.pid)
54 rm -f server.pid
55 fi
56 return $ret
57 }
58
59 test_setup() {
60 if [ ! -x /usr/sbin/iscsi-target ]; then
61 echo "Need iscsi-target from netbsd-iscsi"
62 return 1
63 fi
64
65 # Create the blank file to use as a root filesystem
66 dd if=/dev/zero of=root.ext2 bs=1M count=20
67
68 kernel=$KVERSION
69 # Create what will eventually be our root filesystem onto an overlay
70 (
71 initdir=overlay/source
72 . $basedir/dracut-functions
73 dracut_install sh shutdown poweroff stty cat ps ln ip \
74 /lib/terminfo/l/linux mount dmesg mkdir \
75 cp ping grep
76 inst ./client-init /sbin/init
77 (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
78 ldconfig -n -r "$initdir" /lib* /usr/lib*
79 )
80
81 # second, install the files needed to make the root filesystem
82 (
83 initdir=overlay
84 . $basedir/dracut-functions
85 dracut_install sfdisk mke2fs poweroff cp umount
86 inst_simple ./create-root.sh /initqueue/01create-root.sh
87 inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
88 )
89
90 # create an initramfs that will create the target root filesystem.
91 # We do it this way so that we do not risk trashing the host mdraid
92 # devices, volume groups, encrypted partitions, etc.
93 $basedir/dracut -l -i overlay / \
94 -m "dash crypt lvm mdraid udev-rules base rootfs-block kernel-modules" \
95 -d "piix ide-gd_mod ata_piix ext2 sd_mod" \
96 -f initramfs.makeroot $KVERSION || return 1
97 rm -rf overlay
98
99
100 # Need this so kvm-qemu will boot (needs non-/dev/zero local disk)
101 if ! dd if=/dev/zero of=client.img bs=1M count=1; then
102 echo "Unable to make client sdb image" 1>&2
103 return 1
104 fi
105 # Invoke KVM and/or QEMU to actually create the target filesystem.
106 $testdir/run-qemu -hda root.ext2 -hdb client.img -m 256M -nographic -net none \
107 -kernel "/boot/vmlinuz-$kernel" \
108 -append "root=/dev/dracut/root rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \
109 -initrd initramfs.makeroot || return 1
110 grep -m 1 -q dracut-root-block-created client.img || return 1
111 rm client.img
112 (
113 initdir=overlay
114 . $basedir/dracut-functions
115 dracut_install poweroff shutdown
116 inst_simple ./hard-off.sh /emergency/01hard-off.sh
117 inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
118 )
119 sudo $basedir/dracut -l -i overlay / \
120 -o "plymouth dmraid" \
121 -a "debug" \
122 -d "piix ide-gd_mod ata_piix ext2 sd_mod" \
123 -f initramfs.testing $KVERSION || return 1
124
125 # Make server root
126 dd if=/dev/zero of=server.ext2 bs=1M count=60
127 mke2fs -F server.ext2
128 mkdir mnt
129 sudo mount -o loop server.ext2 mnt
130
131 kernel=$KVERSION
132 (
133 initdir=mnt
134 . $basedir/dracut-functions
135 (
136 cd "$initdir";
137 mkdir -p dev sys proc etc var/run tmp var/lib/dhcpd /etc/iscsi
138 )
139 inst /etc/passwd /etc/passwd
140 dracut_install sh ls shutdown poweroff stty cat ps ln ip \
141 /lib/terminfo/l/linux dmesg mkdir cp ping \
142 modprobe tcpdump \
143 /etc/services sleep mount chmod
144 dracut_install /usr/sbin/iscsi-target
145 instmods iscsi_tcp crc32c ipv6
146 inst ./targets /etc/iscsi/targets
147 [ -f /etc/netconfig ] && dracut_install /etc/netconfig
148 which dhcpd >/dev/null 2>&1 && dracut_install dhcpd
149 [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
150 inst ./server-init /sbin/init
151 inst ./hosts /etc/hosts
152 inst ./dhcpd.conf /etc/dhcpd.conf
153 dracut_install /etc/nsswitch.conf /etc/rpc /etc/protocols
154 inst /etc/group /etc/group
155
156 /sbin/depmod -a -b "$initdir" $kernel
157 ldconfig -n -r "$initdir" /lib* /usr/lib*
158 )
159
160 sudo umount mnt
161 rm -fr mnt
162
163 # Make server's dracut image
164 $basedir/dracut -l -i overlay / \
165 -m "dash udev-rules base rootfs-block debug kernel-modules" \
166 -d "piix ide-gd_mod ata_piix ext2 sd_mod e1000" \
167 -f initramfs.server $KVERSION || return 1
168
169 }
170
171 test_cleanup() {
172 if [[ -s server.pid ]]; then
173 sudo kill -TERM $(cat server.pid)
174 rm -f server.pid
175 fi
176 rm -rf mnt overlay
177 rm -f client.ext2 server.ext2 client.img initramfs.server initramfs.testing
178 rm -f initramfs.makeroot root.ext2
179 }
180
181 . $testdir/test-functions