Open punt 8 stond sinds 19-08 als "niet uitgezocht, en niet aannemen dat het meevalt". Beantwoord, en het antwoord is nee: een geïnstalleerde app overleeft een wisseling van store-URL niet. Wat het verraderlijk maakt is de vorm waarin het misging. umbrelOS tóónde de update naar 0.0.15 gewoon, en voerde hem daarna niet uit, zonder foutmelding. "De update wordt gezien" leest als "de koppeling ligt er" en dat is precies wat het niet betekent: tonen en ophalen gaan niet langs dezelfde weg, en de herkomst van een geïnstalleerde app blijft de store waaruit hij kwam. Een gelijk app-id in een andere store maakt daar geen dezelfde app van. Deïnstalleren plus opnieuw installeren loste het op en de app draait weer. De prijs is app-data, dus de certificaatkeuze moest opnieuw gemaakt worden; wie een certificaat had geüpload in plaats van uit Zoraxy te kiezen, moet data/certs/ vooraf wegkopiëren. Dat staat er nu bij, want dit komt bij het masterplan Publicatie-Gate nog een keer langs: daar verandert het app-id. Gratis meegenomen bewijs: de app komt nog steeds omhoog op een installatie waar nooit een certificaat gekozen is. Dat was de fout die 0.0.3 velde. Verder de Fulcrum-omschakeltest voorzien van de reden dat hij stilligt: de eerste sync van Fulcrum stond op 72%. Omschakelen naar een backend die nog niet klaar is meet de sync en niet de app. Daarmee wacht alles wat in dit plan nog openstaat op iets dat vanzelf komt of ligt het bij de gebruiker; dat staat nu in de header, zodat een volgende sessie niet gaat zoeken naar werk dat er niet is. Tests: niet gedraaid, dit raakt alleen documentatie. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
244 lines
16 KiB
Markdown
244 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.
|
|
|
|
**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.
|