2026-08-25 16:27:57 +02:00
|
|
|
# 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).
|
|
|
|
|
|
2026-08-25 16:45:38 +02:00
|
|
|
## 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.
|
|
|
|
|
|
|
|
|
|
**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.
|
|
|
|
|
|
2026-08-25 16:27:57 +02:00
|
|
|
## 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.
|