summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--initramfs-tools/scripts/samizdat19
-rw-r--r--isolinux/pxelinux.cfg/default3
-rw-r--r--src/initrd/btrfs-create.sh24
-rwxr-xr-xsrc/initrd/grok-block7
-rwxr-xr-xsrc/qemu.sh16
5 files changed, 47 insertions, 22 deletions
diff --git a/initramfs-tools/scripts/samizdat b/initramfs-tools/scripts/samizdat
index 515b724..a42b321 100644
--- a/initramfs-tools/scripts/samizdat
+++ b/initramfs-tools/scripts/samizdat
@@ -8,20 +8,29 @@ mountroot()
8 samizdat_install_udev_rules 8 samizdat_install_udev_rules
9 9
10 if [ "${nbdroot%%,*}" ]; then 10 if [ "${nbdroot%%,*}" ]; then
11 # I guess this isn't getting called otherwise? I don't know why this should 11 (. common.sh
12 # be necessary, but it is. 12 sh /scripts/local-top/nbd >/dev/null 2>&1;
13 sh /scripts/local-top/nbd >/dev/null 2>&1 13 bootdone nbd-script) &
14 fi 14 fi
15 15
16 if keys_via_network; then 16 if ! cdrom_has_keys && keys_via_network; then
17 wait_for_gnupghome_tar "$tftp_key_server" 17 bootwait nbd-script
18 wait_for_gnupghome_tar "$tftp_key_server"
18 fi 19 fi
20
19 bootwait samizdat-gpg 21 bootwait samizdat-gpg
20 bootmenu 22 bootmenu
21 bootwait root-mounted 23 bootwait root-mounted
22 chvt 1 24 chvt 1
23} 25}
24 26
27cdrom_has_keys()
28{
29 [ ! "$BOOTIF" ] || return
30 bootwait samizdat-cdrom
31 [ -d /cdrom/gnupghome ]
32}
33
25# Sets $tftp_key_server or returns false. 34# Sets $tftp_key_server or returns false.
26keys_via_network() 35keys_via_network()
27{ 36{
diff --git a/isolinux/pxelinux.cfg/default b/isolinux/pxelinux.cfg/default
index 77796b3..4dc57fc 100644
--- a/isolinux/pxelinux.cfg/default
+++ b/isolinux/pxelinux.cfg/default
@@ -2,4 +2,5 @@ default samizdat
2label samizdat 2label samizdat
3 linux linux/vmlinuz 3 linux linux/vmlinuz
4 initrd linux/initrd.img 4 initrd linux/initrd.img
5 append boot=samizdat components quiet splash nbdroot=192.168.10.1,samizdat.btrfs nbddev=/dev/nbd0 ip=dhcp netkeys 5 ipappend 0x3
6 append boot=samizdat components quiet splash nbdroot=192.168.10.1,samizdat.btrfs nbddev=/dev/nbd0 netkeys
diff --git a/src/initrd/btrfs-create.sh b/src/initrd/btrfs-create.sh
index a1a53ed..8a0cd87 100644
--- a/src/initrd/btrfs-create.sh
+++ b/src/initrd/btrfs-create.sh
@@ -27,22 +27,28 @@ ceil4()
27 printf '%d\n' "$x" 27 printf '%d\n' "$x"
28} 28}
29 29
30cdrom_has_rootfs()
31{
32 [ ! "$BOOTIF" ] || return
33 bootwait samizdat-cdrom
34 [ -d /cdrom/rootfs ]
35}
36
30losetup_layers() 37losetup_layers()
31{ 38{
32 if netbooting; then 39 if cdrom_has_rootfs; then
40 local fs fs_rw
41 for fs in /cdrom/rootfs/*.btrfs; do
42 fs_rw=/"${fs##*/}".rw
43 dd if=/dev/zero of="$fs_rw" bs=1M count=10
44 losetup_snapshot "$fs" "$fs_rw" || return
45 done
46 else
33 bootwait samizdat-nbd-dev 47 bootwait samizdat-nbd-dev
34 dd if=/dev/zero of=/nbd0.rw bs=1M count=10 48 dd if=/dev/zero of=/nbd0.rw bs=1M count=10
35 dm_snapshot /dev/nbd0 /nbd0.rw 49 dm_snapshot /dev/nbd0 /nbd0.rw
36 return 50 return
37 fi 51 fi
38
39 bootwait samizdat-cdrom
40 local fs fs_rw
41 for fs in /cdrom/rootfs/*.btrfs; do
42 fs_rw=/"${fs##*/}".rw
43 dd if=/dev/zero of="$fs_rw" bs=1M count=10
44 losetup_snapshot "$fs" "$fs_rw" || return
45 done
46} 52}
47 53
48init_samizdat() 54init_samizdat()
diff --git a/src/initrd/grok-block b/src/initrd/grok-block
index 3ad0432..f44ed19 100755
--- a/src/initrd/grok-block
+++ b/src/initrd/grok-block
@@ -150,8 +150,11 @@ grok_block()
150 # because while it's mounted, the dmsetup stuff will fail with device busy. 150 # because while it's mounted, the dmsetup stuff will fail with device busy.
151 /dev/nbd0) 151 /dev/nbd0)
152 if [ -e /bootwait/samizdat-nbd-dev ] 152 if [ -e /bootwait/samizdat-nbd-dev ]
153 then return 153 then
154 else wait_for_files_ /sys/block/nbd0/pid 154 return
155 else
156 bootwait nbd-script
157 wait_for_files_ /sys/block/nbd0/pid
155 fi 158 fi
156 ;; 159 ;;
157 esac 160 esac
diff --git a/src/qemu.sh b/src/qemu.sh
index b095eb8..3b8cdec 100755
--- a/src/qemu.sh
+++ b/src/qemu.sh
@@ -12,6 +12,8 @@ layered=${samizdat_iso_dir}/${iso%.iso}.layered.iso
12 12
13initrd.sh || { echo "initrd.sh failed" >&2; exit 1; }; 13initrd.sh || { echo "initrd.sh failed" >&2; exit 1; };
14 14
15[ "$NO_NET" ] || USE_NET=y
16
15NET='tap,vlan=0,ifname=tap0,script=no,downscript=no' 17NET='tap,vlan=0,ifname=tap0,script=no,downscript=no'
16 18
17[ "$SLOW_BOOT" ] || QEMU_LOADS_LINUX=y 19[ "$SLOW_BOOT" ] || QEMU_LOADS_LINUX=y
@@ -21,9 +23,13 @@ NET='tap,vlan=0,ifname=tap0,script=no,downscript=no'
21 23
22initrd=${samizdat_isolinux_dir}/linux/initrd.img 24initrd=${samizdat_isolinux_dir}/linux/initrd.img
23kernel=${samizdat_isolinux_dir}/linux/vmlinuz 25kernel=${samizdat_isolinux_dir}/linux/vmlinuz
24 kcmdline_NET='boot=samizdat components quiet splash nbdroot=192.168.10.1,samizdat.btrfs nbddev=/dev/nbd0 ip=dhcp netkeys'
25kcmdline_CDROM_NET='boot=samizdat components quiet splash nbdroot=192.168.10.1,samizdat.btrfs nbddev=/dev/nbd0 ip=dhcp'
26kcmdline_CDROM='boot=samizdat components quiet splash' 26kcmdline_CDROM='boot=samizdat components quiet splash'
27kcmdline_CDROM_NET="${kcmdline_CDROM} nbdroot=192.168.10.1,samizdat.btrfs nbddev=/dev/nbd0 ip=dhcp"
28kcmdline_NET="${kcmdline_CDROM_NET} netkeys"
29
30MAC='52-54-00-12-34-56'
31
32kcmdline_BOOTIF="BOOTIF=01-$MAC"
27 33
28set -- 34set --
29if [ "$USE_ISO" ]; then 35if [ "$USE_ISO" ]; then
@@ -40,7 +46,7 @@ if [ "$USE_ISO" ]; then
40 fi 46 fi
41else 47else
42 if [ "$QEMU_LOADS_LINUX" ]; then 48 if [ "$QEMU_LOADS_LINUX" ]; then
43 set -- "$@" -initrd "$initrd" -kernel "$kernel" -append "$kcmdline_NET" 49 set -- "$@" -initrd "$initrd" -kernel "$kernel" -append "$kcmdline_NET $kcmdline_BOOTIF"
44 else 50 else
45 set -- "$@" -boot n 51 set -- "$@" -boot n
46 fi 52 fi
@@ -49,8 +55,8 @@ fi
49set -x 55set -x
50sudo qemu-system-x86_64 -enable-kvm -smp 2 -m 640 -k en-us \ 56sudo qemu-system-x86_64 -enable-kvm -smp 2 -m 640 -k en-us \
51 -vga qxl \ 57 -vga qxl \
52 -net nic,vlan=0,model=virtio \ 58 -net nic,vlan=0,model=virtio,macaddr=$MAC \
53 -net "$NET" \ 59 ${USE_NET:+ -net "$NET"} \
54 -rtc base=localtime \ 60 -rtc base=localtime \
55 -hda "$disk" \ 61 -hda "$disk" \
56 "$@" 62 "$@"