chiark / gitweb /
swap support
authorIan Jackson <ian@davenant.greenend.org.uk>
Fri, 26 Oct 2007 16:31:45 +0000 (17:31 +0100)
committerIan Jackson <ian@davenant.greenend.org.uk>
Fri, 26 Oct 2007 16:31:45 +0000 (17:31 +0100)
debian/changelog
xen/README
xen/cleanup
xen/fixups
xen/fixups-inside
xen/purge
xen/readconfig.in
xen/setup
xen/with-testbed

index 943d2c985708305cc00fb1ebedd3e20540089284..48c3dc3b2ce17fd3b3cd31207a336e8b57408e48 100644 (file)
@@ -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
index cce8239647e777d57ac04c00277271c6ab4d18ed..f59f162c92c34dbf4f0d8eedabf5d8eda8fa24ed 100644 (file)
@@ -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      <fs_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         <lvm_vg>
+       VG to use for guest's swap.
+
+adt_lvm_eraseswap      <lvm_erasebase>
+       Whether the base swap image needs to be filled with zeroes.
+
+adt_lvm_pv_fsbase      <none>
+adt_lvm_pv_fssnap      <none>
+adt_lvm_pv_swapbase    <none>
+adt_lvm_pv_swapsnap    <none>
+       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              <play>/xmconfig
 
 adt_lvm_baselv         <nominum>_<distro>_base
 adt_lvm_cowdatalv      <nominum>_<distro>_cowdata
+adt_lvm_snapbaselv     <nominum>_<distro>_swapbase
+adt_lvm_snapcowdatalv  <nominum>_<distro>_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/<lvm_vg>.
 
-adt_devmapper_cowdev   <nominum>_<distro>_snap
+adt_devmapper_cowdev           <nominum>_<distro>_snap
+adt_devmapper_swapcowdev       <nominum>_<distro>_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                <nominum>_<distro>_fs
+adt_swaplink_name      <nominum>_<distro>_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.
index 379f7642f3bb339d4541b130f13d3a9fe6d1488e..050772062b48ad7cc41e3c58ab8e956bad55fe84 100755 (executable)
@@ -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
index bcd49697a77e1c8eaf5574e18dce8d2c2642bf6f..c09a5403955db390290bfd17f22f0aaa60e67632 100755 (executable)
@@ -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
index 5db1a5a37f2eb0bf059a7e3e15121b3ea14e0c90..299f136db9e335a924b1bce429543a948596b285 100755 (executable)
@@ -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 <<END
+/dev/hda2 none swap sw 0 0
+END
+fi
+
 mkdir -p /etc/network
 cat >/etc/network/interfaces <<END
 auto lo
index e2e2a7a5e1fee06f85b29ec24a9a9be08eae31cd..d0c2aefb5a0d3a569d6815c516d6c165bb744a8e 100755 (executable)
--- a/xen/purge
+++ b/xen/purge
@@ -7,9 +7,13 @@ test $nonoptargs = 0 || fail "non-option arguments not allowed"
 rm -f $adt_play/good
 
 $ADT_XENLVM_SHARE/cleanup "$@"
-xl lvchange -a n $lvm_baselv_namepath ||:
-xl lvchange -a n $lvm_cowdata_namepath ||:
-xl lvremove $lvm_baselv_namepath ||:
-xl lvremove $lvm_cowdata_namepath ||:
+for fs in fs swap; do
+ swap=${fs#fs}; eval "
+  xl lvchange -a n \$lvm_baselv_${swap}namepath ||:
+  xl lvchange -a n \$lvm_cowdata_${swap}namepath ||:
+  xl lvremove \$lvm_baselv_${swap}namepath ||:
+  xl lvremove \$lvm_cowdata_${swap}namepath ||:
+ "
+done
 
 rm -rf -- "${adt_play}"
index f37307a710406225dc9db82efead869ff11175ed..97e34ff249283964531f87d852da38173df447c4 100644 (file)
@@ -27,6 +27,7 @@ esac
 : ${adt_fs_size:=6144M}
 : ${adt_fs_snapsize:=5120M}
 : ${adt_fs_cowchunk:=8}
+: ${adt_swap_size:=5120M}
 : ${adt_playbase:=/var/lib/autopkgtest/xenlvm}
 : ${adt_fs_type:=ext3}
 : ${adt_fs_mkfs_args:=}
@@ -301,6 +302,7 @@ boolean_config () {
 
 # LVM
 boolean_config lvm_erasebase true
+
 : ${adt_lvm_baselv:=${adt_nominum}_${adt_distro}_base}
 : ${adt_lvm_cowdatalv:=${adt_nominum}_${adt_distro}_cowdata}
 : ${adt_devmapper_cowdev:=${adt_nominum}_${adt_distro}_snap}
@@ -308,19 +310,42 @@ boolean_config lvm_erasebase true
 : ${adt_fslink_dir:=adt-xenlvm}
 : ${adt_fslink_name:=${adt_nominum}_${adt_distro}_fs}
 
+# LVM - swap
+: ${adt_lvm_eraseswap:=$adt_lvm_erasebase}
+
+: ${adt_lvm_swapbaselv:=${adt_nominum}_${adt_distro}_swapbase}
+: ${adt_lvm_swapcowdatalv:=${adt_nominum}_${adt_distro}_swapcowdata}
+: ${adt_devmapper_swapcowdev:=${adt_nominum}_${adt_distro}_swapsnap}
+
+: ${adt_swaplink_dir:=adt-xenlvm}
+: ${adt_swaplink_name:=${adt_nominum}_${adt_distro}_swap}
+
+: ${adt_lvm_swapvg:=$adt_lvm_vg}
+
+: ${adt_swap_snapsize:=$adt_swap_size}
+: ${adt_swap_cowchunk:=$adt_fs_cowchunk}
+
+case "$adt_swap_size" in
+*[!0A-Za-z]*)  provide_swap=true       ;;
+*)             provide_swap=false      ;;
+esac
+
 # Firewall
 : ${adt_fw_testbedclients:=${adt_host_ipaddr}}
 
-lvm_baselv_namerhs=${adt_lvm_vg}/${adt_lvm_baselv}
-lvm_baselv_namepath=/dev/${lvm_baselv_namerhs}
+for fs in fs swap; do swap=${fs#fs}; eval "
+  lvm_baselv_${swap}namerhs=\${adt_lvm_${swap}vg}/\${adt_lvm_${swap}baselv}
+  lvm_baselv_${swap}namepath=/dev/\${lvm_baselv_${swap}namerhs}
 
-lvm_cowdata_namerhs=${adt_lvm_vg}/${adt_lvm_cowdatalv}
-lvm_cowdata_namepath=/dev/${lvm_cowdata_namerhs}
+  lvm_cowdata_${swap}namerhs=\${adt_lvm_${swap}vg}/\${adt_lvm_${swap}cowdatalv}
+  lvm_cowdata_${swap}namepath=/dev/\${lvm_cowdata_${swap}namerhs}
 
-lvm_snapdev=/dev/mapper/${adt_devmapper_cowdev}
+  lvm_${swap}snapdev=/dev/mapper/\${adt_devmapper_${swap}cowdev}
 
-lvm_fslink_ptrrhs=${adt_fslink_dir}/${adt_fslink_name}
-lvm_fslink_dirpath=/dev/${adt_fslink_dir}
-lvm_fslink_ptr=/dev/${adt_fslink_dir}/${adt_fslink_name}
+  lvm_${fs}link_ptrrhs=\${adt_${fs}link_dir}/\${adt_${fs}link_name}
+  lvm_${fs}link_dirpath=/dev/\${adt_${fs}link_dir}
+  lvm_${fs}link_ptr=/dev/\${adt_${fs}link_dir}/\${adt_${fs}link_name}
+  "
+done
 
 echo "adtxenlvm: configuration for read for nominum=${adt_nominum}"
index b3110f80a056e0e0663609cdab65df58cdf58a77..262f5eaa406d60271ec9159596083cb2dd63a712 100755 (executable)
--- a/xen/setup
+++ b/xen/setup
@@ -7,17 +7,39 @@ test $nonoptargs = 0 || fail "non-option arguments not allowed"
 
 $ADT_XENLVM_SHARE/purge "$@"
 
-xl lvcreate -L $adt_fs_size -n $adt_lvm_baselv $adt_lvm_vg
-xl lvcreate -L $adt_fs_snapsize -n $adt_lvm_cowdatalv $adt_lvm_vg
-
-if $adt_lvm_erasebase; then
-  basesize=`lvdisplay -c $lvm_baselv_namepath 8>&- 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"
index 5d207db57977eb78a07e1727dab8ec94fc2e8b33..b92f134fe2f2c26f338b4128903a431ba1bfe0c3 100755 (executable)
@@ -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 <<END
-0 $bdsize snapshot $lvm_baselv_namepath $lvm_cowdata_namepath n $adt_fs_cowchunk
+for fs in fs swap; do
+ swap=${fs#fs}; eval "
+  bdsize=\$(blockdev --getsize \$lvm_baselv_${swap}namepath)
+  dmsetup create \$adt_devmapper_${swap}cowdev <<END
+0 \$bdsize snapshot \$lvm_baselv_${swap}namepath \$lvm_cowdata_${swap}namepath n \$adt_${fs}_cowchunk
 END
 
-mkdir -p $lvm_fslink_dirpath
-ln -s $lvm_snapdev $lvm_fslink_ptr
+  mkdir -p \$lvm_${fs}link_dirpath
+  ln -s \$lvm_${swap}snapdev \$lvm_${fs}link_ptr
+ "
+done
 
 xm restore $adt_play/xen-save
 xm mem-set $adt_xmname $adt_testbed_ram