Skip to content

docs(runbook): build golem, the PBS guest ADR-0053 decided (#485) - #662

Merged
Gerrrt merged 2 commits into
mainfrom
gerrrt/pbs-runbook-485
Sep 24, 2026
Merged

Gerrrt merged 2 commits into
mainfrom
gerrrt/pbs-runbook-485

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 24, 2026

Copy link
Copy Markdown
Owner

What changed

Docs only; nothing is built. New runbook docs/runbooks/build-the-backup-guest.md turns ADR-0053 into an evening's steps for golem, the Proxmox Backup Server guest on Saruman, with its datastore on erebor over NFSv4. The roadmap's #485 entry links it; README counts 35 runbooks.

Why

Refs #485. ADR-0053 (merged in #659) decided the shape. This is how to build it:

  • §1–2: the VM from the PBS ISO (VMID 180, 10.0.30.80, 2 vCPU, 4 GiB, 32 GB on large_data), the no-subscription repo, the guest agent.
  • §3: erebor/pbs with atime on (PBS garbage collection depends on it; checked with zfs get), owned by uid 34, an NFSv4 share to .80 alone with root mapped to backup (not squashed, not root), and a daily snapshot task kept 14 days.
  • §4: the 2049 pass on igc0.30. The VLAN 30 block it must sit above isn't named anywhere in this repo, so §4 reads it off morpheus first and §12 records it.
  • §5: the NFS mount, guarded by chattr +i on the empty mountpoint (as odin's data disk is), and datastore create.
  • §6: prune (7/4/3), weekly garbage collection and verify, and a token-only pve@pbs user with DatastoreBackup on the one datastore.
  • §7: pvesm add pbs … --encryption-key autogen, with the key copied into secrets/lab.sops.yaml and onto paper.
  • §8–9: the PVE backup job, and the first proof: a one-off backup, verify and restore of phoenix. Neither guest ADR-0053 protects exists yet.
  • §10: Alloy via deploy-agent.sh --runtime native. The verify-outcome collector is named as the one missing piece; ADR-0027's PBS trigger has fired, and its sync job was designed for a host smaug is not #485 stays open until it exists.

Blast radius

None until someone runs it. When run, it touches Saruman (a new guest and a storage entry), smaug (a dataset, an NFS share, a snapshot task) and morpheus (one pass, 10.0.30.80 → 10.0.40.30:2049). §4 proves the pass is scoped to .80 from both sides.

  • No change to network segmentation or firewall rules. §4 adds one pass when run; nothing changes on merge
  • No new port published to a VLAN that could not already reach the service
  • No credential added outside secrets/*.sops.yaml. The encryption key goes into secrets/lab.sops.yaml

Verification

  • scripts/lint.sh and scripts/check_docs.py pass
  • Checked against the repo: phoenix is VMID 170, make secrets-edit STACK=lab exists, the lab suffix is matrix.elysium, ADR links resolve, and igc0.30 is VLAN 30's interface
  • Deployed to the lab and confirmed working (not built; PBS CLI option names are noted to be checked against --help on the installed release)
  • Docs updated: the new runbook, roadmap.md, README.md, changelog.md

🤖 Generated with Claude Code

Gerrrt and others added 2 commits September 23, 2026 22:53
build-the-backup-guest.md turns ADR-0053 into steps:
- the VM, from the PBS ISO (VMID 180, 10.0.30.80, 2 vCPU, 4 GiB, 32 GB on
  large_data)
- erebor/pbs, with atime on for garbage collection, owned by uid 34, and an
  NFSv4 share to .80 alone mapping root to backup; the daily snapshot task,
  kept 14 days
- the 2049 pass on igc0.30. The VLAN 30 block it must sit above is not named
  anywhere in this repository, so §4 reads it from morpheus first and §12
  records it
- the mount, guarded by chattr +i like odin's data disk
- prune, garbage-collection and verify schedules; a token-only pve@pbs user
  with DatastoreBackup on the one datastore
- encrypted storage on Saruman, with the key copied into
  secrets/lab.sops.yaml and onto paper
- the PVE backup job
- the first proof, a one-off backup, verify and restore of phoenix, because
  neither guest ADR-0053 protects exists yet
- Alloy via deploy-agent.sh

The verify-outcome collector is named as the one missing piece; #485 stays
open until it exists. Roadmap links the runbook; README counts 35 runbooks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The count wraps across two lines, so the previous commit's edit missed it and
check_docs.py still disagreed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Gerrrt
Gerrrt merged commit ab96b6c into main Sep 24, 2026
4 checks passed
@Gerrrt
Gerrrt deleted the gerrrt/pbs-runbook-485 branch September 24, 2026 01:02
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