From 67cb6831c625a0e59c47e9e25f64cbb5ec4f5e78 Mon Sep 17 00:00:00 2001 From: Thomas Dannenberg Date: Tue, 23 Sep 2025 14:01:03 +0000 Subject: [PATCH] Kapitel 13/Tutorial.md aktualisiert --- Kapitel 13/Tutorial.md | 110 +++++++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 47 deletions(-) diff --git a/Kapitel 13/Tutorial.md b/Kapitel 13/Tutorial.md index 22e3fc7..e39adb5 100644 --- a/Kapitel 13/Tutorial.md +++ b/Kapitel 13/Tutorial.md @@ -630,66 +630,82 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d Inhalt: ```bash #!/usr/bin/env bash - # /usr/local/bin/nc_finalize_vod +# /usr/local/bin/nc_finalize_vod - set -euo pipefail +set -euo pipefail - CONF="/etc/nc_uploader.conf" - [[ -f "$CONF" ]] || { echo "Config fehlt: $CONF" >&2; exit 1; } - # shellcheck disable=SC1090 - source "$CONF" +# ---- Konfigurationsdatei einbinden +CONF="/etc/nc_uploader.conf" +[[ -f "$CONF" ]] || { echo "Config fehlt: $CONF" >&2; exit 1; } +# shellcheck disable=SC1090 +source "$CONF" - VOD_ID="${1:?need VOD id}" +# ---- VOD-ID als Argument +VOD_ID="${1:?need VOD id}" - # ---- Eingaben & Pfade - DROP_BASE="${DROP_BASE:?DROP_BASE fehlt in Config}" - NC_DATA="${NC_DATA:?NC_DATA fehlt in Config}" - NC_USER="${NC_USER:?NC_USER fehlt in Config}" - NC_TARGET_SUBPATH="${NC_TARGET_SUBPATH:?NC_TARGET_SUBPATH fehlt in Config}" - PHP="${PHP:-/usr/bin/php}" - OCC="${OCC:-/var/www/nextcloud/occ}" +# ---- Eingaben & Pfade aus Config +DROP_BASE="${DROP_BASE:?DROP_BASE fehlt in Config}" +NC_DATA="${NC_DATA:?NC_DATA fehlt in Config}" +NC_USER="${NC_USER:?NC_USER fehlt in Config}" +NC_TARGET_SUBPATH="${NC_TARGET_SUBPATH:?NC_TARGET_SUBPATH fehlt in Config}" +PHP="${PHP:-/usr/bin/php}" +OCC="${OCC:-/var/www/nextcloud/occ}" +CLIPPER_OUT="${CLIPPER_OUT:?CLIPPER_OUT fehlt in Config}" +SFTP_HOST="${SFTP_HOST:?}" +SFTP_PORT="${SFTP_PORT:?}" +SFTP_USER="${SFTP_USER:?}" +SFTP_KEY="${SFTP_KEY:?}" - SRC_DIR="${DROP_BASE}/${VOD_ID}" - DST_BASE="${NC_DATA}/${NC_USER}/files" - DST_DIR="${DST_BASE}/${NC_TARGET_SUBPATH}/${VOD_ID}" - SCAN_PATH="${NC_USER}/files/${NC_TARGET_SUBPATH}/${VOD_ID}" +# ---- Abgeleitete Pfade +SRC_DIR="${DROP_BASE}/${VOD_ID}" # kann leer bleiben – wird nicht mehr verwendet +DST_BASE="${NC_DATA}/${NC_USER}/files" +DST_DIR="${DST_BASE}/${NC_TARGET_SUBPATH}" +SCAN_PATH="${NC_USER}/files/${NC_TARGET_SUBPATH}" - # ---- Vorbedingungen prüfen (wir legen KEINE Benutzerstruktur an!) - [[ -d "$NC_DATA" ]] || { echo "NC_DATA nicht gefunden: $NC_DATA" >&2; exit 2; } - [[ -d "$DST_BASE" ]] || { echo "Benutzerdateien fehlen: $DST_BASE (stimmt NC_USER/NC_DATA?)" >&2; exit 3; } - [[ -d "$SRC_DIR" ]] || { echo "Drop-Ordner fehlt: $SRC_DIR" >&2; exit 4; } +# ---- Vorbedingungen prüfen +[[ -d "$NC_DATA" ]] || { echo "NC_DATA nicht gefunden: $NC_DATA" >&2; exit 2; } +[[ -d "$DST_BASE" ]] || { echo "Benutzerdateien fehlen: $DST_BASE (stimmt NC_USER/NC_DATA?)" >&2; exit 3; } - # ---- Ziel-Unterordner anlegen (falls nicht vorhanden) - mkdir -p "$DST_DIR" - chown -R www-data:www-data "$DST_BASE/$NC_TARGET_SUBPATH" +# ---- Archiv des gesamten VOD-Ordners erstellen (z. B. /srv/clipper/out/VOD123 → VOD123.tar.gz) +ARCHIVE_NAME="${VOD_ID}.tar.gz" +ARCHIVE_PATH="${CLIPPER_OUT}/${ARCHIVE_NAME}" - # ---- Dateien/Ordner verschieben - shopt -s nullglob dotglob - had_files=false - for f in "${SRC_DIR}/"*; do - had_files=true - mv -f "$f" "$DST_DIR/" - done - # Leeren Drop-Ordner entfernen (optional) - rmdir "$SRC_DIR" 2>/dev/null || true - shopt -u nullglob dotglob +if [[ -f "$ARCHIVE_PATH" ]]; then + echo "⚠️ Archiv existiert bereits: $ARCHIVE_PATH – wird nicht erneut erstellt" +else + echo "📦 Erstelle Archiv: $ARCHIVE_PATH" + tar -czf "$ARCHIVE_PATH" -C "$CLIPPER_OUT" "$VOD_ID" + echo "✅ Archiv erfolgreich erstellt" +fi - if [[ "$had_files" = false ]]; then - echo "Keine Dateien in Drop-Ordner: ${SRC_DIR}" >&2 - exit 5 - fi +# ---- Archiv direkt ins Nextcloud-Zielverzeichnis hochladen (per SFTP) +REMOTE_PATH="${DST_DIR}/${ARCHIVE_NAME}" +LOCAL_PATH="${ARCHIVE_PATH}" - # ---- Rechte setzen wie von Nextcloud erwartet - chown -R www-data:www-data "$DST_DIR" +if [[ ! -f "$LOCAL_PATH" ]]; then + echo "❌ Archiv nicht gefunden: $LOCAL_PATH" >&2 + exit 6 +fi - # ---- Index nur für diesen Pfad aktualisieren - sudo -n -u www-data "$PHP" "$OCC" files:scan --path="$SCAN_PATH" --quiet +# Hochladen per SFTP mit SSH-Key +sftp -i "$SFTP_KEY" -P "$SFTP_PORT" -oStrictHostKeyChecking=no "$SFTP_USER@$SFTP_HOST" </dev/null || true +echo "✅ Archiv erfolgreich hochgeladen nach: $REMOTE_PATH" - # ---- Erfolgsmeldung - echo "OK: $(printf '%s\n' "$DST_DIR")" +# ---- Ziel-Verzeichnis absichern (Rechte setzen) +mkdir -p "$DST_DIR" +chown -R www-data:www-data "$DST_DIR" + +# ---- Index in Nextcloud aktualisieren +sudo -n -u www-data "$PHP" "$OCC" files:scan --path="$SCAN_PATH" --quiet + +# ---- Übrig gebliebene .lock-Dateien entfernen (optional) +find "$DROP_BASE" -type f -name "*.lock" -delete 2>/dev/null || true + +# ---- Erfolgsmeldung +echo "OK: ${REMOTE_PATH}" ```