Skip to content

docs(runbook): say where the lab's certificates are and how to move them (#262) - #322

Merged
Gerrrt merged 1 commit into
mainfrom
gerrrt/runbook-cert-copy-262
Sep 5, 2026
Merged

docs(runbook): say where the lab's certificates are and how to move them (#262)#322
Gerrrt merged 1 commit into
mainfrom
gerrrt/runbook-cert-copy-262

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Found by following §5 on a real build. It said "copy three files into ~/HomeLab/certificates/ on alexander" and left every part of that unanswered.

The one that actually blocks you

99 → 30 is closed. An scp from prometheus to alexander has no rule to carry it — the only exception on that interface is the iLO's SNMP return path. Hicks reaches both segments, so the Mac is the only machine that can see both ends, and the copy has to be driven from there.

Nothing said so, and the failure mode is a hang rather than a refusal, which is the worst way to learn it.

The rest of what was missing

  • Where they come from. certificates/ at the root of the deploy checkout — /home/robo/code/Gerrrt/HomeLab/certificates/ on prometheus. §5 never named a source directory.
  • The destination does not exist. certificates/ is gitignored, so a fresh clone on the guest has no such directory and scp fails into a path that is not there. The mkdir is now the first command instead of something to reverse-engineer from an error.
  • scp -3 -p, so the private key routes through the Mac without touching its disk, and so the mode survives. A default umask would leave a TLS private key world-readable; the runbook now says to check rather than assume. 0640 owned by the deploying user is what compose.yaml's group_add: ${RENDER_GID} on grafana is built around, so the reason the mode matters is stated where the mode is set.

And one that could have been expensive

A CAUTION on ca-key.pem. It is deliberately absent from the list, and a reflexive scp certificates/* would put the key that signs every certificate in the estate onto the segment built to hold attackers. Naming the three files individually is the control, so the reason for naming them is now written down next to them.

The three are listed in a table with what each is for, because "copy three files" reads as three interchangeable blobs and one of them is a private key.

Verification

make check-docs and make lint pass. Documentation only — no configs touched, nothing deployed.

🤖 Generated with Claude Code

…hem (#262)

§5 said "copy three files into ~/HomeLab/certificates/ on alexander" and left
every part of that unanswered: which directory they come from, that the
destination does not exist, and that the obvious way to move them cannot work.

**99 → 30 is closed.** An scp from `prometheus` to `alexander` has no rule to
carry it — the one exception on that interface is the iLO's SNMP return path.
Hicks reaches both segments, so the Mac is the only machine that can see both
ends, and the copy has to be driven from there. Nothing said so, and the
failure is a hang rather than a refusal.

`certificates/` is gitignored, so a fresh clone on the guest does not have the
directory at all and scp fails into a path that is not there. The mkdir is now
the first command rather than something to work out from an error.

`scp -3 -p`, so the private key is routed through the Mac without being written
to its disk, and so the mode survives the trip — a default umask would leave a
TLS private key world-readable, and the runbook now says to check rather than
assume. 0640 owned by the deploying user is what compose.yaml's
`group_add: ${RENDER_GID}` on grafana is built around, so the reason the mode
matters is stated where the mode is set.

A CAUTION on `ca-key.pem`: it is deliberately absent from the list, and
`scp certificates/*` would put the key that signs every certificate in the
estate onto the segment built to hold attackers. Naming the three files is the
control, so the reason for naming them is written down.

The files are listed in a table with what each one is for, because "copy three
files" reads as three interchangeable blobs and one of them is a private key.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Gerrrt
Gerrrt merged commit 62101ce into main Sep 5, 2026
3 checks passed
@Gerrrt
Gerrrt deleted the gerrrt/runbook-cert-copy-262 branch September 5, 2026 04:41
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