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

95 lines
5.6 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).
- 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).