cssh
Build times (auto-updated)
- i486: 29s (2026-09-16 12:03 UTC, MAKEFLAGS=-j6)
- i686: 35s (2026-09-16 12:03 UTC, MAKEFLAGS=-j6)
- pentium4: 34s (2026-09-16 12:04 UTC, MAKEFLAGS=-j6)
- x86_64: 35s (2026-09-16 12:04 UTC, MAKEFLAGS=-j6)
- armv6h: 5m36s (2026-09-16 12:10 UTC, remote, serial)
- armv7h: 2m42s (2026-09-16 12:10 UTC, remote, MAKEFLAGS=-j1)
- aarch64: 1m11s (2026-09-16 12:10 UTC, remote, MAKEFLAGS=-j1)
2026-09-16: removed ancient generic arm subarch, rebuilt+published all 7 archs (0.0.1.r25.g6bd0546-1 -> -2)
User committed a packaging-only change dropping the never-buildable generic
arm entry from arch=() (pkgrel bumped 1 -> 2 per usual convention – had
reset to 1 at the last pkgver bump, r25). Built via repo_release.sh across
all 7 real archs in one pass – ARM boards worked cleanly this time (see
memory/TOOLING_NOTES.md’s 2026-09-16 entry: oksh’s rebuild immediately
before this one hit and fixed a real ordering bug in repo_build_remote.sh
where an unmounted /data on a board misreported as “already building something
else”; by the time this ran, /data was already mounted from that fix). 100%
tests passed on every arch. All 11 files (cssh+cssh-debug x 4 local archs,
cssh-only x 3 remote ARM archs, no debug split there) uploaded cleanly,
confirmed via repo_arch_status.sh showing all 7 archs
published (0.0.1.r25.g6bd0546-2).
- 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.