hackspace:ausstattung:tv:tvheadend:tvheadend
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| hackspace:ausstattung:tv:tvheadend:tvheadend [2025/11/24 21:46] – angelegt spock0010 | hackspace:ausstattung:tv:tvheadend:tvheadend [2025/11/24 21:49] (aktuell) – [Dauereinsatz (Grundlage)] spock0010 | ||
|---|---|---|---|
| Zeile 9: | Zeile 9: | ||
| Es nutzt tunebare v4l devices. | Es nutzt tunebare v4l devices. | ||
| + | ===== Docker Run (einfach testen) ===== | ||
| < | < | ||
| Zeile 28: | Zeile 29: | ||
| </ | </ | ||
| + | |||
| + | |||
| + | ===== Dauereinsatz (Grundlage) ===== | ||
| + | |||
| + | < | ||
| + | # | ||
| + | # | ||
| + | # tvheadend2-manage.sh | ||
| + | # | ||
| + | # Management-Script für den TVHeadend-Docker-Container " | ||
| + | # - install | ||
| + | # - update | ||
| + | # - clean : Container stoppen + löschen (Daten bleiben erhalten) | ||
| + | # - remove | ||
| + | # - purge : Container + Image + (optional) Daten löschen | ||
| + | # - logs : Logs anzeigen (follow) | ||
| + | # - status | ||
| + | # - shell : Shell im Container öffnen | ||
| + | # | ||
| + | # Unterstützt variable Basis-Verzeichnisse: | ||
| + | # - / | ||
| + | # - / | ||
| + | # | ||
| + | |||
| + | set -euo pipefail | ||
| + | |||
| + | ######################################## | ||
| + | # Konfiguration | ||
| + | ######################################## | ||
| + | |||
| + | # Name des Containers | ||
| + | CONTAINER_NAME=" | ||
| + | |||
| + | # Docker-Image | ||
| + | IMAGE_NAME=" | ||
| + | |||
| + | # Standard-Ports (Host: | ||
| + | HTTP_PORT=" | ||
| + | HTSP_PORT=" | ||
| + | |||
| + | # Mögliche Basisverzeichnisse (Host) | ||
| + | BASE_DIR_CANDIDATES=( | ||
| + | "/ | ||
| + | "/ | ||
| + | ) | ||
| + | |||
| + | # Effektives Basisverzeichnis bestimmen | ||
| + | BASE_DIR="" | ||
| + | for c in " | ||
| + | if [ -d " | ||
| + | BASE_DIR=" | ||
| + | break | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | # Falls noch keins existiert: erstes als Default nehmen und anlegen | ||
| + | if [ -z " | ||
| + | BASE_DIR=" | ||
| + | mkdir -p " | ||
| + | fi | ||
| + | |||
| + | CONFIG_DIR=" | ||
| + | RECORDINGS_DIR=" | ||
| + | |||
| + | # Default-UID/ | ||
| + | PUID=" | ||
| + | PGID=" | ||
| + | |||
| + | ######################################## | ||
| + | # Hilfsfunktionen | ||
| + | ######################################## | ||
| + | |||
| + | log() { | ||
| + | echo " | ||
| + | } | ||
| + | |||
| + | ensure_dirs() { | ||
| + | log " | ||
| + | log " | ||
| + | log " | ||
| + | |||
| + | mkdir -p " | ||
| + | |||
| + | # Rechte setzen (damit der Container schreiben kann) | ||
| + | log "Setze Eigentümer auf PUID=$PUID, PGID=$PGID" | ||
| + | chown -R " | ||
| + | } | ||
| + | |||
| + | container_exists() { | ||
| + | docker ps -a --format ' | ||
| + | } | ||
| + | |||
| + | container_running() { | ||
| + | docker ps --format ' | ||
| + | } | ||
| + | |||
| + | ######################################## | ||
| + | # Aktionen | ||
| + | ######################################## | ||
| + | |||
| + | do_install() { | ||
| + | log " | ||
| + | ensure_dirs() | ||
| + | |||
| + | if container_exists; | ||
| + | log " | ||
| + | docker stop " | ||
| + | docker rm " | ||
| + | fi | ||
| + | |||
| + | log "Pull neues Image..." | ||
| + | docker pull " | ||
| + | |||
| + | log " | ||
| + | docker run -d \ | ||
| + | --name " | ||
| + | --restart unless-stopped \ | ||
| + | -e PUID=" | ||
| + | -e PGID=" | ||
| + | -e TZ=" | ||
| + | -e RUN_OPTS="" | ||
| + | -p " | ||
| + | -p " | ||
| + | -v " | ||
| + | -v " | ||
| + | --device / | ||
| + | --device / | ||
| + | " | ||
| + | |||
| + | log " | ||
| + | } | ||
| + | |||
| + | do_update() { | ||
| + | log " | ||
| + | |||
| + | ensure_dirs | ||
| + | |||
| + | if ! container_exists; | ||
| + | log " | ||
| + | do_install | ||
| + | return | ||
| + | fi | ||
| + | |||
| + | log "Pull neues Image..." | ||
| + | docker pull " | ||
| + | |||
| + | log " | ||
| + | docker stop " | ||
| + | |||
| + | log " | ||
| + | docker rm " | ||
| + | |||
| + | log " | ||
| + | docker run -d \ | ||
| + | --name " | ||
| + | --restart unless-stopped \ | ||
| + | -e PUID=" | ||
| + | -e PGID=" | ||
| + | -e TZ=" | ||
| + | -e RUN_OPTS="" | ||
| + | -p " | ||
| + | -p " | ||
| + | -v " | ||
| + | -v " | ||
| + | --device / | ||
| + | --device / | ||
| + | " | ||
| + | |||
| + | log " | ||
| + | } | ||
| + | |||
| + | do_clean() { | ||
| + | log " | ||
| + | |||
| + | if container_running; | ||
| + | log " | ||
| + | docker stop " | ||
| + | fi | ||
| + | |||
| + | if container_exists; | ||
| + | log " | ||
| + | docker rm " | ||
| + | else | ||
| + | log " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | do_purge() { | ||
| + | log " | ||
| + | |||
| + | # 1) Container stoppen/ | ||
| + | do_clean | ||
| + | |||
| + | # 2) Image löschen | ||
| + | if docker images --format ' | ||
| + | log " | ||
| + | docker rmi " | ||
| + | else | ||
| + | log "Image $IMAGE_NAME nicht gefunden – überspringe." | ||
| + | fi | ||
| + | |||
| + | # 3) Daten löschen (nur nach expliziter Bestätigung) | ||
| + | echo | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | read -r -p " | ||
| + | |||
| + | if [ " | ||
| + | log " | ||
| + | rm -rf " | ||
| + | log "Daten entfernt." | ||
| + | else | ||
| + | log "Daten bleiben erhalten." | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | do_logs() { | ||
| + | log "Zeige Logs von $CONTAINER_NAME (Ctrl+C zum Beenden)..." | ||
| + | docker logs -f " | ||
| + | } | ||
| + | |||
| + | do_status() { | ||
| + | log " | ||
| + | |||
| + | if container_running; | ||
| + | echo " | ||
| + | elif container_exists; | ||
| + | echo " | ||
| + | echo " | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | |||
| + | echo | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | |||
| + | echo | ||
| + | echo " | ||
| + | docker images | grep -E ' | ||
| + | |||
| + | echo | ||
| + | echo " | ||
| + | docker ps -a | grep -E ' | ||
| + | } | ||
| + | |||
| + | do_shell() { | ||
| + | if ! container_running; | ||
| + | log " | ||
| + | docker start " | ||
| + | fi | ||
| + | |||
| + | log " | ||
| + | docker exec -it " | ||
| + | } | ||
| + | |||
| + | ######################################## | ||
| + | # Main | ||
| + | ######################################## | ||
| + | |||
| + | ACTION=" | ||
| + | |||
| + | case " | ||
| + | install) | ||
| + | do_install | ||
| + | ;; | ||
| + | update) | ||
| + | do_update | ||
| + | ;; | ||
| + | clean|remove) | ||
| + | do_clean | ||
| + | ;; | ||
| + | purge) | ||
| + | do_purge | ||
| + | ;; | ||
| + | logs) | ||
| + | do_logs | ||
| + | ;; | ||
| + | status) | ||
| + | do_status | ||
| + | ;; | ||
| + | shell) | ||
| + | do_shell | ||
| + | ;; | ||
| + | *) | ||
| + | echo " | ||
| + | echo | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | ;; | ||
| + | esac | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
/app/www/public/data/attic/hackspace/ausstattung/tv/tvheadend/tvheadend.1764020760.txt.gz · Zuletzt geändert: von spock0010
