|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 2/4] Build XEN and HVM Dom0 kernel for L1 guest VM
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.
---
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");
}
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);
+
+
+} 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 |