Files
infrastructure/docs/platform/llm-server/encoding/GNENC-000-DOC_Index.md
T
spektr 69930f815a Encoding: Pipeline-Konten, NFS-Mount, Layout und Handover-Simulation umgesetzt und verifiziert.
- workload_accounts: gn-media (GID 970), gn-download (983), gn-dashboard (984);
  gn-media als primäre Gruppe der Pipeline-Konten — AUTH_SYS ueber NFSv4 wirkte
  serverseitig nicht mit Supplementary-Gruppen (Betriebsbefund 30.10.2026);
  Sudoers des Deploy-Kontos auf (ALL:ALL) verbreitert (become_user)
- video_encoding: NFS-Client, Mount-Unit und Pipeline-Layout auf dem Export
  (10.0.0.2:/media/datenhdd3/Encoding -> /var/lib/ghostnet-pipeline, ausserhalb
  der Homes); Layout-Anlage als Dienstkonten wegen root_squash; Verifikation
  der Verzeichnisrechte als gn-encoding (2777/2770/0750/2750, Gruppe 970)
- pve_media_cron: Legacy-Crontab (chown root:root + chmod -R 0777 auf allen
  Medienplatten, alle 10 min) entfernt — haette jedes echte Berechtigungsmodell
  plattgewalzt; Backup unter /var/backups/ghostnet/pve/; verify-production
  prueft das Fehlen ab
- verify-pipeline-handover.yml: Handover-Simulation über alle Identitaeten
  (CT-101-.dlc-Drop -> gn-download -> queue -> gn-encoding -> output/state ->
  gn-dashboard); einmal vollstaendig bestanden (30.10.2026)
- Doku: GNENC-000/001/002, GNAI-017 (6.10/6.11), GNMON-001 auf Stand gebracht

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-30 20:47:42 +01:00

5.6 KiB
Raw Blame History

Video-Encoding – Dokumentationsindex und Projektstand

Dokumenten-ID: GNENC-000-DOC Stand: 2026-10-30 Status: Planungsabschluss; externe Abhängigkeiten (CT-101, PVE-Host-NFS) umgesetzt; Implementierung auf ghostnet-ki noch nicht begonnen

Dokumente

Dokument Zweck / Zielgruppe
GNENC-001-PLAN_Architecture.md finale Architektur, Repository-Grenzen, Ressourcenmodell und offene Entscheidungen; Infrastrukturadministratoren
GNENC-002-PLAN_Pipeline.md operative Pipeline: Komponenten, Konten, Verzeichnislayout, Datenfluss, Validierung, Statusmodell; Infrastrukturadministratoren und Betreiber

Dashboard und Systemmetriken sind in den Monitoring-Bereich ausgelagert: Monitoring → GNMON-000. Die Samba-/NFS-Anbindung auf CT-101 ist in GNAI-017 beschrieben.

Bestätigter Stand

  • Planungsabschluss am 19.10.2026: Die Pipeline besteht aus VPN-Sidecar (ProtonVPN), jDownloader2 (Download), Encoding-Worker (HandBrakeCLI + ffmpeg); Handover ausschließlich über das Filesystem, In-Progress-Schutz über Work-Ordner und atomares mv.
  • Speicherort: PVE-Host-Medienverbund /media/datenhdd3 (per LXC-Mount auch in CT-101 sichtbar) — NFS-Export 10.0.0.2:/media/datenhdd3/Encoding, gemountet auf /var/lib/ghostnet-encoding (ghostnet-ki hat nur eine 2-TB-NVMe; die Medienbibliothek liegt auf dem PVE-Host/CT-101).
  • CT-101 per Ansible adoptiert und PVE-Host-NFS umgesetzt (GNAI-019); Verifikation 30.10.2026: CT-101 verify-production ok=47 changed=0; PVE-Host nach autorisierter Konvergenz: Export-Root 100000:970 2775, NFSv4-only wirksam (-3), verify-production ok=17 changed=0, Idempotenz changed=0. Berechtigungsmodell entschieden: Mode 2777 auf den SMB-berührten Verzeichnissen (GNENC-002 Abschnitt 4).
  • Implementierung 30.10.2026: Konten gn-download (983), gn-dashboard (984) und Gruppe gn-media (GID 970) per workload_accounts angelegt — gn-media als primäre Gruppe der drei Pipeline-Konten (AUTH_SYS über NFSv4 wirkte serverseitig nicht mit Supplementary-Gruppen; Befund 30.10.2026, GNENC-002 Abschnitt 3); Sudoers des Deploy-Kontos auf (ALL:ALL) verbreitert (become_user für die Dienstkonten). NFS-Mount auf /var/lib/ghostnet-pipeline aktiv (außerhalb der Homes); Layout auf dem Export erzeugt und verifiziert; Handover-Simulation (verify-pipeline-handover.yml) einmal vollständig bestanden (CT-101-.dlc-Drop → gn-download → queue → gn-encoding → output/state → gn-dashboard). Legacy-Medien-Cron auf dem PVE-Host entfernt (pve_media_cron, GNAI-017 Abschnitt 6.11).
  • Verzeichnislayout: input/<Profil>/*.dlc, jd/, queue/<Profil>/<Release>/, work/, output/<Profil>/<Release>/ + output/_failed/, state/jobs/ + state/system.json.
  • Konten: gn-encoding (982, eingerichtet und verifiziert), gn-download (983, jDownloader2 + VPN-Sidecar), gn-dashboard (984, Dashboard, Monitoring-Bereich); gemeinsame Gruppe gn-media (GID 970, auch auf CT-101).
  • VPN: gesamter jDownloader2-Verkehr über ProtonVPN-WireGuard (gluetun-Sidecar mit Kill Switch); WireGuard-Credentials server-lokal in /etc/ghostnet-download/vpn.env, nicht in git.
  • Profile: drei versionierte HandBrake-Presets (SVT-AV1 10-bit, MKV, Audio-Passthrough) unter llm-server/encoding/profiles/; Auswahl über gleichnamige Ordner, keine Auto-Detection.
  • Zeitplan: dauerhaft laufende Dienste; der Worker startet neue Releases nur 00:00–06:00 Uhr Europe/Berlin, laufende Jobs laufen über das Fenster hinaus (kein Abbruch am Fensterende).
  • Validierung: Exit 0, nicht-leere Zieldatei, Videostream vorhanden, ffmpeg-Volldecodierung ohne stderr-Fehler, Dauerabweichung ≤ 1 s.
  • Fehlerbehandlung: Quarantäne pro Datei nach output/_failed/; Status failed bis zur manuellen Prüfung.
  • Abholung: fertige Outputs per SMB über CT-101 (Share [Encode], RW für ghost; Entnahme per mv räumt auf; optionaler Clean-Job nach 30 Tagen); .dlc-Drop über Share [Encode-In]; kein smbd auf ghostnet-ki.
  • Statusmodell: JSON pro Videodatei in state/jobs/, atomar geschrieben; Systemmetriken in state/system.json (Metrics-Collector des Monitoring-Bereichs).
  • Ressourcenlimits: Quadlet/cgroup (Worker MemoryMax 16G, Nice 10, IOWeight 50; jDownloader2 MemoryMax 2G, CPUWeight 50, IOWeight 20; VPN-Sidecar 256M).
  • Images: Worker als Eigenbau auf Basis des gepinnten HandBrake-Digests (linuxserver/handbrake:1.11.2-ls48, sha256:fda92bd1…48a3c7) mit python3 und ffmpeg; jlesage/jdownloader-2 und qmcgaw/gluetun gepinnt.
  • Credentials: server-lokal unter /etc/ghostnet-download/ (jdownloader/, vpn.env), nicht in git; Platzhalter im Repository.
  • Der Ansible-Grundzustand für gn-encoding ist eingerichtet und verifiziert (Check-Mode und Idempotenzlauf changed=0); es existieren noch keine Quadlets, Container oder Timer für den Encoding-Workload.

Noch offen

  1. Output-Pickup über CT-101 (SMB) einmal als geschlossener Ablauf nachweisen (Nachtest zum 30.10.2026 — der Durchlauf wurde durch den Server-Shutdown unterbrochen; GNENC-002 Abschnitt 11).
  2. Feinjustierung der Ressourcenlimits nach einem repräsentativen Encoding-Test unter gleichzeitiger Inferenzlast.
  3. Rootless-TUN-Verifizierung für den VPN-Sidecar auf dem Host.
  4. Implementierung auf ghostnet-ki: Image-Bauten, Quadlet-Units (inkl. VPN-Sidecar), Worker-Skript, JD2-Event-Scripter, Monitoring-Bereich (Collector, Dashboard).