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.
`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_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

View file

@ -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.

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
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