From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH V4 10/12] Introduce ts-debian-hvm-install Date: Fri, 21 Mar 2014 16:14:24 +0000 Message-ID: <1395418466-6997-11-git-send-email-wei.liu2@citrix.com> References: <1395418466-6997-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1395418466-6997-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Wei Liu , ian.jackson@eu.citrix.com, ian.campbell@citrix.com List-Id: xen-devel@lists.xenproject.org This is debian hvm guest test case. It resembles ts-redhat-install: 1. prepare a auto install CD 2. install debian hvm guest, currently using OVMF 3. test if the guest is up The installtion CD is also bootable with seabios. Signed-off-by: Wei Liu --- ts-debian-hvm-install | 183 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100755 ts-debian-hvm-install diff --git a/ts-debian-hvm-install b/ts-debian-hvm-install new file mode 100755 index 0000000..74acc66 --- /dev/null +++ b/ts-debian-hvm-install @@ -0,0 +1,183 @@ +#!/usr/bin/perl -w +# This is part of "osstest", an automated testing framework for Xen. +# Copyright (C) 2009-2013 Citrix Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +use strict qw(vars); +use DBI; +use Osstest; +use Osstest::Debian; +use Osstest::TestSupport; + +tsreadconfig(); + +our $stage=0; +if (@ARGV && $ARGV[0] =~ m/^--stage(\d+)$/) { $stage=$1; shift @ARGV; } + +our ($whhost,$gn) = @ARGV; +$whhost ||= 'host'; +$gn ||= 'ovmf'; + +our $ho= selecthost($whhost); + +our $ram_mb= 768; +our $disk_mb= 10000; + +our $guesthost= "$gn.guest.osstest"; +our $gho; + +our $toolstack= toolstack()->{Command}; + + +sub preseed () { + + my $preseed_file = preseed_base('wheezy','',()); + my $authkeys = join('\\n', split(/\n/, authorized_keys())); + + $preseed_file .= (< /root/.ssh/authorized_keys"; +END + return $preseed_file; +} + +sub grub_cfg () { + + return <<"END"; +set default="0" +set timeout=5 + +menuentry 'debian guest auto Install' { + linux /install.amd/vmlinuz console=vga console=ttyS0,115200n8 preseed/file=/preseed.cfg + initrd /install.amd/initrd.gz +} +END +} + +sub isolinux_cfg () { + return <<"END"; + default autoinstall + prompt 0 + timeout 0 + + label autoinstall + kernel /install.amd/vmlinuz + append video=vesa:ywrap,mtrr vga=788 console=ttyS0,115200n8 preseed/file=/preseed.cfg initrd=/install.amd/initrd.gz +END +} + +sub prepare_initrd ($$$) { + my ($initrddir,$newiso,$preseed_file_path) = @_; + return <<"END"; + rm -rf $initrddir + mkdir $initrddir + cd $initrddir + gzip -d \< $newiso/install.amd/initrd.gz | cpio --extract --make-directories --no-absolute-filename + cp $preseed_file_path preseed.cfg + find . | cpio -H newc --create | gzip -9 \> $newiso/install.amd/initrd.gz + cd - + rm -rf $initrddir + cd $newiso + md5sum `find -L -type f -print0 | xargs -0` \> md5sum.txt + cd - +END +} + +our $emptyiso= "/root/$flight.$job.$gn-empty.iso"; + +sub prep () { + target_install_packages_norec($ho, qw(lvm2 rsync)); + + my $isotimeout= 600; + + $gho= prepareguest($ho, $gn, $guesthost, 22, + $disk_mb + 1, + 100); + + my $newiso= "/root/$flight.$job.$gn-newiso"; + my $emptydir= "/root/$flight.$job.$gn-empty-dir"; + my $initrddir= "/root/$flight.$job.$gn-initrd-dir"; + my $preseed_file_path = "/root/$flight.$job.$gn-preseed"; + + my @xorriso_extra = qw(-eltorito-alt-boot + -e boot/grub/efi.img + -no-emul-boot + -r); + my @xorriso_opts = (iso_gen_flags_basic(), @xorriso_extra); + + create_empty_iso($ho, $emptyiso, $emptydir); + + target_putfilecontents_root_stash($ho, 10, preseed(), + $preseed_file_path); + + more_prepareguest_hvm($ho,$gho, $ram_mb, $disk_mb, + OnReboot => 'preserve', + Bios => 'ovmf', + PostImageHook => sub { + my $cmds = copy_iso_content_to_dir($gho, $newiso); + $cmds .= prepare_initrd($initrddir,$newiso,$preseed_file_path); + target_cmd_root($ho, $cmds, $isotimeout); + target_putfilecontents_root_stash($ho, 10, grub_cfg(), + "$newiso/debian/boot/grub/grub.cfg"); + + target_putfilecontents_root_stash($ho, 10, isolinux_cfg(), + "$newiso/isolinux/isolinux.cfg"); + + create_iso_xorriso($ho, $gho->{Rimage}, $newiso, $isotimeout, @xorriso_opts); + }); +} + +if (!$stage) { + prep(); + guest_create($ho,$gho,$toolstack); +} else { + $gho= selectguest($gn,$gho); +} +if ($stage<2) { + guest_await_reboot($ho,$gho,2000); + guest_destroy($ho,$gho); +} + +rewrite_config_nocd($ho,$gho,$emptyiso); +guest_create($ho,$gho,$toolstack); +guest_await_dhcp_tcp($gho,300); +guest_check_up($gho); -- 1.7.10.4