Eén app store, twee apps
umbrelOS leest per store één repo, dus twee apps in twee repo's kan niet. Deze repo is de store en bevat vanaf nu Electrum Gate en het werk aan Evolu Relay. Opgezet als verse repo op verzoek van de gebruiker: de historie van ElectrumTLS en van EvoluRelay komt niet mee. Dat heeft één gevolg dat verder gaat dan opruimen. In de historie van ElectrumTLS staat het domein van de gebruiker en het certificaatpad, van vóór de opschoning van 19-08. Die komt hier niet in. Zolang die repo op de Git-server blijft staan verandert dat niets, dus het weghalen ervan is het laatste stuk van open punt 3 van het plan Appstore, en geen bijzaak. De store zelf hoefde niet te veranderen: store-id whatsnext, en dus blijft het app-id whatsnext-electrum-gate. Dat hangt aan het store-id en niet aan de URL, dus voor umbrelOS is dit dezelfde app in een andere store. Dat de store op 19-08 naar de maker genoemd werd in plaats van naar deze ene app, betaalt zich hier uit. Wat de documentatie betreft is dit één wortel voor beide apps, en dat was de reden om samen te voegen en niet de prijs ervan: de appstore-spec, het pinnen van images en de werkwijze golden al voor allebei en stonden in twee repo's naast elkaar. De kruisverwijzing die daarvoor nodig was (Referenties/Umbrel-appstore.md in de oude EvoluRelay-repo) is verdwenen; wat daarin stond over de plekken waar de relay een ander geval is, staat nu als ontwerp in het masterplan Umbrelapp §4. Botsende namen kregen een achtervoegsel met de app, en alleen die: Publicatie werd Publicatie-Gate en Publicatie-Relay, CHANGELOG.md werd CHANGELOG-electrum-gate.md. Proefopstelling kreeg 007, tussen de twee bestaande nummers, zodat de bovenkant van de reeks op tier-orde blijft staan. CONTINUE_HERE.md heeft een kolom App, maar de tiers lopen over beide apps heen: er is één volgorde van werken. Electrum Gate gaat naar 0.0.15, want website, repo, support, submission en icon wijzen nu naar UmbrelApps en zonder versieverhoging rolt dat niet uit. De release notes leggen aan de gebruiker uit dat hij de store opnieuw moet toevoegen. Of een geïnstalleerde app een wisseling van store-URL overleeft is nog steeds niet uitgezocht; dat blijkt bij het omzetten. Twee dingen in de plannen van Electrum Gate waren door deze verhuizing niet meer waar en zijn bijgewerkt: de taak "de repo hernoemen" in fase 7 is afgevinkt, en de repo-vorm in PLAN.md §4a toonde nog de store-id electrumtls, die al sinds fase 7 achterhaald was. Tests: 39 goed 0 fout en 54 goed 0 fout, niets overgeslagen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
# Umbrelapp - masterplan
|
||||
|
||||
> **App: Evolu Relay.** Status: nog niet actief. Dit is één bestand en dat is bewust: er is nog geen
|
||||
> `TAKEN.md`, `PROGRESS.md` of `OPEN.md`, want er wordt nog niet aan gewerkt. Bij promotie naar
|
||||
> `Plannen/Actief/NNN-Umbrelapp/` worden de paragrafen hieronder over die vier bestanden verdeeld; zie
|
||||
> `HomeGit/Docs/Werkproces.md` §1b.
|
||||
>
|
||||
> Afhankelijk van: **Proefopstelling**. Het aantal containers, de variabelen en de authenticatievraag
|
||||
> komen daar vandaan, en zonder die antwoorden is elk manifest een gok.
|
||||
|
||||
## 1. Doel
|
||||
|
||||
Van een stack die lokaal draait naar een tweede app in deze store, die je in umbrelOS installeert en die
|
||||
daarna vanzelf terugkomt. Concreet: een map `whatsnext-evolu-relay/` met een `umbrel-app.yml` en een
|
||||
`docker-compose.yml`, geïnstalleerd op de Umbrel van de gebruiker, met Trezor Suite die erop
|
||||
synchroniseert.
|
||||
|
||||
## 2. Afbakening
|
||||
|
||||
Het pakket en de installatie: manifest, compose, en de controles op het apparaat zelf. Ook het opruimen
|
||||
van wat de eigen opzet van Trezor meebrengt en Umbrel niet wil, zoals de `.k8s/`-map en een eigen
|
||||
netwerkblok.
|
||||
|
||||
De store zelf valt hier **buiten**: die bestaat al en serveert Electrum Gate. Wat er nog aan moet gebeuren
|
||||
is één map erbij.
|
||||
|
||||
## 3. Niet-doelen
|
||||
|
||||
- **Geen bereikbaarheid van buiten het thuisnetwerk.** Masterplan **Bereikbaarheid**. Dit plan is af als
|
||||
het op het eigen netwerk werkt.
|
||||
- **Geen inlevering bij de officiële store.** Masterplan **Publicatie-Relay**. Dat is een andere maatstaf:
|
||||
niet "hij werkt hier" maar "iemand anders keurt het goed".
|
||||
- **Geen wijzigingen aan de relay zelf.** Wat Trezor levert, draaien we; wat het niet kan, kan het niet.
|
||||
|
||||
## 4. Ontwerp
|
||||
|
||||
### 4a. De vorm is bekend, de inhoud niet
|
||||
|
||||
De repo-vorm van een community store, de app-proxy, de whitelist bij updates en de regel dat een wijziging
|
||||
zonder verhoging van `version` niet wordt uitgerold: dat staat allemaal al opgeschreven, met bron, in
|
||||
[Umbrel-appstore-spec.md](../../Referenties/Umbrel-appstore-spec.md), en het hoeft niet opnieuw uitgezocht
|
||||
te worden. Electrum Gate in dezelfde repo is bovendien een werkend voorbeeld van elke regel daaruit.
|
||||
|
||||
Wat hieronder staat is wat daar **niet** uit volgt, omdat die spec is opgeschreven vanuit een app die op
|
||||
vier punten een ander geval is.
|
||||
|
||||
### 4b. De cliënt is geen browser, en dat raakt de app-proxy
|
||||
|
||||
**Dit is de ontwerpvraag die alles bepaalt**, en de reden dat dit plan wacht in plaats van alvast te
|
||||
beginnen aan een manifest.
|
||||
|
||||
Electrum Gate heeft een dashboard dat een mens in een browser opent, en dat mag dus gewoon achter de inlog
|
||||
van umbrelOS staan. Trezor Suite is geen browser met een sessiecookie. Komt de relay achter `app_proxy` met
|
||||
de standaardinstelling te staan, dan krijgt Suite een inlogpagina in plaats van de relay, en dat is geen
|
||||
configuratiefoutje maar het einde van het pad.
|
||||
|
||||
Twee bekende uitwegen, allebei met een prijs:
|
||||
|
||||
1. **`PROXY_AUTH_ADD: "false"`** op de proxy-service, zoals Gitea en Budibase in de officiële store doen.
|
||||
Dan doet de app zijn eigen authenticatie, en de vraag wordt meteen: **dóét deze relay dat?** Zo niet,
|
||||
dan zet je een open eindpunt op je Umbrel;
|
||||
2. **een eigen `ports:` op de service**, zoals Electrum Gate met 50022 doet. Voor een niet-web-poort is dat
|
||||
normaal en de inlevereisen noemen het ook zo. De poort moet dan wel uniek zijn op de host, en dat is
|
||||
hier een echte controle: op deze machine draaien al Electrum Gate, een Electrum-server en een reverse
|
||||
proxy.
|
||||
|
||||
Welke van de twee het wordt, hangt af van hoe Suite zich tegen de relay authenticeert. Dat antwoord komt
|
||||
uit **Proefopstelling**, fase 4.
|
||||
|
||||
### 4c. Er is geen web-UI, en `port` is een verplicht veld
|
||||
|
||||
`port` in het manifest is de poort die umbrelOS voor de tegel gebruikt, dus een web-UI-poort. Deze app
|
||||
heeft er geen. Wat andere apps zonder interface daarmee doen is niet uitgezocht; zie open punt 1.
|
||||
|
||||
### 4d. Er zit een database in de stack
|
||||
|
||||
Nieuw ten opzichte van Electrum Gate, dat niets bewaart.
|
||||
|
||||
- **De Postgres-datamap hoort onder `${APP_DATA_DIR}/data/postgres`**, niet in een naamloos Docker-volume.
|
||||
Anders overleeft de data een herinstallatie niet en zit hij niet in de back-up van umbrelOS.
|
||||
- **Het wachtwoord hoort niet in de repo.** umbrelOS levert `${APP_PASSWORD}` en `${APP_SEED}` aan, per
|
||||
installatie afgeleid. Een literal in de compose is in een publieke repo een gepubliceerd wachtwoord.
|
||||
- **`backupIgnore` verdient een overweging, en het antwoord is hier waarschijnlijk "niets".** De database
|
||||
ís de waarde van deze app. Dat staat er expliciet omdat Electrum Gate het veld wél gebruikt, en
|
||||
overnemen uit gewoonte zou hier precies het verkeerde weglaten.
|
||||
|
||||
### 4e. Geen afhankelijkheden, en niets om te vervangen
|
||||
|
||||
Electrum Gate declareert `dependencies: [electrs]` en leunt op het wisselmechanisme met Fulcrum en
|
||||
ElectrumX. Deze app staat op zichzelf: geen `dependencies`, geen `implements`, en geen leesmount in de map
|
||||
van een andere app. Dat maakt het pakket eenvoudiger en het haalt meteen het grootste review-risico weg dat
|
||||
Electrum Gate wél heeft.
|
||||
|
||||
### 4f. De image is niet van ons, en misschien bestaat hij niet
|
||||
|
||||
Electrum Gate draait op `nginx:alpine` en `python:3-alpine`, twee images die gewoon in een registry staan
|
||||
en die je alleen nog hoeft te pinnen. Hier is niet bekend of Trezor een image publiceert of alleen een
|
||||
Dockerfile levert. Is het alleen een Dockerfile, dan bouw en publiceer je zelf, en dan ben je onderhouder
|
||||
van een image geworden. **Proefopstelling** fase 1 levert het antwoord; zie
|
||||
[Upstream-evolu-relay.md](../../Referenties/Upstream-evolu-relay.md) §4 punt 1.
|
||||
|
||||
## 5. Het werk in grote lijnen
|
||||
|
||||
**Fase 1 - de app-map.** `whatsnext-evolu-relay/` naast `whatsnext-electrum-gate/`, met een
|
||||
`umbrel-app.yml` waarvan het `id` gelijk is aan de mapnaam. Uitkomst: umbrelOS toont een tweede tegel in
|
||||
de store, ook al doet de app nog niets.
|
||||
|
||||
**Fase 2 - de compose.** De `docker-compose.yaml` van Trezor omzetten: `app_proxy`, geen eigen netwerkblok,
|
||||
data onder `${APP_DATA_DIR}/data/`, geheimen uit umbrelOS-variabelen, en `.k8s/` blijft waar het is.
|
||||
Uitkomst: een compose die op de Umbrel start.
|
||||
|
||||
**Fase 3 - het manifest afmaken.** Velden in de voorgeschreven volgorde, een eigen icoon, en een antwoord
|
||||
op de `port`-vraag uit §4c.
|
||||
|
||||
**Fase 4 - installeren en verifiëren op de Umbrel.** Installeren, Suite laten synchroniseren, en daarna de
|
||||
controles die je alleen op het apparaat kunt doen: overleeft de data een update, komt de app terug na een
|
||||
herstart, en botst er geen poort met wat er al draait.
|
||||
|
||||
## 6. Open punten
|
||||
|
||||
1. **Wat wordt `port` in het manifest?** Dat veld is de web-UI-poort voor de tegel en deze app heeft geen
|
||||
web-UI. Wat andere apps zonder interface daarmee doen is niet uitgezocht.
|
||||
**Moment:** fase 3 · **Eigenaar:** uit te zoeken bij het schrijven van het manifest
|
||||
2. **Komt er een statuspagina?** Electrum Gate heeft er een en die bleek in de praktijk het nuttigste deel
|
||||
van de app. Hier zou dat kunnen: draait de relay, hoe groot is de database, wanneer was de laatste
|
||||
synchronisatie. Het is echter een eigen container en een eigen onderhoudslast, en het is geen voorwaarde
|
||||
om te kunnen synchroniseren. Voordeel dat pas sinds de samenvoeging bestaat: de pagina van Electrum Gate
|
||||
staat in dezelfde repo en is grotendeels over te nemen.
|
||||
**Moment:** pas overwegen als fase 4 geslaagd is · **Eigenaar:** gebruiker
|
||||
3. **Blijft de quota-manager buiten het pakket?** Als **Proefopstelling** uitwijst dat het kan, dan ja.
|
||||
Blijkt hij verplicht, dan verandert dit plan van vorm en hoort dit punt opnieuw beslist te worden.
|
||||
**Moment:** bij promotie van dit plan · **Eigenaar:** volgt uit Proefopstelling
|
||||
|
||||
## 7. Verificatie
|
||||
|
||||
Alles behalve het laatste punt is op een laptop te controleren; het laatste punt is precies waarom dit plan
|
||||
bestaat.
|
||||
|
||||
- YAML geldig, `id` in het manifest gelijk aan de mapnaam, elke `image:` met een `@sha256:`-digest. Dat
|
||||
zijn de fouten die je anders pas op het apparaat merkt, en ze zijn automatisch te controleren;
|
||||
- **op de Umbrel:** installeren, synchroniseren met Suite, en daarna een herstart van de app en van het
|
||||
apparaat. Meld per controle of hij gedaan is, en meld ook expliciet welke niet;
|
||||
- **en één die alleen bij een tweede app in een bestaande store bestaat:** dat het toevoegen van deze app
|
||||
Electrum Gate niet raakt. Een kapot manifest in de ene map mag de andere niet meeslepen; of umbrelOS dat
|
||||
netjes doet is niet uitgezocht.
|
||||
Reference in New Issue
Block a user