#!/bin/bash # Unraid media-node installer — geen image build, alleen download + docker run set -euo pipefail MASTER_URL="${MASTER_URL:-__MASTER_PUBLIC_URL__}" TOKEN="" NAME="" PUBLIC_URL="" MOVIES="" SERIES="" PORT="${PORT:-8080}" APPDATA="${APPDATA:-/mnt/user/appdata/media-node}" usage() { cat </dev/null 2>&1; then echo "Docker niet gevonden. Op Unraid: Docker service aanzetten." exit 1 fi prompt() { local label="$1" var="$2" current="$3" flag="$4" if [ -n "$current" ]; then eval "$var=\"\$current\"" return fi if [ -t 0 ]; then local val="" printf "%s" "$label" read -r val eval "$var=\"\$val\"" return fi echo "Ontbrekende optie: $flag (bij curl|bash alle flags meegeven)." usage exit 1 } echo "=== STH Media Node — Unraid install ===" echo "Master: $MASTER_URL" echo prompt "Enrollment token: " TOKEN "$TOKEN" "--token" prompt "Node-naam [Unraid-Node-01]: " NAME "${NAME}" "--name" if [ -z "$NAME" ]; then NAME="Unraid-Node-01"; fi prompt "Publieke URL (https://node01....): " PUBLIC_URL "$PUBLIC_URL" "--public-url" prompt "Films-pad [/mnt/user/movies]: " MOVIES "${MOVIES}" "--movies" if [ -z "$MOVIES" ] && [ -t 0 ]; then MOVIES="/mnt/user/movies"; fi if [ -z "$MOVIES" ]; then echo "Ontbrekende optie: --movies" exit 1 fi if [ -t 0 ] && [ -z "$SERIES" ]; then printf "Series-pad (leeg = overslaan): " read -r SERIES || true fi TOKEN="$(echo -n "$TOKEN" | tr -d '\r\n')" NAME="$(echo -n "$NAME" | tr -d '\r\n')" PUBLIC_URL="$(echo -n "$PUBLIC_URL" | sed 's:/*$::')" MOVIES="$(echo -n "$MOVIES" | tr -d '\r\n')" SERIES="$(echo -n "$SERIES" | tr -d '\r\n')" MASTER_URL="$(echo -n "$MASTER_URL" | sed 's:/*$::')" if [ -z "$TOKEN" ] || [ -z "$NAME" ] || [ -z "$PUBLIC_URL" ] || [ -z "$MOVIES" ]; then echo "Token, naam, public-url en movies zijn verplicht." exit 1 fi if [ ! -d "$MOVIES" ]; then echo "Waarschuwing: films-pad bestaat niet: $MOVIES" fi if [ -n "$SERIES" ] && [ ! -d "$SERIES" ]; then echo "Waarschuwing: series-pad bestaat niet: $SERIES" fi ARCH="$(uname -m)" case "$ARCH" in x86_64|amd64) BIN_NAME="media-node-linux-amd64" ;; aarch64|arm64) BIN_NAME="media-node-linux-arm64" ;; *) echo "Niet-ondersteunde architectuur: $ARCH"; exit 1 ;; esac mkdir -p "$APPDATA/config/credentials" "$APPDATA/data" "$APPDATA/bin" chown -R 99:100 "$APPDATA" 2>/dev/null || true BIN_PATH="$APPDATA/bin/media-node" echo "Binary downloaden ($BIN_NAME)..." curl -fsSL "$MASTER_URL/install/$BIN_NAME" -o "$BIN_PATH" chmod +x "$BIN_PATH" # Oude container weg docker rm -f media-node >/dev/null 2>&1 || true # Alpine met gemounte static binary — geen custom image build VOLUMES=( -v "$APPDATA/config:/etc/media-node" -v "$APPDATA/data:/var/lib/media-node" -v "$BIN_PATH:/usr/local/bin/media-node:ro" -v /etc/ssl/certs:/etc/ssl/certs:ro -v "$MOVIES:/media/movies:ro" ) ENV_SERIES="" if [ -n "$SERIES" ]; then VOLUMES+=(-v "$SERIES:/media/series:ro") ENV_SERIES="/media/series" fi echo "Container starten..." docker run -d \ --name media-node \ --restart unless-stopped \ -p "${PORT}:8080" \ -e "MEDIA_NODE_NAME=$NAME" \ -e "MEDIA_NODE_MASTER_URL=$MASTER_URL" \ -e "MEDIA_NODE_PUBLIC_URL=$PUBLIC_URL" \ -e "MEDIA_NODE_MOVIES=/media/movies" \ -e "MEDIA_NODE_SERIES=$ENV_SERIES" \ -e "MEDIA_NODE_ENROLLMENT_TOKEN=$TOKEN" \ -e "TZ=${TZ:-Europe/Amsterdam}" \ --user 99:100 \ "${VOLUMES[@]}" \ --entrypoint /usr/local/bin/media-node \ alpine:3.20 \ run echo echo "Klaar. Logs: docker logs -f media-node" echo "Status: in Admin → Nodes (moet online worden)" echo "NPM: $PUBLIC_URL → Unraid-LAN-IP:$PORT (buffering uit, Force SSL)" echo echo "Na succes: token staat opgeslagen in appdata — herstart zonder nieuwe token is ok."