- pve_nfs_export: NFSv4-only via /etc/nfs.conf ([nfsd] vers2/vers3=n; Debian-13-Unit startet nfsd ohne EnvironmentFile, RPCNFSDARGS wirkungslos), Restart-Handler, selbstheilende nfsd-Versionspruefung; verify-production um Export-Root- und Versions-Assertions erweitert - Autorisierte Konvergenz auf dem PVE-Host: Export-Root 100000:970 2775, /proc/fs/nfsd/versions -3 +4 +4.1 +4.2, verify ok=17 changed=0, Idempotenz changed=0 - Berechtigungsmodell (Betreiberentscheidung 30.10.2026): Mode 2777 auf input/- und output/-Baum der Pipeline (LXC-idmap-Diskrepanz guest-root vs. UID 982/983:970) - GNENC-000/001/002, GNAI-017/018/019 auf NFS-auf-PVE-Host-Stand gebracht; CT-101-Verifikation ok=47 changed=0 dokumentiert; AGENTS.md-Seccomp-Hinweis korrigiert Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
4.8 KiB
4.8 KiB
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-Export10.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-productionok=47 changed=0; PVE-Host nach autorisierter Konvergenz: Export-Root100000:970 2775, NFSv4-only wirksam (-3),verify-productionok=17 changed=0, Idempotenzchanged=0. Berechtigungsmodell entschieden: Mode 2777 auf den SMB-berührten Verzeichnissen (GNENC-002 Abschnitt 4). - 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 Gruppegn-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/; Statusfailedbis zur manuellen Prüfung. - Abholung: fertige Outputs per SMB über CT-101 (Share
[Encode], RW fürghost; Entnahme permvräumt auf; optionaler Clean-Job nach 30 Tagen);.dlc-Drop über Share[Encode-In]; kein smbd aufghostnet-ki. - Statusmodell: JSON pro Videodatei in
state/jobs/, atomar geschrieben; Systemmetriken instate/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-2undqmcgaw/gluetungepinnt. - Credentials: server-lokal unter
/etc/ghostnet-download/(jdownloader/,vpn.env), nicht in git; Platzhalter im Repository. - Der Ansible-Grundzustand für
gn-encodingist eingerichtet und verifiziert (Check-Mode und Idempotenzlaufchanged=0); es existieren noch keine Quadlets, Container oder Timer für den Encoding-Workload.
Noch offen
- NFSv4.2-Mount-Abnahme von
ghostnet-kigegen10.0.0.2(inkl. Schreib-/Lesetest als UID 982/983 und mv-Simulation alsghostüber SMB) — mit der Encoding-Implementierung. - Feinjustierung der Ressourcenlimits nach einem repräsentativen Encoding-Test unter gleichzeitiger Inferenzlast.
- Rootless-TUN-Verifizierung für den VPN-Sidecar auf dem Host.
- Implementierung auf ghostnet-ki: Konten
gn-download/gn-dashboard, NFS-Mount, Image-Bauten, Quadlet-Units (inkl. VPN-Sidecar), Skripte, Monitoring-Bereich (Collector, Dashboard).