Record private Yaya music image deployment and signed catalog validation
This commit is contained in:
@@ -1,21 +1,20 @@
|
|||||||
# Intentionally outside apps/: this demo must never enter the public catalog.
|
# Intentionally outside apps/: this demo must never enter the public catalog.
|
||||||
# Publish only inside a release-signed single-node-demo catalog.
|
# Use only a release-signed single-node-demo catalog and privately preloaded image.
|
||||||
|
# Never publish the private application image to a public registry.
|
||||||
app:
|
app:
|
||||||
id: node-demo-v4v
|
id: node-demo-v4v
|
||||||
name: V4V · Sovereign Music
|
name: V4V · Sovereign Music
|
||||||
version: 0.6.7-alpha-archy1
|
version: 0.6.7-alpha-archy2-private
|
||||||
description: Listen to the original V4V demo catalog and explore sovereign music on this node.
|
description: Listen to the original V4V demo catalog and explore sovereign music on this node.
|
||||||
category: media
|
category: media
|
||||||
container:
|
container:
|
||||||
image: source.archipelago-foundation.org/chaum/v4v-demo:0.6.7-alpha-archy1@sha256:13044ecbeae9eb17bc98cc531ca202db9e9a0db8dc2ce01bb9f8cb789248d020
|
image: localhost/v4v-demo:0.6.7-alpha-archy2-private@sha256:4f28702e4f85368e4ad886f06d58b38f869c560c90ca40487bfaebe69090a870
|
||||||
generated_secrets:
|
generated_secrets:
|
||||||
- name: node-demo-v4v-session
|
- name: node-demo-v4v-session
|
||||||
kind: hex32
|
kind: hex32
|
||||||
- name: node-demo-v4v-receipts
|
- name: node-demo-v4v-receipts
|
||||||
kind: hex32
|
kind: hex32
|
||||||
secret_env:
|
secret_env:
|
||||||
- key: ALPHA_PASSWORD_HASH
|
|
||||||
secret_file: node-demo-v4v-password-hash
|
|
||||||
- key: SESSION_SECRET
|
- key: SESSION_SECRET
|
||||||
secret_file: node-demo-v4v-session
|
secret_file: node-demo-v4v-session
|
||||||
- key: RECEIPT_SIGNING_SECRET
|
- key: RECEIPT_SIGNING_SECRET
|
||||||
@@ -35,6 +34,10 @@ app:
|
|||||||
bind: 127.0.0.1
|
bind: 127.0.0.1
|
||||||
auth: gated
|
auth: gated
|
||||||
volumes:
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: /var/lib/archipelago/app-support/node-demo-v4v/nostr-provider.js
|
||||||
|
target: /app/vendor/archipelago-nostr-provider.js
|
||||||
|
options: [ro]
|
||||||
- type: volume
|
- type: volume
|
||||||
source: node-demo-v4v-data
|
source: node-demo-v4v-data
|
||||||
target: /app/data
|
target: /app/data
|
||||||
@@ -48,11 +51,12 @@ app:
|
|||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
- HOST=0.0.0.0
|
- HOST=0.0.0.0
|
||||||
- PORT=5181
|
- PORT=5181
|
||||||
- PULSEWIRE_COMMIT=5bc5f61b
|
- PULSEWIRE_COMMIT=5a86558e
|
||||||
- PULSEWIRE_PASSWORD_LOGIN=on
|
- PULSEWIRE_PASSWORD_LOGIN=off
|
||||||
- PULSEWIRE_PASSWORD_OPERATOR=on
|
- PULSEWIRE_PASSWORD_OPERATOR=off
|
||||||
|
- PULSEWIRE_ARCHIPELAGO_SIGNER=on
|
||||||
- PULSEWIRE_SECURE_COOKIES=off
|
- PULSEWIRE_SECURE_COOKIES=off
|
||||||
- PULSEWIRE_NOSTR_REGISTRATION=closed
|
- PULSEWIRE_NOSTR_REGISTRATION=open
|
||||||
- PULSEWIRE_STORE=json
|
- PULSEWIRE_STORE=json
|
||||||
- PULSEWIRE_STATE_BACKUP_DIR=data/backups
|
- PULSEWIRE_STATE_BACKUP_DIR=data/backups
|
||||||
- PULSEWIRE_RATE_LIMIT_DB_FILE=data/rate-limits.db
|
- PULSEWIRE_RATE_LIMIT_DB_FILE=data/rate-limits.db
|
||||||
@@ -77,7 +81,7 @@ app:
|
|||||||
type: ui
|
type: ui
|
||||||
port: 7475
|
port: 7475
|
||||||
protocol: http
|
protocol: http
|
||||||
path: /
|
path: /browse
|
||||||
metadata:
|
metadata:
|
||||||
icon: /assets/img/app-icons/v4v-demo.svg
|
icon: /assets/img/app-icons/v4v-demo.svg
|
||||||
author: V4V contributors
|
author: V4V contributors
|
||||||
|
|||||||
@@ -201,3 +201,58 @@ The prior temporary SSH control connection no longer authenticates. Operator was
|
|||||||
asked to restore access; dashboard RPC remains available. IndeeHub, V4V and wallet
|
asked to restore access; dashboard RPC remains available. IndeeHub, V4V and wallet
|
||||||
recovery work have been reassigned to three active agents. Incomplete test runs are
|
recovery work have been reassigned to three active agents. Incomplete test runs are
|
||||||
being resumed, with heavy qualification staggered to avoid disk-pressure timeouts.
|
being resumed, with heavy qualification staggered to avoid disk-pressure timeouts.
|
||||||
|
|
||||||
|
## Resumed private native-login deployment
|
||||||
|
|
||||||
|
The private candidate is now running on Yaya with image ID
|
||||||
|
`6ca1fe42d357ffa6a76abbb29db190e27953d647096391783baf57da4ad22366`
|
||||||
|
and pinned manifest digest
|
||||||
|
`sha256:4f28702e4f85368e4ad886f06d58b38f869c560c90ca40487bfaebe69090a870`.
|
||||||
|
The image was copied privately over SSH and loaded locally; it was not published
|
||||||
|
to a registry. The corrected operator-signed catalog canonical payload hash is
|
||||||
|
`9abadc9f535cb36d2d722b731b0b1088bd4dda0d30ced2e7fd0ab0b0a86d43e3`.
|
||||||
|
|
||||||
|
The first prepared catalog had a changelog string where the typed schema requires
|
||||||
|
an array. The live parser rejected it before updating the app. The previous signed
|
||||||
|
catalog/image were restored and the managed app returned to healthy/running.
|
||||||
|
Typed preflight also caught an unsupported provider bind source. Both errors were
|
||||||
|
corrected before requesting a new signature; a standalone validator using the
|
||||||
|
actual Rust catalog types and compiled canonical AppManifest parser now accepts
|
||||||
|
the corrected catalog and rejects the malformed original. Cryptographic signature
|
||||||
|
verification alone was insufficient as a schema preflight.
|
||||||
|
|
||||||
|
The provider is a byte-verified copy of the installed dashboard provider at
|
||||||
|
`/var/lib/archipelago/app-support/node-demo-v4v/nostr-provider.js`, mounted read-only
|
||||||
|
at `/app/vendor/archipelago-nostr-provider.js`. Refresh this copy from the qualified
|
||||||
|
dashboard provider during subsequent demo updates; it is not an automatic OTA hook.
|
||||||
|
The app can read it and its SHA256 matches the dashboard source.
|
||||||
|
|
||||||
|
Fresh consistent CURRENT managed data/media backups, app secrets/configuration,
|
||||||
|
and the old image were preserved at
|
||||||
|
`/home/archipelago/.local/state/archipelago/private-artifacts/v4v-managed-backups/20261006-resumed-private-update-fixed`
|
||||||
|
on Yaya. These are not copies of the original Portainer demo. An image export can
|
||||||
|
preserve the exact config/layers while changing manifest compression/digest: the
|
||||||
|
old signed pin remains cached for immediate rollback, and restoring an exported
|
||||||
|
image with a different manifest digest requires a separately signed private ref.
|
||||||
|
|
||||||
|
The normal update path exposed another lifecycle gap: after normal stop removes a
|
||||||
|
Quadlet container, update fails with "No containers found" during image inspection.
|
||||||
|
After the corrected signed manifest had been loaded, normal package.start created
|
||||||
|
the new managed container from that manifest and cleared the stopped marker. This
|
||||||
|
stopped-app update error remains a source regression to fix; successful start is
|
||||||
|
not evidence that the update RPC itself passed.
|
||||||
|
|
||||||
|
Final runtime checks verify exact candidate image ID, original named managed
|
||||||
|
volumes, unchanged session/receipt secrets, node session key/backend binary and
|
||||||
|
all unrelated app container identities/start times. Password/operator login is
|
||||||
|
off, native signer and Nostr registration are on, payments remain mock. Health
|
||||||
|
returns 200. Evidence: `/tmp/archy-v4v-private-running-verified.log`. Real native
|
||||||
|
login/playback/Companion acceptance remains open until browser/device results are
|
||||||
|
recorded. The original demo remains running unchanged.
|
||||||
|
|
||||||
|
The SSH access interruption described above is superseded: authenticated access
|
||||||
|
to Yaya and the actual Framework is restored. The latest dev/Yaya dashboard UI
|
||||||
|
also includes the deployed Lightning retry compatibility fix; native player and
|
||||||
|
banner changes remain present. The current live V4V browser qualification follows
|
||||||
|
the first-visit intro and explicit native identity/event consent before checking
|
||||||
|
actual login success; earlier click timeouts are retained as failed test evidence.
|
||||||
|
|||||||
Reference in New Issue
Block a user