@@ -22,6 +22,7 @@ use warnings;
use POSIX;
+use Carp;
use IO::File;
use File::Copy;
use File::Basename;
@@ -35,6 +36,8 @@ BEGIN {
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = qw(debian_boot_setup
+ debian_mirror_url debian_mirror_host_path
+ debian_mirror_url_suite_arch
di_installer_path di_special_kernel
setupboot_bootloader_edited_rune
debian_overlays debian_overlays_fixup_cmd
@@ -811,12 +814,36 @@ chmod 600 $subdir/etc/ssh/ssh_host_*_key ||:
END
}
+sub debian_mirror_url ($) {
+ # I think ideally this should handle, and be used for, backports too.
+ # It would need an optional suite suffix which could be "-backports"?
+ my ($ho) = @_;
+ my $suite = $ho->{Suite};
+ my $arch = $ho->{Arch};
+ my $url =
+ $c{"DebianMirror_${suite}_${arch}"} //
+ $c{"DebianMirror_${suite}"} //
+ $c{"DebianMirror"};
+ if (!defined $url) {
+ $url = "http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath}";
+ }
+ return $url;
+}
+
+sub debian_mirror_host_path ($) {
+ my ($ho) = @_;
+ my $url = debian_mirror_url($ho);
+ $url =~ m{^http://([^/]+)/(.*)$} or
+ confess "unsupported Debian url (needs to be http://HOST/...): $url";
+ return ($1, $2);
+}
+
sub preseed_backports_packages ($$$$@) {
my ($ho, $sfx, $xopts, $suite, @pkgs) = @_;
if (! $xopts->{BackportsSourcesAlreadyAdded}++) {
my $bp_url = $c{"DebianSnapshotBackports_$suite"};
- $bp_url ||= "http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath}";
+ $bp_url ||= debian_mirror_url($ho);
my $apt_insert='';
my $extra_rune='';
@@ -942,6 +969,8 @@ END
preseed_hook_command($ho, 'late_command', $sfx,
debian_dhcp_rofs_fix($ho, '/target'));
+ my ($mhost, $mpath) = debian_mirror_host_path($ho);
+
my $preseed = <<"END";
d-i debian-installer/locale string en_GB
d-i console-keymaps-at/keymap select gb
@@ -1001,9 +1030,9 @@ d-i finish-install/keep-consoles boolean true
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean false
-d-i mirror/http/hostname string $c{DebianMirrorHost}
+d-i mirror/http/hostname string $mhost
+d-i mirror/http/directory string /$mpath
d-i mirror/http/proxy string $c{DebianMirrorProxy}
-d-i mirror/http/directory string /$c{DebianMirrorSubpath}
d-i apt-setup/use_mirror boolean yes
d-i apt-setup/another boolean false
d-i apt-setup/non-free boolean false
@@ -398,6 +398,10 @@ DebianMirrorProxy
The apt proxy to specify for Debian (and derivatives),
eg http://apt-cacher:3142/ .
+DebianMirror[_<suite>[_<arch>]]
+ Overrides DebianMirrorHost and DebianMirrorSubpath, optionally
+ for specific suite and arch.
+
TestHost <hostname>
TestHost_<ident> <hostname>
Specifies the test box to use. Should be a bare hostname,
@@ -74,6 +74,8 @@ test_do_one_netboot () {
else
#local mirror="http://`getconfig DebianMirrorHost`/`getconfig DebianMirrorSubpath`"
# XXX local mirror seems to serve up stale files.
+ # ^ this should use debian_mirror_url, not plain config, so it
+ # honours suite- and arch- specific settings
local mirror="http://ftp.debian.org/debian"
diurl="$mirror/dists/$guest_suite/main/installer-$domU/current/images/netboot"
gver=$guest_suite
@@ -126,9 +126,6 @@ CoverityUploadUrl https://scan.coverity.com/builds?project=XenProject
CoverityTools cov-analysis-linux64-2019.03.tar.gz
CoverityToolsStripComponents 1
-# We use the IP address because Citrix can't manage reliable nameservice
-#DebianMirrorHost debian.uk.xensource.com
-#DebianMirrorHost 10.80.16.196
DebianMirrorProxy http://cache:3143/
HostProp_DhcpWatchMethod leases dhcp3 infra.t:5556
@@ -83,12 +83,14 @@ END
$cmd .= <<END if defined $useproxy;
http_proxy=$useproxy \\
END
+ my $mirror = debian_mirror_url($gho);
+
$cmd .= <<END;
xen-create-image \\
--dhcp --mac $gho->{Ether} \\
--memory ${ram_mb}Mb --swap ${swap_mb}Mb \\
--dist $gsuite \\
- --mirror http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath} \\
+ --mirror $mirror \\
--hostname $gho->{Name} \\
--lvm $gho->{Vg} --force \\
--kernel $kernpath \\
No functional change with existing configs. Signed-off-by: Ian Jackson <iwj@xenproject.org> --- Osstest/Debian.pm | 35 ++++++++++++++++++++++++++++++++--- README | 4 ++++ make-distros-flight | 2 ++ production-config | 3 --- ts-debian-install | 4 +++- 5 files changed, 41 insertions(+), 7 deletions(-)