Richten den Satelliten als Autostart-Dienst ein (venv + requirements + Restart): - install.sh: Linux → systemd-Unit (aria-satellite), macOS → launchd-Agent. `bash install.sh` / `bash install.sh uninstall`. - install.ps1: Windows → Scheduled Task (S4U, AtStartup+AtLogOn, Restart, hidden), loggt nach satellite.log. Admin-Check. `-Uninstall` entfernt. - WorkingDirectory = satellite/ (findet .env). README-Abschnitt ergaenzt. install.sh bash -n OK; install.ps1 manuell geprueft (kein pwsh lokal). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
120 lines
4.3 KiB
Bash
Executable File
120 lines
4.3 KiB
Bash
Executable File
#!/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 <<EOF
|
|
[Unit]
|
|
Description=ARIA Satellit (Netz-Aussenposten)
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=$RUN_USER
|
|
WorkingDirectory=$DIR
|
|
ExecStart=$VENV_PY $DIR/satellite.py
|
|
Restart=always
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
$SUDO systemctl daemon-reload
|
|
$SUDO systemctl enable --now "$SVC"
|
|
echo "✅ Dienst laeuft."
|
|
echo " Status: $SUDO systemctl status $SVC"
|
|
echo " Logs: $SUDO journalctl -u $SVC -f"
|
|
|
|
elif [ "$OS" = "Darwin" ]; then
|
|
PLIST="$HOME/Library/LaunchAgents/$PLIST_LABEL.plist"
|
|
mkdir -p "$HOME/Library/LaunchAgents"
|
|
echo "[install] Schreibe launchd-Agent $PLIST …"
|
|
cat > "$PLIST" <<EOF
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>Label</key><string>$PLIST_LABEL</string>
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>$VENV_PY</string>
|
|
<string>$DIR/satellite.py</string>
|
|
</array>
|
|
<key>WorkingDirectory</key><string>$DIR</string>
|
|
<key>RunAtLoad</key><true/>
|
|
<key>KeepAlive</key><true/>
|
|
<key>StandardOutPath</key><string>$DIR/satellite.log</string>
|
|
<key>StandardErrorPath</key><string>$DIR/satellite.log</string>
|
|
</dict>
|
|
</plist>
|
|
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
|