#!/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 ""