From: Ian Jackson Date: Fri, 26 Oct 2007 16:31:45 +0000 (+0100) Subject: swap support X-Git-Tag: converted-from-bzr~15 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=c83142da677bd7f83b4c5f5fb6011dad50fe99a9;p=autopkgtest.git swap support --- diff --git a/debian/changelog b/debian/changelog index 943d2c9..48c3dc3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,11 @@ -autopkgtest (1.1.1~) unstable; urgency=low +autopkgtest (1.2.0~) unstable; urgency=low - * adt-xenlvm-setup: new hooks for xmdomain config file. + * remove spurious mkdir of empty variable $snap. + * adt-xenlvm-*: support for swap, defaulting to 5G. + This will break existing setups with insufficient LVM space. * hosts/cadmium/update-suppression: really do not install empty file. + * adt-xenlvm-*: allow specification of LVM PVs to use. + * adt-xenlvm-setup: new hooks for xmdomain config file. * allow suppresspackages and blacklist lists to contain more information after some whitespace * adt-openbugs-*: new machinery works with debbugs diff --git a/xen/README b/xen/README index cce8239..f59f162 100644 --- a/xen/README +++ b/xen/README @@ -201,6 +201,14 @@ adt_fs_snapsize 5120M adt_fs_cowchunk 8 [Mby] Copy-on-write chunk size. +adt_swap_size 5120M + Swapspace to provide to guests. This is done with + copy-on-write just as for the filesystems. The snapshot area + is (necessarily) the same size as the swapspace itself. + +adt_swap_cowchunk + Copy-on-write chunk size for swap area. + adt_vm_reduce_retries 10 [seconds] Time to wait for VM to reduce its memory following xm mem-set. @@ -234,6 +242,19 @@ adt_nominum adt it will be separated by other parts by underscores `_', so they should be avoided. +adt_lvm_swapvg + VG to use for guest's swap. + +adt_lvm_eraseswap + Whether the base swap image needs to be filled with zeroes. + +adt_lvm_pv_fsbase +adt_lvm_pv_fssnap +adt_lvm_pv_swapbase +adt_lvm_pv_swapsnap + Specifies specific LVM PVs to use. The default is to leave it + up to lvcreate. + adt_guest_macaddr 00:16:3e:7c:aa:7f adt_net_vifscript /etc/xen/scripts/vif-route-adt @@ -274,18 +295,23 @@ adt_xmconfig /xmconfig adt_lvm_baselv __base adt_lvm_cowdatalv __cowdata +adt_lvm_snapbaselv __swapbase +adt_lvm_snapcowdatalv __swapcowdata LVM volume for base filesystem image, and copy-on-write buffer. Will be created during testbed setup, destroying any previous volume if necessary. This is the logical volume name not including /dev/. -adt_devmapper_cowdev __snap +adt_devmapper_cowdev __snap +adt_devmapper_swapcowdev __swapsnap devmapper device for copy-on-write image used by testbed when running. This is the device name in the devmapper namespace, ie not including /dev/mapper. adt_fslink_dir adt-xenlvm +adt_swaplink_dir adt-xenlvm adt_fslink_name __fs +adt_swaplink_name __swap Directory in /dev, and filename in that directory, where the scripts put the symlink used to trick Xen into using a different block device on resume than was used for creation. diff --git a/xen/cleanup b/xen/cleanup index 379f764..0507720 100755 --- a/xen/cleanup +++ b/xen/cleanup @@ -4,7 +4,7 @@ adt_readconfig_needlock=y . ${ADT_XENLVM_SHARE:=/usr/share/autopkgtest/xenlvm}/readconfig test $nonoptargs = 0 || fail "non-option arguments not allowed" -mkdir -p $adt_play $snap +mkdir -p $adt_play try_es () { printf "%s\n" "- $*"; "$@" >/dev/null 2>&1; } try () { try_es "$@" ||:; } @@ -12,11 +12,16 @@ try () { try_es "$@" ||:; } n=0 try xm destroy $adt_xmname 2>/dev/null try umount $lvm_baselv_namepath -sleeptime=0 -while try_es dmsetup info $adt_devmapper_cowdev; do - try dmsetup remove $adt_devmapper_cowdev - [ $sleeptime -le 5 ] || fail "timed out trying dmsetup info/remove" - sleep $sleeptime - sleeptime=$(( $sleeptime + 1 )) +for fs in fs swap; do + swap=${fs#fs}; eval " + sleeptime=0 + while try_es dmsetup info \$adt_devmapper_${swap}cowdev; do + try dmsetup remove \$adt_devmapper_${swap}cowdev + [ \$sleeptime -le 5 ] || \ + fail "timed out trying dmsetup info/remove ${swap}" + sleep \$sleeptime + sleeptime=\$(( \$sleeptime + 1 )) + done + " done -rm -f $lvm_fslink_ptr +rm -f $lvm_fslink_ptr $lvm_swaplink_ptr diff --git a/xen/fixups b/xen/fixups index bcd4969..c09a540 100755 --- a/xen/fixups +++ b/xen/fixups @@ -49,7 +49,8 @@ ln -s ../init.d/xenethtoolk $dest/etc/rc2.d/S21xenethtoolk chroot $dest root/fixups-inside \ "$adt_host_hostname" "$adt_guest_hostname" \ "$adt_host_ipaddr" "$adt_guest_ipaddr" \ - "$adt_fs_type" "$adt_normaluser" + "$adt_fs_type" "$adt_normaluser" \ + "$provideswap" kh=/etc/ssh/ssh_known_hosts test ! -f $kh || cp $kh $kh.new diff --git a/xen/fixups-inside b/xen/fixups-inside index 5db1a5a..299f136 100755 --- a/xen/fixups-inside +++ b/xen/fixups-inside @@ -7,6 +7,7 @@ adt_host_ipaddr=$3 adt_guest_ipaddr=$4 adt_fs_type=$5 adt_normaluser=$6 +adt_provideswap=$7 echo '(---' @@ -27,6 +28,12 @@ proc /proc proc defaults 0 0 /dev/hda1 / $adt_fs_type defaults,errors=remount-ro 0 1 END +if $adt_provideswap; then + cat >>/etc/fstab </etc/network/interfaces <&- 3>&-` - basesize="${basesize#*:*:*:*:*:*:}" - basesize="${basesize%%:*}" - x dd if=/dev/zero of=$lvm_baselv_namepath bs=512 count="$basesize" -fi +#----- 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 + 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 @@ -44,7 +66,7 @@ kernel = "$adt_kernel" memory = $adt_testbed_ram root = "/dev/hda1" extra = "ro console=tty0 $adt_xmhook_extra" -disk = [ "phy:$lvm_fslink_ptrrhs,hda1,w" $adt_xmhook_disk ] +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" @@ -64,8 +86,13 @@ 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 @@ -104,5 +131,5 @@ while sleep 1; do 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" diff --git a/xen/with-testbed b/xen/with-testbed index 5d207db..b92f134 100755 --- a/xen/with-testbed +++ b/xen/with-testbed @@ -15,13 +15,17 @@ ${ADT_XENLVM_SHARE}/cleanup >/dev/null modprobe dm-snapshot >/dev/null 2>&1 ||: -bdsize=$(blockdev --getsize $lvm_baselv_namepath) -dmsetup create $adt_devmapper_cowdev <