#!/usr/bin/env bash # ARIA Host-Agent — Service-Installer (systemd). # # Installiert die Binary nach /usr/local/bin, die .env nach /etc/aria-host-agent # und richtet den systemd-Dienst ein (enable + start). # # Nutzung: # sudo ./install-service.sh /pfad/zur/.env # .env-Pfad direkt uebergeben # sudo ./install-service.sh # ncurses-Dateidialog (dialog) # # Die Binary wird unter ./dist/aria-host-agent oder ./aria-host-agent erwartet # (vorher ./build.sh oder ./build-native.sh ausfuehren), oder als 2. Argument. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" BIN_DST="/usr/local/bin/aria-host-agent" ETC_DIR="/etc/aria-host-agent" UNIT_DST="/etc/systemd/system/aria-host-agent.service" die() { echo "FEHLER: $*" >&2; exit 1; } [ "$(id -u)" -eq 0 ] || die "Bitte mit sudo/root ausfuehren: sudo $0 $*" # ── Binary finden (Arg 2 > dist/ > ./) ────────────────────────────── BIN_SRC="${2:-}" if [ -z "$BIN_SRC" ]; then if [ -x "$SCRIPT_DIR/dist/aria-host-agent" ]; then BIN_SRC="$SCRIPT_DIR/dist/aria-host-agent" elif [ -x "$SCRIPT_DIR/aria-host-agent" ]; then BIN_SRC="$SCRIPT_DIR/aria-host-agent" fi fi [ -n "$BIN_SRC" ] && [ -f "$BIN_SRC" ] || die "Binary nicht gefunden. Erst bauen (./build.sh) oder als 2. Argument uebergeben." # ── .env bestimmen: Arg 1, sonst ncurses-Dateidialog ──────────────── ENV_SRC="${1:-}" if [ -z "$ENV_SRC" ]; then if ! command -v dialog >/dev/null 2>&1; then echo "Kein .env-Pfad uebergeben und 'dialog' ist nicht installiert." read -r -p "dialog jetzt installieren (apt)? [j/N] " a case "$a" in j|J|y|Y) (apt-get update && apt-get install -y dialog) || die "dialog-Installation fehlgeschlagen — .env-Pfad bitte als Argument uebergeben." ;; *) die "Ohne dialog bitte den .env-Pfad als Argument uebergeben: sudo $0 /pfad/zur/.env" ;; esac fi # dialog --fselect: Dateibrowser; --stdout gibt die Auswahl auf stdout. START_DIR="${SUDO_USER:+/home/$SUDO_USER/}" [ -d "$START_DIR" ] || START_DIR="$SCRIPT_DIR/" ENV_SRC="$(dialog --stdout --title 'ARIA Host-Agent — .env auswaehlen' \ --fselect "$START_DIR" 14 72)" || true clear [ -n "$ENV_SRC" ] || die "Abgebrochen — keine .env ausgewaehlt." fi [ -f "$ENV_SRC" ] || die ".env nicht gefunden: $ENV_SRC" echo "Binary : $BIN_SRC" echo ".env : $ENV_SRC" # ── Installieren ──────────────────────────────────────────────────── install -m 0755 "$BIN_SRC" "$BIN_DST" install -d -m 0755 "$ETC_DIR" install -m 0600 "$ENV_SRC" "$ETC_DIR/.env" # 0600: enthaelt Token/Passwoerter if [ -f "$SCRIPT_DIR/aria-host-agent.service" ]; then install -m 0644 "$SCRIPT_DIR/aria-host-agent.service" "$UNIT_DST" else die "aria-host-agent.service nicht gefunden neben dem Installer." fi systemctl daemon-reload systemctl enable --now aria-host-agent echo echo "✓ Installiert & gestartet." echo " Status: systemctl status aria-host-agent" echo " Log: journalctl -u aria-host-agent -f" echo " .env: $ETC_DIR/.env (aendern -> systemctl restart aria-host-agent)"