#!/bin/bash
set -e
+adt_readconfig_needkernel=y
+adt_readconfig_needlock=y
. ${ADT_XENLVM_SHARE:=/usr/share/autopkgtest/xenlvm}/readconfig
test $nonoptargs = 0 || fail "non-option arguments not allowed"
-$ADT_XENLVM_SHARE/cleanup
-x lvchange -a n $lvm_baselv_namepath ||:
-x lvchange -a n $lvm_cowdata_namepath ||:
-x lvremove $lvm_baselv_namepath ||:
-x lvremove $lvm_cowdata_namepath ||:
+$ADT_XENLVM_SHARE/purge "$@"
-x lvcreate -L $adt_fs_size -n $adt_lvm_baselv $adt_lvm_vg
-x lvcreate -L $adt_fs_snapsize -n $adt_lvm_cowdatalv $adt_lvm_vg
+#----- create fs base
+
+lvm_create_base () {
+ xl lvcreate -L $3 -n $2 $1 $4
+ xl lvcreate -L $6 -n $5 $1 $7
+ if $8; then
+ basesize=`lvdisplay -c $9 8>&- 3>&-`
+ basesize="${basesize#*:*:*:*:*:*:}"
+ basesize="${basesize%%:*}"
+ x dd if=/dev/zero of=$9 bs=512 count="$basesize"
+ fi
+}
+
+lvm_create_base $adt_lvm_vg \
+ $adt_lvm_baselv $adt_fs_size $adt_lvm_pv_fsbase \
+ $adt_lvm_cowdatalv $adt_fs_snapsize $adt_lvm_pv_fssnap \
+ $adt_lvm_erasebase $lvm_baselv_namepath
-if $adt_lvm_erasebase; then
- x dd if=/dev/zero of=$lvm_baselv_namepath
-fi
x mkfs -t $adt_fs_type $adt_mkfs_args $lvm_baselv_namepath
+#----- create swap base
+
+if $provide_swap; then
+ lvm_create_base $adt_lvm_swapvg \
+ $adt_lvm_swapbaselv $adt_swap_size $adt_lvm_pv_swapbase \
+ $adt_lvm_swapcowdatalv $adt_swap_snapsize $adt_lvm_pv_swapsnap \
+ $adt_lvm_eraseswap $lvm_baselv_swapnamepath
+ x mkswap $lvm_baselv_swapnamepath
+ swapdisk=", \"phy:$lvm_swaplink_ptrrhs,hda2,w\""
+fi
+
+#----- create base filesystem and info
+
mkdir -p $adt_play/base
x mount $lvm_baselv_namepath $adt_play/base
-x debootstrap \
- --components="${adt_debootstrap_components}" \
+x debootstrap \
+ --components="${adt_debootstrap_components}" \
--include=${adt_debootstrap_include},${adt_debootstrap_includemore} \
- $adt_debootstrap_opts \
- "$adt_distro" "$adt_play/base" \
- "$adt_debootstrap_mirrors" "$adt_debootstrap_script"
-
-#x pbuilder create \
-# --configfile /usr/share/autopkgtest/xenlvm/pbuilderrc \
-# --distribution "$adt_distro" \
-# --no-targz --buildplace $adt_play/base \
-# $adt_pbuilder_args --debootstrapopts --variant=''
+ $adt_debootstrap_opts \
+ "$adt_distro" "$adt_play/base" \
+ "$adt_debootstrap_mirrors" "$adt_debootstrap_script" \
+ |perl -pe '
+ s/^(I: (?:Retrieving|Validating|Extracting|Unpacking|Configuring) [^A-Z].*)\n/
+ sprintf "%-75s\r", $1
+ /e
+'
$ADT_XENLVM_SHARE/fixups "$@"
kernel = "$adt_kernel"
memory = $adt_testbed_ram
root = "/dev/hda1"
-extra = "ro console=tty0"
-disk = [ "phy:$lvm_fslink_ptrrhs,hda1,w" ]
-vif = [ "bridge=none,mac=$adt_guest_macaddr,ip=${adt_guest_ipaddr},script=${adt_net_vifscript}" ]
+extra = "ro console=tty0 $adt_xmhook_extra"
+disk = [ "phy:$lvm_fslink_ptrrhs,hda1,w"$swapdisk $adt_xmhook_disk ]
+vif = [ "bridge=none,mac=$adt_guest_macaddr,ip=${adt_guest_ipaddr},script=${adt_net_vifscript}" $adt_xmhook_vif ]
on_crash = "preserve"
on_reboot = "preserve"
on_shutdown = "preserve"
+$adt_xmhook_config
END
if [ "x$adt_ramdisk" != x ]; then
END
fi
+if [ "x$adt_setup_hook" != x ]; then
+ $adt_setup_hook ${adt_play}/base
+fi
+
x umount $lvm_baselv_namepath
-mkdir -p ${lvm_fslink_dirpath}
-ln -sf ../$lvm_baselv_namerhs ${lvm_fslink_ptr}
+for fs in fs swap; do
+ swap=${fs#fs}; eval "
+ mkdir -p \${lvm_${fs}link_dirpath}
+ ln -sf ../\$lvm_baselv_${swap}namerhs \${lvm_${fs}link_ptr}
+ "
+done
+
x xm create $adt_xmconfig name=$adt_xmname
retries=10
+if grep 0 /proc/sys/net/ipv4/ip_forward >/dev/null; then
+ cat <<END
+
+********** WARNING - IP FORWARDING IS TURNED OFF ON THE HOST **********
+Your testbed will probably have trouble with downloads, DNS, etc.
+You must turn this on manually, since it is a major config change.
+
+END
+fi
+
while true; do
if ping -c 1 $adt_guest_ipaddr && \
- /usr/share/autopkgtest/xenlvm/on-testbed id; then break; fi
+ /usr/share/autopkgtest/xenlvm/on-testbed "$@" '
+ set -e; umask 002; cd /var/lib;
+ mkdir -p autopkgtest; cd autopkgtest;
+ touch xenlvm-created
+ '; then break; fi
if [ $retries -le 0 ]; then
echo >&2 'no response from guest'
x xm console $adt_xmname
done
x xm save $adt_xmname $adt_play/xen-save
-rm ${lvm_fslink_ptr}
+rm ${lvm_fslink_ptr} ${lvm_swaplink_ptr}
+touch "$adt_play/good"