Evolu Relay draait op de Umbrel

Drie containers omhoog, db gezond, de app-proxy op 3851. De lokale images waren
vooraf weggehaald, dus de pull uit het eigen register is echt gedaan en het hele
pad is bewezen: broncode van Trezor, bouwrecept, eigen register, gepinde digest,
installatie.

Open punt 1 is beslist en niet zoals het geformuleerd stond. Daar stond dat lokaal
bouwen de eerste stap was en dat een register beslist zou worden "zodra lokaal niet
meer volstaat". Lokaal volstaat nooit: umbreld haalt elke image via de Docker
Engine API op. Dus geen keuze maar een voorwaarde, en de uitkomst is het
Gitea-register op dezelfde server als de store.

Nieuw open punt 5, als keerzijde daarvan: de store is publiek en de image staat op
een privéserver. Voegt een vreemde deze store toe, dan haalt zijn Umbrel images van
de server van de gebruiker, en diens uptime bepaalt of die installatie slaagt.
Electrum Gate heeft dat niet, want die draait op images uit Docker Hub. Drie
richtingen genoteerd, waaronder disabled: true in het manifest.

In PROGRESS staat de fout die twee rondes kostte, met de reden dat hij overtuigend
was: app-script noemt een compose pull bij install, en dat leest als het antwoord.
Het is de legacy-compat-laag en niet het pad dat umbrelOS 1.x loopt. De les is
breder dan deze app en daarom staat hij er.

Ook opgeschreven omdat het bij elke herbouw terugkomt: de gebruiker umbrel zit hier
niet in de groep docker, dus bouwen vraagt sudo.

De kopstructuur van OPEN.md stond na het bijwerken door de war (een tweede kop
"Nog te beslissen"); die is weer conform het sjabloon.

Tests: niet gedraaid, dit raakt alleen documentatie.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Harmen
2026-08-25 18:37:18 +02:00
co-authored by Claude Opus 5
parent 730621d850
commit c1ed04db84
4 changed files with 88 additions and 25 deletions
+1 -1
View File
@@ -24,7 +24,7 @@
| Plan | App | Volgende stap | Status |
|-|-|-|-|
| [Webinterface](Plannen/Actief/005-Webinterface/TAKEN.md) | Gate | 0.0.10 op een telefoon nakijken, en het uploaden op het niet-gelukkige pad proberen met een sleutel die niet bij het certificaat hoort. Daarna open punt 5: laten controleren of de TLS-poort zélf antwoordt | 🔶 |
| [Umbrelapp](Plannen/Actief/008-Umbrelapp/TAKEN.md) | Relay | De image bouwen op de Umbrel met `tools/evolu-relay/build.sh`. Dat is de enige stap tussen wat er in de repo staat en een installatie die kan slagen; daarna installeren en kijken of de drie containers blijven draaien | 🔶 |
| [Umbrelapp](Plannen/Actief/008-Umbrelapp/TAKEN.md) | Relay | **Hij draait sinds 25-08-2026**: gebouwd, in het eigen Gitea-register gezet, gepind en geïnstalleerd, drie containers omhoog. Nu in de logs van de relay kijken of het databaseschema zichzelf aanmaakt; daarna Trezor Suite naar `<umbrel>:3851` laten wijzen. "Draait" is hier nog geen "synchroniseert" | 🔶 |
| [Proefopstelling](Plannen/Actief/007-Proefopstelling/TAKEN.md) | Relay | Controleren of Trezor Suite een eigen sync-server accepteert, en op welk platform. Dat is de goedkoopste weerlegging van het hele project en het kost een minuut in de interface. Daarna: hoe registreer je een eigenaar bij de quota-manager, want zonder dat weigert de relay iedereen | 🔶 |
## B - Los oppakbaar (geen blokkade, geen vaste volgorde)
+30 -15
View File
@@ -9,22 +9,18 @@
## Nog te beslissen
1. **Waar komt de image te staan zodra lokaal niet meer volstaat?**
Op 25-08-2026 is gekozen voor lokaal bouwen als eerste stap, en dat is een bewust tijdelijke keuze: de
app werkt dan alleen op die ene machine en herbouwen is handwerk. Drie richtingen, en ze zijn allemaal
verdedigbaar:
5. **Is de app bruikbaar voor iemand anders die deze store toevoegt?**
Nieuw op 25-08-2026, en het is de keerzijde van punt 1. De store is publiek, dus een vreemde kan hem
toevoegen en Evolu Relay installeren. Zijn Umbrel haalt de image dan uit
`sc.kamenier-hamer.nl` van de gebruiker. Dat gaat vandaag waarschijnlijk gewoon werken, en dat is
precies wat het een keuze maakt in plaats van een detail: je serveert dan images van je eigen server aan
onbekenden, en jouw uptime bepaalt of hun app installeert. Electrum Gate heeft dit niet, want die draait
op images uit Docker Hub.
- **het ingebouwde containerregister van de eigen Gitea.** Zelfde host als de store, geldig
TLS-certificaat, geen nieuw account. Nog na te kijken: staat het pakketregister aan, en mag er anoniem
uit gehaald worden. Zo ja, dan is dit de netste plek;
- **Docker Hub onder een eigen account.** De standaardweg, en verplicht als het ooit de officiële store
in gaat. Zet wel je naam op een publieke image van software van Trezor; lees dan eerst `LICENSE.md`,
dat door GitHub als "other" geclassificeerd staat;
- **lokaal laten.** Verdedigbaar zolang er één Umbrel is. De prijs is dat een herinstallatie ook een
herbouw is, en dat je dat over een half jaar niet meer weet.
**Moment:** zodra de installatie uit fase 4 geslaagd is, en niet eerder: pas dan weet je of het pakket
iets waard is · **Eigenaar:** gebruiker
Drie richtingen: laten zoals het is; `disabled: true` in het manifest zolang de image niet op een neutrale
plek staat (dat veld bestaat in het schema); of de image naar Docker Hub duwen en het probleem weghalen.
**Moment:** als fase 4 helemaal af is, dus als bewezen is dat er iets te delen valt · **Eigenaar:**
gebruiker
2. **Komt er een statuspagina?**
Electrum Gate heeft er een en die bleek in de praktijk het nuttigste deel van die app. Hier zou dat
@@ -46,6 +42,25 @@
weg uit [PLAN.md](PLAN.md) §4b weer actueel: de rij met de hand in de database zetten.
**Moment:** zodra **Proefopstelling** de registratievraag beantwoordt · **Eigenaar:** volgt uit dat plan
## Beslist
1. **Waar komt de image te staan?** - **het ingebouwde containerregister van de eigen Gitea**
(25-08-2026), als `sc.kamenier-hamer.nl/sysop/evolu-relay`.
Hier stond dat lokaal bouwen de eerste stap was en dat dit beslist zou worden "zodra lokaal niet meer
volstaat". Dat moment kwam dezelfde dag, en niet uit vrije keuze: **lokaal volstaat nooit.** umbreld haalt
élke image via de Docker Engine API op en niet via compose, dus een lokaal gebouwde tag is onbereikbaar en
de installatie faalt met `pull access denied` voordat er iets start. Met bron in
[Umbrel-appstore-spec.md](../../../Referenties/Umbrel-appstore-spec.md).
Waarom Gitea en niet Docker Hub: zelfde host als de store, geldig certificaat, geen nieuw account, en de
eigenaar `sysop` staat publiek zodat anoniem halen werkt. Dat laatste is gecontroleerd met een uitgelogde
pull, en daarna bewezen door de installatie zelf met de lokale images vooraf weggehaald.
Wat hiermee **niet** beslist is: Docker Hub blijft nodig zodra het de officiële store in gaat, en dan moet
er ook arm64 bij. Zie **Publicatie-Relay**. En lees dan eerst `LICENSE.md` van Trezor, dat door GitHub als
"other" geclassificeerd staat.
## Bewust uitgesteld
4. **`SERVER_ENV` op `prod` of `dev`?** - `prod`, tot het tegendeel gemeten is (25-08-2026).
@@ -3,6 +3,39 @@
> Chronologisch sessielog, nieuwste bovenaan. Kort: 3 tot 6 regels per entry. Wat er is gebeurd en waarom,
> niet wat er nog moet: dat staat in [TAKEN.md](TAKEN.md).
## 25-08-2026 - hij draait, en de weg erheen liep via een verkeerde aanname
Gebouwd op de Umbrel in 50 seconden, en toen twee keer misgegaan op dezelfde muur voordat die muur
begrepen was.
**De installatie faalde met `pull access denied` op een image die lokaal gebouwd was.** Mijn eerste
verklaring kwam uit `app-script` van umbreld, waar `install` een `compose "${app}" pull` doet, en de
reparatie was `pull_policy: never`. Dat faalde identiek. De oorzaak stond in de stacktrace en niet in de
foutmelding: `at /opt/umbreld/node_modules/docker-modem/lib/modem.js:382`. **umbreld haalt élke image via
de Docker Engine API op en niet via compose**, dus `pull_policy` wordt nooit gelezen. `app-script` is de
legacy-compat-laag en niet het pad dat umbrelOS 1.x loopt. Les die breder is dan deze app: een bron die
overtuigend leest, is nog geen bron die het draaiende pad beschrijft.
**Daarmee was "lokaal bouwen als eerste stap" geen keuze meer.** Elke image moet anoniem uit een register
komen. Dat werd het Gitea-register op dezelfde server als de store: `sc.kamenier-hamer.nl/sysop/evolu-relay`,
gepind op tag plus digest. Anoniem halen is eerst met een uitgelogde pull gecontroleerd, met dezelfde
valkuil als bij het klonen van de store (uitloggen in de context waarin je inlogde, anders meet je je eigen
sessie).
**Daarna draaide hij in één keer.** Drie containers omhoog, `db` gezond, de app-proxy op 3851. De lokale
images waren vooraf weggehaald, dus de pull is echt gedaan en het hele pad is bewezen: broncode van Trezor →
bouwrecept → eigen register → gepinde digest → installatie.
Kleinigheid met een staart: de gebruiker `umbrel` zit hier niet in de groep `docker`, dus bouwen vraagt
`sudo`. Dat komt bij elke herbouw terug en staat daarom in het plan.
**Geraakt:** `whatsnext-evolu-relay/docker-compose.yml` en `umbrel-app.yml` (0.0.2),
`tools/evolu-relay/build.sh`, `Docs/Referenties/Umbrel-appstore-spec.md`, dit plan.
**Tests:** 32 goed 0 fout, 54 goed 0 fout en 39 goed 0 fout, niets overgeslagen.
**Wat nog steeds niet bewezen is:** of het databaseschema zichzelf aanmaakt, of Trezor Suite dit adres
accepteert, en of een eigenaar te registreren is. "Draait" is hier nog geen "synchroniseert".
## 25-08-2026 - plan werd actief, en het pakket staat er
De gebruiker besloot het pakket meteen te maken in plaats van te wachten op de proefopstelling. Dat kon,
+24 -9
View File
@@ -9,10 +9,10 @@
## Volgende stap
- [ ] **De image bouwen op de Umbrel met `tools/evolu-relay/build.sh`.** Dat is de enige stap tussen wat er
nu in de repo staat en een installatie die kan slagen. Het script haalt de broncode op commit
`c03a204` en bouwt de Dockerfile van Trezor; verwacht minuten, want er zit een `yarn install` en een
`yarn build` in. **Eigenaar: gebruiker**
- [ ] **In de logs van de relay kijken of het databaseschema zichzelf aanmaakt.** De drie containers staan
omhoog, maar "Up" is nog geen "werkt": de relay kan draaien en toch klagen over ontbrekende tabellen.
`sudo docker logs whatsnext-evolu-relay_relay_1`. Dit is nu het eerste punt waar het misgaat als het
misgaat. **Eigenaar: gebruiker**
## Fase 1 - De app-map
@@ -38,9 +38,13 @@
submap, en `postgres:17-alpine` in plaats van `postgres` kaal
- [x] **Healthcheck op de eigen database en gebruiker**, niet op `-d postgres` zoals bovenstrooms: die
database bestaat hier niet, en dan is de controle groen op het verkeerde antwoord
- [ ] **De images pinnen op een digest.** `postgres:17-alpine` kan meteen, met
`docker buildx imagetools inspect`. De eigen image kan pas als hij in een register staat; zie
[OPEN.md](OPEN.md) punt 1. Beide staan als TODO in de compose
- [x] **De eigen image gepind op tag plus digest (25-08-2026).**
`sc.kamenier-hamer.nl/sysop/evolu-relay:c03a204@sha256:2fe1e9e9…`, op beide services. Dat moest wel:
zie fase 4. **Let op dat dit één architectuur is** (amd64), want er is alleen amd64 geduwd. Voor de
officiele store hoort er een multi-arch index-digest met arm64 in; dat staat bij **Publicatie-Relay**
- [ ] **`postgres:17-alpine` pinnen op de multi-arch index-digest.** Kan meteen, met
`docker buildx imagetools inspect`, en het is het laatste ongepinde in deze app. Staat als TODO in de
compose
## Fase 3 - Het bouwrecept
@@ -58,8 +62,19 @@
Niets hiervan is op een laptop te doen. Eigenaar van deze hele fase: **gebruiker**.
- [ ] De image gebouwd (zie "Volgende stap")
- [ ] De app geïnstalleerd, en alle drie de containers blijven draaien
- [x] **De image gebouwd op de Umbrel (25-08-2026), in 50 seconden.** Twee dingen die het opleverde: de
gebruiker `umbrel` zit hier níet in de groep `docker`, dus het moet met `sudo`; en de Dockerfile van
Trezor bouwt zonder aanpassing
- [x] **In een register gezet, want anders kan umbreld er niet bij (25-08-2026).** Dit was de grote
verrassing van de dag en het staat met bron in
[Umbrel-appstore-spec.md](../../../Referenties/Umbrel-appstore-spec.md): umbreld haalt élke image via
de Docker Engine API op, niet via compose. Een lokaal gebouwde tag is dus onbereikbaar en
`pull_policy: never` doet niets, want de compose wordt niet gelezen om te pullen. Het Gitea-register op
dezelfde server als de store bleek de kortste weg, en anoniem halen werkt daar
- [x] **De app geïnstalleerd en alle drie de containers blijven draaien (25-08-2026).** `relay`,
`quota-manager` en `db`, met `db` op healthy en de app-proxy op 3851. De lokale images waren vooraf
weggehaald, dus de pull uit het register is echt gedaan en het hele pad is bewezen: broncode →
bouwrecept → register → gepinde digest → installatie
- [ ] **Gecontroleerd of het databaseschema zichzelf aanmaakt.** Niet uitgezocht, en dit is de eerste
plek waar het misgaat als het antwoord nee is. Kijk in de logs van de relay-container
- [ ] Trezor Suite naar `<umbrel>:3851` laten wijzen en een label synchroniseren. **Dit is de enige