[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [OSSTEST PATCH 2/4] Build XEN and HVM Dom0 kernel for L1 guest VM
On Wed, Dec 10, 2014 at 04:07:38PM +0800, longtao.pang wrote: > From: "longtao.pang" <longtaox.pang@xxxxxxxxx> > > This patch is used for building XEN and HVM Dom0 kernel for L1 guest VM, > and then reboot L1 guest into xen kernel. > I think you can just use the L0 Xen and Dom0 kernel, that would save you lots of time running this test case. It can also help simplifies this patch, maybe? > --- > sg-run-job | 1 + > ts-xen-install | 149 > +++++++++++++++++++++++++++++++++++++++++--------------- > 2 files changed, 111 insertions(+), 39 deletions(-) > > diff --git a/sg-run-job b/sg-run-job > index 8dcf7af..e513bd1 100755 > --- a/sg-run-job > +++ b/sg-run-job > @@ -291,6 +291,7 @@ proc run-job/test-pair {} { > proc need-hosts/test-nested {} {return host} > proc run-job/test-nested {} { > run-ts . = ts-debian-hvm-install + host + nested + nested_L1 > + run-ts . = ts-xen-install + host + nested + nested_build > } > > proc test-guest-migr {g} { > diff --git a/ts-xen-install b/ts-xen-install > index 4d34d1f..c175d6d 100755 > --- a/ts-xen-install > +++ b/ts-xen-install > @@ -28,19 +28,25 @@ use Osstest::CXFabric; > my $checkmode= 0; > > tsreadconfig(); > - > +our $w_ho; > our @hos; > - > -if (@ARGV and $ARGV[0] eq '--check') { > - $checkmode= 1; > - shift @ARGV; > - logm("checking builds are done..."); > +our ($whhost,$gn,$nested_build) = @ARGV; > +$nested_build ||= ''; > +if ($nested_build eq 'nested_build') { > + $whhost ||= 'host'; > + $gn ||= 'nested'; > } else { > - if (!@ARGV) { > - push @ARGV, 'host'; > - } > - foreach my $k (@ARGV) { > - push @hos, selecthost($k); > + if (@ARGV and $ARGV[0] eq '--check') { > + $checkmode= 1; > + shift @ARGV; > + logm("checking builds are done..."); > + } else { > + if (!@ARGV) { > + push @ARGV, 'host'; > + } > + foreach my $k (@ARGV) { > + push @hos, selecthost($k); > + } > } > } > > @@ -49,18 +55,18 @@ our $ho; > my %distpath; > > sub packages () { > - target_install_packages($ho, > + target_install_packages($w_ho, > qw(bridge-utils vncsnapshot libaio1 libpixman-1-0 > libsdl1.2debian libglib2.0-0 liblzma5)); > - target_install_packages($ho, > + target_install_packages($w_ho, > $ho->{Suite} =~ /squeeze/ ? "libyajl1" : > "libyajl2"); > if ($ho->{Suite} !~ m/lenny|squeeze/) { > - target_install_packages($ho, 'libfdt1'); > + target_install_packages($w_ho, 'libfdt1'); > } > if ($r{arch} eq 'i386') { > - target_install_packages($ho, 'libc6-xen'); > + target_install_packages($w_ho, 'libc6-xen'); > } > - target_install_packages($ho, @{toolstack()->{ExtraPackages}}) > + target_install_packages($w_ho, @{toolstack()->{ExtraPackages}}) > if toolstack()->{ExtraPackages}; > } > > @@ -69,14 +75,14 @@ sub extract () { > push @parts, 'libvirt' if $r{toolstack} eq "libvirt"; > > foreach my $part (@parts) { > - target_extract_jobdistpath($ho, $part, "path_${part}dist", > + target_extract_jobdistpath($w_ho, $part, "path_${part}dist", > $r{"${part}buildjob"}, \%distpath); > } > - target_cmd_root($ho, '/sbin/ldconfig'); > + target_cmd_root($w_ho, '/sbin/ldconfig'); > } > > sub adjustconfig () { > - target_editfile_root($ho, "/etc/xen/xend-config.sxp", > + target_editfile_root($w_ho, "/etc/xen/xend-config.sxp", > "xend-config.sxp", sub { > my (@domains) = (qw(localhost localhost.localdomain), > ".".$c{DnsDomain}, ".".$c{TestHostDomain}); > @@ -108,13 +114,13 @@ sub adjustconfig () { > /etc/sysconfig/xencommons > /etc/default/xend > /etc/sysconfig/xend)) { > - next unless target_file_exists($ho, $try); > + next unless target_file_exists($w_ho, $try); > $trace_config_file= $try; > last; > } > die unless defined $trace_config_file; > > - target_editfile_root($ho, $trace_config_file, sub { > + target_editfile_root($w_ho, $trace_config_file, sub { > my $prnow; > $prnow= sub { > print EO "XENCONSOLED_TRACE=guest\n" or die $!; > @@ -128,7 +134,7 @@ sub adjustconfig () { > $prnow->(); > }); > > - target_cmd_root($ho, 'mkdir -p /var/log/xen/console'); > + target_cmd_root($w_ho, 'mkdir -p /var/log/xen/console'); > > setup_cxfabric($ho); > } > @@ -156,19 +162,19 @@ sub setupboot () { > $xenhopt .= " $append" if defined $append; > > my @hooks; > - > + > if (host_involves_pcipassthrough($ho)) { > push @hooks, { > EditBootOptions => sub { > my ($ho,$hopt,$kopt) = @_; > $$hopt .= ' iommu=on'; > my $hide= ' xen-pciback.hide='. join '',map { "($_->{Bdf})" } > - host_get_pcipassthrough_devs($ho); > + host_get_pcipassthrough_devs($ho); > logm("pci passthrough: hiding in dom0: $hide"); > $$kopt .= $hide; > - } > - }; > - } > + } > + }; > + } > > my $want_kernver = get_runvar('kernel_ver',$r{'kernbuildjob'}); > debian_boot_setup($ho, $want_kernver, $xenhopt, \%distpath, \@hooks); > @@ -182,7 +188,7 @@ sub setupinitd () { > my $ts= toolstack(); > my $xencommons= '/etc/init.d/xencommons'; > my $have_xencommons= > - !!target_cmd_output_root($ho, <<END); > + !!target_cmd_output_root($w_ho, <<END); > if test -f $xencommons && ! grep 'FOR USE WITH LIBXL' $xencommons >/dev/null > then > echo y > @@ -211,7 +217,33 @@ END > $updatercd->($initd,93) if defined $initd; > $updatercd->('xenbridge',38) if $ts->{OldSeparateBridgeInitd}; > } > - target_cmd_root($ho, $cmd); > + target_cmd_root($w_ho, $cmd); > +} > + > +sub setup_l1_bridge($) > +{ > + my ($ho)=@_; > + my $bridge_port; > + my $route_output=target_cmd_output_root($ho,"route -n"); > + foreach my $line (split /\n/, $route_output){ > + if($line =~ m/^\s*(?:(?:0\.0\.0\.0)|default).*\s(\w+)\s*$/ai){ > + $bridge_port=$1; > + logm("get L1 bridge phy port $bridge_port"); > + last; > + } > + } > + die "cannot find L1 port for xenbr0 bridge" if !defined $bridge_port; > + > + target_editfile_root($ho, "/etc/network/interfaces", > + "etc-network-interfaces", > + sub { > + while(<EI>){ > + > s/^\s*iface\s*$bridge_port\s*inet.*dhcp\s*$/iface $bridge_port inet > manual\nauto xenbr0\niface xenbr0 inet dhcp\n\tbridge_ports $bridge_port\n/; > + > s/^\s*auto\s*$bridge_port/#auto\t$bridge_port/; > + print EO; > + } > + }); > + target_cmd_root($ho,"brctl addbr xenbr0; brctl addif xenbr0 > $bridge_port; init 6"); > } FWIW, OSSTest has a bunch of overlay files (look at overlay directory), which includes an init script called xenbridge. In theory if you're reusing this script (ts-xen-install) then you don't need to worry about setting up bridge? > > sub nodhcp () { > @@ -322,17 +354,56 @@ sub forbidden () { > END > } > > -if ($checkmode) { > - extract(); > -} else { > - die if @hos > 1; > - $ho= $hos[0]; > - > +if ($nested_build eq 'nested_build') { > + our $gho; > + $ho= selecthost($whhost); > + $gho= selectguest($gn,$ho); > + $w_ho = $gho; > + store_runvar("$gho->{Guest}_kernkind",$r{'kernkind'}); > + $gho->{Suite}=$ho->{Suite}; > + > + guest_check_ip($gho); > packages(); > extract(); > - forbidden(); > adjustconfig(); > - setupboot(); > - setupinitd(); > - nodhcp(); > + my $want_kernver = get_runvar('kernel_ver',$r{'kernbuildjob'}); > + my $bootloader; > + $bootloader=setupboot_grub2($gho, $want_kernver, ""); > + > + > + target_cmd_root($gho, > + "update-initramfs -k $want_kernver -c ||". > + " update-initramfs -k $want_kernver -u", > + 200); > + $bootloader->{UpdateConfig}($gho); #so that /boot/grub/grub.cfg have new > kernel and xen > + $bootloader->{PreFinalUpdate}(); #update /etc/default/grub, by > setting default entry we want > + > + setupinitd (); > + $bootloader->{UpdateConfig}($gho); #use the default entry, apply it > to /boot/grub/grub.cfg > + guest_editconfig($gho->{Host}, $gho, sub { > + s/#nestedhvm/nestedhvm/; > + }); > + target_cmd_root($gho,"sync"); > + setup_l1_bridge($gho); #after setup L1 bridge, it will reboot > for network settiings to take effect > + logm("ready to reboot L1 Xen"); > + guest_await($gho, target_var($gho,'boot_timeout')); > + guest_check_up($gho); > + This hunk is copied from Debian.pm. If debian_setup_boot cannot meet your requirement, please refactor it. Wei. > + > +} else { > + > + if ($checkmode) { > + extract(); > + } else { > + die if @hos > 1; > + $ho= $hos[0]; > + $w_ho = $ho; > + packages(); > + extract(); > + forbidden(); > + adjustconfig(); > + setupboot(); > + setupinitd(); > + nodhcp(); > + } > } > -- > 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |