Files
infrastructure/docs/platform/llm-server/encoding/GNENC-000-DOC_Index.md
T
spektr 88b063a234 Encoding/CT-101: PVE-Host-NFS konvergiert, Berechtigungsmodell entschieden, Verifikation dokumentiert.
- 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>
2026-10-30 19:54:42 +01:00

83 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](GNENC-001-PLAN_Architecture.md) | finale Architektur, Repository-Grenzen, Ressourcenmodell und offene Entscheidungen; Infrastrukturadministratoren |
| [GNENC-002-PLAN_Pipeline.md](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](../monitoring/GNMON-000-DOC_Index.md).
Die Samba-/NFS-Anbindung auf CT-101 ist in
[GNAI-017](../../proxmox-server/lxc/ct-101-samba/GNAI-017-PLAN_Samba-NFS-Export.md)
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).
- 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. NFSv4.2-Mount-Abnahme von `ghostnet-ki` gegen `10.0.0.2` (inkl.
Schreib-/Lesetest als UID 982/983 und mv-Simulation als `ghost` über SMB)
— mit der Encoding-Implementierung.
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: Konten `gn-download`/`gn-dashboard`,
NFS-Mount, Image-Bauten, Quadlet-Units (inkl. VPN-Sidecar), Skripte,
Monitoring-Bereich (Collector, Dashboard).