Compare commits

..

3 commits

Author SHA1 Message Date
Ramon
c50c9b3e54 release: v0.8.29
Some checks failed
Deploy server-up (dev) / deploy (push) Has been cancelled
Release / release (push) Successful in 7s
Deploy server-up (prod) / deploy (push) Successful in 13m53s
UniFi start weer op een Raspberry Pi 4: MongoDB standaard op 4.4.18, de
laatste versie zonder ARMv8.2-A-eis, met een instelbare versie en een
healthcheck die trage hardware de tijd geeft.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9Vcwu7owJZ3nj5dCf4VFT
2026-08-07 15:04:57 +02:00
Ramon
414324d6e1 fix(unifi): MongoDB-versie die op een Raspberry Pi 4 draait
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 3m22s
Het sjabloon pinde 4.4.29, maar vanaf 4.4.19 eist MongoDB ARMv8.2-A. Op een
Pi 4 (ARMv8.0-A) stopt mongod met 'Illegal instruction', wordt de container
nooit healthy en start UniFi niet.

- Standaard mongo:4.4.18, instelbaar via een geavanceerd veld.
- De reparatiecontainer draait dezelfde versie.
- Healthcheck ruimer: timeout 20s, start_period 90s, tien pogingen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9Vcwu7owJZ3nj5dCf4VFT
2026-08-07 14:59:06 +02:00
Ramon
5d97289d74 chore: dev terug op een betanummer (0.8.29-beta)
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 3m43s
De dev-branch hoort een beta te tonen; na de release van v0.8.28 stond hij
gelijk aan main. De changelogkop is een lege sectie die bij de volgende
uitgave de releaseversie wordt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9Vcwu7owJZ3nj5dCf4VFT
2026-08-07 14:10:10 +02:00
5 changed files with 84 additions and 10 deletions

View file

@ -1,3 +1,22 @@
# v0.8.29 — UniFi start weer op een Raspberry Pi 4
Het sjabloon pinde MongoDB op 4.4.29 "voor de Pi", maar juist vanaf 4.4.19 eist
MongoDB ARMv8.2-A. Een Pi 4 is ARMv8.0-A, dus mongod stopte daar meteen met
`Illegal instruction`, de container werd nooit healthy en UniFi startte niet:
`dependency failed to start: container unifi-mongo is unhealthy`.
- **Standaard 4.4.18**, de laatste versie die op een Pi 4 draait. Dit is een
patch-downgrade binnen 4.4; het datafomaat verandert daar niet mee.
- **De versie is instelbaar** (geavanceerd veld). Op een Pi 5 of een gewone
server kun je hoger — maar alleen bij een nieuwe installatie: een bestaande
4.4-database gaat niet zomaar naar 7.0.
- **De healthcheck heeft meer lucht.** Op een Pi kost het starten van de
mongo-shell zelf al seconden en duurt de eerste initialisatie op een SD-kaart
langer dan een halve minuut. Op een snelle host verandert er niets: die is na
de eerste controle gezond.
- **De reparatiecontainer volgt dezelfde versie**, zodat die niet alsnog een
image start dat de processor niet aankan.
# v0.8.28 — Installeren vanaf een ander adres # v0.8.28 — Installeren vanaf een ander adres
De ingebouwde hostnaam in `install.sh` lost niet overal op. Staat je Forgejo De ingebouwde hostnaam in `install.sh` lost niet overal op. Staat je Forgejo

View file

@ -1 +1 @@
0.8.28 0.8.29

View file

@ -27,7 +27,10 @@ services:
restart: unless-stopped restart: unless-stopped
<< service_name >>-mongo: << service_name >>-mongo:
image: mongo:4.4.29 # Vanaf 4.4.19 eist MongoDB ARMv8.2-A; een Pi 4 (Cortex-A72) heeft dat niet
# en mongod stopt daar met 'Illegal instruction'. Zie SERVER-71772. De
# versie is instelbaar, zodat je op nieuwere hardware hoger kunt.
image: mongo:<< mongo_version >>
container_name: << service_name >>-mongo container_name: << service_name >>-mongo
environment: environment:
# Dezelfde beheerdersnaam als het allereerste sjabloon gebruikte. Zo # Dezelfde beheerdersnaam als het allereerste sjabloon gebruikte. Zo
@ -50,14 +53,18 @@ services:
test: test:
- CMD-SHELL - CMD-SHELL
- 'mongo --quiet --eval "db.adminCommand({ ping: 1 })"' - 'mongo --quiet --eval "db.adminCommand({ ping: 1 })"'
interval: 10s # Ruim bemeten voor trage hardware: op een Pi kost het starten van de
timeout: 5s # mongo-shell zelf al seconden, en de eerste initialisatie op een
retries: 12 # SD-kaart duurt langer dan een halve minuut. Op een snelle host is de
start_period: 30s # container gewoon na de eerste controle gezond.
interval: 15s
timeout: 20s
retries: 10
start_period: 90s
restart: unless-stopped restart: unless-stopped
<< service_name >>-mongo-init: << service_name >>-mongo-init:
image: mongo:4.4.29 image: mongo:<< mongo_version >>
container_name: << service_name >>-mongo-init container_name: << service_name >>-mongo-init
environment: environment:
- MONGO_INITDB_ROOT_USERNAME=unifi - MONGO_INITDB_ROOT_USERNAME=unifi

View file

@ -24,7 +24,7 @@
"amd64", "amd64",
"arm64" "arm64"
], ],
"architecture_note": "Op een Raspberry Pi is een 64-bits besturingssysteem vereist. Voor een Pi 4 is de database bewust vastgezet op MongoDB 4.4.29.", "architecture_note": "Op een Raspberry Pi is een 64-bits besturingssysteem vereist. Let op de MongoDB-versie: vanaf 4.4.19 (en vanaf 5.0) eist MongoDB ARMv8.2-A, en dat heeft een Pi 4 niet. Op die hardware crasht mongod met 'Illegal instruction'. De standaard 4.4.18 werkt op alle ondersteunde architecturen.",
"web": { "web": {
"scheme": "https", "scheme": "https",
"port": 8443 "port": 8443
@ -114,6 +114,15 @@
{ {
"title": "Database", "title": "Database",
"items": [ "items": [
{
"name": "mongo_version",
"type": "str",
"title": "MongoDB-versie",
"default": "4.4.18",
"required": true,
"description": "4.4.18 is de laatste versie die op een Raspberry Pi 4 draait; nieuwer eist ARMv8.2-A. Op een Pi 5 of een gewone server kun je hoger, maar kies dat alleen bij een nieuwe installatie: een bestaande database gaat niet zomaar van 4.4 naar 7.0.",
"advanced": true
},
{ {
"name": "mongo_password", "name": "mongo_password",
"type": "str", "type": "str",

View file

@ -406,14 +406,13 @@ def test_unifi_heeft_pi_geschikte_en_correct_geinitialiseerde_mongodb():
mongo = doc["services"]["unifi-mongo"] mongo = doc["services"]["unifi-mongo"]
reparatie = doc["services"]["unifi-mongo-init"] reparatie = doc["services"]["unifi-mongo-init"]
unifi = doc["services"]["unifi"] unifi = doc["services"]["unifi"]
assert mongo["image"] == "mongo:4.4.29" assert mongo["image"] == reparatie["image"], "reparatie moet dezelfde versie draaien"
assert "./init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro" in mongo["volumes"] assert "./init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro" in mongo["volumes"]
assert any(v == "MONGO_AUTHSOURCE=admin" for v in unifi["environment"]) assert any(v == "MONGO_AUTHSOURCE=admin" for v in unifi["environment"])
assert any(v == "MONGO_AUTHSOURCE=admin" for v in mongo["environment"]) assert any(v == "MONGO_AUTHSOURCE=admin" for v in mongo["environment"])
assert unifi["depends_on"]["unifi-mongo"]["condition"] == "service_healthy" assert unifi["depends_on"]["unifi-mongo"]["condition"] == "service_healthy"
assert unifi["depends_on"]["unifi-mongo-init"]["condition"] == \ assert unifi["depends_on"]["unifi-mongo-init"]["condition"] == \
"service_completed_successfully" "service_completed_successfully"
assert reparatie["image"] == "mongo:4.4.29"
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"] assert "./init-mongo.sh:/init-mongo.sh:ro" in reparatie["volumes"]
@ -561,3 +560,43 @@ def test_catalogus_markeert_aantoonbaar_amd64_only_apps():
meta = bp.metadata(WORTEL / "apps" / naam) meta = bp.metadata(WORTEL / "apps" / naam)
assert meta["architectures"] == ["amd64"], naam assert meta["architectures"] == ["amd64"], naam
assert "Raspberry Pi" in meta["architecture_note"], naam assert "Raspberry Pi" in meta["architecture_note"], naam
def test_unifi_pint_mongodb_op_een_versie_die_op_een_pi_4_draait():
"""Vanaf 4.4.19 eist MongoDB ARMv8.2-A. Een Pi 4 is ARMv8.0-A, dus daar
stopt mongod met 'Illegal instruction' de container wordt nooit healthy
en UniFi start niet ("dependency failed to start"). Het sjabloon zegt Pi's
te ondersteunen, dus de standaardversie moet dat ook echt doen.
Zie https://jira.mongodb.org/browse/SERVER-71772
"""
app = WORTEL / "apps" / "unifi-network"
velden = {f["name"]: f for f in bp.fields(app)}
assert "mongo_version" in velden, "de versie hoort instelbaar te zijn"
standaard = str(velden["mongo_version"]["default"])
major, minor, patch = (int(x) for x in standaard.split(".")[:3])
assert (major, minor) == (4, 4), f"{standaard} draait niet op een Pi 4"
assert patch <= 18, (
f"mongo:{standaard} eist ARMv8.2-A en crasht op een Pi 4; "
"4.4.18 is de laatste die daar werkt")
assert "arm64" in bp.metadata(app)["architectures"]
assert "ARMv8.2" in bp.metadata(app)["architecture_note"], \
"leg in de notitie uit waarom de versie zo laag staat"
def test_unifi_healthcheck_is_ruim_genoeg_voor_trage_hardware():
"""Op een Pi kost het starten van de mongo-shell zelf al seconden; met een
krappe timeout is de container ongezond terwijl de database prima draait."""
app = WORTEL / "apps" / "unifi-network"
with tempfile.TemporaryDirectory() as t:
gezond = _render(app, Path(t))["services"]["unifi-mongo"]["healthcheck"]
def _sec(waarde):
return int(str(waarde).rstrip("s"))
assert _sec(gezond["timeout"]) >= 15
assert _sec(gezond["start_period"]) >= 60
# Genoeg pogingen om een trage eerste initialisatie te overleven.
assert _sec(gezond["interval"]) * gezond["retries"] >= 120