Skip to content

docs(runbook): build the lab guest on Saruman (#262) - #280

Merged
Gerrrt merged 1 commit into
mainfrom
gerrrt/lab-guest-runbook-262
Sep 4, 2026
Merged

Gerrrt merged 1 commit into
mainfrom
gerrrt/lab-guest-runbook-262

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 4, 2026

Copy link
Copy Markdown
Owner

Step 1 of getting stacks/lab actually running, as something the repository keeps rather than a message in a chat window.

Settles the three things #262 left open — name, address, distribution — and writes down the reasoning for each.

The distribution is the one that matters

config.alloy tails /var/log/auth.log and /var/log/syslog as explicit file sources, alongside the journal. A default Debian 12/13 install ships no rsyslog — journald only, and neither file exists. Alloy would start cleanly, report healthy, and collect nothing from two of its four log sources.

That is #62 and #63 again: a collector that runs healthy and produces nothing. So: Ubuntu Server 24.04 LTS, which has both files and is what prometheus and oracle already run, keeping the agent identical on every Linux host in the estate.

The verification step asks for three Loki jobs and says explicitly that two is the failure this runbook exists to prevent — because a healthy-looking agent is exactly what the wrong choice produces.

Other decisions, with reasons rather than defaults

  • VM, not LXC. The stack uses cgroup: host, cap_drop: [ALL] and a Docker socket mount; each has an asterisk under a container that it does not have under a VM.
  • No VLAN tag on the NIC. vmbr0 is ImaginationLAN — Saruman is single-homed with no trunk and no VLAN-aware bridge (ADR-0007) — so a tag= would leave the guest with no network at all.
  • --balloon 0. A guest whose job is reporting its own memory should not have that number move for reasons that are not the workload.
  • --onboot 1. Nothing converges this stack and nothing outside the lab notices if it dies (#257); coming back by itself is the cheapest resilience available.
  • Disk cache left at the default, not writeback. The Smart Array cache is battery-backed again since 2026-09-02 (#76) — but that runbook records cpqDaAccelWriteCachePercent still reading 0, unexplained. Leaning on a cache nobody has confirmed is absorbing writes is not a trade to make silently.

Two quiet traps get callouts

  • The missing-certificate error names make certs --ca as its fix, which is right on a fresh clone and wrong here — it would mint a second CA that this stack’s Prometheus cannot verify against. Copy the leaf; do not issue a new root.
  • secrets-init on the monitoring host would give one age key both stacks. bootstrap.sh refuses, but a refusal only helps if it is read, so the runbook says which machine you are meant to be on and what the refusal means.

Verification

make check-docs and make lint pass. The runbook is indexed from the roadmap entry and the README tree.

Nothing was deployed — Saruman is not reachable from the monitoring host, which is why this is a runbook and not a change.

🤖 Generated with Claude Code

`stacks/lab` is built, validated and deployed nowhere: the guest it runs on
does not exist. This is that build, and it settles the three things #262 left
open — the name, the address, and the distribution.

The distribution is the one that would have bitten quietly. `config.alloy`
tails /var/log/auth.log and /var/log/syslog as explicit file sources alongside
the journal, and a default Debian 12/13 install ships no rsyslog — neither file
exists. Alloy would start, report healthy, and collect nothing from two of its
four log sources. That is #62 and #63 again, and it is why this says Ubuntu
Server 24.04: it has both files, and it is what `prometheus` and `oracle`
already run, so the agent behaves identically on every Linux host here.

A VM and not an LXC, because the stack uses `cgroup: host`, `cap_drop: [ALL]`
and a Docker socket mount, and each of those has an asterisk under a container
that it does not have under a VM.

Four `qm create` flags are explained rather than left to be copied: no VLAN tag
(vmbr0 IS ImaginationLAN — `Saruman` is single-homed with no trunk, ADR-0007,
so a tag would leave the guest with no network), `--balloon 0` (a guest whose
job is reporting its own memory should not have that number move for reasons
that are not the workload), `--onboot 1` (nothing converges this stack and
nothing outside the lab notices if it dies, #257), and `iothread` needing the
`-single` controller to do anything.

Disk cache left at the default rather than `writeback`, and the reason is in
#76's runbook: the Smart Array cache is battery-backed again since 2026-09-02,
but `cpqDaAccelWriteCachePercent` still reads 0, unexplained. Leaning on a
cache nobody has confirmed is absorbing writes is not a trade to make silently.

Two traps get their own callouts because both are easy and both are quiet: the
missing-certificate error names `make certs --ca` as its fix, which here would
mint a second CA that this stack's Prometheus cannot verify against; and
`secrets-init` on the wrong host would give one age key both stacks, which
bootstrap.sh now refuses but only helps if the refusal is read.

The verification asks for three Loki jobs and says that two is the failure the
runbook exists to prevent, rather than a quiet host — the whole point being
that a healthy-looking agent is exactly what the wrong distribution produces.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Gerrrt
Gerrrt merged commit 134d2c6 into main Sep 4, 2026
3 checks passed
@Gerrrt
Gerrrt deleted the gerrrt/lab-guest-runbook-262 branch September 4, 2026 19:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant