Clone
2
Home
l.kirchner edited this page 2026-06-13 14:37:04 +02:00

proxmox-scripts — Wiki

Lebende Doku zum Skript-Repo. Verbindlich sind README + Code; hier stehen Betriebs-Hinweise, Konventionen und Lessons.

Skript-Katalog & Betriebs-Hinweise

App LXC im Einsatz Betriebs-Doku
devpi devpi /root-Notizen im LXC
webapp (Pattern-Vorlage) README im Repo
nexus nexus (10.11.20.66) nexus-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. 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
runner — (PR #6 in Review) wird nach Anlage hier ergänzt (instanzweit, Label homelab)

Konventionen (Kurzfassung — Details im README)

  • 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.
  • 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.
  • Beiträge nur als PR mit Cross-Review — keine Direkt-Pushes auf main.

Lessons Learned

Datum Lesson
2026-06-11 source build.func vergessen → Script bricht mit „command not found". Zweimal passiert (nexus-db: im Review gefangen; authentik: in Produktion, weil Direkt-Commit ohne Review). → PR-Pflicht + CI-Source-Check (PR #5).
2026-06-11 Eingaben mit unsichtbaren Nicht-UTF-8-Bytes (VLAN 20) brechen pct create. → Input-Validierung in build.func: sichtbar ablehnen statt still strippen (PR #5).
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 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=CSQL_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

  • PR #9 (Issue #8): nexus-db UTF8-Encoding-Härtung — Codex-Review durch, wartet auf Merge-Go (Lutz).
  • Nach Merge von PR #9: Issue #8 schließen.