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:
parent
14515143fc
commit
9fa08b79b7
5 changed files with 35 additions and 13 deletions
17
CHANGELOG.md
17
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.
|
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
|
||||||
|
|
|
||||||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
0.8.31-beta
|
0.8.31
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue