#!/usr/bin/env bash # # ARIA Satellit — Dienst-Installer fuer Linux (systemd) und macOS (launchd). # # bash install.sh installiert + startet den Dienst # bash install.sh uninstall entfernt den Dienst # # Legt ein venv an (.venv), installiert requirements.txt und richtet einen # Autostart-Dienst ein, der satellite.py aus DIESEM Ordner startet (damit die # .env gefunden wird) und bei Absturz neu startet. # # WICHTIG: Der Satellit muss im ECHTEN Ziel-LAN laufen (siehe README) — auf einer # Maschine, die physisch im Netz der Geraete haengt. Docker Desktop taugt nicht. set -euo pipefail DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SVC="aria-satellite" PLIST_LABEL="de.aria.satellite" OS="$(uname -s)" ACTION="${1:-install}" # ─── Uninstall ────────────────────────────────────────────────────── if [ "$ACTION" = "uninstall" ]; then if [ "$OS" = "Linux" ]; then SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo" $SUDO systemctl disable --now "$SVC" 2>/dev/null || true $SUDO rm -f "/etc/systemd/system/$SVC.service" $SUDO systemctl daemon-reload echo "systemd-Dienst '$SVC' entfernt." elif [ "$OS" = "Darwin" ]; then PLIST="$HOME/Library/LaunchAgents/$PLIST_LABEL.plist" launchctl unload "$PLIST" 2>/dev/null || true rm -f "$PLIST" echo "launchd-Agent '$PLIST_LABEL' entfernt." fi exit 0 fi # ─── venv + Abhaengigkeiten ───────────────────────────────────────── PY="$(command -v python3 || command -v python || true)" [ -n "$PY" ] || { echo "Python 3 nicht gefunden. Bitte installieren."; exit 1; } if [ ! -d "$DIR/.venv" ]; then echo "[install] Lege venv an …" if ! "$PY" -m venv "$DIR/.venv" 2>/dev/null; then echo "venv-Erstellung fehlgeschlagen. Auf Debian/Ubuntu: sudo apt install python3-venv" exit 1 fi fi VENV_PY="$DIR/.venv/bin/python" echo "[install] Installiere Abhaengigkeiten …" "$VENV_PY" -m pip install --upgrade pip >/dev/null "$VENV_PY" -m pip install -r "$DIR/requirements.txt" if [ ! -f "$DIR/.env" ]; then echo "⚠ Keine .env gefunden — bitte anlegen: cp .env.example .env (RVS-Zugang + SATELLITE_LOCATION)" fi # ─── Dienst einrichten ────────────────────────────────────────────── if [ "$OS" = "Linux" ]; then RUN_USER="${SUDO_USER:-$(id -un)}" UNIT="/etc/systemd/system/$SVC.service" SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo" echo "[install] Schreibe systemd-Unit $UNIT (User=$RUN_USER) …" $SUDO tee "$UNIT" >/dev/null < "$PLIST" < Label$PLIST_LABEL ProgramArguments $VENV_PY $DIR/satellite.py WorkingDirectory$DIR RunAtLoad KeepAlive StandardOutPath$DIR/satellite.log StandardErrorPath$DIR/satellite.log EOF launchctl unload "$PLIST" 2>/dev/null || true launchctl load "$PLIST" echo "✅ Agent geladen." echo " Logs: tail -f $DIR/satellite.log" echo " Hinweis: macOS fragt evtl. nach 'Lokales Netzwerk'-Zugriff — erlauben, sonst findet der Satellit keine Geraete." else echo "Unbekanntes OS: $OS (dieses Skript kann Linux/macOS; fuer Windows: install.ps1)" exit 1 fi