All checks were successful
ci / fmt (pull_request) Successful in 21s
bench / build (pull_request) Successful in 1m0s
ci / clippy (pull_request) Successful in 2m42s
ci / doc (pull_request) Successful in 2m46s
bench / measure (pull_request) Successful in 2m56s
ci / test (pull_request) Successful in 7m54s
The matrix gains `cuda_kernel` (rendered into miner.env as MINER_CUDA_KERNEL) next to `kernel`, the id validate asserts. benjy's 4090 measured +1.7% on the loop kernel (727-736 vs 716-718 MH/s, parity 200/200), so it runs loop / cuda-loop; quadbrat (-1.8%) and beast (-3.4%) stay on unrolled / cuda. A rollback to a binary that predates the switch is safe: it ignores the variable. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ue5ZZm1Hiv5zPnucykKKuF
deploy
Everything the CI deploy of the miner ships or needs (.gitea/workflows/deploy.yaml).
Moved from lair/quantus on 2026-09-03 so that one repo owns the deployed miner;
the fleet's monitoring, GPU power limits and nvidia metrics stay there.
| File | Lands at |
|---|---|
quantus-miner.service |
/etc/systemd/system/quantus-miner.service |
quantus-miner.sysusers.conf |
/etc/sysusers.d/quantus-miner.conf |
quantus-miner-metrics.xml |
/etc/firewalld/services/quantus-miner-metrics.xml |
miner.env.tmpl |
rendered to /etc/quantus-miner/miner.env |
infra-setup.sh |
operator-run once per host; installs the gitea_ci sudoers |
The miner's credentials are generated by the node and copied host-to-host by the deploy on every run. Nothing secret lives here.
Traps, all previously hit
- Adding a file or privileged command means re-running
infra-setup.sh. The deploy preflights the host'ssudo -n -lagainst the script's SUDO block and names the missing paths, instead of failing partway withsudo: a password is required. - Deploys must be no-ops when nothing changed.
push()usesrsync -ic(checksum). The artifact is rebuilt every run so mtimes always differ. Restart only on an itemised content change. --node-addrtakes an IP, not a name. It parses as a RustSocketAddrwith no DNS. The deploy resolves the node on the miner host and renders the literal; the10.xnever enters the repo.- Pipes in validate steps. The shell is
bash -e -o pipefail; a reader that exits early (awk ... exit,grep -q,head) SIGPIPEs the writer, exit 141. Capture into a variable and parse with a here-string. - ssh argument quoting.
run()isssh ... "$@"and the remote shell re-splits; any argument with a space is passed as one pre-quoted string. PrivateDevices=falsein the unit is deliberate: the miner needs/dev/nvidia*.systemctl is-activeis not evidence of mining. A miner that found no adapter, or never got a job, isactive. Validate assertsminer_hashes_totaladvances andminer_gpu_devicesmatches the matrix.- Binaries must be built on
cuda-13.0(Fedora 43, like the hosts). Therustrunner is Fedora 44; its binaries fail withGLIBC_2.43 not found. - A benchmark (
bench.yaml) stops the miner on its host. A deploy landing on the same host during a measurement would find the unit down and start it mid-window. Both are serialised only by not running them together.