salt-public/install-minion.sh
cynfo3000 83a7e817c3 Fix: Config VOR apt-get install schreiben, sauberer Neustart
- /etc/salt/minion.d/master.conf wird VOR Installation geschrieben
  damit Minion nie mit Default "salt" startet
- Config wird nach Install nochmal geschrieben (falls apt ueberschreibt)
- Stop + killall + sleep + start + restart am Ende
- killall salt-minion auch im Cleanup
2026-02-22 20:42:38 +00:00

158 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# Salt Minion Installation fuer cynfo-Kundenserver
# Verwendung: bash install-minion.sh <KUNDENNUMMER>
# 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 <KUNDENNUMMER>"
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."