2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-08-03 16:06:59 +00:00
Commit Graph

27130 Commits

Author SHA1 Message Date
Vinícius Ferrão c876bbf790 test(dbobjutils): cover literal only-if routing
(cherry picked from commit 8a4fe18cbf)
2026-07-24 15:24:33 +00:00
Vinícius Ferrão c77e30fe52 refactor(dbobjutils): reuse only-if matcher for table routing
(cherry picked from commit fd32ae6860)
2026-07-24 15:24:33 +00:00
xcat2-backport-automation[bot] 08a31957ab Merge pull request #7680 from xcat2/backport-7634-to-2.18
[Backport 2.18] fix(rcons): resolve a conserver hostname before the local-address check
2026-07-24 15:22:53 +00:00
xcat2-backport-automation[bot] 8679320453 Merge pull request #7681 from xcat2/backport-7619-to-2.18
[Backport 2.18] fix(mknb): build the genesis image atomically to survive concurrent runs
2026-07-24 15:20:31 +00:00
Vinícius Ferrão 9821ade141 fix(mknb): build the genesis image atomically to survive concurrent runs
mknb writes the compressed genesis filesystem by streaming cpio output
straight onto the final path in $tftpdir/xcat (genesis.fs.$arch.lzma or .gz).
When two mknb/nodeset runs target a shared $tftpdir at once, one run reads or
overwrites the other's half-written image, producing a corrupt genesis.fs and
failed netboots.

Write each image to a uniquely-suffixed temporary file
(xCAT::Utils::genpassword(24)) and File::Copy::move() it into place. move()
within the same directory is a rename, so the final path only ever appears
complete. Both modules are already imported by mknb.pm.

Recovered from the unmerged lenovobuild branch (originals c651e7b8 and its
fix da0723f2, which switched the suffix to genpassword after the first
attempt only produced a single character). master lacks the branch's xz
path, so only the lzma and gzip paths are adjusted here.

Co-authored-by: Jarrod Johnson <10814490+jjohnson42@users.noreply.github.com>
(cherry picked from commit 6da5efd29a)
2026-07-24 15:05:52 +00:00
Vinícius Ferrão 6d6ace51b4 fix(rcons): resolve a conserver hostname before the local-address check
When nodehm.conserver is a hostname, rcons compared that name directly against
the management node's local IP addresses, so the "conserver is this host"
check never matched and rcons connected via `-s` (a remote confluent session)
even when the conserver was the local host. Resolve the name to an address
with getent first so the comparison works.

Recovered from the unmerged lenovobuild branch (original faa767e5).

Co-authored-by: Jarrod Johnson <10814490+jjohnson42@users.noreply.github.com>
(cherry picked from commit bdf8ec36db)
2026-07-24 15:04:28 +00:00
xcat2-backport-automation[bot] 3023a4b14d Merge pull request #7679 from xcat2/backport-7604-to-2.18
[Backport 2.18] refactor(dhcp): reuse Kea MAC normalization
2026-07-24 14:52:36 +00:00
Vinícius Ferrão da2824f842 test(dhcp): cover Kea MAC normalization
(cherry picked from commit 138f3327b2)
2026-07-24 14:24:23 +00:00
Vinícius Ferrão 1c617922c5 refactor(dhcp): reuse Kea MAC normalization
(cherry picked from commit 3fc9f038b6)
2026-07-24 14:24:23 +00:00
xcat2-backport-automation[bot] 95a9e27f8a Merge pull request #7669 from xcat2/backport-7639-to-2.18
[Backport 2.18] fix(tcons): make tcons work with modern tmux
2026-07-23 23:48:44 +00:00
Vinícius Ferrão 4f9c4e4495 fix(tcons): make tcons work with modern tmux
tcons opens an rcons console per node in a tiled tmux session. On tmux 3.x
(shipped by all currently supported platforms) it no longer works:

  * The session was named "tcons.$$".  Modern tmux treats "." as the
    session:window.pane target separator, so "tmux attach -t tcons.$$" is
    parsed as session "tcons", pane "$$" and fails with "can't find
    session"/"can't find pane" -- tcons cannot attach to the session it
    just created.  Rename it to "tcons_$$".

  * The per-node "tmux select-pane", "tmux split" and "tmux select-layout"
    commands had no target.  When tcons is run from inside an existing tmux
    session (the common case) they act on the caller's current session
    instead of the detached tcons session, splitting the operator's own
    window.  Target every command explicitly at the tcons session.

  * Move the pane-border-status option inside the loop so the console title
    is set on each pane as it is created.

Validated on tmux next-3.4: the reworked script builds a 3-pane tiled
session with no errors, whereas the previous version's dotted session name
is unaddressable ("can't find pane").

Recovered from the unmerged lenovobuild branch (originals 5107b6ba1,
cefefa7d1, 6c72a2707, e040d24bb).

Co-authored-by: Jarrod Johnson <10814490+jjohnson42@users.noreply.github.com>
(cherry picked from commit dda7605028)
2026-07-23 23:32:49 +00:00
xcat2-backport-automation[bot] 2d68f4e977 Merge pull request #7668 from xcat2/backport-7641-to-2.18
[Backport 2.18] fix(replaycons): detect confluent by console service, not binary presence
2026-07-23 23:29:27 +00:00
Vinícius Ferrão 8ece83ab36 fix(replaycons): detect confluent by console service, not binary presence
replaycons chose the confluent console log directory
(/var/log/confluent/consoles) whenever the confetty binary happened to be
present.  On a host that has confluent installed but runs conserver as the
active console service, that directory is empty and replaycons could not find
the log.  Gate on the site table's consoleservice attribute instead -- the
same setting rcons uses -- so replaycons reads /var/log/confluent/consoles
only when confluent is actually the configured console service.

Recovered from the unmerged lenovobuild branch (originals 3ce4d81b3, 57f6ddd38).

Co-authored-by: Jarrod Johnson <10814490+jjohnson42@users.noreply.github.com>
(cherry picked from commit 21da014ed7)
2026-07-23 23:11:39 +00:00
Vinícius Ferrão d657b4f023 Merge pull request #7659 from xcat2/backport-7645-to-2.18
[Backport 2.18] fix(dhcp): serve the UEFI boot loader for client architecture 00:07
2026-07-23 18:16:58 -03:00
Vinícius Ferrão 387687d8c4 Merge pull request #7657 from xcat2/backport-7620-to-2.18
[Backport 2.18] fix(genesis): stop ethtool link-wait loops from spinning forever
2026-07-23 17:52:17 -03:00
Vinícius Ferrão 463bf9d660 Merge pull request #7658 from xcat2/backport-7633-to-2.18
[Backport 2.18] fix(ddns): recognize a routed local nameserver address
2026-07-23 17:52:04 -03:00
Vinícius Ferrão e2f34e91d4 fix(dhcp): serve the UEFI boot loader for client architecture 00:07
Modern x86-64 UEFI firmware (including OVMF and recent iPXE) reports DHCP
client architecture 00:07, but the xNBA network-boot conditionals only matched
00:09. A UEFI node would load xnba.efi, re-request with user-class xNBA and
arch 00:07, fail to match, and be handed xnba.efi again -- an endless boot
loop. Accept 00:07 alongside 00:09 in the xNBA UEFI branches of both the
network-level (addnet) and node-level (addnode) dhcpd statements.

Validated on an OVMF UEFI client: it progresses from xnba.efi to the .uefi
genesis config and boots, instead of looping on xnba.efi.

Recovered from the unmerged lenovobuild branch (5d697b5c, 86b0e12e).

Co-authored-by: Jarrod Johnson <10814490+jjohnson42@users.noreply.github.com>
(cherry picked from commit 60bd6e7cd9)
2026-07-23 20:15:46 +00:00
Vinícius Ferrão 8bfa57c792 fix(ddns): recognize a routed local nameserver address
The DNS-managed-networks check used my_ip_facing($net->{net}), which only
returns local addresses on the interface directly facing that network. A
nameserver that is a local address reachable via a different (routed)
interface was therefore treated as external, and the network was wrongly
dropped from ddns management.

Use thishostisnot(), which recognizes any local address regardless of the
interface, and keep the existing <xcatmaster> and site-nameserver special
cases.

Recovered from the unmerged lenovobuild branch (original 3c343f83), adapted
to preserve those special cases: lab validation showed the original replaced
them wholesale, which would exclude any network whose nameserver is the
literal <xcatmaster> token (thishostisnot('<xcatmaster>') is true).

Co-authored-by: Jarrod Johnson <10814490+jjohnson42@users.noreply.github.com>
(cherry picked from commit a0dfc3343a)
2026-07-23 20:10:29 +00:00
Vinícius Ferrão 400fee4e47 fix(genesis): stop ethtool link-wait loops from spinning forever
For each secondary NIC in NICSTOBRINGUP, doxcat backgrounds a loop that polls
`ethtool $nic` until the link reports "detected: yes" before running dhclient.
A NIC that is never connected keeps that loop (and its `sleep 5`) running for
the life of the genesis environment, leaking background shells and needlessly
churning.

Add a second exit condition so each loop also stops once /tmp/netinitted
exists, and touch that file once the boot NIC has completed network init. A
link that never appears no longer waits indefinitely.

Recovered from the unmerged lenovobuild branch (original 9ece12e4).

Co-authored-by: Jarrod Johnson <10814490+jjohnson42@users.noreply.github.com>
(cherry picked from commit f24457cddf)
2026-07-23 20:00:26 +00:00
Vinícius Ferrão 4d7ddcd3aa Merge pull request #7655 from xcat2/backport-7624-to-2.18
[Backport 2.18] fix(genesis): only wait 20s for NIC init on ppc64
2026-07-23 16:44:05 -03:00
Vinícius Ferrão 1abdb53067 Merge pull request #7653 from xcat2/backport-7651-to-2.18
[Backport 2.18] fix(ddns): retry makedns/nsupdate on transient SERVFAIL
2026-07-23 16:43:51 -03:00
Vinícius Ferrão 7c86e14aa4 fix(genesis): only wait 20s for NIC init on ppc64
The genesis boot script sleeps 20 seconds unconditionally with the comment
"wait for NIC initialization", but that wait exists solely for System P LE
(ppc64) hardware discovery -- the surrounding section is explicitly ppc64
only. Every x86_64 and aarch64 node therefore pays a needless 20s delay on
each genesis boot.

Move the sleep inside the `[[ ${ARCH} =~ ppc64 ]]` block so only ppc64 waits.
Applied to the base script and both dracut_105 (el, ubuntu) variants.

Recovered from the unmerged lenovobuild branch (original d0916d9d).

Co-authored-by: Jarrod Johnson <10814490+jjohnson42@users.noreply.github.com>
(cherry picked from commit 32149f10f4)
2026-07-23 19:02:44 +00:00
Daniel Hilst 0f931a714c fix(ddns): retry transient DNS-update rejections and fail on persistent ones
ddns.pm's DNS-update send has a 3-try retry loop, but it only retried on
NOTAUTH and -- on the final attempt -- the `next` fell out of the loop without
reporting failure. makedns then printed "Completed updating DNS records." and
"DNS setup is completed" even when the update was never accepted.

Two problems this causes:
- SERVFAIL was never retried. named routinely replies SERVFAIL transiently
  right after a zone (re)load, before the zone is ready to accept dynamic
  updates; the update succeeds a second or two later. This reliably breaks real
  flat-cluster provisioning on el9/el10, where the test case's makedns -n runs
  right after named reloads the zone with the new compute node.
- A persistent NOTAUTH/SERVFAIL (retries exhausted) was silently swallowed and
  reported as success, so a genuinely failed DNS update looked like it worked.

Extract the batch send into send_ddns_update(), which retries NOTAUTH and
SERVFAIL (pausing on SERVFAIL), returns 0 only on NOERROR, and otherwise emits
the error and returns 1. Both batch-send sites now `return 1 if
send_ddns_update(...)`, so a real failure aborts add_or_delete_records instead
of falsely reporting success.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
(cherry picked from commit 9dd025bf05)
2026-07-23 18:04:38 +00:00
Vinícius Ferrão 8082a9aae5 Merge pull request #7613 from xcat2/backport-7612-to-2.18
[Backport 2.18] fix(xcat-core): stop go-xcat aborting the install on obsolete/missing…
2026-07-21 14:11:32 -03:00
Daniel Hilst 08c5ff5f06 fix(xcat-core): stop go-xcat aborting the install on obsolete/missing packages
go-xcat's install list still named yaboot-xcat, which was obsoleted in the
xcat-dep 2.18 rebuild and is no longer published. It also lists the cross-arch
ppc64 genesis packages, which the arch-split 2.18 dep repo no longer places in
the x86_64 view an x86 management node reads. Because EL dnf is strict by
default, any one of these unresolvable names aborts the entire `dnf install`
transaction, so `go-xcat install` fails outright on EL9/EL10 even though every
package the node actually needs is available.

Drop yaboot-xcat from the install list (kept in the uninstall list so existing
installs are still cleaned up) and pass `dnf --setopt=strict=0` so a package
missing from the enabled repository is warned and skipped instead of failing
the whole install. The existing post-install smoke test still catches a
genuinely broken install.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
(cherry picked from commit 1b5938969c)
2026-07-20 16:24:31 +00:00
Vinícius Ferrão 1f33910971 Merge pull request #7609 from xcat2/backport-7603-to-2.18
[Backport 2.18] refactor(dhcp): reuse shared version comparison
2026-07-19 17:27:39 -03:00
Vinícius Ferrão bcbc4c9c25 test(dhcp): cover shared version comparison
(cherry picked from commit 0ddc19e74b)
2026-07-19 20:07:15 +00:00
Vinícius Ferrão 3dcf01da76 refactor(dhcp): reuse shared version comparison
(cherry picked from commit 5467c1aef9)
2026-07-19 20:07:15 +00:00
Vinícius Ferrão 7ea34345fb chore(release): bump version to 2.18.2
2.18.1 was already published to the EL yum repos on 2026-07-10
(xCAT-2.18.1-snap202607100105, from master commit f6deff08b, now
tagged 2.18.1 on this branch). A released version number is
immutable, so the next 2.18.x release from this branch is 2.18.2.
2026-07-19 13:27:37 -03:00
Vinícius Ferrão 9d1628f577 test(packaging): verify systemd omits SysV init script
(cherry picked from commit 185af5a3aa)
2026-07-19 12:20:06 -03:00
Vinícius Ferrão 9910390e99 test(xcatprobe): run listener checks in CI
(cherry picked from commit c135abe679)
2026-07-19 12:19:52 -03:00
Vinícius Ferrão 886c08e9aa build(xcatprobe): declare listener tool dependency
(cherry picked from commit 6d59e60331)
2026-07-19 12:19:52 -03:00
Vinícius Ferrão dd0b123346 fix(xcatprobe): report listener inspection errors
(cherry picked from commit 73b9368ff3)
2026-07-19 12:19:52 -03:00
Vinícius Ferrão c50384945f test(xcatprobe): cover command output capture
(cherry picked from commit b46d28ae1d)
2026-07-19 12:19:52 -03:00
Vinícius Ferrão 445c851325 docs(sles): clarify installer SSH password
Fixes #7235

(cherry picked from commit 7e7332d521)
2026-07-19 12:19:52 -03:00
Daniel Hilst 4b4906707d CI: install build-essential so xcat-core debs build on noble
On the ubuntu-24.04 runner, dpkg-buildpackage aborted every xcat-core
package with 'Unmet build dependencies: build-essential:native', so zero
debs were produced, reprepro created no dists/noble, and 'apt-get update'
against the local file: repo failed with 'dists/noble/.../Packages File
not found' -> install_xcat failed. Add build-essential to the workflow
dependency install so the local package repo is actually built.

(cherry picked from commit f9717ea8da)
2026-07-19 12:19:52 -03:00
Daniel Hilst 9f9e02bc72 Fix GitHub CI: use noble image + latest/noble xcat-dep
The xcat-dep APT repo now publishes only the noble (24.04) codename at
.../apt/latest/xcat-dep; the bionic/devel dist no longer exists, so
install_xcat failed on apt-get update/install. Run the workflow on
ubuntu-24.04 and point the apt source at latest/xcat-dep noble main.

Drop the apt-key step: apt-key is removed on Ubuntu 24.04 and the legacy
apt.key is gone from the xcat-dep dir; the repo already installs via
allow-insecure-repositories/allow-unauthenticated.

(cherry picked from commit 83323504a6)
2026-07-19 12:19:51 -03:00
Vinícius Ferrão 23d11276f4 test(xcatprobe): cover TCP listener detection
(cherry picked from commit b4ce09e132)
2026-07-19 12:19:51 -03:00
Vinícius Ferrão 12af98722a fix(xcatprobe): prefer ss for listener checks
(cherry picked from commit 888f5360b8)
2026-07-19 12:19:51 -03:00
Vinícius Ferrão 1c35fc6cef fix(packaging): avoid SysV init paths in modern DEBs
(cherry picked from commit 6a3f71bf68)
2026-07-19 12:19:51 -03:00
Vinícius Ferrão 27e932b7f8 fix(packaging): avoid SysV init paths in modern RPMs
(cherry picked from commit c34db2c55f)
2026-07-19 12:19:51 -03:00
Vinícius Ferrão 420c46297a fix(packaging): make xcatd callers init-agnostic
(cherry picked from commit d829be9e94)
2026-07-19 12:19:50 -03:00
Vinícius Ferrão 401a6ff372 fix(mknb): avoid transient discovery addresses
(cherry picked from commit 3cd74bbab0)
2026-07-19 12:19:50 -03:00
Vinícius Ferrão 944219aa92 fix(makehosts): index host lookups
(cherry picked from commit 009150823f)
2026-07-19 12:19:50 -03:00
Vinícius Ferrão 65b8d37532 fix(copycds): keep SLE 15 source media separate
(cherry picked from commit 4918dfa9b7)
2026-07-19 12:19:50 -03:00
Vinícius Ferrão 9d01a342c9 docs: fix CUDA samples verification
(cherry picked from commit 3d842ce944)
2026-07-19 12:19:50 -03:00
Vinícius Ferrão 29c1747cbe fix(xcat-server): retry suite 3 on zero RAKP2 HMAC
(cherry picked from commit 695dd485cf)
2026-07-19 12:19:50 -03:00
Daniel Hilst eb30c1d134 fix(xcat-server): install tmux on KVM hosts for the serial console
cons/kvm drives the KVM guest serial console through a shared tmux session on
the hypervisor (tmux, unlike screen, is present on every libvirt host we target
incl. ppc64le hosts that ship no screen). The KVM host package lists were never
updated for that switch, so an xCAT-provisioned KVM host got 'screen' (now
unused) -- or nothing -- where tmux is required, leaving rcons broken.

Ship tmux in the KVM host pkglists:
  - install/rh, install/ubuntu: screen -> tmux / add tmux.
  - netboot/{alma,centos,rocky}: were symlinks to the RHEL 5.4 list; make them
    real lists with tmux (the rhel5/6/7 lists keep screen).
  - install/suse: add a KVM host list (SUSE had none) carrying tmux.

screen stays where it is still used: the Xen console, and the EOL rhel5/6/7 and
centos6/7 lists.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
(cherry picked from commit c1db278e1a)
2026-07-19 12:19:49 -03:00
Vinícius Ferrão 28ed4e6331 fix(xcat-client): make profile probe safe under errexit
(cherry picked from commit 1c6c256065)
2026-07-19 12:19:49 -03:00
Daniel Hilst d4d8838070 fix(genesis-scripts): floor genesis-base requirement at 2:2.18.0
Requiring xCAT-genesis-base >= 2:%{version} coupled the flat xcat-core to a
matching genesis-base on every marketing-version bump: a 2.18.1 core refused
to install against the deployed 2.18.0 genesis-base. genesis-base changes
rarely and lives in the separate per-EL xcat-dep repo, so floor the requirement
at the fixed 2.18.0 baseline instead. Core version bumps no longer force a
genesis-base re-publish.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
(cherry picked from commit f6deff08bc)
2.18.1
2026-07-19 12:19:49 -03:00