docs: record quadlet standardization of dankserver media + dankclaw data roots

Phase 1/2 of the podman standardization plan: service pages updated to the
quadlet reality (units, Containers data roots, env-file secret convention,
the v1-generator findings each caught live), Storage Policy documents the
two rootless ownership regimes and the merge-move migration, Deployment
Flow's service-manager table no longer claims dankserver media is bare
inventory-only. Bundle change log entry added.
This commit is contained in:
Frank
2026-09-01 13:57:33 -07:00
parent 34ab6b4d0c
commit 272ef6f0b0
7 changed files with 150 additions and 40 deletions
+39
View File
@@ -11,6 +11,45 @@ timestamp: 2026-09-14
# Bundle Change Log
## 2026-09-01 — dankserver media stack standardized to quadlet; dankclaw data roots migrated
- **Incident context**: Dankserver hard-crashed and rebooted 2026-09-01; every
bare compose-era media container (RomM trio, Jellyfin, Calibre-Web,
Copyparty) stayed dead at boot — the failure mode the Boot Persistence rule
exists for. Recovery doubled as the Phase 1 cutover.
- **Phase 1 (dankserver)**: six quadlet units shipped
(`dankserver/{romm,jellyfin,calibre-web,copyparty}/quadlet/`) + first-cutover
deploy handlers (retire bare containers → rescue RomM's anonymous `/romm`
volume → merge-move `/opt/<svc>` into `/home/dank/Containers/<svc>` →
ordered start with health gates). All six verified: units `active`,
`is-enabled=generated` (wants in the generator dir), ports 8085→8080,
8096, 8083, 3923 answering, jellyfin holds `/dev/dri` render nodes,
entropy binds provably ro except copyparty's `/w`. MariaDB continuity
proven via the real `dank` admin row (created 2026-08-31), not a fresh
bootstrap. Stale compose-era `container-*.service` generate-systemd units
retired to `~/.AGENTTRASH/20260901-stale-generate-systemd`.
- **Deployer findings fixed** (each caught live, each with a new seam):
v1 generator rejects `Command=` (→ `Exec=`), `Device=` (→ `AddDevice=`,
whole-unit rejection is silent), and splits spaces in `HealthCmd=`
(→ omitted for copyparty); `migrate_data_root` must merge into pre-seeded
destinations and rename mapped-subuid roots (100998) with `sudo mv`
(numeric-preserving, `keep` mode skips the chown — chowning mapped data
breaks the in-container users); quadlet unit dir must be created on a host
that never had quadlet; missing `PublishPort` = app answers inside the
netns only (copyparty 3923); seeded env files must carry **compose-provided
vars only** — the image-baked `HOME=/root` in a `[Service]
EnvironmentFile=` kills the podman client itself.
- **Phase 2 (dankclaw)**: data roots of gitea, authentik, hermes trios moved
to `/home/dank/Containers/<svc>/` while running (rename is inode-bound —
zero downtime), units repointed, redeployed through `deploy.sh --service`;
auth chain verified end-to-end (outpost ping → 302 to flow).
`deploy_hermes` ordering bug fixed: generated units must be reloaded
**after** unit files are copied, not before (stale ExecStart crash-looped
the trio on the old path).
- **Docs**: [[RomM]], [[Jellyfin]], [[Calibre-Web]], [[Copyparty]] updated to
the quadlet reality; [[Storage Policy]] now documents the Containers layout
+ the two ownership regimes; [[Deployment Flow]] service-manager table
corrected (dankserver media is no longer "bare containers, inventory only").
## 2026-08-30 (night II) — frank-default-sightsound deployed; NPU SVA/IOMMU root cause
- **Deployed** `frank-default-sightsound` on Dankclaw: FLM v1.0.1 (`/usr/bin/flm`,
dpkg `fastflowlm`) serving the whole local registry (36 tags) on port 52626;