2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-08-25 08:06:42 +00:00

Merge pull request #7756 from VersatusHPC/fix/ubuntu-2604-support

fix(xcat-core): make xCAT work on Ubuntu 26.04 (resolute)
This commit is contained in:
Vinícius Ferrão
2026-08-24 18:43:34 -03:00
committed by GitHub
5 changed files with 120 additions and 5 deletions
@@ -270,7 +270,10 @@ unless ($onlyinitrd) {
my $mirror = (defined $aptmirror[0] && length $aptmirror[0])
? $aptmirror[0] : 'http://archive.ubuntu.com/ubuntu';
(my $codename = $osver) =~ s/^ubuntu//;
$codename =~ s/\.\d+$//; # 24.04.4 -> 24.04
# Strip ONLY a trailing third component. A bare s/\.\d+$// also strips the minor from a
# two-part osvers (ubuntu26.04 -> "26"), which misses the %cn map below and reaches
# debootstrap as a bogus suite ("E: No such script: .../debootstrap/scripts/26").
$codename =~ s/^(\d+\.\d+)\.\d+$/$1/; # 24.04.4 -> 24.04; 26.04 stays 26.04
my %cn = ('24.04' => 'noble', '22.04' => 'jammy', '20.04' => 'focal',
'18.04' => 'bionic', '26.04' => 'resolute');
$codename = $cn{$codename} if exists $cn{$codename};
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env perl
use strict;
use warnings;
use File::Spec;
use FindBin;
use Test::More;
# Regression: xCAT manages the cluster DNS with `makedns`, which drives named, so a management
# node (and a service node) requires a DNS server as surely as it requires a DHCP backend.
# bind9 was only a Recommends, which is installed only while the system's APT recommendation
# policy asks for it -- nothing guarantees named is on the node.
#
# On an Ubuntu 26.04 management node it was not there: no /usr/sbin/named, `makedns` failed with
# "failed to start named", and provisioning broke before a node was ever deployed.
#
# Make bind9 a hard Depends on both metapackages so the DNS backend is guaranteed regardless of
# that policy, mirroring the existing "isc-dhcp-server | kea" Depends.
my $repo_root = File::Spec->rel2abs(
File::Spec->catdir( $FindBin::Bin, '..', '..' )
);
sub read_file {
my ($filename) = @_;
open( my $fh, '<', $filename ) or die "Unable to read $filename: $!";
my $content = do { local $/; <$fh> };
close($fh);
return $content;
}
foreach my $pkg ( [ 'xCAT', 'xcat' ], [ 'xCATsn', 'xcatsn' ] ) {
my ( $dir, $name ) = @$pkg;
my $control = read_file( File::Spec->catfile( $repo_root, $dir, 'debian', 'control' ) );
my ($depends) = $control =~ /^Depends:\s*(.*)$/m;
my ($recommends) = $control =~ /^Recommends:\s*(.*)$/m;
ok( defined $depends, "$name debian/control has a Depends line" );
like( $depends, qr/(?:^|,)\s*bind9\s*(?:,|$)/,
"$name Depends on bind9 (required by makedns, so not a Recommends)" );
unlike( $recommends, qr/(?:^|,)\s*bind9\s*(?:,|$)/,
"$name no longer carries bind9 as a Recommends" );
}
done_testing();
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env perl
use strict;
use warnings;
use File::Spec;
use FindBin;
use Test::More;
# Regression: the Ubuntu netboot genimage derives a debootstrap suite from the osimage's
# osvers. It reduced "ubuntu24.04.4" to "24.04" with a bare s/\.\d+$//, which ALSO strips the
# minor from a two-part osvers -- an initial release with no point-release ISO, e.g.
# "ubuntu26.04" -> "26". "26" is not in the codename map and is not a debootstrap suite, so
# the rootimg build dies with:
#
# E: No such script: /usr/share/debootstrap/scripts/26
#
# Only a trailing THIRD component may be stripped, so 24.04.4 -> 24.04 while 26.04 (and 18.04,
# 20.04, 22.04 from an initial-release ISO) survive intact and reach the codename map.
#
# Driven by the real derivation code: the substitution and the codename map are extracted from
# genimage and evaluated here, so this test tracks the script rather than a copy of it.
my $repo_root = File::Spec->rel2abs(
File::Spec->catdir( $FindBin::Bin, '..', '..' )
);
my $genimage_path = File::Spec->catfile(
$repo_root, 'xCAT-server', 'share', 'xcat', 'netboot', 'ubuntu', 'genimage'
);
plan skip_all => "genimage not found at $genimage_path" unless -f $genimage_path;
my $src = do { local $/; open my $fh, '<', $genimage_path or die $!; <$fh> };
my ($strip) = $src =~ /^\s*(\$codename\s*=~\s*s\/.*?;)\s*(?:#.*)?$/m;
ok( defined $strip, 'found the codename point-release substitution in genimage' )
or done_testing(), exit;
my ($map) = $src =~ /^\s*(my\s+%cn\s*=\s*\(.*?\);)\s*$/ms;
ok( defined $map, 'found the codename map in genimage' )
or done_testing(), exit;
sub derive {
my ($osver) = @_;
my $codename = $osver;
$codename =~ s/^ubuntu//;
## no critic
eval "$strip $map \$codename = \$cn{\$codename} if exists \$cn{\$codename}; 1"
or die "failed to evaluate genimage codename derivation: $@";
## use critic
return $codename;
}
is( derive('ubuntu24.04.4'), 'noble',
'a point release still reduces to its MAJOR.MINOR codename (24.04.4 -> noble)' );
is( derive('ubuntu26.04'), 'resolute',
'an initial release keeps its minor and maps to a codename (26.04 -> resolute, not "26")' );
is( derive('ubuntu20.04'), 'focal',
'an initial 20.04 osvers is not over-stripped to "20"' );
is( derive('ubuntu22.04'), 'jammy',
'an initial 22.04 osvers is not over-stripped to "22"' );
is( derive('ubuntu18.04'), 'bionic',
'an initial 18.04 osvers is not over-stripped to "18"' );
done_testing();
+2 -2
View File
@@ -9,8 +9,8 @@ Homepage: https://xcat.org/
Package: xcat
Architecture: amd64 ppc64el
Depends: ${perl:Depends}, goconserver(>= 0.3.3-snap000000000000), xcat-server (>= 2.13-snap000000000000), xcat-client (>= 2.13-snap000000000000), libdbd-sqlite3-perl, isc-dhcp-server | kea, apache2, nfs-kernel-server, libxml-parser-perl, rsync, tftpd-hpa, libnet-telnet-perl, xcat-genesis-scripts-amd64 (>= 2.13-snap000000000000)
Recommends: bind9, net-tools, nmap, kea, tftp-hpa, ipmitool-xcat (>= 1.8.17-1), syslinux[any-amd64], libsys-virt-perl, syslinux-xcat, xnba-undi, elilo-xcat, xcat-buildkit (>= 2.13-snap000000000000), xcat-probe (>= 2.13-snap000000000000)
Depends: ${perl:Depends}, goconserver(>= 0.3.3-snap000000000000), xcat-server (>= 2.13-snap000000000000), xcat-client (>= 2.13-snap000000000000), libdbd-sqlite3-perl, isc-dhcp-server | kea, bind9, apache2, nfs-kernel-server, libxml-parser-perl, rsync, tftpd-hpa, libnet-telnet-perl, xcat-genesis-scripts-amd64 (>= 2.13-snap000000000000)
Recommends: net-tools, nmap, kea, tftp-hpa, ipmitool-xcat (>= 1.8.17-1), syslinux[any-amd64], libsys-virt-perl, syslinux-xcat, xnba-undi, elilo-xcat, xcat-buildkit (>= 2.13-snap000000000000), xcat-probe (>= 2.13-snap000000000000)
Suggests: yaboot-xcat
Description: Metapackage for a common, default xCAT setup
xCAT is Extreme Cluster/Cloud Administration Toolkit. xCAT offers complete
+2 -2
View File
@@ -8,8 +8,8 @@ Homepage: https://xcat.org/
Package: xcatsn
Architecture: amd64 ppc64el
Depends: ${perl:Depends}, goconserver (>=0.3.3-snap000000000000), xcat-server (>= 2.13-snap000000000000), xcat-client (>= 2.13-snap000000000000), libdbd-sqlite3-perl, libxml-parser-perl, tftpd-hpa, libnet-telnet-perl, isc-dhcp-server | kea, apache2, nfs-kernel-server, xcat-genesis-scripts-amd64 (>= 2.13-snap000000000000)
Recommends: bind9, net-tools, nmap, kea, tftp-hpa, ipmitool-xcat (>= 1.8.17-1), syslinux[any-amd64], libsys-virt-perl, syslinux-xcat, xnba-undi, elilo-xcat, xcat-buildkit (>= 2.13-snap000000000000), xcat-probe (>= 2.13-snap000000000000)
Depends: ${perl:Depends}, goconserver (>=0.3.3-snap000000000000), xcat-server (>= 2.13-snap000000000000), xcat-client (>= 2.13-snap000000000000), libdbd-sqlite3-perl, libxml-parser-perl, tftpd-hpa, libnet-telnet-perl, isc-dhcp-server | kea, bind9, apache2, nfs-kernel-server, xcat-genesis-scripts-amd64 (>= 2.13-snap000000000000)
Recommends: net-tools, nmap, kea, tftp-hpa, ipmitool-xcat (>= 1.8.17-1), syslinux[any-amd64], libsys-virt-perl, syslinux-xcat, xnba-undi, elilo-xcat, xcat-buildkit (>= 2.13-snap000000000000), xcat-probe (>= 2.13-snap000000000000)
Suggests: yaboot-xcat
Description: Metapackage for a common, default xCAT service node setup
xCATsn is a service node management package intended for at-scale