diff --git a/CHANGELOG.md b/CHANGELOG.md index f3ff6e2..9cc42e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,19 @@ -# v0.8.31-beta — Bouwen duurt geen kwartier meer +# v0.8.31 — UniFi's reparatiescript kan niet meer zoekraken + +`exit 126` bij `unifi-mongo-init`: het compose-bestand mountte het losse +bestand `./init-mongo.sh`, en als dat (nog) niet in de stackmap staat maakt +Docker er stilzwijgend een lege map van. Bash zegt dan "Is a directory", de +container stopt met een kaal exit-nummer, en het bleef zo — want ook het +opnieuw renderen struikelde over diezelfde map. + +- **De hele stackmap wordt gemount in plaats van het losse bestand.** Die map + bestaat altijd, dus Docker kan er niets meer bij verzinnen. Ontbreekt het + script toch, dan zegt de container wat je eraan doet in plaats van 126. +- **Een lege map op de plek van een bestand wordt bij het renderen opgeruimd**, + zodat 'Instellingen wijzigen → opslaan' het probleem oplost in plaats van er + zelf op vast te lopen. + +Verder in deze uitgave: bouwen duurt geen kwartier meer. De volgorde in de Dockerfile bepaalt hoeveel er bij elke build opnieuw moet. `ARG SU_VERSION` stond met een LABEL erachter bovenaan, en die waarde verandert diff --git a/VERSION b/VERSION index 7c8a6e5..d076386 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.31-beta +0.8.31 diff --git a/apps/unifi-network/files/compose.yaml b/apps/unifi-network/files/compose.yaml index 4a84ca0..e17b0a4 100644 --- a/apps/unifi-network/files/compose.yaml +++ b/apps/unifi-network/files/compose.yaml @@ -76,25 +76,25 @@ services: - MONGO_DBNAME=unifi - MONGO_AUTHSOURCE=admin volumes: - - ./init-mongo.sh:/init-mongo.sh:ro + # De hele stackmap en niet het losse script. Een bind-mount naar een + # bestand dat (nog) niet bestaat laat Docker stilzwijgend een lege map + # aanmaken; de container stopt dan met "exit 126 — Is a directory" en + # blijft dat doen. Een map die er altijd is, kan dat niet overkomen. + - ./:/su-stack:ro # Dezelfde map als UniFi zelf: hierin staat system.properties, dat het # image alleen bij de allereerste start schrijft. - << appdata_dir >>/<< service_name >>/config:/unifi-config - # Eerst kijken óf het script er is. Ontbreekt het in de stackmap, dan mount - # Docker er een lege map overheen en stopt de container met "exit 126" — - # een getal waar niemand iets aan heeft. Nu staat er wat je eraan doet. entrypoint: - /bin/bash - -c - | - if [ ! -f /init-mongo.sh ]; then - echo "FOUT: /init-mongo.sh ontbreekt in de stackmap van deze app." - echo "Docker heeft er daarom een lege map van gemaakt." + if [ ! -f /su-stack/init-mongo.sh ]; then + echo "FOUT: init-mongo.sh ontbreekt in de stackmap van deze app." echo "Herstel het met: Instellingen wijzigen -> opslaan, dan wordt" echo "het sjabloon opnieuw uitgeschreven." exit 1 fi - exec bash /init-mongo.sh + exec bash /su-stack/init-mongo.sh depends_on: << service_name >>-mongo: condition: service_healthy diff --git a/tests/test_apps.py b/tests/test_apps.py index aed7a1a..f794885 100644 --- a/tests/test_apps.py +++ b/tests/test_apps.py @@ -415,7 +415,11 @@ def test_unifi_heeft_pi_geschikte_en_correct_geinitialiseerde_mongodb(): "service_completed_successfully" assert reparatie["depends_on"]["unifi-mongo"]["condition"] == "service_healthy" assert reparatie["restart"] == "no" - assert "./init-mongo.sh:/init-mongo.sh:ro" in reparatie["volumes"] + # De hele map en niet het losse bestand: een bind-mount naar een bestand + # dat nog niet bestaat laat Docker een lege map aanmaken, en dan stopt de + # container met exit 126 zonder dat iets uitlegt waarom. + assert "./:/su-stack:ro" in reparatie["volumes"] + assert not any(v.startswith("./init-mongo.sh:") for v in reparatie["volumes"]) assert any(v == "MONGO_HOST=unifi-mongo" for v in reparatie["environment"]) # De beheerdersnaam van het allereerste sjabloon. Een volume van toen kent # geen 'root', en dan mislukte elke reparatie én elke mongodump. diff --git a/tests/test_waarom_mislukt.py b/tests/test_waarom_mislukt.py index 73bf7d3..9f08922 100644 --- a/tests/test_waarom_mislukt.py +++ b/tests/test_waarom_mislukt.py @@ -238,6 +238,9 @@ def test_unifi_init_zegt_wat_er_mis_is_in_plaats_van_exit_126(): """Een ontbrekend script gaf 'exit 126' — een getal waar niemand iets aan heeft. De container hoort te vertellen wat je eraan doet.""" bron = (WORTEL / "apps" / "unifi-network" / "files" / "compose.yaml").read_text("utf-8") - assert "if [ ! -f /init-mongo.sh ]" in bron + assert "if [ ! -f /su-stack/init-mongo.sh ]" in bron assert "Instellingen wijzigen" in bron - assert "exec bash /init-mongo.sh" in bron + assert "exec bash /su-stack/init-mongo.sh" in bron + # En het script wordt via de map gemount, zodat Docker er geen lege map + # van kan maken. + assert "./:/su-stack:ro" in bron