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