From 99c412016188acc495ecf23c730f11cb3d6d7baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Ferr=C3=A3o?= <2031761+viniciusferrao@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:15:50 -0300 Subject: [PATCH] build(xcat-dep): build and publish ipxe-xcat with the x86 boot loaders mockbuild-all.pl builds ipxe-xcat in every EL profile, riscv64 included, in the noarch chroot like the other x86 loaders. sbuild-all.pl maps it to its builder and builds it once on amd64, as an Architecture: all package. Both manifests list ipxe-xcat wherever they list xnba-undi, so the repository gate requires it in every EL and Debian repository that carries the x86 boot loaders. A riscv64 or ppc64le management node serves those loaders to the x86 nodes of a mixed cluster. --- debs-manifest.conf | 19 ++++++++++++++++--- mockbuild-all.pl | 20 +++++++++++--------- packages-manifest.conf | 9 ++++++++- sbuild-all.pl | 5 +++-- 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/debs-manifest.conf b/debs-manifest.conf index f4707b4..d991942 100644 --- a/debs-manifest.conf +++ b/debs-manifest.conf @@ -31,10 +31,11 @@ # PER-ARCH SETS (review concern #3 -- the arch matrix must be valid): # * Compiled, arch-specific deps that genuinely build on BOTH arches are listed for amd64 AND # ppc64el: ipmitool-xcat, conserver-xcat, goconserver (debian/control Architecture: any / *-ppc64el). -# * The noarch boot components (syslinux-xcat, grub2-xcat, elilo-xcat, xnba-undi) are +# * The noarch boot components (syslinux-xcat, grub2-xcat, elilo-xcat, xnba-undi, ipxe-xcat) are # Architecture:all: their SOURCE is x86-only (syslinux compiles with nasm/gcc-multilib; elilo/xnba -# are x86/EFI loaders; grub2-xcat is config/scripts), so they are BUILT ONCE on amd64 -- SINGLE -# PRODUCER, concern #3b -- and, being arch:all, assembled into EVERY arch's Packages index. They +# are x86/EFI loaders; grub2-xcat is config/scripts; ipxe-xcat repackages the iPXE release +# tree), so they are BUILT ONCE on amd64 -- SINGLE PRODUCER, concern #3b -- and, being +# arch:all, assembled into EVERY arch's Packages index. They # ARE listed for ppc64el too, as REQUIRED-PRESENT: a ppc MN needs them for netboot, so the gate # must verify the ppc repo carries them (matching the EL manifest and the historical 2.16 ppc dep # repo, minus the obsolete yaboot-xcat). sbuild-all.pl's build phase SKIPS an Architecture:all @@ -67,6 +68,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 xcat-genesis-base=2.* [focal-ppc64el] @@ -77,6 +79,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 xcat-genesis-base=2.* [focal-riscv64] @@ -87,6 +90,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 # ============================ jammy (ubuntu22.04) ============================ [jammy-amd64] @@ -97,6 +101,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 xcat-genesis-base=2.* [jammy-ppc64el] @@ -107,6 +112,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 xcat-genesis-base=2.* [jammy-riscv64] @@ -117,6 +123,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 # ============================ noble (ubuntu24.04) ============================ [noble-amd64] @@ -127,6 +134,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 xcat-genesis-base=2.* [noble-ppc64el] @@ -137,6 +145,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 xcat-genesis-base=2.* [noble-riscv64] @@ -147,6 +156,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 # ============================ resolute (ubuntu26.04) ========================= [resolute-amd64] @@ -157,6 +167,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 xcat-genesis-base=2.* [resolute-ppc64el] @@ -167,6 +178,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 xcat-genesis-base=2.* [resolute-riscv64] @@ -177,6 +189,7 @@ syslinux-xcat=3.86-2 grub2-xcat=2.12-2 elilo-xcat=3.14-6 xnba-undi=1.21.1-1 +ipxe-xcat=2.0.0-1 # [shared] is NOT a build target. It describes the ONE pool the OpenEmbedded Genesis release is # published into (pool/main/xcat-genesis-openembedded), which every suite indexes and which no diff --git a/mockbuild-all.pl b/mockbuild-all.pl index 7efb057..cdc1dac 100755 --- a/mockbuild-all.pl +++ b/mockbuild-all.pl @@ -412,8 +412,8 @@ my %forcearch_targets = ( arch => 'riscv64', # x86_64 only, as the mock config admits: syslinux-xcat builds on x86 and ppc64le alone. noarch_cfg => 'rocky-10-x86_64', - dep_builders => [qw(elilo-xcat grub2-xcat ipmitool-xcat syslinux-xcat goconserver conserver-xcat xnba-undi)], - required => [qw(ipmitool-xcat syslinux-xcat grub2-xcat xnba-undi + dep_builders => [qw(elilo-xcat grub2-xcat ipmitool-xcat syslinux-xcat goconserver conserver-xcat xnba-undi ipxe-xcat)], + required => [qw(ipmitool-xcat syslinux-xcat grub2-xcat xnba-undi ipxe-xcat perl-IO-Stty perl-HTTP-Async perl-Net-HTTPS-NB)], }, ); @@ -536,10 +536,11 @@ if (!$skip_build && !$dry_run && -d $run_root) { remove_tree($run_root); } -# All dep builders run natively on every arch. xnba-undi and grub2-xcat are noarch packagings of -# committed artifacts (an x86 UNDI ROM / the grub2 resource tarball) with no arch-specific build -# step, so ppc builds them the same as x86 -- no cross-arch import. A forcearch target builds -# only the builders its profile lists; the noarch ones run in the profile's native chroot. +# All dep builders run natively on every arch. xnba-undi, grub2-xcat and ipxe-xcat are noarch +# packagings of committed artifacts (an x86 UNDI ROM / the grub2 resource tarball / the iPXE release +# tree) with no arch-specific build step, so ppc builds them the same as x86 -- no cross-arch +# import. A forcearch target builds only the builders its profile lists; the noarch ones run in +# the profile's native chroot. # syslinux-xcat is noarch too, and its spec builds on x86 and ppc64le only. my @dep_builders = ( { name => 'elilo-xcat', script => "$repo_root/elilo/mockbuild.pl", noarch => 1 }, @@ -549,6 +550,7 @@ my @dep_builders = ( { name => 'goconserver', script => "$repo_root/goconserver/mockbuild.pl" }, { name => 'conserver-xcat', script => "$repo_root/conserver/mockbuild.pl" }, { name => 'xnba-undi', script => "$repo_root/xnba/mockbuild.pl", noarch => 1 }, + { name => 'ipxe-xcat', script => "$repo_root/ipxe-xcat/mockbuild.pl", noarch => 1 }, ); my %profile_builds = map { $_ => 1 } @{ $profile->{dep_builders} }; @@ -1040,11 +1042,11 @@ sub target_profile { noarch_cfg => $target, forcearch => 0, epel => 1, - dep_builders => [qw(elilo-xcat grub2-xcat ipmitool-xcat syslinux-xcat goconserver conserver-xcat xnba-undi)], + dep_builders => [qw(elilo-xcat grub2-xcat ipmitool-xcat syslinux-xcat goconserver conserver-xcat xnba-undi ipxe-xcat)], # xCAT Requires all of these on every arch, and every one of them builds natively on - # every arch (the noarch deps -- grub2-xcat, xnba-undi -- just repackage committed + # every arch (the noarch deps -- grub2-xcat, xnba-undi, ipxe-xcat -- just repackage committed # artifacts), so a self-sufficient per-arch build produces the whole set. - required => [qw(ipmitool-xcat syslinux-xcat grub2-xcat xnba-undi + required => [qw(ipmitool-xcat syslinux-xcat grub2-xcat xnba-undi ipxe-xcat perl-IO-Stty perl-HTTP-Async perl-Net-HTTPS-NB)], }; } diff --git a/packages-manifest.conf b/packages-manifest.conf index 5370461..74d3d9a 100644 --- a/packages-manifest.conf +++ b/packages-manifest.conf @@ -61,6 +61,7 @@ elilo-xcat=3.14 goconserver=>= 0.3.3-snap202011021058 grub2-xcat=1.0 ipmitool-xcat=>= 1.8.18-4 +ipxe-xcat=2.0.0 syslinux-xcat=>= 6.03-1 xnba-undi=>= 1.21.1-1 perl-HTML-Form=6.07 @@ -75,6 +76,7 @@ elilo-xcat=3.14 goconserver=>= 0.3.3-snap202011021058 grub2-xcat=1.0 ipmitool-xcat=>= 1.8.18-4 +ipxe-xcat=2.0.0 syslinux-xcat=>= 6.03-1 xnba-undi=>= 1.21.1-1 perl-HTML-Form=6.07 @@ -89,6 +91,7 @@ elilo-xcat=3.14 goconserver=>= 0.3.3-snap202011021058 grub2-xcat=1.0 ipmitool-xcat=>= 1.8.18-4 +ipxe-xcat=2.0.0 syslinux-xcat=>= 6.03-1 xnba-undi=>= 1.21.1-1 perl-HTTP-Async=>= 0.30-3 @@ -103,6 +106,7 @@ elilo-xcat=3.14 goconserver=>= 0.3.3-snap202011021058 grub2-xcat=1.0 ipmitool-xcat=>= 1.8.18-4 +ipxe-xcat=2.0.0 syslinux-xcat=>= 6.03-1 xnba-undi=>= 1.21.1-1 perl-HTTP-Async=>= 0.30-3 @@ -117,6 +121,7 @@ elilo-xcat=3.14 goconserver=>= 0.3.3-snap202011021058 grub2-xcat=1.0 ipmitool-xcat=>= 1.8.18-4 +ipxe-xcat=2.0.0 syslinux-xcat=>= 6.03-1 xnba-undi=>= 1.21.1-1 perl-Crypt-SSLeay=0.72 @@ -133,6 +138,7 @@ elilo-xcat=3.14 goconserver=>= 0.3.3-snap202011021058 grub2-xcat=1.0 ipmitool-xcat=>= 1.8.18-4 +ipxe-xcat=2.0.0 syslinux-xcat=>= 6.03-1 xnba-undi=>= 1.21.1-1 perl-Crypt-SSLeay=0.72 @@ -147,7 +153,7 @@ xCAT-genesis-base=>= 2:2.18.0 # EPEL-fed EL10 sections above in one way (see BUILD.md, "riscv64"): riscv64 has no EPEL, so the # perl deps EL10 otherwise takes from EPEL are built here too (perl-Crypt-Blowfish ... # perl-Path-Class below). perl-Path-Class is a build dep of perl-Crypt-SSLeay only. The x86 boot -# loaders (elilo-xcat, syslinux-xcat, xnba-undi) are noarch and are listed like on ppc64le: a +# loaders (elilo-xcat, ipxe-xcat, syslinux-xcat, xnba-undi) are noarch and are listed like on ppc64le: a # riscv64 management node serves the x86 nodes of a mixed cluster. # The per-EL perl set is the EL10 one plus perl-HTML-Form: EPEL supplies it on the other # architectures, nothing supplies it on riscv64, and perl-xCAT requires perl(HTML::Form). @@ -158,6 +164,7 @@ elilo-xcat=3.14 goconserver=>= 0.3.3-snap202011021058 grub2-xcat=1.0 ipmitool-xcat=>= 1.8.18-4 +ipxe-xcat=2.0.0 syslinux-xcat=>= 6.03-1 xnba-undi=>= 1.21.1-1 perl-Crypt-SSLeay=0.72 diff --git a/sbuild-all.pl b/sbuild-all.pl index b3bc92d..cae747d 100755 --- a/sbuild-all.pl +++ b/sbuild-all.pl @@ -17,7 +17,7 @@ # two arches build concurrently on their two hosts, so a per-arch build that also published would # interleave wipes of the same pool/dists/Release; and a partial or failed build must never reach # the published repo, nor stale debs accumulate in it (concern #1). -# 3. Per-arch package sets come from the manifest: the x86 boot components (syslinux/elilo/xnba, +# 3. Per-arch package sets come from the manifest: the x86 boot components (syslinux/elilo/xnba/ipxe-xcat, # Architecture:all) are built once on amd64 (single producer); ppc64el builds only the genuinely # arch-specific compiled deps (concern #3). # 4. Any required chroot / package / artifact failure, or any version-pin mismatch, fails the whole @@ -126,6 +126,7 @@ my %PKG_DIR = ( 'grub2-xcat' => 'grub2-xcat', 'elilo-xcat' => 'elilo', 'xnba-undi' => 'xnba', + 'ipxe-xcat' => 'ipxe-xcat', ); # Build the GetOptions map from the shared standard_options() spec (so the flag vocabulary matches @@ -556,7 +557,7 @@ sub build_one_codename { for my $pkg (@pkgs) { my $dir = $PKG_DIR{$pkg} or die "FATAL: no builder dir mapped for manifest package '$pkg'\n"; - # arch:all single-producer packages (grub2-xcat/syslinux-xcat/elilo-xcat/xnba-undi) are built + # arch:all single-producer packages (grub2-xcat/syslinux-xcat/elilo-xcat/xnba-undi/ipxe-xcat) are built # ONCE on amd64 -- their source is x86-only (syslinux compiles with nasm/gcc-multilib) -- and, # being Architecture:all, are assembled into every arch's Packages index. They stay REQUIRED in # the ppc64el manifest so the gate verifies the ppc repo actually carries them, but are NOT