PHP 4.4.8 vs. SuSE 10.3

Hell on Earth, aber wenn man es braucht, hilfts ja nix.

1. was man alles installieren muss, vorher:

apache
mysql
gcc
flex
libcurl-devel
gd
freetype2-devel
libjpeg-devel
libpng-devel
libmcrypt
libmcrypt-devel (das RMP muss man sich per rpmfind besorgen, gibts in SuSE 10 nicht. Warum auch immer!)
libtool (auf KEINEN Fall libtool vergessen. Sonst gibt es fiese Probleme!)

2. MySQL zusammenfaken, weil Suse das verstrubbelt:

linux:/usr # mkdir mysql
linux:/usr # cd mysql/
linux:/usr/mysql # ln -s /usr/include/mysql include
linux:/usr/mysql # ln -s /usr/lib/mysql lib
linux:/usr/mysql # ls -all
total 8
drwxr-xr-x 2 root root 4096 Mar 25 14:53 .
drwxr-xr-x 13 root root 4096 Mar 25 14:53 ..
lrwxrwxrwx 1 root root 18 Mar 25 14:53 include -> /usr/include/mysql
lrwxrwxrwx 1 root root 14 Mar 25 14:53 lib -> /usr/lib/mysql

3. Dann Configure und gib ihm:

./configure ‘–enable-libxml’ –with-mysql=/usr/mysql ‘–enable-filter’ ‘–enable-session’ ‘–with-pcre-regex’ ‘–enable-xml’ ‘–enable-simplexml’ ‘–enable-spl’ ‘–disable-debug’ ‘–enable-memory-limit’ ‘–enable-inline-optimization’ ‘–enable-zend-multibyte’ ‘–disable-rpath’ ‘–with-apxs2=/usr/sbin/apxs2′ ‘–disable-all’ –with-mysql-sock=/var/lib/mysql/mysql.sock –with-gd –with-zlib-dir=/usr –with-curl -with-mcrypt –enable-mbstring

Falls man libtool NICHT installiert hat, bekommt man folgende Meldung:

checking for mysql_close in -lmysqlclient… no
checking for mysql_error in -lmysqlclient… no
configure: error: mysql configure failed. Please check config.log for more information.

Das config.log sagt:

configure:62428: checking for mysql_error in -lmysqlclient
configure:62447: gcc -o conftest -g -O2 -Wl,-rpath,/usr/mysql/lib -L/usr/mysql/lib -Wl,-rpath,/usr -L/usr conftest.c -lmysqlclient -lz -lmcrypt -lltdl -lpng -lz -lcurl -lz -lresolv -lm -ldl -lnsl -lcurl -lidn -lssl -lcrypto -ldl -lz 1>&5
/usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status

Falls also irgendwer mal nach php mysql lltdl googelt, findet er vielleicht dieses Posting.

Solution: install libtool. Not just libltdl – you NEED libtool!

yeah. dependency hell. Wir brauchen IMAP support… da wird’s richtig lustig.

0. pam-devel nachinstallieren (yast2)

1. imap-c-client-Mist runterladen. Da gibts auf einem windigen ftp die Dateien. Aber man darf natürlich NICHT die aktuelle Version nehmen, nein nein – gut funktioniert hat aus dem Verzeichnis old die Version imap-2006c1.tar.Z

2. auspacken:
uncompress imap-2006c1.tar.Z
tar -xvf imap-2006c1.tar.Z

3. compilieren (SSL tut nicht, egal):
make slx SSLTYPE=none

4. nach PHP-Anleitung zuende “installieren”.

Das sieht etwa so aus:
linux:~/install/imap-2006c1 # mkdir /usr/local/imap-2006c1
linux:~/install/imap-2006c1 # mkdir /usr/local/imap-2006c1/lib
linux:~/install/imap-2006c1 # mkdir /usr/local/imap-2006c1/include

linux:~/install/imap-2006c1 # cd c-client/
linux:~/install/imap-2006c1/c-client # cp *.c /usr/local/imap-2006c1/lib/
linux:~/install/imap-2006c1/c-client # cp *.h /usr/local/imap-2006c1/include/
linux:~/install/imap-2006c1/c-client # cp c-client.a /usr/local/imap-2006c1/lib/libc-client.a

5. php NOCHMAL compilieren, diesmal mit:

./configure ‘–enable-libxml’ –with-mysql=/usr/mysql ‘–enable-filter’ ‘–enable-session’ ‘–with-pcre-regex’ ‘–enable-xml’ ‘–enable-simplexml’ ‘–enable-spl’ ‘–disable-debug’ ‘–enable-memory-limit’ ‘–enable-inline-optimization’ ‘–enable-zend-multibyte’ ‘–disable-rpath’ ‘–with-apxs2=/usr/sbin/apxs2′ ‘–disable-all’ –with-mysql-sock=/var/lib/mysql/mysql.sock –with-gd –with-zlib-dir=/usr –with-curl -with-mcrypt –enable-mbstring –with-imap=/usr/local/imap-2006c1/

4 Comments

  1. Bene
    Mar 26, 2008 @ 09:37:34

    ich weiss absolut wohl, warum ich immer ubuntu oder debian nehmen würde (je nach einsatzzweck). die RPM-fans wollen mir gegenüber ja immer beteuern, dass inzwischen alles besser geworden sei, aber dem scheint ja, wenn ich mir das obige grauselige beispiel anschaue, noch immer nicht so zu sein. ich meine, natürlich gibs auch mit dpkg immer mal wieder probleme, aber wenn genügend repositories gegeben sind, und man alles einigermaßen kohärent macht, sollte obiges szenario einfacher lösbar sein – schätze ich mal..

  2. Florian
    Mar 26, 2008 @ 09:50:39

    Ohh. Das kenn ich. Libtool hat die Firma viel Kaffee gekostet. Es war allerdings unter SuSE 10.2 AFAIK noch nerviger.

  3. lgw
    Mar 26, 2008 @ 14:17:08

    @Bene: die Frage ist, gibts denn für ein aktuelles Ubuntu noch ein Binary-Package mit – Achtung – PHP4?

    PHP5 wäre auch bei SuSE kein Problem gewesen, und auch sonst ist der Support tatsächlich halbwegs gut. Ein Online-Package-Management fehlt natürlich, und bis man einen passenden Mirror bspw. für SuSE 9.3 gefunden hat, können auch mal Stunden vergehen.

    Ich hasse das eh alles, wegen mir sollten die Leute nen XServe da hinstellen und gut is…

  4. lgw
    May 15, 2008 @ 00:56:16

    Kleiner Nachsatz:

    auf OpenSuSE/64 Bit kackt er beim bauen von php ab:

    /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/bin/ld: /usr/local/imap-2006c1//lib/libc-client.a(osdep.o): relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
    /usr/local/imap-2006c1//lib/libc-client.a: could not read symbols: Bad value

    Das kann man verbessern, indem man die EXTRACFLAGS im Makefile von imap wie folgt ergänzt:

    EXTRACFLAGS=-fPIC

    Weiterhin muss man die c-client-library, die OpenSuSE selbst ins System spammed (und die natürlich inkompatible zu PHP 4.4.8 ist), “wegkopieren”. Hoffentlich hat das nicht irgendwelche Side-Effects… :)

Leave a Reply