Commit 65cffcb
fix(backend): chown the firmware blob volume to 65534 before the writers start (A20)
A fresh named `fwblobs` volume is created root-owned (0:0, 0755), but ingest and
admin run as 65534 (nobody) — so the admin firmware register could not write the
blob (CreateTemp -> permission denied -> the crash-safe path left a row pointing at
a missing blob, a 500). The Go e2e gate missed this: RegisterFirmware wrote to a
root-owned t.TempDir(); only the LIVE deploy surfaced it (empirie-vor-behauptung).
Fix: a `fwblobs-init` one-shot (alpine, root) chowns the volume to 65534 before
ingest/admin start (depends_on: service_completed_successfully), mirroring the
`migrate` one-shot pattern. Idempotent + fast on restart; reproducible on any host /
fresh volume (a one-off host chown would silently break on volume recreation).
Verified on the live deploy: admin firmware register -> 200, the content-addressed
blob lands on the volume, duplicate -> 409, sha-mismatch -> 422. Serving stays dark
(OTA_SERVE_ENABLED=false). Follow-up to the A20 merge (5dfa677).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 5dfa677 commit 65cffcb
1 file changed
Lines changed: 15 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
66 | 77 | | |
67 | 78 | | |
68 | 79 | | |
| |||
90 | 101 | | |
91 | 102 | | |
92 | 103 | | |
| 104 | + | |
| 105 | + | |
93 | 106 | | |
94 | 107 | | |
95 | 108 | | |
| |||
128 | 141 | | |
129 | 142 | | |
130 | 143 | | |
| 144 | + | |
| 145 | + | |
131 | 146 | | |
132 | 147 | | |
133 | 148 | | |
| |||
0 commit comments