Auf einem Webserver wollte plötzlich das reload des Apache2 nicht mehr funktionieren und auch ein Neustart brachte nur die folgende Fehlermeldung:

host:~ # rcapache2 start
 Starting web server: apache2apache2: Syntax error on line 185
   of /etc/apache2/apache2.conf: Syntax error on line 1 
   of /etc/apache2/mods-enabled/php5.load: Cannot load 
   /usr/lib/apache2/modules/libphp5.so into server: 
   /usr/lib/libxml2.so.2: undefined symbol: gzopen64
 failed!
host:~ # 

An der LippeDas System war (leider) noch ein lenny-Rechner, aber damit laufen bei uns ja noch ein paar mehr Server, die auch keine Probleme machen. Daran kann es also nicht liegen. Alle nötigen Libaries waren vorhanden und ein Vergleich mit anderen lenny-Systemen zeigte auch keinen Unterschied im Alter oder der Größe der lib-Dateien, auch Onkel Google fand nichts.

Auch ein Überprüfen des Linkers ergab erst mal nichts ungewöhnliches:

host:~ # ldd /usr/lib/apache2/modules/libphp5.so
        linux-gate.so.1 =>  (0xb7733000)
        libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb71c4000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb71af000)
        ...

Allerdings wird vor dem Aufruf des apache2ctl unmittelbar erst noch die Umgebung geleert (Der Parameer ‚-i‘ in der /etc/init.d/apache Zeile 16):

...
ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
...

Wenn man diesen String auch vor dem ldd-Aufruf stellt, sieht die Welt ganz anders aus. Dann wird plötzlich eine libz.so.1 aus einer ganz anderen Installation gefunden und die hat (wahrscheinlich) ein paar Symbole zu wenig.:

Host:~ # env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin ldd /usr/lib/apache2/modules/libphp5.so
        linux-gate.so.1 =>  (0xb779d000)
        libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb721f000)
        libz.so.1 => /opt/...
        ...

Also habe ich im init.d-Script (/etc/init.d/apache) die Zeile 16 etwas erweiterte und um den Suchpfad für die Libarys erweitert und schon fand der Apache wieder alle Bibliotheken richtig und startete vernünftig.:

...
#ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib"
...