chiark / gitweb /
merge new features and fixes from development branch
[autopkgtest.git] / xen / setup
1 #!/bin/bash
2 set -e
3 adt_readconfig_needkernel=y
4 . ${ADT_XENLVM_SHARE:=/usr/share/autopkgtest/xenlvm}/readconfig
5 test $nonoptargs = 0 || fail "non-option arguments not allowed"
6
7 $ADT_XENLVM_SHARE/purge
8
9 x lvcreate -L $adt_fs_size -n $adt_lvm_baselv $adt_lvm_vg
10 x lvcreate -L $adt_fs_snapsize -n $adt_lvm_cowdatalv $adt_lvm_vg
11
12 if $adt_lvm_erasebase; then
13   basesize=`lvdisplay -c $lvm_baselv_namepath 8>&-`
14   basesize="${basesize#*:*:*:*:*:*:}"
15   basesize="${basesize%%:*}"
16   x dd if=/dev/zero of=$lvm_baselv_namepath bs=512 count="$basesize"
17 fi
18 x mkfs -t $adt_fs_type $adt_mkfs_args $lvm_baselv_namepath
19
20 mkdir -p $adt_play/base
21 x mount $lvm_baselv_namepath $adt_play/base
22
23 x debootstrap                                                            \
24         --components="${adt_debootstrap_components}"                     \
25         --include=${adt_debootstrap_include},${adt_debootstrap_includemore} \
26         $adt_debootstrap_opts                                           \
27         "$adt_distro" "$adt_play/base"                                  \
28         "$adt_debootstrap_mirrors" "$adt_debootstrap_script"            \
29  |perl -pe '
30  s/^(I: (?:Retrieving|Validating|Extracting|Unpacking|Configuring) [^A-Z].*)\n/
31   sprintf "%-75s\r", $1
32   /e
33 '
34
35 $ADT_XENLVM_SHARE/fixups "$@"
36
37 echo "
38 --- writing $adt_xmconfig ---
39 "
40
41 cat <<END >$adt_xmconfig
42 kernel = "$adt_kernel"
43 memory = $adt_testbed_ram
44 root = "/dev/hda1"
45 extra = "ro console=tty0"
46 disk = [ "phy:$lvm_fslink_ptrrhs,hda1,w" ]
47 vif = [ "bridge=none,mac=$adt_guest_macaddr,ip=${adt_guest_ipaddr},script=${adt_net_vifscript}" ]
48 on_crash = "preserve"
49 on_reboot = "preserve"
50 on_shutdown = "preserve"
51 END
52
53 if [ "x$adt_ramdisk" != x ]; then
54 cat <<END >>$adt_xmconfig
55 ramdisk = "$adt_ramdisk"
56 END
57 fi
58
59 if [ "x$adt_setup_hook" != x ]; then
60         $adt_setup_hook ${adt_play}/base
61 fi
62
63 x umount $lvm_baselv_namepath
64
65 mkdir -p ${lvm_fslink_dirpath}
66 ln -sf ../$lvm_baselv_namerhs ${lvm_fslink_ptr}
67 x xm create $adt_xmconfig name=$adt_xmname
68 retries=10
69
70 if grep 0 /proc/sys/net/ipv4/ip_forward >/dev/null; then
71         cat <<END
72
73 ********** WARNING - IP FORWARDING IS TURNED OFF ON THE HOST **********
74 Your testbed will probably have trouble with downloads, DNS, etc.
75 You must turn this on manually, since it is a major config change.
76
77 END
78 fi
79
80 while true; do
81         if ping -c 1 $adt_guest_ipaddr && \
82            /usr/share/autopkgtest/xenlvm/on-testbed '
83                 set -e; umask 002; cd /var/lib;
84                 mkdir -p autopkgtest; cd autopkgtest;
85                 touch xenlvm-created
86         '; then break; fi
87         if [ $retries -le 0 ]; then 
88                 echo >&2 'no response from guest'
89                 x xm console $adt_xmname
90                 exit 1
91         fi
92         retries=$(($retries-1))
93         sleep 2
94 done
95
96 x xm mem-set $adt_xmname $adt_freeze_ram
97 retries=$adt_vm_reduce_retries
98 while sleep 1; do
99   if x xm mem-max $adt_xmname $adt_freeze_ram; then break; fi
100   if [ $retries -le 0 ]; then echo >&2 'cannot reduce memory'; exit 1; fi
101   retries=$(($retries-1))
102 done
103
104 x xm save $adt_xmname $adt_play/xen-save
105 rm ${lvm_fslink_ptr}