Files
mission-control-v2/deploy/homelab/ausfuehrer-einrichten.sh
T
HitonabiandClaude Opus 5.5 903fbbfbb9 homelab: Speicherpool, NAS und Sicherungen überwachen – mit Empfehlungen, was Platz bringt
User-Wunsch 25.09.: Speicherpool im Wächter (gelb ab 80 %, rot bei 10 % frei)
samt Empfehlungen, dazu das NAS (Backup-Ziel, per NFS auf dem Proxmox-Host).
- Ausführer: Thin-Pools mit echter Belegung je Volume (lvs), ungenutzte und
  verwaiste Platten, VM-Belegung über den Gast-Agenten, Discard je VM,
  Netzlaufwerke (df mit Zeitlimit, hängender harter NFS-Mount hält nichts auf),
  Sicherungsaufträge und jüngste Sicherung je Gast.
- Homelab-Teil: services/homelab/speicher.py (Auswertung, Empfehlungen,
  Wächter pruefe_speicher, NAS-Erreichbarkeit per TCP), GET /api/homelab/speicher;
  Gast-Plattenwächter nennt jetzt auch VMs richtig.
- Oberfläche: Karte „Speicher und Sicherungen“ im Homelab-Cockpit.
- deploy.sh und ausfuehrer-einrichten.sh warten, solange im Homelab ein Update
  oder „Alle aktualisieren“ läuft (der Neustart bräche den Lauf ab).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 11:15:06 +02:00

37 lines
2.3 KiB
Bash

#!/usr/bin/env bash
# ausfuehrer-einrichten.sh — den Ausführer auf dem Proxmox-Host einrichten (Phase 3/4).
#
# Läuft am PC (Git-Bash, im Repo). Legt ausfuehrer.py, die Unit und die Konfiguration auf den
# Proxmox-Host und startet den Dienst. Das gemeinsame Geheimnis wandert vom Container des Homelab-Teils
# per Pipe direkt auf den Host (0600) — es steht in keiner Befehlszeile.
#
# Nutzung: bash deploy/homelab/ausfuehrer-einrichten.sh <ip-des-containers> [--nur-lesen]
# --nur-lesen: nur der Bericht, jeder andere Auftrag wird abgelehnt (umschalten in
# /etc/mc2-ausfuehrer.json, "nur_lesen": false, dann systemctl restart mc2-ausfuehrer).
set -euo pipefail
cd "$(dirname "$0")/../.."
IP="${1:?Nutzung: ausfuehrer-einrichten.sh <ip-des-containers> [--nur-lesen]}"
NUR_LESEN=false
[ "${2:-}" = "--nur-lesen" ] && NUR_LESEN=true
PVE="${MC_PVE:-pve}"
# Nicht mitten in ein Update: Der Neustart des Ausführers bräche einen laufenden Auftrag ab (apt in einem Gast!).
if [ "${MC_TROTZDEM:-0}" != "1" ] && curl -sf -m 5 "http://$IP:9001/api/homelab/laeufe" \
"http://$IP:9001/api/homelab/sammellauf" 2>/dev/null | grep -q '"status": *"laeuft"'; then
echo "Im Homelab läuft gerade ein Update — Ausführer später einrichten (oder MC_TROTZDEM=1)." >&2
exit 1
fi
ssh -o BatchMode=yes "$PVE" "install -d -m 755 /usr/local/lib/mc2"
ssh -o BatchMode=yes "$PVE" "cat > /usr/local/lib/mc2/ausfuehrer.py && chmod 755 /usr/local/lib/mc2/ausfuehrer.py" \
< deploy/homelab/ausfuehrer.py
ssh -o BatchMode=yes "$PVE" "cat > /etc/systemd/system/mc2-ausfuehrer.service" < deploy/homelab/mc2-ausfuehrer.service
# shellcheck disable=SC2029 # $IP soll hier (am PC) eingesetzt werden
ssh -o BatchMode=yes "root@$IP" "cat /var/lib/mc2/ausfuehrer.token" \
| ssh -o BatchMode=yes "$PVE" "umask 077; read -r t; [ -n \"\$t\" ] || exit 1; \
printf '{\"server\": \"http://%s:9001\", \"token\": \"%s\", \"node\": \"%s\", \"nur_lesen\": %s}\n' '$IP' \"\$t\" \"\$(hostname)\" '$NUR_LESEN' \
> /etc/mc2-ausfuehrer.json"
ssh -o BatchMode=yes "$PVE" "systemctl daemon-reload && systemctl enable --now mc2-ausfuehrer.service \
&& systemctl restart mc2-ausfuehrer.service && sleep 5 && systemctl is-active mc2-ausfuehrer.service"
echo "✅ Ausführer läuft. Der erste Bericht erscheint in etwa einer Minute unter /api/homelab/ziele."