Files
UmbrelApps/Docs/Plannen/Actief/010-Appstore/PROGRESS.md
T
HarmenandClaude Opus 5 5cf23bb83d De stunnel-container is weg, en daarmee stap 1 van open punt 2
De handmatige installatie uit de tijd vóór dit plan bond poort 50002 en stond op
restart: unless-stopped, dus hij overleefde een herstart. Dat was de laatste
blokkade voor de Fulcrum-test die op te heffen was; wat er nu nog tussen zit is
de eerste sync van Fulcrum, en dat is wachten en geen werk.

De map ~/umbrel/home/Containers/ElectrumTLS blijft bewust staan tot de
herstart-controle gedaan is; dat is de gedocumenteerde weg terug. De
volgorde-waarschuwing die er bij die taak stond is eruit: de container mountte
zijn entrypoint.sh uit die map, en die container is er nu af.

Nagekeken en niet aangepast: de repo ElectrumTLS staat nog op de Git-server en is
nog steeds anoniem leesbaar op b6afe67. Het domein staat daar dus nog in de
historie, en die taak blijft open.

Tests: niet gedraaid, dit raakt alleen documentatie.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 16:48:08 +02:00

250 lines
16 KiB
Markdown

# Voortgang - Appstore
> 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 - de repo werd een store met twee apps, en dat kostte een herinstallatie
Evolu Relay komt erbij en umbrelOS leest per store één repo, dus de repo `ElectrumTLS` is opgegaan in
`UmbrelApps`, verse historie, met de documentatie van beide apps in één `Docs/`-boom. De app zelf hoefde
niet te wijzigen: het app-id hangt aan het store-id `whatsnext` en niet aan de URL. Alleen de vijf
URL-velden en `version` gingen mee, in 0.0.15.
**De open vraag uit punt 8 is beantwoord, en het antwoord is nee: een geïnstalleerde app overleeft een
wisseling van store-URL niet.** Wat het verraderlijk maakt is dat umbrelOS de update naar 0.0.15 wél
tóónde en hem daarna niet uitvoerde, zonder foutmelding. Tonen en ophalen gaan blijkbaar niet langs
dezelfde weg; de herkomst van een geïnstalleerde app blijft de store waaruit hij kwam. Deïnstalleren en
opnieuw installeren loste het op. De prijs is `app-data`, dus de certificaatkeuze moest opnieuw gemaakt
worden.
Meegenomen bewijs dat er gratis bij kwam: de app komt nog steeds omhoog op een installatie waar nooit een
certificaat gekozen is. Dat was de fout die 0.0.3 velde en hij blijft dicht.
**Diezelfde dag is ook de oude stunnel-container weggehaald**, stap 1 van open punt 2. Die bond poort
50002 en overleefde met `restart: unless-stopped` een herstart, dus hij was de laatste blokkade voor de
Fulcrum-test die je zelf kon opheffen. Wat er nu nog tussen zit is de eerste sync van Fulcrum, die op 72%
stond. De map `~/umbrel/home/Containers/ElectrumTLS` blijft bewust staan als weg terug tot de
herstart-controle gedaan is.
**Geraakt:** de hele repo (verse `UmbrelApps`), `umbrel-app.yml` (0.0.15), `CLAUDE.md`, `README.md`,
`Docs/CONTINUE_HERE.md`, `Docs/README.md`, `Docs/KNOWLEDGE.md`, `Umbrel-appstore-spec.md`, dit plan.
**Tests:** 39 goed 0 fout en 54 goed 0 fout, niets overgeslagen.
## 20-08-2026 - alles van de verse installatie nagekeken; dit plan zakt naar B
De hele checklist van de herinstallatie is bevestigd door de gebruiker: `data/` met `certs/` en `runtime/`
eronder, de pagina komt op zonder gekozen certificaat, `v0.0.9` staat achter de tagline, de keuzelijst voor
de Electrum-server verscheen bij het installeren, en daarna werkten kiezen én uploaden.
**Daarmee is dit plan in de kern af en gaat het van A naar B.** Alles waar het om begon is bewezen: de app
is een echte umbrelOS-app, hij komt op uit een schone installatie, en een wallet van buiten verbindt over
TLS. Wat er nog staat is niet te plannen (de herstartcontrole) of hoort bij het masterplan **Publicatie**.
**Webinterface** is daarmee tier A geworden en van 020 naar 005 hernummerd; dit plan houdt 010.
**Geraakt:** alleen documentatie. **Tests:** niet van toepassing.
## 20-08-2026 - verse installatie van 0.0.9, en die werkte
De gebruiker heeft de app gedeïnstalleerd en opnieuw geïnstalleerd in plaats van geüpdatet, zodat de
app-data schoon is. **Dat werkte, en het bewijst iets wat op een bestaande installatie niet te bewijzen
was:** de pagina komt omhoog op een installatie waar nog nooit een certificaat gekozen is. Dat is precies
de situatie waarin 0.0.3 stukliep, en de reparatie uit 0.0.4 was tot nu toe alleen getoetst op een
installatie die die keuze al had.
Wat er nog níet uit volgt: of de twee `.gitkeep`-bestanden hun werk deden. Een werkende app bewijst dat
niet, want Docker maakt een ontbrekende bind-mount-map zelf aan; het verschil zit alleen op schijf. Staat
als losse taak, want het is een eis voor het masterplan **Publicatie**.
**Geraakt:** alleen documentatie. **Tests:** niet van toepassing.
## 20-08-2026 - data onder data/, en een doel dat de maatstaf verandert
De gebruiker vroeg of het klopt dat alle runtime-bestanden in de installatiemap staan, want bij andere apps
ziet hij daar geen app-code. **Dat klopt, en het verschil zit niet in umbrelOS:** voor elke app wordt de
hele app-map naar `app-data` gekopieerd, maar andere apps hebben hun code in een image. Config uit
`app-data` mounten is wél een bestaand patroon; `electrs` doet zijn `torrc` precies zo, en `torrc` en
`*.template` staan met naam in de update-whitelist. Bijvangst: de invulling gebeurt met `envsubst`, en dat
is de onderbouwing van de architectuurregel over accolade-variabelen.
Waar deze app echt afweek was de plaats van de data, en dat is in **0.0.9** verholpen: `runtime/` en
`certs/` staan nu onder `data/`, met een `.gitkeep` per map. Aanleiding was het antwoord op de vervolgvraag:
**de gebruiker wil de app publiceren als standaard-app voor Umbrel.** De packaging-documentatie van umbrel
zegt woordelijk dat gebruikersstaat onder `${APP_DATA_DIR}/data/...` hoort, dus dit was geen smaak.
Dat doel verandert de maatstaf van "hij werkt hier" naar "iemand anders keurt het pakket goed", en dat is
een eigen plan geworden: **Publicatie**, als masterplan. Het meeste blijkt al goed; wat er nog moet is de
images pinnen, het app-id kaal maken en de manifestvelden op orde brengen. Het risico staat niet in die
lijst: deze app leest de certificaatmap van een andere app, en dat is precies waar een review over valt.
**Geraakt:** `docker-compose.yml`, `umbrel-app.yml` (0.0.9 en `backupIgnore`), twee `.gitkeep`-bestanden,
`Referenties/Umbrel-appstore-spec.md`, `OPEN.md` punt 7 en 9, nieuw
`Plannen/Masterplannen/Publicatie.PLAN.md`, `tests/test_server_start_zonder_certificaat.py`.
**Tests:** 48 goed 0 fout en 33 goed 0 fout, niets overgeslagen; de data-conventie is mutatie-getest.
## 20-08-2026 - de app werkt: pagina, keuze, TLS en een wallet van buiten
**De reparatie werkt.** Na de uitrol van 0.0.4 laadt het dashboard, met de melding "No certificate in use"
en de reden van de agent erbij. De agent vond **veertien certificaten in Zoraxy** en koos daarom niets; dat
is de weigering die zo bedoeld is, en het antwoord op de vraag die de log van 0.0.3 openliet.
Wat de gebruiker er meteen van zei: die reden somde alle veertien domeinnamen op, en dat is een muur tekst
die zegt wat de keuzelijst eronder al toont. **0.0.5** geeft alleen het aantal. De weigering zelf blijft.
**En daarna liep het hele pad.** Een certificaat kiezen op de pagina werkt: de agent nam de keuze aan, nginx
kwam met poort 50022 door, en na het aanpassen van de doorstuurregel in de router verbindt een wallet van
buiten. **Daarmee is fase 6 in de kern klaar** en is de app voor het eerst als umbrelOS-app af.
**Geraakt:** `agent.py.template` (`choose`), `umbrel-app.yml` (0.0.5), `tests/test_agent_certificates.py`,
`CHANGELOG.md`. **Tests:** 21 goed 0 fout en 15 goed 0 fout, niets overgeslagen; de ingekorte reden is
mutatie-getest. Nog open op de Umbrel: de herstartcontrole en het omschakelen naar Fulcrum.
## 20-08-2026 - 0.0.3 geinstalleerd, geen UI, en de oorzaak was het ontwerp
**De app is geinstalleerd en er kwam geen pagina.** De log van `app_proxy` meldde alleen dat de server niet
te bereiken was, en die van `server` herhaalde "Wachten tot de agent een certificaat gekozen heeft". Dat is
geen storing maar een klem in het ontwerp: het stream-blok met `listen 50022 ssl` includeerde de `cert.conf`
van de agent, nginx weigert te starten zonder dat certificaat, dus ook de pagina kwam niet omhoog. En de
pagina is precies waar je dat certificaat kiest.
**Verholpen in 0.0.4** door het TLS-deel naar `stream.conf.template` te verplaatsen; het `command`-blok legt
dat pas in `/var/lib/gate/tls/` als `cert.conf` bestaat, en `nginx.conf` haalt die map met een jokerteken op.
Meegenomen: een mislukte `nginx -s reload` brak de herlaadlus af, want die draait onder `set -e`.
Wat de log wél bewees: de agent start en luistert (`[gate] api listening on port 8000`), en Tor bootstrapt.
Wat de agent in de certificaatmappen vond, is nog onbekend; dat leest de pagina van 0.0.4 straks voor.
**Geraakt:** `nginx.conf.template`, `docker-compose.yml`, nieuw `stream.conf.template`, `umbrel-app.yml`
(0.0.4 en release notes), `CLAUDE.md`, `CHANGELOG.md`, nieuw
`tests/test_server_start_zonder_certificaat.py`. **Tests:** 21 goed 0 fout en 15 goed 0 fout, niets
overgeslagen. De reparatie zelf is **niet** geverifieerd: dat vraagt de uitrol op de Umbrel.
## 19-08-2026 - sessie afgesloten; dit plan is de enige tier A
Bij de prioriteitsherziening blijft **Appstore de enige tier A**, en de reden is dat er precies één
handeling openstaat waar al het andere achter wacht: de app installeren. **Webinterface is naar C gezakt**;
dat plan is af voor zover het zonder de Umbrel kan.
Wat er van de gebruiker moet, in deze volgorde: de doorstuurregel in de router naar 50022, dan de oude app
verwijderen, de store-URL opnieuw laten ophalen en `whatsnext-electrum-gate` installeren. Versie staat op
0.0.3 en de release notes kloppen, dus daar hoeft niets meer aan.
Ook opgemerkt en als taak vastgelegd: het plan **Configuratie** is grotendeels ingehaald door het werk van
vandaag. De agent doet de certificaatbronnen en de keuze al, en het hardgecodeerde domein is uit de compose
en uit `nginx.conf.template` verdwenen. Dat plan moet dus eerst opgeschoond worden voordat promotie nog
zin heeft, anders lijkt het groter dan het is.
**Geraakt:** alleen documentatie in deze entry.
**Tests:** 21 goed, 0 fout.
## 19-08-2026 - hernoemd naar Electrum Gate, fase 7 grotendeels af
De wallet-verbinding had de nacht doorstaan, dus de `proxy_timeout`-fix is bewezen en de storing waar de
sessie van gisteren mee begon is verklaard en verholpen.
De app heet nu **Electrum Gate**, met store-id `whatsnext` en app-id `whatsnext-electrum-gate`. Bij het
voorleggen van die keuze zat een fout in mijn eigen redenering: ik nam aan dat de repo-naam het store-id
bepaalt, omdat de store-URL de repo-URL is. Dat is niet zo, het store-id is gewoon een veld. Daardoor kon
het meteen goed en kan de repo-naam wachten tot er een publieke versie op GitHub komt.
Twee dingen die er vooruitlopend op andere plannen bij konden, omdat er tóch opnieuw geïnstalleerd wordt:
de TLS-poort is 50022 in plaats van 50002, wat de botsing met Fulcrum wegneemt, en de web-UI is
herbouwd. **Dat vraagt eenmalig een aanpassing van de doorstuurregel in de router**, anders komt een
wallet van buiten niet meer binnen.
De tagline en de beschrijving zijn Engels geworden en gaan nu over de afweging Tor tegenover snelheid, in
plaats van over TLS als middel.
**Geraakt:** `umbrel-app-store.yml`, de app-map (hernoemd), `umbrel-app.yml`, `docker-compose.yml`,
`nginx.conf.template`, `README.md` en de plannen.
**Tests:** dit project heeft geen suite. **Niets hiervan is op de Umbrel gedraaid**: de nieuwe app is nog
niet geïnstalleerd, en `version` staat nog op 2.0.1 omdat de gebruiker de UI eerst wilde zien.
## 18-08-2026 - storing na tien minuten, en de besluiten over naam en dashboard
Kort na de installatie viel de wallet-verbinding weg. De container bleef onafgebroken draaien
(`status=running`, `restarts=0`, schone nginx-log), wat de container als oorzaak uitsloot en één
verdachte overliet: `proxy_timeout` in een `stream`-blok staat standaard op tien minuten, en een
Electrum-wallet houdt een langlopende, grotendeels stille verbinding open. **Dit was een regressie van
diezelfde dag:** stunnel hanteerde twaalf uur, en dat verschil is bij de vertaling naar nginx niet
opgemerkt. Nu op twaalf uur, met `proxy_socket_keepalive`.
Meegenomen omdat ze bij het uitzoeken bovenkwamen: nginx draaide als achtergrondproces onder een shell,
die daardoor PID 1 was en signalen niet doorgaf, en het script eindigde met exitcode 0 als nginx omviel,
waardoor `restart: on-failure` niet zou ingrijpen. Nginx is nu met `exec` het hoofdproces.
De gebruiker vroeg of umbrelOS een update wel zou zien, en dat was de goede vraag: het `version`-veld
stond nog op 2.0.0, dus de fix was nooit uitgerold. Zonder melding en zonder fout. Na 2.0.1 kwam de
update binnen en werkte hij, wat meteen de hele uitleverketen aantoont.
Aan het eind besloten: de app gaat **Electrum Gateway** heten, want de oude naam beschreef het middel en
niet de waarde. En het dashboard krijgt alleen lokale gegevens; koersdata valt af omdat de browser van
elke bezoeker dan bij een derde partij aanklopt.
**Geraakt:** `docker-compose.yml`, `nginx.conf.template`, `umbrel-app.yml`, en de plannen.
**Tests:** niet van toepassing. **De `proxy_timeout`-fix is nog niet bewezen**: die brak pas na tien
minuten stilte, dus dat vraagt een langere observatie. Ook de herstart-controle staat nog open.
## 18-08-2026 - geinstalleerd op de Umbrel, wallet verbindt
De app is als Umbrel-app geïnstalleerd en een Electrum-wallet krijgt over TLS direct data terug. Dat
bewijst het hele pad in één keer: het `stream`-blok, het certificaat, en de verbinding naar de
Electrum-server via `APP_ELECTRS_NODE_IP`.
De weg erheen kostte drie omwegen die allemaal buiten de app zelf lagen. De Gitea-repo was als SHA-256
aangemaakt terwijl isomorphic-git alleen SHA-1 kan. Daarna weigerde Gitea anonieme toegang, en de oorzaak
bleek niet de repo maar de zichtbaarheid van het **account**: Gitea staat niet toe dat een repo
zichtbaarder is dan zijn eigenaar en zet hem dan zwijgend terug naar "intern". En de installatie faalde
drie keer op `Bind for 0.0.0.0:50002 failed: port is already allocated`, omdat de oude handmatige
container nog draaide. Dat laatste was de voorspelde en gewenste faalrichting: de bestaande dienst bleef
gewoon werken.
Eén les die het onthouden waard is: een `git ls-remote` vanaf de eigen machine bewees niets over anonieme
toegang, want de credential-helper stuurde de opgeslagen inloggegevens stilzwijgend mee. Dat leidde tot
een verkeerde diagnose die pas onderuitging met `-c credential.helper=`.
**Geraakt:** niets in de app; alleen documentatie en de configuratie van de Gitea-server.
**Tests:** niet van toepassing. Wallet-verbinding handmatig geverifieerd. **De herstart-controle staat
nog open**, en dat is de aanleiding van het hele plan.
## 18-08-2026 - fases 1 tot en met 5 gebouwd
De repo heeft de vorm van een community app store, de compose is omgezet naar
`app_proxy`, de backend loopt via de afhankelijkheid, en het manifest klopt met een eigen icoon.
Twee dingen die het uitzoekwerk opleverde en die het ontwerp veranderd hebben. De controle op de Umbrel
bevestigde dat `nginx:alpine` alle vier de stream-modules meebrengt, waardoor drie containers er één
werden en de Docker-socket kon vervallen; dat was de grootste beveiligingswinst en hij was gratis. En
umbreld blijkt bij een **update** alleen een whitelist te verversen (`docker-compose.yml`, `*.template`,
`exports.sh`, `torrc`, `hooks`, `umbrel-app.yml`), terwijl bij installatie de hele map wordt gekopieerd.
Daarom staat de nginx-configuratie in een `*.template` en niet in een los script: anders had een `git
push` stilzwijgend niets gedaan bij een bestaande installatie.
Ook bleek de `awk`-splitsing van de certificaatketen niet overgenomen te hoeven worden maar juist fout
te zijn: nginx wil de volledige keten in `ssl_certificate`, waar stunnel hem gesplitst wilde.
**Geraakt:** `umbrel-app-store.yml`, `electrumtls-electrum-tls/` (compose, manifest, `nginx.conf.template`,
`icon.png`), verwijderd zijn `entrypoint.sh`, `cert-watch.sh`, `install.sh` en `uninstall.sh`.
**Tests:** niet van toepassing, dit project heeft er geen. **Niets is op de Umbrel geïnstalleerd of
gedraaid**; dat is fase 6.
## 18-08-2026 - plan werd actief
Dit plan is als eerste actief geworden omdat het de aanleiding van de hele sessie oplost: de app draait
als een handmatig neergezette docker-compose die umbrelOS niet kent, en moet na elke herstart of na een
storing in een afhankelijkheid met de hand opgestart worden.
De repo is dezelfde dag onder versiebeheer gebracht en gepusht naar
`https://sc.kamenier-hamer.nl/sysop/ElectrumTLS.git`. Dat kostte één omweg: de Gitea-repo was als SHA-256
aangemaakt, en de push faalde met een melding die de oorzaak niet noemt. Bij het uitzoeken bleek het
probleem groter dan de push, want umbreld kloont met isomorphic-git en die kan uitsluitend SHA-1. De repo
is opnieuw aangemaakt als SHA-1.
Twee dingen die het uitzoekwerk opleverde en die het werk kleiner maken dan gedacht. umbrelOS doet géén
hostnaamcontrole op de store-URL, dus een eigen Gitea kan de app store zijn. En wisselen tussen Electrs,
Fulcrum en ElectrumX vraagt geen eigen mechanisme: die declareren `implements: [electrs]` en aliassen
zichzelf naar `APP_ELECTRS_*`, dus twee regels volstaan. Dat was oorspronkelijk een apart plan waard en
is nu fase 3.
**Geraakt:** promotie vanuit `Plannen/Masterplannen/Appstore.PLAN.md`; nog geen app-bestanden.
**Tests:** niet van toepassing, dit project heeft er geen. Er is nog niets op de Umbrel geverifieerd.