#!/bin/bash # Salt Minion Installation fuer cynfo-Kundenserver # Verwendung: bash install-minion.sh # Beispiel: bash install-minion.sh K100163 set -e 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 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 # Finde alle installierten salt-Pakete 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 2>/dev/null || true fi apt-get autoremove --purge -y 2>/dev/null || true # dpkg purge falls noch Reste da sind 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 2>/dev/null || true fi fi # Remove config, keys, cache, logs 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 apt-get install -y gnupg2 curl >/dev/null 2>&1 # Salt Repo einrichten 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 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 apt-get update >/dev/null 2>&1 apt-get install -y salt-minion # Pruefen ob Installation erfolgreich if ! command -v salt-minion &>/dev/null; then echo "FEHLER: salt-minion wurde nicht installiert!" echo "apt-get install Ausgabe:" apt-get install -y salt-minion exit 1 fi fi # 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 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 "" echo "Naechster Schritt: Salt Master kontaktieren fuer Key-Akzeptanz."