diff --git a/fix_ldap_ini.sh b/fix_ldap_ini.sh new file mode 100755 index 0000000..8dd8880 --- /dev/null +++ b/fix_ldap_ini.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +# +# fix_ldap_ini.sh +# +# Entfernt 'extension=ldap.so' aus allen PHP-php.ini-Dateien auf den +# angegebenen Servern und startet die betroffenen php-X.Y-fpm-Dienste neu. +# +# Verwendung: fix_ldap_ini.sh [-i ] [ ...] + +SSH_KEY="$HOME/.ssh/id_ed25519" +SSH_OPTS=( -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=no ) + +# ---------- Hilfsfunktionen ---------- + +usage() { + echo "" + echo " Verwendung: $(basename "$0") [-i ] [ ...]" + echo "" + exit 1 +} + +info() { echo -e " \033[32m\033[1m[Info]\033[m $*"; } +ok() { echo -e " \033[32m[ok]\033[m $*"; } +warn() { echo -e " \033[33m\033[1m[Warn]\033[m $*"; } +err() { echo -e " \033[31m\033[1m[Fehler]\033[m $*"; } + +# ---------- Argumente ---------- + +while getopts ":i:" opt; do + case $opt in + i) SSH_KEY="$OPTARG" ;; + *) usage ;; + esac +done +shift $(( OPTIND - 1 )) + +[[ $# -eq 0 ]] && usage + +if [[ ! -f "$SSH_KEY" ]]; then + err "SSH-Key nicht gefunden: $SSH_KEY" + exit 1 +fi + +# ---------- Hauptschleife ---------- + +for server in "$@"; do + echo "" + echo "================================================================" + echo " Server: $server" + echo "================================================================" + + # Verbindungstest + if ! ssh "${SSH_OPTS[@]}" -i "$SSH_KEY" root@"$server" true 2>/dev/null; then + err "Keine SSH-Verbindung zu $server möglich." + continue + fi + + ssh "${SSH_OPTS[@]}" -i "$SSH_KEY" root@"$server" ' + changed_versions="" + + for ini in /usr/local/php-*/etc/php.ini; do + [[ -f "$ini" ]] || continue + + # PHP-Version aus Pfad ermitteln (z.B. "8.4" aus php-8.4.18) + dir="$(dirname "$(dirname "$ini")")" + base="$(basename "$dir")" # z.B. php-8.4.18 + ver_full="${base#php-}" # z.B. 8.4.18 + ver_minor="$(echo "$ver_full" | cut -d. -f1-2)" # z.B. 8.4 + + # Prüfen ob die Zeile aktiv (nicht auskommentiert) vorhanden ist + if grep -qP "^\s*extension=ldap\.so" "$ini"; then + sed -i "s|^\(\s*\)extension=ldap\.so|\1;extension=ldap.so|" "$ini" + echo " [fix] $ini → extension=ldap.so auskommentiert" + changed_versions="$changed_versions $ver_minor" + else + echo " [skip] $ini (kein aktives extension=ldap.so gefunden)" + fi + done + + # FPM-Dienste neu starten, falls Änderungen vorgenommen wurden + for ver in $changed_versions; do + svc="php-${ver}-fpm.service" + if systemctl is-active --quiet "$svc"; then + systemctl restart "$svc" + if systemctl is-active --quiet "$svc"; then + echo " [ok] $svc neu gestartet" + else + echo " [ERROR] $svc Neustart fehlgeschlagen!" + systemctl status "$svc" --no-pager -l | tail -10 + fi + else + echo " [skip] $svc ist nicht aktiv, kein Neustart" + fi + done + + [[ -z "$changed_versions" ]] && echo " Keine Änderungen notwendig." + ' +done + +echo "" +echo "================================================================" +echo " Fertig." +echo "================================================================" +echo ""