install-service.sh: installiert Binary (/usr/local/bin) + .env (/etc/aria-host- agent/.env, 0600) + systemd-Unit und macht enable --now. .env-Pfad als Argument ODER ohne Argument ein ncurses-Dateidialog (dialog --fselect, bietet Installation von dialog an). Findet die Binary unter dist/ bzw. ./ oder als 2. Argument. Doku aktualisiert (RVS_SNI fuer RZ-interne Clients + Installer): - host-agent/README: Installer-Abschnitt + TLS/SNI-Abschnitt. - README (zentral): Installer + SNI im Host-Agent-Abschnitt (Verweis auf Satellit/Compute-Nodes). - satellite/README + xtts/README: RVS_SNI-Hinweis fuer Boxen/Satelliten im RVS-Netz. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
76 lines
3.2 KiB
Bash
Executable File
76 lines
3.2 KiB
Bash
Executable File
#!/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)"
|