[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH RFC V2 4/6] Introduce ts-ovmf-debian-install



This is OVMF guest test case. It resembles ts-redhat-install:
1. prepare a auto install CD
2. install OVMF guest
3. test if the guets is up

The installtion CD is also bootable with seabios.

Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
 ts-ovmf-debian-install |  218 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 218 insertions(+)
 create mode 100755 ts-ovmf-debian-install

diff --git a/ts-ovmf-debian-install b/ts-ovmf-debian-install
new file mode 100755
index 0000000..2e19348
--- /dev/null
+++ b/ts-ovmf-debian-install
@@ -0,0 +1,218 @@
+#!/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 <http://www.gnu.org/licenses/>.
+
+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 $xl= toolstack()->{Command};
+
+
+sub preseed () {
+
+    my $preseed_file = preseed_base('wheezy');
+
+    $preseed_file .= (<<END);
+d-i netcfg/get_hostname string debian-hvm
+
+d-i partman-auto/disk string /dev/xvda
+d-i partman-auto/method string  regular
+
+d-i partman-auto/expert_recipe string \\
+       boot-root :: \\
+               512 50 512 vfat \\
+                       \$primary{ } \$bootable{ } \\
+                       method{ efi } format{ } \\
+                       use_filesystem{ } filesystem{ vfat } \\
+                       mountpoint{ /boot/efi } \\
+               . \\
+               5000 50 5000 ext4 \\
+                       method{ format } format{ } \\
+                       use_filesystem{ } filesystem{ ext4 } \\
+                       mountpoint{ / } \\
+               . \\
+               512 30 100% linux-swap \\
+                       method{ swap } format{ } \\
+               .
+
+d-i apt-setup/use_mirror boolean false
+d-i apt-setup/another boolean false
+d-i apt-setup/non-free boolean false
+d-i apt-setup/contrib boolean false
+d-i apt-setup/cdrom/set-first boolean false
+
+d-i pkgsel/include string openssh-server, ntp, ntpdate, 
+
+d-i preseed/early_command string
+
+d-i preseed/late_command string \\
+       in-target mkdir -p /boot/efi/EFI/boot; \\
+       in-target cp /boot/efi/EFI/debian/grubx64.efi 
/boot/efi/EFI/boot/bootx64.efi ;\\
+       in-target mkdir -p /root/.ssh; \\
+        cp /authorized_keys /target/root/.ssh
+
+d-i clock-setup/ntp-server string ntp.uk.xensource.com
+
+END
+    return $preseed_file;
+}
+
+sub grub_cfg () {
+
+    return <<"END";
+set default="0"
+set timeout=5
+
+menuentry 'OVMF 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
+}
+
+our $emptyiso= '/root/empty.iso';
+
+sub prep () {
+    target_install_packages_norec($ho, qw(lvm2 rsync xorriso genisoimage));
+
+    my $isotimeout= 600;
+
+    $gho= prepareguest($ho, $gn, $guesthost, 22,
+                       $disk_mb + 1,
+                       100);
+
+    my $newiso= '/root/newiso';
+    my $emptydir= '/root/empty-dir';
+    my $initrddir= '/root/initrd-dir';
+
+    my @isogen_base= qw(-R -J -T);
+    my @xorriso_opts= qw(-as mkisofs
+                         -r
+                         -b isolinux/isolinux.bin
+                         -c isolinux/boot.cat
+                         -no-emul-boot
+                         -boot-load-size 4
+                         -boot-info-table
+                         -eltorito-alt-boot
+                         -e boot/grub/efi.img
+                         -no-emul-boot);
+
+    target_putfilecontents_root_stash($ho, 10, preseed(),
+                                      "/root/guest-preseed");
+    target_putfilecontents_root_stash($ho, 10, authorized_keys(),
+                                      "/root/guest-authkeys");
+    target_cmd_root($ho, <<END, 60);
+            mkdir -p $emptydir
+            genisoimage -o $emptyiso @isogen_base $emptydir/.
+END
+
+    more_prepareguest_hvm($ho,$gho, $ram_mb, $disk_mb,
+                          OnReboot => 'preserve',
+                          Bios => 'ovmf',
+                          PostImageHook => sub {
+        target_cmd_root($ho, <<END, $isotimeout);
+            set -x
+            umount /mnt ||:
+            rm -rf $newiso
+            mount -o loop -r $gho->{Rimage} /mnt
+            mkdir $newiso
+            cp -a /mnt/. $newiso/.
+            umount /mnt
+            rm -rf $initrddir
+            mkdir $initrddir
+            cd $initrddir
+            gzip -d \< $newiso/install.amd/initrd.gz | cpio --extract 
--make-directories --no-absolute-filename
+            cp /root/guest-preseed preseed.cfg
+            cp /root/guest-authkeys authorized_keys
+            find . | cpio -H newc --create | gzip -9 \> 
$newiso/install.amd/initrd.gz
+            cd -
+            rm -rf $initrddir
+            cd $newiso
+            md5sum `find -follow -type f` \> md5sum.txt
+            cd -
+END
+        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");
+
+       target_cmd_root($ho, <<END, $isotimeout);
+           xorriso  @xorriso_opts -o $gho->{Rimage} $newiso/.
+END
+    });
+}
+
+sub start () {
+    target_cmd_root($ho, "$xl create $gho->{CfgPath}", 100);
+}
+
+sub rewrite_config_nocd () {
+    guest_editconfig($ho, $gho, sub {
+        if (m/^\s*disk\s*\=/ .. /\]/) {
+            s/\Q$gho->{Rimage}\E/$emptyiso/;
+        }
+        s/^on_reboot.*/on_reboot='restart'/;
+    });
+}
+
+if (!$stage) {
+    prep();
+    start();
+} else {
+    $gho= selectguest($gn,$gho);
+}
+if ($stage<2) {
+    guest_await_reboot($ho,$gho,2000);
+    guest_destroy($ho,$gho);
+}
+
+rewrite_config_nocd();
+start();
+guest_await_dhcp_tcp($gho,300);
+guest_check_up($gho);
-- 
1.7.10.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.