2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-09-05 20:47:55 +00:00
Commit Graph

27744 Commits

Author SHA1 Message Date
Vinícius Ferrão 945f9fe0d1 build(rpm): build xCAT and xCATsn for riscv64
Add riscv64 to the xCAT and xCATsn build paths, keep the unavailable legacy Genesis dependency conditional, collect the architecture RPMs, and document the forcearch mock target.
2026-09-01 10:50:20 -03:00
Vinícius Ferrão 6eba1277fe docs(riscv64): document EL10 riscv64 compute node support
Add the riscv64 page to the cluster management guide (UEFI + grub2 boot
path, discovery through mknb's grub2 network configurations, stateful and
stateless provisioning, the dependency picture for a management node on
riscv64, limitations), list riscv64 in the node object attributes and in
the support matrices, add the architecture to the cross-build page for
stateless images, extend the grub2 install guide (and fix its swapped
x86_64/aarch64 file names), the uninstall package lists, the DHCP backend
validation matrix and the mknb/genimage man pages, and carry the riscv64
schema values into the generated nodetype, osimage, noderes, node and
group references.
2026-09-01 10:50:20 -03:00
Vinícius Ferrão e7168fc137 test(xCAT-test): cover the EL10 riscv64 osimage profiles
Resolve the rocky10/rhels10 point releases through
imgutils::get_profile_def_filename with the OS search list emulated, and
assert the riscv64 files exist, win the lookup, match the x86_64 package
lists and point service images at the riscv64 dependency repository.
2026-09-01 10:50:20 -03:00
Vinícius Ferrão 3917fd8345 feat(xCAT-server): add EL10 riscv64 osimage profiles
Provide the compute and service profiles for rocky10 and rhels10 on
riscv64: netboot pkglist/exlist/postinstall files and the service
otherpkgs lists for netboot and install. They mirror the x86_64 profiles
(every package resolves in the Rocky 10 riscv64 BaseOS/AppStream/CRB
repositories and the minimal-environment group exists there), with the
kbd keymap exclude spelled correctly, the duplicate man exclude dropped,
and goconserver pulled from the rh10/riscv64 dependency repository.
2026-09-01 10:50:20 -03:00
Vinícius Ferrão 16eea29daf test(xCAT-test): cover EL riscv64 install media and diskless defaults
Pin the riscv64 installer kernel lookup in anaconda.pm and
geninitrd.pm, and evaluate the rh/genimage default driver and resolver
library blocks for riscv64 and the existing architectures.

Add an autotest nodeset case with bogus riscv64 grub2 nodes and a
rhels10.99 riscv64 osimage, checking the per-node grub2 files, the
grub2.riscv64 loader link and the hex-ip/mac links.
2026-09-01 10:50:19 -03:00
Vinícius Ferrão 2ef44d5d7f feat(xCAT-server): install and netboot EL10 riscv64 nodes
EL riscv64 media lay out the installer kernel and initrd under
images/pxeboot exactly like x86 and aarch64 media, but anaconda.pm only
looked there for those two families and geninitrd.pm refused riscv64
outright ("unknow arch"). Treat riscv64 like x86/aarch64 in both
places and recognise riscv64 kernels when a driver disk updates the
installer kernel. There is no riscv64 SUSE media, so geninitrd keeps the
unsupported-architecture error for sles/suse rather than reading the x86
SUSE layout.

Diskless images get a riscv64 default network driver list (virtio,
Intel, Realtek, Broadcom and Mellanox) and take the resolver libraries
from lib64, which is where riscv64 EL puts them.
2026-09-01 10:50:19 -03:00
Vinícius Ferrão ee3df5c3e6 test(xCAT-test): cover the riscv64 mknb discovery configuration
Drive mknb riscv64 --configfileonly through the existing stubs and
assert the grub2 network configuration: name, cpu guard, kernel, initrd,
xcatd endpoint, serial console, lzma preference, no PXELINUX/xNBA/
petitboot output, removal without artifacts and for :noboot interfaces.
Also install a riscv64 Genesis export and reject it for another
architecture.
2026-09-01 10:50:19 -03:00
Vinícius Ferrão 033b16d522 feat(mknb): write grub2 discovery configs for riscv64
mknb only knew how to publish a discovery boot configuration for x86
(PXELINUX and xNBA) and POWER (petitboot). Any other architecture got a
Genesis kernel and initramfs under /tftpboot/xcat and nothing that would
make a firmware boot them, so riscv64 discovery could not start.

riscv64 nodes boot through UEFI and grub2. Write one grub2 configuration
per network, /tftpboot/boot/grub2/grub.cfg-<network hex prefix>, using
the same network keys as the PXELINUX files. A net-booted grub2.riscv64
searches grub.cfg-01-<mac>, grub.cfg-<8 hex ip> and then shorter prefixes
of the ip, so the per-node files that nodeset writes keep priority and
the network file is only reached by clients without a node configuration.
The file is regenerated from the published Genesis artifacts (lzma
preferred over gzip), guarded by $grub_cpu so other grub2 architectures
can share it later, carries the xcatd endpoint, the serial console and
BOOTIF=$net_default_mac, and is dropped for networks served by a
:noboot interface. It is written by name rather than into an existing
file, because on a /32 network nodeset's hard link for the node carries
the same name.

Publishing a Genesis image now also drops the other compression variant
of that architecture, so a leftover genesis.fs.<arch>.lzma can no longer
be paired with a freshly published kernel by this configuration or by
--configfileonly. And since these configurations are only reachable
through grub2.<arch>, which xCAT does not build, a missing boot loader is
reported instead of leaving the nodes to time out in firmware.

xcatconfig now also runs mknb riscv64 when xCAT-genesis-base-riscv64 is
installed, and the usage text lists the architecture.
2026-09-01 10:50:19 -03:00
Vinícius Ferrão 360beccb73 test(xCAT-test): cover the nodediscover default netboot ladder
Exercise _default_netboot() with the database-backed modules stubbed:
riscv64 defaults to grub2 and keeps any grub2 variant, the x86, PowerNV,
ppc, onie and aarch64 outcomes are unchanged, and undefined inputs do
not warn.
2026-09-01 10:50:19 -03:00
Vinícius Ferrão bd87aa9ed9 feat(nodediscover): default discovered riscv64 nodes to grub2
Discovery left noderes.netboot untouched for any architecture outside
x86, ppc and armv7l, so a discovered riscv64 node had no boot method and
nodeset failed to find a plugin for it.

Move the default-netboot ladder into _default_netboot(), which returns
the method to set or undef, and teach it that riscv64 nodes boot through
UEFI and grub2. The existing x86, PowerNV, ppc and onie rules are
unchanged; aarch64 is deliberately left as it was. The platform of the
discovery request is only read when the request carries it, so a node
that reports none does not gain the key, which would end up stored as
discovery data.
2026-09-01 10:50:19 -03:00
Vinícius Ferrão d64366a30a test(xCAT-test): cover the riscv64 DHCP boot policy
Assert the Kea xcat-riscv64 class (architecture 0x001b only, grub2
boot file, present with and without xNBA loaders) and pin the ISC
subnet block so the riscv64 branch stays ahead of the /yaboot
fallback that would otherwise shadow it.
2026-09-01 10:50:19 -03:00
Vinícius Ferrão 9549e660f9 feat(dhcp): boot RISC-V 64-bit UEFI clients with grub2
RISC-V 64-bit UEFI firmware identifies itself with DHCP option 93
client-system-architecture 27 (0x001b, IANA processor architecture
types). Neither DHCP backend knew the value: Kea handed such clients no
boot file and ISC dhcpd fell through to the /yaboot catch-all.

Add an xcat-riscv64 Kea client class and an ISC subnet branch that send
them boot/grub2/grub2.riscv64, the same shape as the aarch64 entries.
The UEFI HTTP boot id (0x001c) is left alone: it needs a URL boot file
and the HTTPClient vendor class, which is a separate change.
2026-09-01 10:50:19 -03:00
Vinícius Ferrão be44015c3f test(xCAT-test): cover riscv64 netboot method lookup
Pin lookupNetboot, the profiled-node netboot rule table and the schema
descriptions for riscv64 without loading the database-backed modules:
the shipped subroutines are extracted from the source and evaluated
directly, so the test runs without DBI.
2026-09-01 10:50:18 -03:00
Vinícius Ferrão 76a44422d5 feat(perl-xCAT): recognize riscv64 as a node and osimage architecture
riscv64 nodes boot through UEFI and grub2 only, like ppc64le PowerKVM
guests and aarch64. Teach the three places that declare which
noderes.netboot methods an architecture accepts about it:

- xCAT::Utils::lookupNetboot returns grub2,grub2-tftp,grub2-http for
  riscv64 so nodeset and rinstall accept those methods.
- the profiled-node rule table in xCAT::ProfiledNodeUtils defaults
  riscv64 nodes to grub2.
- the nodetype.arch, osimage.osarch and noderes.netboot schema
  descriptions document riscv64.

The arch token is riscv64 everywhere (rpm, dpkg and uname -m agree), so
no alias handling is added.
2026-09-01 10:50:18 -03:00
Daniel Hilst 47342c3321 Merge pull request #7805 from VersatusHPC/fix/apache-config-sources-makerpm-fixture
test(build): stage the source-only helper in the makerpm fixture
2026-09-01 06:57:50 -03:00
Vinícius Ferrão a26a00c471 test(build): stage the source-only helper in the makerpm fixture 2026-08-31 21:06:59 -03:00
Daniel Hilst 4a0d9e0bb0 Merge pull request #7801 from VersatusHPC/refactor/dhcp-omapi-key-rendering
refactor(dhcp): share OMAPI key configuration
2026-08-31 20:39:06 -03:00
Daniel Hilst 66fb895359 Merge pull request #7774 from VersatusHPC/feat/makerpm-source-only-build
feat(build): add a source-only build mode
2026-08-31 20:37:31 -03:00
Daniel Hilst aa447fe247 Merge pull request #7780 from VersatusHPC/feat/confluent-switch-topology
feat(confluent): export the switch topology of each node
2026-08-31 17:43:52 -03:00
Vinícius Ferrão ab80f09385 test(dhcp): cover shared OMAPI key configuration 2026-08-31 16:10:14 -03:00
Vinícius Ferrão 75715971b7 refactor(dhcp): share OMAPI key configuration 2026-08-31 16:10:14 -03:00
Daniel Hilst 0a93aba2b0 Merge pull request #7786 from VersatusHPC/feat/policy-user-groups
feat(policy): allow Unix group rules
2026-08-31 15:55:34 -03:00
Daniel Hilst efdb06f641 Merge pull request #7789 from VersatusHPC/refactor/package-manager-discovery
refactor(postscripts): share RPM package manager discovery
2026-08-31 15:33:17 -03:00
Daniel Hilst e872fd20cf Merge pull request #7775 from VersatusHPC/fix/anaconda-driver-disk-kernel-arg
fix(anaconda): load the driver disk that is added to the initrd
2026-08-31 12:12:09 -03:00
Daniel Hilst b0a0893cb3 Merge pull request #7798 from VersatusHPC/refactor/xcatdsklspost-mypostscript-fetch
refactor(xcatdsklspost): share mypostscript fetch pipeline
2026-08-31 12:05:59 -03:00
Daniel Hilst bee09454f7 Merge pull request #7777 from VersatusHPC/fix/dhcp-infiniband-twin-entry
fix(dhcp): register the InfiniBand identity of a node that boots over IPoIB
2026-08-31 11:46:30 -03:00
Daniel Hilst 443a776fd6 Merge pull request #7783 from VersatusHPC/refactor/package-modular-predicate
refactor(postscripts): share modular package directory predicate
2026-08-31 11:43:37 -03:00
Daniel Hilst e82e52f03f Merge pull request #7784 from VersatusHPC/fix/debian-html-form-dependency
fix(debian): declare HTML::Form runtime dependency
2026-08-31 11:42:04 -03:00
Daniel Hilst 43203535ef Merge pull request #7787 from VersatusHPC/fix/rflash-fpc-usage
fix(rflash): show NeXtScale FPC URL syntax
2026-08-31 11:37:46 -03:00
Daniel Hilst 3d8e647ee9 Merge pull request #7788 from VersatusHPC/refactor/apache-config-sources
build(httpd): centralize Apache configuration sources
2026-08-31 11:36:33 -03:00
Daniel Hilst 9780d56a36 Merge pull request #7790 from VersatusHPC/fix/genesis-secondary-dhcp
fix(genesis): configure eligible secondary NICs with DHCP
2026-08-31 11:28:44 -03:00
Daniel Hilst 2abe22e203 Merge pull request #7791 from VersatusHPC/refactor/nfs-export-workflow
refactor(svrutils): centralize NFS export setup
2026-08-31 11:27:41 -03:00
Daniel Hilst ed537cd88f Merge pull request #7793 from VersatusHPC/refactor/nm-autoconnect
refactor(netboot): share NetworkManager autoconnect setup
2026-08-31 11:26:25 -03:00
Daniel Hilst 1b78e03b23 Merge pull request #7792 from VersatusHPC/refactor/el-major-predicate
refactor(postscripts): centralize EL9 version check
2026-08-31 11:26:12 -03:00
Daniel Hilst ebba87379c Merge pull request #7795 from VersatusHPC/refactor/svrutils-linuximage-defaults
refactor(svrutils): centralize linuximage defaults
2026-08-31 11:23:20 -03:00
Daniel Hilst 3563bda58d Merge pull request #7796 from VersatusHPC/fix/rinv-pending-uefi-build-id
fix(rinv): report pending UEFI build ID separately
2026-08-31 11:20:11 -03:00
Daniel Hilst 8cf7b16785 Merge pull request #7797 from VersatusHPC/refactor/dhcp-dynamic-range-rejection
refactor(dhcp): centralize dynamic-range rejection
2026-08-31 11:16:28 -03:00
Vinícius Ferrão d9d1e59fe5 test(xcatdsklspost): cover mypostscript fetch pipeline 2026-08-30 23:37:44 -03:00
Vinícius Ferrão 3d5a1b7dd8 refactor(xcatdsklspost): share mypostscript fetch pipeline 2026-08-30 23:37:44 -03:00
Vinícius Ferrão c225c3240f test(dhcp): cover shared dynamic-range rejection 2026-08-30 23:08:58 -03:00
Vinícius Ferrão c4b7301fe6 refactor(dhcp): centralize dynamic-range rejection 2026-08-30 23:08:58 -03:00
Vinícius Ferrão bdf971afc9 docs(rinv): describe pending UEFI build output 2026-08-30 22:47:16 -03:00
Vinícius Ferrão 41e8d7f11d test(svrutils): cover linuximage defaults 2026-08-30 22:46:13 -03:00
Vinícius Ferrão a966cdba61 refactor(svrutils): centralize linuximage defaults 2026-08-30 22:41:26 -03:00
Vinícius Ferrão 9a9e6c23b1 test(rinv): cover pending UEFI inventory 2026-08-30 22:39:44 -03:00
Vinícius Ferrão 4824e836ce fix(rinv): report pending UEFI build separately
The IMM pending_build_id property is not guaranteed to identify the primary UEFI bank. Keep it out of the active version value and expose it as a separate firmware inventory record.

Recovered from original commit b79c005061 by Jarrod Johnson.

Co-authored-by: Jarrod Johnson <jarrod.b.johnson@gmail.com>
2026-08-30 22:22:39 -03:00
Vinícius Ferrão 8a19230688 test(netboot): cover NetworkManager autoconnect setup 2026-08-30 21:57:28 -03:00
Vinícius Ferrão 7032b75c94 refactor(netboot): share NetworkManager autoconnect setup 2026-08-30 21:53:29 -03:00
Vinícius Ferrão 3e072abe8f test(postscripts): cover shared EL9 version check
Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
2026-08-30 21:33:37 -03:00
Vinícius Ferrão a551510566 refactor(postscripts): centralize EL9 version check
Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
2026-08-30 21:33:37 -03:00