PHP selber compilieren, die X-te

16 Jun

Bildschirmfoto-2013-06-16-um-00.39 Auf meinem Laptop schleppe ich immer gerne eine Entwicklungsumgebung für Web-Apps mit mir herum, und heute war wieder mal einer dieser Tage, wo ich mir dachte, hey, warum nicht mal das PHP aktualisieren, hab’ ja neulich erst die MariaDB auf Version 5.5 gehoben. Bei der Gelegenheit wurde auch gleich das alte Maria52-Verzeichnis in den Papierkorb verschoben.

Oh upps. Auf einmal spricht der Apache nur noch von Server Error im CGI. Hat etwas gedauert, bis ich das mit dem Verschieben der MariaDB 5.2 in Verbindung gebracht habe, denn laufen tut definitiv die 5.5-er, und zwar auch mit den richtigen Datenbanken. Nur PHP-CGI war kompiliert mit dem maria52-Pfad. Der jetzt im Trash liegt. Zusammen mit der Bibliothek für PHP. D’oh! Na gut, dass PHP nicht davon begeistert ist, wenn man ihm seinen Datenbank-Konnektor unterm Hintern weg-moved, das haben Computer eben so an sich. Aber die alte Gurke wieder zurücklegen? Nöö, geht ja wohl gar nicht. Fortschritt! und so. Also frisch an’s Werk, kompilieren wir doch gleich die aktuelle PHP 5.4.16 und zeigen der, wo der neue (Datenbank-)Hammer hängt. Download, tar -zxvf, scrollscrollscroll, ./configure -brabbelblubbmake und …

Undefined symbols:
"_res_9_dn_expand", referenced from:
_php_parserr in dns.o
_php_parserr in dns.o
_php_parserr in dns.o
_php_parserr in dns.o
_php_parserr in dns.o
_php_parserr in dns.o
_php_parserr in dns.o
_zif_dns_get_mx in dns.o
"_res_9_search", referenced from:
_zif_dns_check_record in dns.o
_zif_dns_get_mx in dns.o
_zif_dns_get_record in dns.o
"_res_9_init", referenced from:
_zif_dns_check_record in dns.o
_zif_dns_get_mx in dns.o
_zif_dns_get_record in dns.o
"_res_9_dn_skipname", referenced from:
_zif_dns_get_mx in dns.o
_zif_dns_get_mx in dns.o
_zif_dns_get_record in dns.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1

 Autsch. Das war wohl nix. Und um der Wahrheit die Ehre zu geben, im Wesentlichen sagt mir das da oben: „Häh?“

Nach etlichem Hin- und Her-gegoogle („Editieren Sie das Makefile! Fügen Sie -lresolv in die EXTRA_LIBS ein!“ — „Häh2?“ Es hat aber zumindest temporär geholfen, nur leider dann andere Fehler später im Flow produziert) war die Lösung dann zweiteilig:

Schritt 1: Vor dem ./configure --brabbelbrupp noch schnell eingeben:

  • export DYLD_LIBRARY_PATH=/customserver/maria55/lib

Hm. Klingt wie etwas, was eine Lösung darstellen könnte. PHP mit der Nase draufstoßen, wo seine Hilfsdaten sind. Ich meine, zusätzlich zum configure wo das auch schon drin stand. Whatever. Zumindest läuft danach auch make und make test frischfröhlich durch und das sudo make install weit genug, um seine Binaries zu streuen, bis auf phar. Was auch immer phar ist. Und der Server erbricht sich immer noch in Internal Errors. Weiteres Websuchen liefert die Zusatzinfo, dass nun die Bibliothek zwar beim Kompilieren gefunden wurde, aber in der Binärdatei das Ziel ohne Verzeichnispfad steht. Warum? Warum nur dort? Warum jetzt? Wieso ich? Passiert halt. Gut, also nach dem Make noch kurz die Binaries patchen, und zwar (weil CGI und CLI) mit dem semi-kryptischen Zweizeiler-Zwilling:

  • install_name_tool -change libmysqlclient.18.dylib /customserver/maria55/lib/libmysqlclient.18.dylib /sources/php-5.4.16/sapi/cli/php
  • install_name_tool -change libmysqlclient.18.dylib /customserver/maria55/lib/libmysqlclient.18.dylib /sources/php-5.4.16/sapi/cgi/php-cgi

O-kay. Ja. Ist ja völlig logisch. Also so von hinten her betrachtet. Warum aber nach jahrelangen (echt jetzt) problemlosen Varianten vom immer gleichen und wenig anstrengenden configure/make/sudo make install auf einmal nach einem Unternummer-Update der Routinevorgang so unplanmäßig geplatzt ist wie ein Kröte unterm LKW und sich zum Patch-und-Flick-Sudoku entwickelt hat, wird wohl immer ein Geheimnis zwischen PHP und MariaDB bleiben. Ich hoffe mal, dass im nächsten Update das sich wieder erledigt hat. Danke jedenfalls an Matt Diamond und Dan Phiffer für das hilfreiche Posting vom September 2011 bei Stackoverflow:  http://stackoverflow.com/questions/7250484/php-isnt-linking-mysql-shared-library-correctly-on-build

PHP 5.4.16 spricht jedenfalls wieder mit MariaDB 5.5, der einzige Unterschied ist dass es jetzt 0.0.04 Versiönchen von PHP höher ist und „nur“ so um die 2 Stunden gedauert hat, um das zu hinzukriegen, was vorher auch schon ging. Ja, Computer, Zeitersparnis, kenn’ma ja. Ein bisschen unheimlich ist das Gefühl von „ham’wa wieder was geschafft“ aber schon, das sich jetzt so im Nachklapp gerade einstellt.

Mitternacht ist durch, ich geh’ jetzt ins Bett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

zwanzig − 11 =