cssh
- Path: arch/owned/cssh (submodule,
ssh://aur@aur.archlinux.org/cssh.git) - Cluster Secure Shell/Copy based on libssh, the user’s own upstream
project (
https://git.andreasbaumann.cc/cgit/cssh/). VCS package,pkgver()computed viagit describe --long --tags. - 2026-08-28: arch=() expanded from
('x86_64' 'i686' 'aarch64' 'armv7h')to all 8 archs('i486' 'i686' 'pentium4' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64'),pkgrel1 → 2 (user’s own edit, packaging-only).armin that list is a leftover generic entry with no real build target —repo_build.shalwaysSKIPPEDs it (noextra-arm-build, nothing mapped inremote_build.conf), andrepo_arch_status.shwas updated the same day to hide it from its table rather than show a permanent dead row. - First full 7-arch (all but
arm) build+publish for this package, done in two batches to avoid board contention: i486/ i686/pentium4/x86_64/armv6h first (eurobuild4 was free), then armv7h/aarch64 once [[pacman-static]]’s own build vacated eurobuild5/eurobuild14 (same two boards, running two different packages’ builds concurrently on one board isn’t safe — seeTOOLING_NOTES.md’s “Build concurrency” entry, which is about different packages contending for the same board, not just the local-vs-remote split). - Surfaced a real
repo_build.shbug: its untracked-file cleanup (meant only for the git-trackedarch/tree) also ran against cssh’s staged/data/INSTALL/csshdir and deleted that run’s fresh build logs, because that directory happened to already be a stand-alone git checkout (leftover from beforerepo_build_staged.shever staged it there) rather than genuinely not-a-git-repo like every other staged dir. Fixed generally inrepo_build.sh(skip cleanup wheneverpkgdiris under/data/INSTALL, not just whengit statushappens to fail) — seeTOOLING_NOTES.md.
2026-08-30: rebuilt against new upstream commit, 3 real fixes needed
User asked for a rebuild after noticing upstream had moved (git
ls-remote confirmed a new commit, cbe71513e at request time, vs. the
published g6c92d89). Since pkgver() self-computes via git
describe, no manual pkgver/pkgrel edit was needed – makepkg’s own
“pkgver changed -> reset pkgrel to 1” handled that automatically once a
build actually succeeded. Landed at 0.0.1.r22.g5892097-1 (8 new
commits pulled in fixes/tests since r14). Took 5 build attempts, each
surfacing a genuinely new issue (none were repeats):
3rdParty/linenoise/linenoise.cfails to compile:strcasecmp()used without#include <strings.h>(only<string.h>, no ‘s’, was included – a real missing-include bug in the vendored antirez/linenoise copy, not something introduced by the new commits). Newer gcc treats the implicit declaration as a hard error rather than a warning. Fixed with a standalone patch,linenoise-strcasecmp.patch, applied via a newprepare()(this package had none before).check()’sCsshFunctionaltest needsssh-keygen(openssh) andhostname(inetutils), neither previously declared. Added both to a newcheckdepends=()array (this package had none before) – test-only, correctly kept out ofmakedepends/depends.CsshFunctionalstill failed after that:ERROR: authentication with public key denied. Root cause:cssh.ccallsssh_userauth_publickey_auto(session, NULL, NULL), which tries every SSH identity in$HOME/.ssh(or an agent) – the disposable build user has none.mock_sshd’s ownhandle_auth()accepts any key unconditionally (SSH_PUBLICKEY_STATE_VALIDalways wins once a signature is presented – it’s not doing real trust validation), so this was purely a missing client-side fixture, not a server-side or protocol bug. Asked the user how to handle it (three options: generate a throwaway keypair incheck(), skipcheck()for this release, or hold off) since it’s about their own test suite’s environment assumptions, not a routine packaging gap like #2. They picked generating a throwaway keypair:check()nowssh-keygens a disposable$HOME/.ssh/id_rsa(idempotent, skips if one somehow already exists) before runningctest. Passed cleanly after that (100% tests passed, all 3 remaining local-arch attempts).
All 4 local archs (i486/i686/pentium4/x86_64) built, tested, and
published cleanly at 0.0.1.r22.g5892097-1. armv6h/armv7h/
aarch64 were not rebuilt this round – the whole ARM cluster
(eurobuild3/4/5/14) was down for the entire session (confirmed via
ping at the start, and repo_build_remote.sh’s own NBD-reachability
preflight failing identically on all three remote-arch attempts) –
they remain published at the older 0.0.1.r14.g6c92d89-2. Follow-up
needed once the cluster is back: rebuild just the ARM archs
(REPO_BUILD_ONLY_ARCH="armv6h armv7h aarch64") to bring them up to
r22 too – this is exactly the gap the Architectures overview
column now surfaces automatically (see TOOLING_NOTES.md’s
repo_arch_diff.sh entry).
Note for future VCS-package rebuilds via repo_build_staged.sh:
it never copies the built PKGBUILD/.SRCINFO back from the staging
dir to arch/ (by design – only release artifacts come back), so a
non--git-suffixed VCS package’s tracked pkgver=/pkgrel= fields
stay stale at whatever they were before the build, even after a
real successful publish. repo_diff_local_remote.sh has no way to
know this (its “-VCS” caution tag only fires for *-git pkgnames),
so it briefly showed a misleading CHANGED (implying cssh needed a
rebuild it had already gotten) until manually synced. Fixed by hand
here (pkgver/pkgrel set to what 0.0.1.r22.g5892097-1 actually
built as, regenerated .SRCINFO) – do the same after any future
cssh rebuild that changes the version, or this will recur every time.
2026-08-31: ARM rebuild to r22 – armv7h clean, armv6h/aarch64 each hit a different snag
ARM cluster came back up after being down for the prior session.
Rebuilt armv6h/armv7h/aarch64 (REPO_BUILD_ONLY_ARCH) to bring
them from the stale r14 up to r22.
armv7h: built, tested, published cleanly on the first try.aarch64: failed withmodprobe: could not insert 'nbd': Unknown symbol in moduleoneurobuild14– board was running kernel7.2.0-2but hadlinux-aarch64 7.2.2-2already installed (only6.10.5-3/7.2.2-2module dirs existed under/lib/modules/, nothing for the running7.2.0-2anymore – a pending kernel upgrade that just hadn’t been booted into yet). User authorized rebooting boards for exactly this case;sudo rebooton eurobuild14, waited for it to come back,sudo modprobe nbdconfirmed working post-reboot, retried – see below.armv6h: build itself succeeded, butcheck()’sCsshFunctionaltest failed:FAIL: mock_sshd never came up on port 22200after the host key generated fine. Root cause:tests/run_functional_tests.sh’swait_for_port()loop is a hardseq 1 50xsleep 0.1= 5s cap, and eurobuild4 (single-core, lowest-spec of the three boards) apparently doesn’t getmock_sshdlistening on all 4 ports within that window – not a functional bug, just a timeout tuned for normal hardware. User’s call: skipcheck()specifically onarmv6hrather than patch the timeout downstream or wait for an upstream fix (this is their own repo, but armv6h is explicitly the least-supported/EOL-adjacent board here – seememory/TOOLING_NOTES.md’s “Remote ARM build machines” entry). Added[ "${CARCH}" = "armv6h" ] && return 0as the first line ofcheck()– build/package still run and get tested on every other arch, only this one board’scheck()is skipped.
2026-08-31: user fixed both issues upstream, full 7-arch rebuild
User patched the real root causes directly in their own upstream repo
(git.andreasbaumann.cc/cgit/cssh, commits through b31d3d4) rather
than carrying local workarounds indefinitely:
- Real
#include <strings.h>added to the vendored3rdParty/linenoise/linenoise.cforstrcasecmp()– our locallinenoise-strcasecmp.patchis no longer needed and was removed from the AURPKGBUILD(no moreprepare()step). The stale patch file itself is still sitting in the/data/INSTALL/csshstaging dir from the prior session but is inert (nothing references it) – harmless, just untidy. tests/run_functional_tests.sh’swait_for_port()sleep loop fixed somock_sshdreliably comes up in time on slow boards – thearmv6h-onlycheck()skip added 2026-08-31 earlier today is no longer needed and was also removed from thePKGBUILD. Confirmed: armv6h’sCsshFunctionalnow passes in ~35s (previously hard-capped at 5s and failing).
User also committed the AUR PKGBUILD changes to git themselves
(arch/owned/cssh submodule, “removed local patching for strings.h”).
Rebuilt/published all 7 real archs (i486/i686/pentium4/x86_64/armv6h/
armv7h/aarch64; arm still SKIPPED, no real build target) in one
repo_release.sh run with REPO_BUILD_ONLY_ARCH set to just those
7 – all built, tested (100% pass, all archs), signed, and published
cleanly at 0.0.1.r24.gb31d3d4-1. Synced the tracked pkgver/pkgrel
in PKGBUILD and regenerated .SRCINFO by hand afterward (same VCS-
package staging gap noted above – repo_build_staged.sh doesn’t copy
these back).
2026-09-01: user rebuild request, upstream cscp change broke every arch
Upstream had moved again (git ls-remote showed 6bd0546e vs the
published b31d3d4, commit message “implemented cscp both for SCP
and TFTP - generated man pages - split tests into cssh and cscp
tests”). First rebuild attempt (i486/i686/pentium4/x86_64/
armv6h/armv7h, aarch64 deliberately deferred since eurobuild14
was mid-build for an unrelated package at the time) failed identically
on every arch, starting with i486 on a totally fresh chroot:
ln: failed to create symbolic link '.../usr/bin/cscp': File exists
==> ERROR: A failure occurred in package().
Root cause: src/CMakeLists.txt now installs the cscp symlink
itself (install(CODE "... create_symlink cssh ... bin/cscp") –
cscp is still just cssh dispatched by argv[0], per the comment
above it, not a real second binary). The AUR PKGBUILD’s own
package() still had a manual ln -s cssh "$pkgdir/usr/bin/cscp"
left over from before upstream did this itself – now redundant and
colliding. Fixed by deleting that line from PKGBUILD (man pages are
still only installed manually, no similar collision there; provides=
('cscp') is still correct, cscp is still provided, just via cmake’s
own symlink now).
Confirmed this was deterministic/upstream-caused, not environment/
leftover-state noise, by reproducing on i486 – the very first arch
attempted, always a genuinely fresh chroot.
Rebuilt clean afterward, all 7 real archs (arm still SKIPPED) in
one repo_release.sh run including aarch64 (freed up by then) –
built, tested (100% pass everywhere), signed, and published cleanly
at 0.0.1.r25.g6bd0546-1. Synced tracked pkgver/pkgrel + regenerated
.SRCINFO by hand again (same recurring VCS-package staging gap).
Unrelated near-miss worth remembering: mid-session, a duplicate
repo_release.sh arch/owned/cssh invocation was accidentally launched
while the first was still running (both target the same
/data/INSTALL/cssh staging dir) – caught and killed within seconds,
confirmed no orphaned remote process and no artifact loss, but it’s a
real hazard: never launch a second repo_release.sh/
repo_build_staged.sh for a package already building, check kill
-0 <pid> (or ps) on any prior invocation first.