diff --git a/Docs/Referenties/Umbrel-appstore-spec.md b/Docs/Referenties/Umbrel-appstore-spec.md index 139b9a1..490f1ab 100644 --- a/Docs/Referenties/Umbrel-appstore-spec.md +++ b/Docs/Referenties/Umbrel-appstore-spec.md @@ -225,20 +225,40 @@ Alles daarbuiten wordt bij een update **niet** ververst. Een gewijzigde `entrypo `web/index.html` bereikt een bestaande installatie dus nooit; de gebruiker ziet zijn oude versie en er is geen foutmelding. Alleen een verwijdering en herinstallatie brengt het over. -### Wat `app-script` met de images doet, en waarom dat een lokale tag breekt +### Elke image moet uit een register komen, en `pull_policy` helpt niet -Nagetrokken op 25-08-2026 in hetzelfde `app-script`, toen Evolu Relay een image kreeg die alleen lokaal -bestaat. Twee regels daaruit bepalen wat er met een image gebeurt: +**Op het apparaat vastgesteld op 25-08-2026**, bij de eerste installatiepoging van Evolu Relay met een +image die alleen lokaal gebouwd was. De installatie faalde met: -- **bij `install`, bij `update` en bij `post-patch-update` draait `compose "${app}" pull`.** Een tag die - niet in een register staat, laat de installatie dus falen vóórdat er iets gestart is. De uitweg is - `pull_policy: never` op die service: dan slaat compose hem over bij het ophalen en gebruikt wat er - lokaal staat. Dat is precies wat `whatsnext-evolu-relay` doet, en de reden staat er in commentaar bij; -- **starten gaat met `compose "${app}" up --detach --build`.** Dat `--build` is het vermelden waard, want - het betekent dat umbreld een `build:`-blok in een compose wél zou uitvoeren. Toch is bouwen-in-de-app - hier geen goed idee: een `Dockerfile` staat niet in de update-whitelist hierboven, dus een nieuwe versie - vraagt een deïnstallatie, en de installatie hangt tijdens het bouwen. Het recept hoort daarom in - `tools/` in de repo en het resultaat in de Docker-opslag of in een register. +``` +Error: (HTTP code 404) unexpected - pull access denied for whatsnext/evolu-relay, +repository does not exist or may require 'docker login' + at /opt/umbreld/node_modules/docker-modem/lib/modem.js:382:17 +``` + +**Het beslissende detail is die stacktrace, niet de foutmelding.** De pull komt uit `docker-modem`, de +Docker-clientbibliotheek van umbreld zelf, en dus rechtstreeks van de Docker Engine API. Compose komt er +niet aan te pas. Dat is ook te zien aan de regels `Downloaded 40.5% of app` in de journal: umbreld haalt +de images op en rapporteert de voortgang zelf. + +Twee gevolgen, en het tweede is een valkuil die een halve middag kost: + +1. **Elke `image:` in de compose van een app moet anoniem uit een register te halen zijn.** Een tag die + alleen in de lokale Docker-opslag van het apparaat staat, werkt niet, ook al zou `docker compose up` + hem daar prima vinden. De installatie stopt vóór het starten. +2. **`pull_policy: never` verandert daar niets aan**, want dat is een sleutel van de Compose-specificatie + en umbreld leest de compose niet om te pullen; het leest alleen welke images erin staan. Dit is hier + geprobeerd en het faalde identiek. + +Wat hier eerder stond, en waarom dat misleidde: in `app-script` staat `compose "${app}" pull` bij +`install`, `update` en `post-patch-update`, en `up --detach --build` bij het starten. Dat bestand is de +**legacy-compat**-laag; op umbrelOS 1.x is het niet het pad dat een installatie vanuit de interface loopt. +Lees dus niet uit `app-script` af wat umbreld doet zonder te controleren of die weg ook echt bewandeld +wordt. + +Dat `--build` blijft trouwens ook zonder dit verhaal een slecht idee voor een app: een `Dockerfile` staat +niet in de update-whitelist hierboven, dus een nieuwe versie vraagt een deïnstallatie, en de installatie +hangt tijdens het bouwen. Een bouwrecept hoort in `tools/` in de repo, en het resultaat in een register. **Gevolg voor het ontwerp.** Zet logica die je later nog wilt kunnen wijzigen op een van deze plekken: diff --git a/whatsnext-evolu-relay/docker-compose.yml b/whatsnext-evolu-relay/docker-compose.yml index a75a4e3..ac9f1e4 100644 --- a/whatsnext-evolu-relay/docker-compose.yml +++ b/whatsnext-evolu-relay/docker-compose.yml @@ -28,22 +28,22 @@ services: PROXY_AUTH_ADD: "false" relay: - # TODO pinnen. Deze tag komt uit tools/evolu-relay/build.sh en bestaat - # voorlopig alleen in de lokale Docker-opslag van de machine waar gebouwd is. - # Daarom staat er geen @sha256: er is nog geen register. Compose haalt niets - # op zolang de image lokaal bestaat; zodra de tag naar een register wijst, - # hoort de digest erbij. Zie Docs/Referenties/Images-pinnen.md. - image: whatsnext/evolu-relay:c03a204 - # Verplicht zolang de tag niet in een register staat. umbreld draait bij een - # installatie en bij een update `docker compose pull` (zie `app-script` in - # umbreld), en dat zou deze tag op Docker Hub zoeken, waar hij niet bestaat. - # De installatie faalt dan voordat er iets gestart is. `never` slaat hem over - # bij het ophalen en gebruikt wat er lokaal staat. + # WERKT NIET ZOALS HET HIER STAAT, en dat is bewust zichtbaar gelaten tot de + # keuze voor een register gemaakt is. Deze tag komt uit + # tools/evolu-relay/build.sh en bestaat alleen in de lokale Docker-opslag van + # de machine waar gebouwd is. # - # Bijkomend voordeel: staat de image er niet, dan is de fout "image niet - # gevonden" in plaats van een mislukte netwerkpoging, en dat wijst naar de - # bouwstap die overgeslagen is. Weg zodra er een register is. - pull_policy: never + # Op 25-08-2026 bleek bij de eerste installatiepoging dat dat niet genoeg is: + # umbreld haalt élke image op via de Docker Engine API (docker-modem), niet + # via compose, en faalt met "pull access denied" voordat er iets start. Een + # lokaal gebouwde image is dus onbereikbaar, en `pull_policy: never` helpt + # niet, want umbreld leest de compose niet om te pullen. Zie + # Docs/Referenties/Umbrel-appstore-spec.md. + # + # Wat hier moet komen: een tag in een register waar de Umbrel anoniem bij kan, + # met @sha256-digest erbij. Zie Docs/Referenties/Images-pinnen.md en het plan + # Umbrelapp. + image: whatsnext/evolu-relay:c03a204 restart: on-failure depends_on: db: @@ -72,8 +72,6 @@ services: quota-manager: image: whatsnext/evolu-relay:c03a204 - # Zelfde reden als bij relay hierboven. - pull_policy: never restart: on-failure depends_on: db: