#!/bin/bash # Salt Minion Installation fuer cynfo-Kundenserver # Verwendung: bash install-minion.sh # Beispiel: bash install-minion.sh K100163 KUNDE=$1 SALT_MASTER="salt.cynfo.net" if [ -z "$KUNDE" ]; then echo "Fehler: Kundennummer angeben!" echo "Verwendung: bash install-minion.sh " echo "Beispiel: bash install-minion.sh K100163" exit 1 fi echo "=== Salt Minion Installation ===" echo "Kunde: $KUNDE" echo "Salt Master: $SALT_MASTER" echo "Hostname: $(hostname)" echo "" # Detect OS if [ -f /etc/debian_version ]; then OS="debian" echo "OS: Debian/Ubuntu erkannt" elif [ -f /etc/redhat-release ]; then OS="rhel" echo "OS: RHEL/CentOS erkannt" else echo "Fehler: Unbekanntes OS" exit 1 fi # === CLEANUP: Alte Salt-Installation entfernen === echo "" echo "=== Cleanup alte Installation ===" echo "Stoppe Services..." systemctl stop salt-minion 2>/dev/null || true systemctl stop salt-master 2>/dev/null || true systemctl disable salt-minion 2>/dev/null || true systemctl disable salt-master 2>/dev/null || true # Alle salt-Prozesse killen killall -9 salt-minion 2>/dev/null || true killall -9 salt-master 2>/dev/null || true if [ "$OS" = "debian" ]; then SALT_PKGS=$(dpkg -l | grep -i salt | awk '{print $2}' || true) if [ -n "$SALT_PKGS" ]; then echo "Entferne Pakete: $SALT_PKGS" apt-get remove --purge -y $SALT_PKGS || true else echo "Keine Salt-Pakete gefunden." fi apt-get autoremove --purge -y 2>/dev/null || true SALT_RESIDUAL=$(dpkg -l | grep -i salt | grep ^rc | awk '{print $2}' || true) if [ -n "$SALT_RESIDUAL" ]; then echo "Purge Reste: $SALT_RESIDUAL" dpkg --purge $SALT_RESIDUAL || true fi fi echo "Loesche Verzeichnisse..." rm -rf /etc/salt rm -rf /var/cache/salt rm -rf /var/log/salt rm -rf /var/run/salt rm -rf /srv/salt rm -rf /srv/pillar rm -rf /opt/saltstack rm -f /etc/apt/sources.list.d/salt*.list rm -f /etc/apt/keyrings/salt-archive-keyring.gpg rm -f /usr/share/keyrings/salt-archive-keyring.gpg echo "Alte Installation bereinigt." # === INSTALL: Frische Installation === echo "" echo "=== Frische Installation ===" if [ "$OS" = "debian" ]; then echo "Installiere Abhaengigkeiten..." apt-get install -y gnupg2 curl 2>&1 || { echo "FEHLER: gnupg2/curl Installation fehlgeschlagen"; exit 1; } echo "Richte Salt Repo ein..." mkdir -p /etc/apt/keyrings curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public | gpg --dearmor -o /etc/apt/keyrings/salt-archive-keyring.gpg if [ ! -f /etc/apt/keyrings/salt-archive-keyring.gpg ]; then echo "FEHLER: GPG Key konnte nicht heruntergeladen werden" exit 1 fi echo 'deb [signed-by=/etc/apt/keyrings/salt-archive-keyring.gpg] https://packages.broadcom.com/artifactory/saltproject-deb/ stable main' > /etc/apt/sources.list.d/salt.list echo "apt-get update..." apt-get update 2>&1 || { echo "FEHLER: apt-get update fehlgeschlagen"; exit 1; } # Config VOR Installation schreiben, damit Minion direkt mit richtigem Master startet echo "Schreibe Konfiguration..." mkdir -p /etc/salt/minion.d mkdir -p /etc/salt/pki/minion cat > /etc/salt/minion.d/master.conf << EOF master: $SALT_MASTER EOF cat > /etc/salt/grains << EOF kunde: $KUNDE EOF echo "Installiere salt-minion..." apt-get install -y salt-minion 2>&1 || { echo "FEHLER: salt-minion Installation fehlgeschlagen"; exit 1; } fi # Pruefen ob Installation erfolgreich if ! command -v salt-minion &>/dev/null; then echo "FEHLER: salt-minion Binary nicht gefunden!" exit 1 fi echo "salt-minion installiert: $(salt-minion --version)" # Sicherstellen dass Config korrekt ist mkdir -p /etc/salt/minion.d cat > /etc/salt/minion.d/master.conf << EOF master: $SALT_MASTER EOF cat > /etc/salt/grains << EOF kunde: $KUNDE EOF # Minion sauber starten echo "Starte Minion..." systemctl stop salt-minion 2>/dev/null || true killall -9 salt-minion 2>/dev/null || true sleep 2 systemctl enable salt-minion systemctl start salt-minion sleep 5 systemctl restart salt-minion echo "" echo "=== Fertig ===" echo "Salt Version: $(salt-minion --version)" echo "Minion ID: $(hostname)" echo "Grain: kunde: $KUNDE" echo "Master: $SALT_MASTER" echo "Minion Status: $(systemctl is-active salt-minion)" echo "" echo "Verifikation:" ls -la /etc/salt/ cat /etc/salt/minion.d/master.conf cat /etc/salt/grains echo "" echo "Naechster Schritt: Salt Master kontaktieren fuer Key-Akzeptanz."