Files
php/fix_ldap_ini.sh
T

105 lines
3.2 KiB
Bash
Executable File

#!/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>] <server1> [<server2> ...]
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 <ssh-key>] <server1> [<server2> ...]"
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 ""