Validate Attic push path after PostgreSQL and lyra rollout #9
Labels
No labels
host:electra
host:fleet
host:lyra
host:vega
host:vega
phase:cutover
phase:deploy
phase:mcp
phase:module
phase:packaging
phase:prep
phase:validation
project:attic-postgres-lyra-rollout
project:auto-update-reliability
project:declarative-purity-cleanup
project:external-review
project:host-facts-refactor
project:lyra-nixos-deploy
project:lyra-service-stack-migration
project:nebula-mesh-network
project:security-hardening
project:service-stack-migration
project:vega-sillytavern-cutover
service:auto-update
service:mem0
service:sillytavern
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nimmo/nixos-config#9
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Goal
Validate that the Attic write path still works after the metadata migration and dual-node rollout.
Scope
This issue covers the work from
projects/attic-postgres-lyra-rollout.mdPhase 5.Acceptance Checklist
attic-cache.ymlworkflow still succeeds.attic pushstill succeeds fromnova.Validation Targets
attic-cache.ymlrun succeeds.attic pushsucceeds fromnova.Verification
Definition of Done
vegaandlyraboth serve Attic successfully.Starting issue #9.
Current write-path status before changes:
vegaandlyra, and the public endpoint is dual-backed and stable,attic-cache.ymlworkflow still points directly athttp://192.168.8.108:8081/andhttp://192.168.8.108:8081/nixos, which bypasses the new public dual-backend route entirely.That means the next step is to decide whether to:
attic.nimmog.ukso issue #9 validates the real public publish path as well.I'm checking the existing repo wiring now so we can make that choice deliberately rather than inherit stale pre-rollout settings.
Repo changes in progress for the write-path validation phase.
Implemented locally:
modules/common/nix-settings.nixnow trusts the Attic public signing key returned by the live public cache-config (nixos:tNn8ouVBQkqLS2qTq86V50TCL1AGn2NgwEhpxReo6jU=), closing the gap where the shared substituter was configured but its signing key was not trusted..forgejo/workflows/attic-cache.ymlnow pointsATTIC_SERVER_URL,ATTIC_CACHE_URL, and the workflowsubstitutersentry athttps://attic.nimmog.uk/...instead of the old directvegabackend IP.trusted-public-keysentry is updated to trust the Attic public key as well.Why this matters for #9:
With this change, issue #9 validates the real public publish/read path rather than an obsolete single-backend internal shortcut.
The first real end-to-end validation of the updated write path appears to have succeeded.
Observed outcome:
269completed successfully after the workflow was switched from the old directvegabackend URL to the publichttps://attic.nimmog.uk/endpoint and matching cache URL.Remaining explicit validation from the issue body is now narrow:
If that fetch check passes, issue #9 can be closed.
Cross-host fetch validation found one remaining deployment-dependent gap.
Observed:
/nix/store/pvv82rdgp6iikgrzsms2ak0763mibh5r-paseo-0.1.104-beta.4) is present in the public Attic cache and serves a valid.narinfofromhttps://attic.nimmog.uk/nixos.nix copy --from https://attic.nimmog.uk/nixos ...fromlyrainitially failed withlacks a signature by a trusted key.Interpretation:
lyrahas not yet picked up the newly committed Attic public signing key.modules/common/nix-settings.nix), but successful end-to-end host fetch validation depends on deploying that config to the consuming host(s).Next step:
Cross-host Attic read validation is narrower now but still not complete.
Latest test used an Electra-only package (
kcalc,/nix/store/9p212z0yhvjizyz2h93bimkj6pb7hmsj-kcalc-26.04.3) and attempted to fetch it from vega via the public Attic endpoint.What now works:
kcalc; Vega did not.https://attic.nimmog.uk/nixos/9p212z0yhvjizyz2h93bimkj6pb7hmsj.narinforeturns valid metadata with aSig:line.mtdev,/nix/store/0jbb8w6zkibl8c4qjybn0ajm9668ginz-mtdev-1.1.7) also returns valid.narinfowith aSig:line.nix path-info --store https://attic.nimmog.uk/nixos /nix/store/0jbb8w6zkibl8c4qjybn0ajm9668ginz-mtdev-1.1.7succeeds./etc/nix/nix.confincludes the public Attic substituter and the Attic public keynixos:tNn8ouVBQkqLS2qTq86V50TCL1AGn2NgwEhpxReo6jU=.What still fails:
nix copy --from https://attic.nimmog.uk/nixos /nix/store/0jbb8w6zkibl8c4qjybn0ajm9668ginz-mtdev-1.1.7fails deterministically with:error: cannot add path ... because it lacks a signature by a trusted keykcalcclosure; the first failing dependency ismtdev.Important constraint discovered:
nimmoon Vega is not a trusted Nix user, so client-side--option trusted-public-keys=...overrides are ignored. That means this remaining failure is at the running Nix daemon / signature-verification boundary, not just in user-shell config.So issue #9 is now reduced to: Attic publish and metadata lookup through the public route work, but actual Nix import on Vega still rejects at least some Attic-served paths as untrusted despite the expected key being present in
/etc/nix/nix.conf. Further debugging needs either trusted-user/root access on Vega or a fresh consumer host where the daemon can be verified end-to-end.Resolved.
Final validation after deploying commit
ece1674(which removed the stalenixos:xvnY...Attic trust key and kept only the live advertisednixos:tNn8...key):nix copy --from https://attic.nimmog.uk/nixos /nix/store/4da5p6rwzj366cfsq0xslgqi1q7j5nbr-cuda12.9-libcublas-12.9.1.4-libcompleted without error and the path is now present locally./nix/store/5sr8wrylkxi6rkprlhib6yvfgxldl1pv-atticd-atticadm/nix/store/pvv82rdgp6iikgrzsms2ak0763mibh5r-paseo-0.1.104-beta.4/nix/store/lf6h8d6jy5hck6f7dpmilny48158v1x5-unit-paseo.serviceThat confirms the remaining Attic read failure was caused by clients trusting two different public keys under the same
nixos:key name. Public Attic reads work again after removing the stale trust entry and redeploying consumer config.Any older cache entries that still prove problematic can be repopulated under the surviving key during normal rebuild/push flow, but the issue-level acceptance criteria for validating the public read path are now satisfied.