Files
felhom.eu/REPORT.md
T
admin 0fa79cd90d Go-live package: Day-0 install runbook + clean-room drill + host-install v1.9.1
- documentation/runbooks/day0-install.md (NEW): operator Day-0 guide, every
  command drill-executed verbatim (Parts A-F incl. the mandatory one-time
  controller update D.1b and the OQ-3 prereq checklist).
- documentation/audits/DRILL-day0-cleanroom-2026-07-03.md (NEW): nested-PVE
  clean-room drill evidence D0-D6, residue tables, OQ-1/2/3 answers, findings
  ledger (B1-B5), go/no-go for Peti (GO).
- scripts/felhom-host-install.sh v1.9.1: residue-free uninstall (agent config,
  shared-parent unit/script/mount, mkfs wrapper, hook snippet, dnsmasq
  snippets; zero-residue diff proven) + post-provision guest reboot (R6) +
  header/version sync.
- CONTEXT.md, REPORT.md, scripts/CHANGELOG.md updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
2026-07-03 15:14:47 +02:00

79 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# felhom.eu — task reports
> **Overwrite** this file with a summary of the most recent task only (uniform with the other repos; not cumulative). The cumulative hub history lives in [hub/CHANGELOG.md](hub/CHANGELOG.md); the scripts history lives in [scripts/CHANGELOG.md](scripts/CHANGELOG.md).
---
# Go-live package — Day-0 install guide, clean-room drill, uninstall proof (2026-07-03)
## Baselines
| Repo | `main` before | After |
|---|---|---|
| felhom.eu | `996526273a` (script v1.9.0) | this commit — script **v1.9.1** + `documentation/runbooks/day0-install.md` (NEW) + `documentation/audits/DRILL-day0-cleanroom-2026-07-03.md` (NEW) |
| felhom-agent | `84f3f7ddb1` v0.62.0 | untouched (read-only; 3 findings recorded, not patched) |
## What shipped
1. **`documentation/runbooks/day0-install.md`** — the complete first-time deployment guide
(Parts AF: hub onboarding / box-prereq checklist (OQ-3) / the canonical shared-box install
command / post-install verification incl. the mandatory one-time controller update D.1b /
uninstall + expected-remnants / troubleshooting from real drill hiccups). Header states the
drill date/environment/versions. Every command was executed verbatim during the drill.
2. **Clean-room drill (Phase 0 + D0D6)** — throwaway nested PVE 9.2.2 under QEMU/KVM on the build
server (unattended install via `proxmox-auto-install-assistant`, virgin qcow2 snapshot, slirp
NAT; the primary Phase-0 mechanism worked — no fallback needed). Full cycle proven: baseline
manifest → hub onboarding of throwaway customer `drill-1` → install (real
`--force-gitea-golden` + `--cores 2 --memory 4096` + `--acl-storages "local local-lvm"`,
sha256-verified agent v0.62.0 + golden v0.85.1) → verify (selftest incl. `pve:pool-read`,
hub reporting, dashboard 200 behind traefik) → app deploy via the exact UI endpoint
(`bentopdf`, 200 at its own hostname) → uninstall → **residue diff** → reinstall
(host-enroll REUSED; fresh leaf on an empty box). Evidence doc:
`documentation/audits/DRILL-day0-cleanroom-2026-07-03.md`.
3. **`scripts/felhom-host-install.sh` v1.9.1** — drill-justified fixes, each re-verified live:
- header/version sync (v1.8.0 header vs 1.9.0 var) + keep-in-sync note;
- uninstall removes the five drill-found residue items (agent **config with the live hub
api_key**, shared-parent unit+script+`/mnt/felhom-drives`, guarded-mkfs wrapper, guest-hook
snippet, dnsmasq snippets) — v1.9.1 re-drill diff vs the virgin baseline shows **zero
Felhom-named leftovers**;
- **post-provision guest reboot + bounded verify wait (R6)** — without it the golden's
controller-bootstrap unit (boot-time `ConditionPathExists`) loses the race with the agent's
hot-plugged bootstrap mount on slower hardware and the controller never deploys; v1.9.1
reinstall brought the controller up with no manual intervention.
Gates: `bash -n`, `--dry-run` previews, live re-drill of both paths.
## OQ answers (detail in the drill doc §8)
- **OQ-1:** go live **local-backups-only** (`--acl-storages "local local-lvm"`) — PBS is LAN-only
until Headscale; retrofit later via `--rescope-acl`. Documented as the guide's standard.
- **OQ-2 (evidence-based):** a fresh install lands controller **0.85.1** (golden-baked, pre-floor)
and **never self-updates** — raising the floor does not help a fresh box. The guide's D.1b
(restart `felhom-agent` → trigger the settings-page update → verify) is the mandatory
install-day step; drill-proven 0.85.1 → 0.98.3. Structural fix = rebuild+re-vouch the golden
(operator follow-up).
- **OQ-3:** Part B of the guide is the customer-confirmed pre-install checklist.
## Go/no-go for Peti: **GO**
With three install-day items: serve v1.9.1 (this push), execute D.1b, create the real CF tunnel +
git credentials in Part A. Full list + blockers ledger: drill doc §8–§9.
## Recorded findings NOT fixed here (per the gap policy)
- **B1** (agent/golden, LOW): product-side fix for the bootstrap-race (golden path unit or
agent-side restart) — the installer reboot is a correct external fix.
- **B2** (agent, LOW): `guesthook.InstallSnippet` fails on fresh boxes (`/var/lib/vz/snippets`
missing; `install` can't create parents) → no pre-start self-heal hook, warn-only.
- **B3** (agent, MED, pre-existing): fresh-install local-API 401 until agent restart — new
consequence found: blocks the controller self-update swap.
- **B4** (hub, LOW): no host-delete path (UI or API); drill rows cleaned via direct SQL.
- **B5** (fleet, MED): golden bakes a pre-floor controller → D.1b needed on every fresh install
until the golden is rebuilt ≥ 0.86.0 and re-vouched.
## Cleanup
Hub `drill-1` rows fully deleted (all tables → 0; `demo-felhom` intact). Drill VM
**virgin-snapshotted and stopped** (kept at `~/drill/` on 192.168.0.180, ~6.7 GiB, for future
drills); evidence logs archived there. Nothing touched felhom-pve, guest 9201, or any real
customer/host record. No secrets in any committed file.