Wiki: Lessons — initdb-Encoding eingefroren (SQL_ASCII-Schaden, Issue #8)

2026-06-13 14:37:04 +02:00
parent bc00b25654
commit de06154f72
+5 -4
@@ -9,7 +9,7 @@ Lebende Doku zum Skript-Repo. Verbindlich sind README + Code; hier stehen Betrie
| devpi | devpi | `/root`-Notizen im LXC | | devpi | devpi | `/root`-Notizen im LXC |
| webapp | (Pattern-Vorlage) | README im Repo | | webapp | (Pattern-Vorlage) | README im Repo |
| **nexus** | `nexus` (10.11.20.66) | [nexus-Wiki → Betrieb-und-Deploy](https://gitea.luki-net.org/l.kirchner/nexus-hub/wiki/Betrieb-und-Deploy) — Runner, Deploy, Logs, Healthz | | **nexus** | `nexus` (10.11.20.66) | [nexus-Wiki → Betrieb-und-Deploy](https://gitea.luki-net.org/l.kirchner/nexus-hub/wiki/Betrieb-und-Deploy) — Runner, Deploy, Logs, Healthz |
| **nexus-db** | `nexus-db` (10.11.20.67) | DSN/Smokes: nexus-Wiki, Konfigwerte-Tabelle; Credentials: `/root/nexus-db.credentials` | | **nexus-db** | `nexus-db` (10.11.20.67) | DSN/Smokes: nexus-Wiki, Konfigwerte-Tabelle; Credentials: `/root/nexus-db.credentials`. Encoding **UTF8** erzwungen + geprüft (Issue #8). Wartung: `su - postgres -c "psql -d nexus"` (kein sudo auf dem LXC) |
| **authentik** | `authentik` (10.11.20.22, `auth.luki-net.org`) | Runbook + Blueprints: nexus-Wiki bzw. `nexus-hub/infra/authentik/`; Bootstrap-Token nach Einrichtung rotieren | | **authentik** | `authentik` (10.11.20.22, `auth.luki-net.org`) | Runbook + Blueprints: nexus-Wiki bzw. `nexus-hub/infra/authentik/`; Bootstrap-Token nach Einrichtung rotieren |
| runner | — (PR #6 in Review) | wird nach Anlage hier ergänzt (instanzweit, Label `homelab`) | | runner | — (PR #6 in Review) | wird nach Anlage hier ergänzt (instanzweit, Label `homelab`) |
@@ -18,6 +18,7 @@ Lebende Doku zum Skript-Repo. Verbindlich sind README + Code; hier stehen Betrie
- Zwei Dateien pro App (`ct/` + `install/`), beide sourcen die Shared-Libs per curl — **jedes ct-Script MUSS `build.func` sourcen** (CI-Check ab PR #5). - Zwei Dateien pro App (`ct/` + `install/`), beide sourcen die Shared-Libs per curl — **jedes ct-Script MUSS `build.func` sourcen** (CI-Check ab PR #5).
- Unprivilegierte LXCs, dedizierte App-User, Secrets nur in `0600`-Dateien auf dem Ziel-Host. - Unprivilegierte LXCs, dedizierte App-User, Secrets nur in `0600`-Dateien auf dem Ziel-Host.
- sudoers-Regeln matchen **wortwörtlich inkl. Argumenten** — nur exakte Befehle mit sudo aufrufen. - sudoers-Regeln matchen **wortwörtlich inkl. Argumenten** — nur exakte Befehle mit sudo aufrufen.
- **DB-Installer:** Locale **vor** der PostgreSQL-Installation aktiv machen, DB explizit mit `TEMPLATE template0 ENCODING 'UTF8' LC_COLLATE/LC_CTYPE 'en_US.UTF-8'` anlegen und das Encoding nach dem Install verifizieren (Helfer `ensure_utf8_locale_active` / `assert_db_encoding_utf8` in `lib/install.func`). Postgres-Wartung per `su - postgres -c …`, nicht `sudo` (die minimalen LXCs haben kein sudo).
- Runner-Trennung: repo-scoped mit Deploy-Rechten auf dem Produktions-LXC (`nexus`) vs. instanzweit ohne Privilegien (`homelab`). Nie vermischen. - Runner-Trennung: repo-scoped mit Deploy-Rechten auf dem Produktions-LXC (`nexus`) vs. instanzweit ohne Privilegien (`homelab`). Nie vermischen.
- **Beiträge nur als PR mit Cross-Review** — keine Direkt-Pushes auf main. - **Beiträge nur als PR mit Cross-Review** — keine Direkt-Pushes auf main.
@@ -30,9 +31,9 @@ Lebende Doku zum Skript-Repo. Verbindlich sind README + Code; hier stehen Betrie
| 2026-06-11 | Config-Syntax muss zur **gepinnten** Image-Version passen: vLLM v0.13 verlangt `--limit-mm-per-prompt` als JSON — Pinning allein schützt nicht. Smoke-Tests als Akzeptanzkriterium fangen das. | | 2026-06-11 | Config-Syntax muss zur **gepinnten** Image-Version passen: vLLM v0.13 verlangt `--limit-mm-per-prompt` als JSON — Pinning allein schützt nicht. Smoke-Tests als Akzeptanzkriterium fangen das. |
| 2026-06-12 | Gruppenmitgliedschaften (z. B. docker) werden beim Prozessstart eingefroren — User **vor** dem Daemon-Start in Gruppen aufnehmen (in `runner`-Installer verbaut). | | 2026-06-12 | Gruppenmitgliedschaften (z. B. docker) werden beim Prozessstart eingefroren — User **vor** dem Daemon-Start in Gruppen aufnehmen (in `runner`-Installer verbaut). |
| 2026-06-12 | Repo-scoped Runner bedienen keine anderen Repos — Runs hängen still in `queued`. Scope bei der Registrierung bewusst wählen; instanzweit = Site-Admin-Token. | | 2026-06-12 | Repo-scoped Runner bedienen keine anderen Repos — Runs hängen still in `queued`. Scope bei der Registrierung bewusst wählen; instanzweit = Site-Admin-Token. |
| 2026-06-13 | **Encoding wird bei initdb eingefroren — eine kaputte Locale zur Installationszeit ist Datenbank-Schaden, kein Schönheitsfehler.** nexus-db lief vor dem locale-Fix bei initdb unter `LANG=C``SQL_ASCII`-Cluster → psycopg3 liefert bytes → SQLAlchemy crasht (`db: unreachable`). → Locale **aktiv** vor dem PG-Install, DB explizit mit `template0`/`ENCODING 'UTF8'`/`en_US.UTF-8` anlegen, Encoding nach Install prüfen und sonst abbrechen (Issue #8 / PR #9). |
## Offene Punkte ## Offene Punkte
- PR #5 (K-114): Input-Validierung, Mini-CI, SSH-Root-Login-Prompt, locale-Fix — CI wartet auf den `homelab`-Runner. - PR #9 (Issue #8): nexus-db UTF8-Encoding-Härtung — Codex-Review durch, wartet auf Merge-Go (Lutz).
- PR #6: `ct/runner.sh` — Codex-Review ausstehend. - Nach Merge von PR #9: Issue #8 schließen.
- Nach Runner-Anlage: Katalog-Zeile `runner` hier vervollständigen.