#!/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 ===" # Stop services 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 # Purge ALL salt packages 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 # Remove config, keys, cache, logs 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 # Remove old repo config and keys 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; } 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)" # Pruefen ob /etc/salt existiert if [ ! -d /etc/salt ]; then echo "WARNUNG: /etc/salt existiert nicht, erstelle manuell..." mkdir -p /etc/salt/minion.d mkdir -p /etc/salt/pki/minion fi # Configure Master echo "Konfiguriere Minion..." mkdir -p /etc/salt/minion.d cat > /etc/salt/minion.d/master.conf << EOF master: $SALT_MASTER EOF # Set Grains (Kundennummer) cat > /etc/salt/grains << EOF kunde: $KUNDE EOF # Restart Minion systemctl enable salt-minion 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 "" echo "Verifikation:" ls -la /etc/salt/ echo "" # Zweiter Restart - stellt sicher dass Verbindung zum Master aufgebaut wirdsleep 3systemctl restart salt-minionsleep 2echo "Minion Status: $(systemctl is-active salt-minion)"echo "" echo "Naechster Schritt: Salt Master kontaktieren fuer Key-Akzeptanz."