Kompilieren von PHP5 inklusive PHP-GD Bundled unter Ubuntu 14.04

Auf einem Ubuntu 14.04 Server mit PHP5 5.5.9 und installierter PHP5-GD Library fehlen einige GD Funktionen. Das Problem tritt bei allen Ubuntu und Debian Derivaten auf.

Für die Richtigkeit der unten stehenden Anleitung übernehme ich keine Garantie. Dies ist ein Weg, der bei mir nach langem Probieren funktioniert hat. Das einzige was ich garantieren kann, ist das es euch Zeit kostet. Ich rate euch dringendst, macht vorher eine Datensicherung. Ich war froh Sie zu haben und habe Sie 5 mal benötigt. Wichtig ist auch die Information, das das selbst kompilierte PHP keine Sicherheitsupdates über den Paketmanager mehr bekommt. Im Falle des Falles musst ihr Sicherheitsupdates euch besorgen und alles neu kompilieren.

Auf einem Ubuntu 14.04 Server mit PHP5 5.5.9 und installierter PHP5-GD Library fehlen einige GD Funktionen. Das Problem tritt bei allen Ubuntu und Debian Derivaten auf.

Als Erklärung: Diejenigen die die Pakete erstellen die über die Softverteilung ausgeliefert werden weigern sich die von PHP mitgelieferte GD Version zu kompilieren. Als Begründung wird angegeben, das die mitgelieferte Version eine Abspaltung aus dem original GD Projekt ist und somit ein Sicherheitsrisiko darstellen könnte. (Quelle: http://lnk.qli.de/8)

Ich hatte das Problem, das auf dem Server die GD Funktion "imageantialias" benötigt wurde. Mit dem Befehl

php -r "var_dump(function_exists('imageantialias'));"

kann überprüft werden ob die Funktion in GD vorhanden ist. Erscheint die Ausgabe "bool(false)" ist die Funktion nicht vorhanden.

Nach langen Googeln und Versuchen hab ich auf einer französischen Seite eine Anleitung zum kompilieren einer PHP Version 5.5.9 inkl GD gefunden, die aber in meinem Fall nicht komplett ausreichend war. Folgender Weg führte mich aber zum Ziel. Ob der nun folgende Teil1 notwendig ist, konnte ich leider noch nicht überprüfen, sicher ist ich hab ihn durchgeführt und am Ende hatte ich das richtige Ergebnis

Teil1

Im ersten Schritt werden die Ubuntu PHP5 Sources runtergeladen und anschließend ins das Verzeichnis gewechselt.

apt-get install build-essential debhelper fakeroot
cd /usr/src
sudo apt-get source php5
sudo apt-get build-dep php5
cd php5-5.5.9+dfsg/

nun wird in der Datei debian/rules die Zeile '--with-gd=shared,/usr --enable-gd-native-ttf' gesucht und durch '--with-gd=shared --enable-gd-native-ttf' ersetzt.

dpkg-buildpackage -rfakeroot

Quelle: http://lnk.qli.de/8

 

Teil 2

Nun wird ein neues Verzeichnis angelegt und in dieses gewechselt

mkdir /home/php
cd /home/php

In den nächsten Schritten installieren wir die Pakete die zum kompilieren von PHP benötigt werden.

apt-get install build-essential
aptitude build-dep freetype 
apt-get install libpng12-dev libjpeg8-dev zlib1g gawk bison flex ^libxml2-* mcrypt libmcrypt-dev apache2-prefork-dev
apt-get install perl libicu-dev libxslt1-dev libcurl4-openssl-dev

Im nächsten Schritt wird von php.net eine passende PHP Version geladen. Da auf meinem System über den paketmanager bereits die Version 5.5.9 installiert war, hab ich mich für die gleiche Version entschieden

cd /home/php
wget http://de1.php.net/distributions/php-5.5.9.tar.gz 

und mit dem folgenden Befehl entpackt. Anschließend wechseln wir in das neue Verzeichnis.

tar -zxvf php-5.5.9.tar.gz
cd php-5.5.9/

Nun beginnt der langwierige Teil, wir kompilieren PHP

./configure --prefix=/usr/ --with-apxs2=/usr/bin/apxs2 --with-config-file-path=/etc/php5/apache2 --disable-ipv6 --enable-inline-optimization --disable-debug --enable-bcmath --enable-calendar --with-curl --enable-ctype --enable-dbase --enable-discard-path --enable-exif --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --enable-gd-native-ttf --enable-magic-quotes --enable-mbstring --with-mcrypt --with-mysql-dir=/usr/ --with-pdo-mysql --enable-soap --with-pear --with-xsl --with-zlib --with-openssl --enable-sockets --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-mysqli --enable-zip --with-tidy=/usr/ --with-bz2 --with-freetype-dir=/usr

Sollte das Script Fehler ausgeben, sind diese zu beheben. Mir hat dabei die Seite http://lnk.qli.de/9 gute Dienste geleistet. Anschließend noch die folgenden Befehle

make
make install --ignore-errors

Mittels der folgenden Zeilen wird überprüft ob die GD Funktionen zur Verfügung stehen.

php -r "var_dump(function_exists('imageantialias'));"

php -r "var_dump(function_exists('imagettfbbox'));"

php -r "var_dump(function_exists('imagettftext'));"

Alle drei zeilen sollten true zurückgeben, ansonsten ist etwas schief gelaufen

Quelle: http://lnk.qli.de/b

 

In einem Kommentar hab ich dann folgendes gefunden. Dadurch soll gie eben kompilierte php5-gd Version von zukünftigen Updates ausgenommen werden. Ob es klappt weiß ich leider noch nicht.

apt-get install wajig
wajig hold php5-gd