release: v0.8.31

UniFi's reparatiecontainer mount de stackmap in plaats van het losse script,
zodat Docker er geen lege map van kan maken en exit 126 niet meer voorkomt.
Bevat ook de snellere image-build.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9Vcwu7owJZ3nj5dCf4VFT
This commit is contained in:
Ramon 2026-08-07 16:10:42 +02:00
parent 14515143fc
commit 7db20467cf
5 changed files with 35 additions and 13 deletions

View file

@ -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. 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 `ARG SU_VERSION` stond met een LABEL erachter bovenaan, en die waarde verandert

View file

@ -1 +1 @@
0.8.31-beta 0.8.31

View file

@ -76,25 +76,25 @@ services:
- MONGO_DBNAME=unifi - MONGO_DBNAME=unifi
- MONGO_AUTHSOURCE=admin - MONGO_AUTHSOURCE=admin
volumes: 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 # Dezelfde map als UniFi zelf: hierin staat system.properties, dat het
# image alleen bij de allereerste start schrijft. # image alleen bij de allereerste start schrijft.
- << appdata_dir >>/<< service_name >>/config:/unifi-config - << 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: entrypoint:
- /bin/bash - /bin/bash
- -c - -c
- | - |
if [ ! -f /init-mongo.sh ]; then if [ ! -f /su-stack/init-mongo.sh ]; then
echo "FOUT: /init-mongo.sh ontbreekt in de stackmap van deze app." echo "FOUT: init-mongo.sh ontbreekt in de stackmap van deze app."
echo "Docker heeft er daarom een lege map van gemaakt."
echo "Herstel het met: Instellingen wijzigen -> opslaan, dan wordt" echo "Herstel het met: Instellingen wijzigen -> opslaan, dan wordt"
echo "het sjabloon opnieuw uitgeschreven." echo "het sjabloon opnieuw uitgeschreven."
exit 1 exit 1
fi fi
exec bash /init-mongo.sh exec bash /su-stack/init-mongo.sh
depends_on: depends_on:
<< service_name >>-mongo: << service_name >>-mongo:
condition: service_healthy condition: service_healthy

View file

@ -415,7 +415,11 @@ def test_unifi_heeft_pi_geschikte_en_correct_geinitialiseerde_mongodb():
"service_completed_successfully" "service_completed_successfully"
assert reparatie["depends_on"]["unifi-mongo"]["condition"] == "service_healthy" assert reparatie["depends_on"]["unifi-mongo"]["condition"] == "service_healthy"
assert reparatie["restart"] == "no" 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"]) assert any(v == "MONGO_HOST=unifi-mongo" for v in reparatie["environment"])
# De beheerdersnaam van het allereerste sjabloon. Een volume van toen kent # De beheerdersnaam van het allereerste sjabloon. Een volume van toen kent
# geen 'root', en dan mislukte elke reparatie én elke mongodump. # geen 'root', en dan mislukte elke reparatie én elke mongodump.

View file

@ -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 """Een ontbrekend script gaf 'exit 126' — een getal waar niemand iets aan
heeft. De container hoort te vertellen wat je eraan doet.""" heeft. De container hoort te vertellen wat je eraan doet."""
bron = (WORTEL / "apps" / "unifi-network" / "files" / "compose.yaml").read_text("utf-8") 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 "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