Compare commits
No commits in common. "c50c9b3e54ba452b8b37594ac52bb6672e2be2b5" and "850a80f86b8144afcd5e8d54d498bdeacc19469d" have entirely different histories.
c50c9b3e54
...
850a80f86b
5 changed files with 10 additions and 84 deletions
19
CHANGELOG.md
19
CHANGELOG.md
|
|
@ -1,22 +1,3 @@
|
|||
# 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
|
||||
|
||||
De ingebouwde hostnaam in `install.sh` lost niet overal op. Staat je Forgejo
|
||||
|
|
|
|||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
|||
0.8.29
|
||||
0.8.28
|
||||
|
|
|
|||
|
|
@ -27,10 +27,7 @@ services:
|
|||
restart: unless-stopped
|
||||
|
||||
<< service_name >>-mongo:
|
||||
# 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 >>
|
||||
image: mongo:4.4.29
|
||||
container_name: << service_name >>-mongo
|
||||
environment:
|
||||
# Dezelfde beheerdersnaam als het allereerste sjabloon gebruikte. Zo
|
||||
|
|
@ -53,18 +50,14 @@ services:
|
|||
test:
|
||||
- CMD-SHELL
|
||||
- 'mongo --quiet --eval "db.adminCommand({ ping: 1 })"'
|
||||
# Ruim bemeten voor trage hardware: op een Pi kost het starten van de
|
||||
# mongo-shell zelf al seconden, en de eerste initialisatie op een
|
||||
# SD-kaart duurt langer dan een halve minuut. Op een snelle host is de
|
||||
# container gewoon na de eerste controle gezond.
|
||||
interval: 15s
|
||||
timeout: 20s
|
||||
retries: 10
|
||||
start_period: 90s
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 12
|
||||
start_period: 30s
|
||||
restart: unless-stopped
|
||||
|
||||
<< service_name >>-mongo-init:
|
||||
image: mongo:<< mongo_version >>
|
||||
image: mongo:4.4.29
|
||||
container_name: << service_name >>-mongo-init
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=unifi
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
"amd64",
|
||||
"arm64"
|
||||
],
|
||||
"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.",
|
||||
"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.",
|
||||
"web": {
|
||||
"scheme": "https",
|
||||
"port": 8443
|
||||
|
|
@ -114,15 +114,6 @@
|
|||
{
|
||||
"title": "Database",
|
||||
"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",
|
||||
"type": "str",
|
||||
|
|
|
|||
|
|
@ -406,13 +406,14 @@ def test_unifi_heeft_pi_geschikte_en_correct_geinitialiseerde_mongodb():
|
|||
mongo = doc["services"]["unifi-mongo"]
|
||||
reparatie = doc["services"]["unifi-mongo-init"]
|
||||
unifi = doc["services"]["unifi"]
|
||||
assert mongo["image"] == reparatie["image"], "reparatie moet dezelfde versie draaien"
|
||||
assert mongo["image"] == "mongo:4.4.29"
|
||||
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 mongo["environment"])
|
||||
assert unifi["depends_on"]["unifi-mongo"]["condition"] == "service_healthy"
|
||||
assert unifi["depends_on"]["unifi-mongo-init"]["condition"] == \
|
||||
"service_completed_successfully"
|
||||
assert reparatie["image"] == "mongo:4.4.29"
|
||||
assert reparatie["depends_on"]["unifi-mongo"]["condition"] == "service_healthy"
|
||||
assert reparatie["restart"] == "no"
|
||||
assert "./init-mongo.sh:/init-mongo.sh:ro" in reparatie["volumes"]
|
||||
|
|
@ -560,43 +561,3 @@ def test_catalogus_markeert_aantoonbaar_amd64_only_apps():
|
|||
meta = bp.metadata(WORTEL / "apps" / naam)
|
||||
assert meta["architectures"] == ["amd64"], 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
|
||||
|
|
|
|||
Loading…
Reference in a new issue