db_begin_work db_prepare
ensuredir get_filecontents_core_quiet system_checked
nonempty visible_undef show_abs_time
+ %arch_debian2xen %arch_xen2debian
);
%EXPORT_TAGS = ( );
# declaration prevents `Name "main::DEBUG" used only once'
# scalar prevents `useless use of a variable in void context'
+our %arch_debian2xen = qw(i386 x86_32
+ amd64 x86_64
+ armhf armhf);
+our %arch_xen2debian;
+$arch_xen2debian{$arch_debian2xen{$_}} = $_ foreach keys %arch_debian2xen;
+
#---------- static default config settings ----------
our %c = qw(
my $suite= $xopts{Suite} || $c{DebianSuite};
- my $preseed_file= preseed_base($ho, $suite, $sfx, '', %xopts);
+ my $extra_packages = "pv-grub-menu" if $xopts{PvMenuLst};
+
+ my $preseed_file= preseed_base($ho, $suite, $sfx, $extra_packages, %xopts);
$preseed_file.= (<<END);
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe \\
*) ;;
esac
+ stripy bootloader pvgrub pygrub \
+ "$xenarch" "amd64" \
+ "$dom0arch" "i386" \
+ "$domU" "amd64" \
+
case $domU in
i386|amd64)
diurl="$diurl/xen";;
diurl="$diurl/debian-installer/arm64";;
esac
+ case ${dom0arch}_${domU}_${gsuite} in
+ arm*_arm*_*) bootloader="pygrub";; # no pvgrub for arm
+
+ # Needs a menu.lst, not present in Squeeze+ due to switch to grub2,
+ # workedaround in Jessie+ with pv-grub-menu package.
+ *_squeeze) bootloader="pygrub";;
+ *_wheezy) bootloader="pygrub";;
+
+ # pv-grub-x86_64.gz is not built by 32-bit dom0 userspace build.
+ i386_amd64_*) bootloader="pygrub";;
+ esac
+
job_create_test \
- test-$xenarch$kern-$dom0arch-$domU-$gver-netboot-pygrub \
+ test-$xenarch$kern-$dom0arch-$domU-$gver-netboot-$bootloader \
test-debian-di xl $xenarch $dom0arch \
kernbuildjob=${bfi}build-$dom0arch-$kernbuild \
debian_arch=$domU \
debian_method=netboot \
debian_netboot_kernel="$diurl/vmlinuz" \
debian_netboot_ramdisk="$diurl/initrd.gz" \
+ debian_bootloader=$bootloader \
all_hostflags=$most_hostflags
}
# Debian arch to install.
# - <gident>_method:
# Install method, currently only "netboot".
+# - <gident>_bootloader:
+# The PV bootloader to use when booting the guest. One of
+# "pvgrub" or "pygrub". Default is "pygrub".
#
# For method="netboot":
#
# - <gident>_netboot_kernel:
-# URL of the kernel to boot
+# URL of the kernel to boot.
# - <gident>_netboot_ramdisk:
-# URL of the ramdisk to boot
+# URL of the ramdisk to boot.
#
# If neither kernel nor ramdisk are specified then the current
# TftpDiVersion of d-i will be used, and the runvars will be set to
my $method= $r{"$gho->{Guest}_method"};
my $tmpdir= "/root/$flight-$job-di";
+ my $bl= $r{"$gho->{Guest}_bootloader"};
+
target_cmd_root($ho, <<END);
rm -rf $tmpdir
mkdir $tmpdir
$method_cfg = setup_netboot($tmpdir, $arch, $suite);
- $ps_url = preseed_create_guest($gho, '', Suite=>$suite);
+ $ps_url = preseed_create_guest($gho, '', Suite=>$suite, PvMenuLst=>($bl eq "pvgrub"));
$extra_disk = "";
}
guest_await_shutdown($ho,$gho,3600);
guest_destroy($gho);
- my $blcfg = <<END;
+ my $xenarch = $arch_debian2xen{$arch};
+ my $pvgrub = "/usr/local/lib/xen/boot/pv-grub-$xenarch.gz";
+ my $blcfg = $bl eq "pvgrub" ? <<END : <<END;
+kernel = "$pvgrub"
+extra = "(hd0,0)/boot/grub/menu.lst"
+END
bootloader = "pygrub"
END