Kapitel 13/Tutorial.md aktualisiert

This commit is contained in:
2025-08-27 12:44:17 +00:00
parent a4d0fe96e1
commit 5ddc6efbee

View File

@@ -53,39 +53,180 @@ Damit ist das Fundament gelegt.
--- ---
## Abschnitt 2 ClipperLXC einrichten (Benutzer, Verzeichnisse, Pakete, Skripte)
In diesem Abschnitt richten wir den **ClipperContainer** so ein, dass **SSHSchlüssel**, **Downloads** und **n8nAufrufe** ohne Berechtigungsfehler funktionieren. Wir arbeiten jetzt **im Terminal deines ClipperLXC als root**.
> **Entscheidung & Begründung Benutzer mit Home & Bash**
> Der Benutzer **clipper** bekommt ein **Homeverzeichnis** (`/home/clipper`) und eine **LoginShell**. So können SSHSchlüssel sauber in `~clipper/.ssh` landen und n8n später per SSH Befehle ausführen. Varianten ohne Home (SystemUser) führen bei `ssh-copy-id` zu Fehlern.
### 2.1 Benutzer und Verzeichnisse anlegen (Terminal, als root)
```bash
adduser --home /home/clipper --shell /bin/bash clipper
```
Vergib ein Passwort und bestätige die Abfragen. Danach legst du die Arbeitsordner an und überträgst den Besitz an `clipper`:
```bash
mkdir -p /srv/clipper/{inbox,watch,out,temp,logs,bin}
chown -R clipper:clipper /srv/clipper
chmod 750 /srv/clipper
```
(optional, aber hilfreich für `ssh-copy-id` später):
```bash
install -d -m 700 -o clipper -g clipper /home/clipper/.ssh
```
> **Falls du den Benutzer bereits ohne Home angelegt hast:**
> Richte ihn so nach:
> `mkdir -p /home/clipper/.ssh && chown -R clipper:clipper /home/clipper && chmod 700 /home/clipper/.ssh`
### 2.2 Pakete installieren (Terminal, als root)
```bash
apt update && apt install -y ffmpeg yt-dlp jq python3 python3-venv curl unzip inotify-tools sudo
```
- **ffmpeg**: Analyse & Schnitt
- **yt-dlp**: TwitchVOD/ClipDownloads (HLS)
- **jq**: JSONHandling
- **python3/venv**: spätere AnalyseTools
- **inotify-tools**: DateisystemEvents (optional)
- **sudo**: für gezielte Rechteerhöhungen falls nötig
### 2.3 Zentrale Konfiguration (Terminal, als root)
Lege eine Umgebungsdatei an, die beide Skripte laden:
```bash
nano /etc/clipper/clipper.env
```
Inhalt:
```
CLIPPER_INBOX=/srv/clipper/inbox
CLIPPER_IN=/srv/clipper/watch
CLIPPER_OUT=/srv/clipper/out
CLIPPER_TMP=/srv/clipper/temp
CLIPPER_LOG=/srv/clipper/logs/clipper.log
```
Dateirechte setzen, damit `clipper` sie lesen darf:
```bash
chown root:clipper /etc/clipper/clipper.env
chmod 640 /etc/clipper/clipper.env
```
### 2.4 PythonUmgebung vorbereiten (Wechsel zu Benutzer *clipper*)
Wechsle jetzt **zum Benutzer clipper**:
```bash
su - clipper
```
Erzeuge und fülle eine virtuelle Umgebung für die spätere Analyse:
```bash
python3 -m venv /srv/clipper/.venv
source /srv/clipper/.venv/bin/activate
pip install --upgrade pip
pip install numpy opencv-python-headless
deactivate
```
Wechsle für die nächsten Schritte **im Benutzer clipper** weiter.
### 2.5 Einstiegsskripte erstellen (im Benutzer *clipper*)
**AnalyseStub** prüft Eingaben, schreibt Logs, erzeugt leere Kandidatenliste:
```bash
nano /srv/clipper/bin/clipper-analyze
```
Inhalt:
```bash
#!/usr/bin/env bash
set -euo pipefail
ENV_FILE="/etc/clipper/clipper.env"; [ -r "$ENV_FILE" ] || { echo "ENV nicht lesbar: $ENV_FILE" >&2; exit 1; }; source "$ENV_FILE"
IN="$1" # absolute Datei
JOBID="${2:-manual}"
mkdir -p "$CLIPPER_TMP/$JOBID"
echo "$(date '+%F %T') [ANALYZE] job=$JOBID file=$IN" | tee -a "$CLIPPER_LOG"
OUT_JSON="$CLIPPER_TMP/$JOBID/candidates.json"
echo '[]' > "$OUT_JSON"
echo "$OUT_JSON"
```
**SchneidStub** protokolliert Schnittaufrufe, echte Logik folgt in Abschnitt 5:
```bash
nano /srv/clipper/bin/clipper-cut
```
Inhalt:
```bash
#!/usr/bin/env bash
set -euo pipefail
ENV_FILE="/etc/clipper/clipper.env"; [ -r "$ENV_FILE" ] || { echo "ENV nicht lesbar: $ENV_FILE" >&2; exit 1; }; source "$ENV_FILE"
IN="$1" # absolute Datei
RANGES_JSON="$2" # Zeitbereiche (kommt später aus Abschnitt 4)
JOBID="${3:-manual}"
mkdir -p "$CLIPPER_OUT/$JOBID"
echo "$(date '+%F %T') [CUT] job=$JOBID file=$IN ranges=$RANGES_JSON" | tee -a "$CLIPPER_LOG"
exit 0
```
Rechte setzen und Eigentümer korrigieren:
```bash
chmod +x /srv/clipper/bin/clipper-*
chown -R clipper:clipper /srv/clipper/bin
```
### 2.6 Logrotation (zurück zu root)
Beende die Session (`exit`) und kehre zu **root** zurück. Richte Logrotation ein:
```bash
nano /etc/logrotate.d/clipper
```
Inhalt:
```
/srv/clipper/logs/*.log {
rotate 14
daily
missingok
notifempty
compress
delaycompress
copytruncate
}
```
> **Schnelltest (optional):**
> Zurück im **Benutzer clipper**:
> `/srv/clipper/bin/clipper-analyze /srv/clipper/watch/demo.mp4 job-001`
> `/srv/clipper/bin/clipper-cut /srv/clipper/watch/demo.mp4 /srv/clipper/temp/job-001/ranges.json job-001`
> `tail -n 50 /srv/clipper/logs/clipper.log`
Mit dieser Einrichtung sind **SSHSchlüssel**, **Berechtigungen** und **Pfade** konsistent. `ssh-copy-id` aus Abschnitt 3 funktioniert dadurch ohne Fehlermeldungen und n8n kann die Skripte stabil starten.
## Abschnitt 2 Clipper-LXC einrichten (Basisdienste & Einstiegsskripte) ## Abschnitt 2 Clipper-LXC einrichten (Basisdienste & Einstiegsskripte)
Jetzt richten wir Clipper so ein, dass er klare Einstiegspunkte zum **Analysieren** und **Schneiden** hat. Die eigentliche Logik füllen wir in Abschnitt 4 und 5, hier bauen wir das Gerüst. Damit der Benutzer `clipper` sauber funktioniert, legen wir ihn **immer mit Home-Verzeichnis und Shell** an. So können wir später SSH-Schlüssel ohne Fehler hinterlegen.
### Benutzer und Verzeichnisse ### Benutzer und Verzeichnisse
Zuerst legen wir den Service-Benutzer an und weisen ihm die Arbeitsordner zu: Als root:
```bash
adduser --home /home/clipper --shell /bin/bash clipper
```
Vergib ein Passwort und bestätige die Abfragen. Danach richte das Konfigurationsverzeichnis ein:
```bash ```bash
adduser clipper
mkdir -p /etc/clipper mkdir -p /etc/clipper
chown root:clipper /etc/clipper chown root:clipper /etc/clipper
chmod 750 /etc/clipper chmod 750 /etc/clipper
``` ```
### Pakete installieren ### Pakete installieren
```bash ```bash
apt install -y ffmpeg jq python3 python3-venv curl unzip inotify-tools sudo apt install -y ffmpeg jq python3 python3-venv curl unzip inotify-tools sudo
``` ```
- **ffmpeg** für Analyse und Schnitt
- **jq** für JSON-Verarbeitung
- **python3/venv** für optionale Analyse-Tools (z. B. Szenenerkennung, Face-Detection)
- **inotify-tools** für Dateisystem-Events
- **sudo** damit der Benutzer clipper bei Bedarf Rechte anheben kann
Anschließend geben wir dem Benutzer clipper Sudo-Rechte: - **ffmpeg**: Kern für Analyse/Schnitt
```bash - **jq**: JSON-Auswertung
usermod -aG sudo clipper - **python3/venv**: Virtuelle Umgebung für Analyse
``` - **inotify-tools**: Events
- **sudo**: für Rechteeskalation
### Konfiguration anlegen ### Konfiguration anlegen
Wir legen eine Konfigurationsdatei an, die von allen Skripten geladen wird:
```bash ```bash
nano /etc/clipper/clipper.env nano /etc/clipper/clipper.env
``` ```
@@ -96,11 +237,14 @@ CLIPPER_OUT=/srv/clipper/out
CLIPPER_TMP=/srv/clipper/temp CLIPPER_TMP=/srv/clipper/temp
CLIPPER_LOG=/srv/clipper/logs/clipper.log CLIPPER_LOG=/srv/clipper/logs/clipper.log
``` ```
Datei speichern und mit `chown root:clipper /etc/clipper/clipper.env && chmod 640 /etc/clipper/clipper.env` die Rechte setzen.
Rechte setzen:
```bash
chown root:clipper /etc/clipper/clipper.env
chmod 640 /etc/clipper/clipper.env
```
### Python-Umgebung vorbereiten ### Python-Umgebung vorbereiten
Die eigentliche Analyse binden wir erst in Abschnitt 4 ein. Damit die Basis steht, richten wir jetzt schon eine virtuelle Umgebung ein:
```bash ```bash
su - clipper su - clipper
python3 -m venv /srv/clipper/.venv python3 -m venv /srv/clipper/.venv
@@ -109,17 +253,11 @@ pip install --upgrade pip
pip install numpy opencv-python-headless pip install numpy opencv-python-headless
``` ```
So haben wir erste Bibliotheken, mit denen Szenen- und Gesichtserkennung später möglich wird. ### Einstiegsskripte erstellen
**Analyse-Stub:**
### Einstiegsskripte (Stubs)
Wir erstellen zwei Einstiegspunkte, die n8n direkt aufruft. Sie tun noch nichts außer Logging und Validierung.
**Analyse-Stub**
```bash ```bash
nano /srv/clipper/bin/clipper-analyze nano /srv/clipper/bin/clipper-analyze
``` ```
Inhalt:
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
@@ -133,11 +271,10 @@ echo '[]' > "$OUT_JSON"
echo "$OUT_JSON" echo "$OUT_JSON"
``` ```
**Schneid-Stub** **Schneid-Stub:**
```bash ```bash
nano /srv/clipper/bin/clipper-cut nano /srv/clipper/bin/clipper-cut
``` ```
Inhalt:
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
@@ -156,25 +293,10 @@ chmod +x /srv/clipper/bin/clipper-*
chown -R clipper:clipper /srv/clipper/bin chown -R clipper:clipper /srv/clipper/bin
``` ```
### Direktaufruf und Tests ### Logs und Rotation
Wir verzichten bewusst auf systemd-Templates und rufen die Skripte direkt über n8n oder manuell auf. Beispiel:
```bash
su - clipper
/srv/clipper/bin/clipper-analyze /srv/clipper/watch/demo.mp4 job-001
/srv/clipper/bin/clipper-cut /srv/clipper/watch/demo.mp4 /srv/clipper/temp/job-001/ranges.json job-001
tail -n 50 /srv/clipper/logs/clipper.log
```
Wenn alles passt, siehst du Einträge `[ANALYZE]` und `[CUT]` mit deiner Job-ID.
### Logrotation
Zum Schluss sorgen wir dafür, dass Logs nicht unendlich wachsen:
```bash ```bash
nano /etc/logrotate.d/clipper nano /etc/logrotate.d/clipper
``` ```
Inhalt:
``` ```
/srv/clipper/logs/*.log { /srv/clipper/logs/*.log {
rotate 14 rotate 14
@@ -189,9 +311,6 @@ Inhalt:
--- ---
Damit ist der Clipper-LXC vorbereitet: Benutzer, Verzeichnisse, Pakete, Konfiguration und Einstiegsskripte sind eingerichtet. In den nächsten Abschnitten bauen wir die Anbindung an Twitch/n8n, implementieren die Analyse-Logik (inklusive Facecam, Hochformat und Untertitel) und fügen den eigentlichen Schnitt hinzu, bevor alles sauber in Nextcloud abgelegt wird.
## Abschnitt 3 n8n ↔ Twitch: VOD & Clips importieren, in Nextcloud ablegen, Clipper starten ## Abschnitt 3 n8n ↔ Twitch: VOD & Clips importieren, in Nextcloud ablegen, Clipper starten
In diesem Abschnitt verbinden wir n8n mit Twitch, Nextcloud und dem Clipper. Das Ziel: n8n erkennt automatisch neue VODs auf Twitch, lädt sie zusammen mit Clips herunter, legt sie in Nextcloud ab und startet dann die Analyse auf dem Clipper. Wir gehen Schritt für Schritt vor immer mit klaren Hinweisen, ob wir uns gerade in der **n8nWeboberfläche**, im **Terminal** oder in **Nextcloud** befinden. In diesem Abschnitt verbinden wir n8n mit Twitch, Nextcloud und dem Clipper. Das Ziel: n8n erkennt automatisch neue VODs auf Twitch, lädt sie zusammen mit Clips herunter, legt sie in Nextcloud ab und startet dann die Analyse auf dem Clipper. Wir gehen Schritt für Schritt vor immer mit klaren Hinweisen, ob wir uns gerade in der **n8nWeboberfläche**, im **Terminal** oder in **Nextcloud** befinden.