Php 5.2 i Debian 6 (Squeeze)

Debian 6 (Squeeze) är den nu "gällande" versionen av Debian. För oss som kör Drupal 6 så kan det här bli lite struligt eftersom vi därmed byter huvudversion på php - Debian Squeeze har php 5.3 som default.

Drupal 6 stödjer numera php 5.3 men alla moduler gör det ännu inte. Med andra ord kan det uppstå ett behov att även installera php 5.2 under Squeeze. Jag har inte hittat någon färdig lösning för detta så här är ett förslag:

Vi använder oss av ISPConfig som "kontrollpanel" för vårt webhotel. Numera går vi över till att köra version 3 även på ISPConfig. I det här förslaget använder vi en av finesserna i ISPConfig 3, att kunna köra olika instanser av PHP - suPHP kommer konfigureras till att köra php 5.2.

Grundförutsättningar:

  • ISPConfig på Debian 6 (Squeeze) installerad enligt "Perfect Server"
  • Php 5.2 kompletteras med Suhosin-patch och extension för att nå samma säkerhetsnivå som php 5.3
  • Php 5.2 installeras med den högsta version som har "Suhosin", dvs php 5.2.16. Ska tillägga att jag har hittat Suhosin för 5.2.17 (som är den sista 5.2-releasen) men inte på Suhosin:s hemsida. Jag har därför valt att än så länge stanna på 5.2.16.

Gör så här:

Logga in på servern som "adminanvändare" (dvs med SUDO rättigheter) med SSH (eller på konsolen, om den har någon).

Ladda ner PHP5.2 + Suhosin:

$ mkdir ~/php52-build
$ cd ~/php52-build
$ wget http://museum.php.net/php5/php-5.2.16.tar.bz2
$ wget http://download.suhosin.org/suhosin-0.9.32.1.tar.gz
$ wget http://download.suhosin.org/suhosin-patch-5.2.16-0.9.7.patch.gz

Kontrollera att de nerladdade filerna stämmer med sina signaturer. Eftersom vi hämtar php från museum.php.net så finns det inga md5-signaturer att kolla med. Jag tycker dock att det är en hygienfråga att göra denna kontroll på suhosin.

$ # Ladda ner Suhosins signatur
$ wget http://www.hardened-php.net/hardened-php-signature-key.asc
$ # Importera signaturen i gpg
$ gpg --import < hardened-php-signature-key.asc
$ # Ladda ner signaturfiler för Suhosin
$ wget http://download.suhosin.org/suhosin-0.9.32.1.tar.gz.sig
$ wget http://download.suhosin.org/suhosin-patch-5.2.16-0.9.7.patch.gz.sig
$ # Kontrollera signaturerna
$ gpg suhosin-0.9.32.1.tar.gz.sig
$ gpg suhosin-patch-5.2.16-0.9.7.patch.gz.sig
$ # gpg ska ge svaret: Korrekt signatur från "Hardened-PHP Signature Key". gpg kan även klaga
$ # på att signaturen inte är signerad. Det är Ok.

Packa upp PHP och patcha in Suhosin-patch

$ tar -xjf php-5.2.16.tar.bz2
$ gunzip suhosin-patch-5.2.16-0.9.7.patch.gz
$ cd php-5.2.16
$ patch -p 1 -i ../suhosin-patch-5.2.16-0.9.7.patch

Nu är källkodsträdet för PHP preparerat med Suhosin. Det är dags att konfigurera och bygga (kompilera) PHP.
Konfigurera och bygg php:

$ ./configure \
--prefix=/usr/share/php52 \
--datadir=/usr/share/php52 \
--mandir=/usr/share/man \
--bindir=/usr/bin/php52 \
--with-libdir=lib \
--includedir=/usr/include \
--sysconfdir=/etc/php52/apache2 \
--with-config-file-path=/etc/php52/apache2 \
--with-config-file-scan-dir=/etc/php52/conf.d \
--enable-libxml \
--enable-session \
--with-pcre-regex=/usr \
--enable-xml \
--enable-simplexml \
--enable-filter \
--disable-debug \
--enable-inline-optimization \
--disable-rpath \
--disable-static \
--enable-shared \
--with-pic \
--with-gnu-ld \
--with-mysql \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-xpm-dir \
--enable-exif \
--enable-fastcgi \
--enable-force-cgi-redirect \
--with-zlib \
--with-bz2 \
--with-curl \
--with-ldap \
--with-mysqli \
--with-ttf \
--with-freetype-dir \
--enable-soap \
--enable-sockets \
--enable-calendar \
--enable-ftp \
--enable-mbstring \
--enable-gd-native-ttf \
--enable-bcmath \
--enable-zip \
--with-pear \
--with-openssl \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--enable-suhosin

$ make
$ make test
$ sudo make install

Tänkbara problem:

Ett par källor til fel finns det förstås, t ex om din debian-box är en virtuell maskin kan det vara så att den 'build' som bygger den virtuella maskinen saknar en del. Lite tips om att räta ut frågetecknen kommer här:

$ #configure: error: xml2-config not found. Please check your libxml2 installation.
$sudo apt-get install libxml2-dev
$ #configure: error: Could not find pcre.h in /usr
$sudo apt-get install libpcre3-dev
$ #configure: error: Please reinstall the BZip2 distribution
$sudo apt-get install libbz2-dev
$ #configure: error: Please reinstall the libcurl distribution
$sudo apt-get install libcurl4-gnutls-dev
$ #configure: error: libjpeg.(a|so) not found. (här räknar vi med att det fattas fler grafik-dev-filer)
$sudo apt-get install libjpeg-dev libpng-dev libxpm-dev
$ #configure: error: configure: error: freetype.h not found.
$ sudo apt-get install libfreetype6 libfreetype6-dev
$ #configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.
$ sudo apt-get install libc-client-dev
$ # configure: error: Cannot find MySQL header files under yes. Note that the MySQL client library is not bundled anymore!
$ sudo apt-get install libmysqlclient15-dev

Då är PHP kompilerat, dags att göra samma sak med Suhosin-tillägget:

$ cd ../suhosin-0.9.32.1
$ /usr/bin/php52/phpize
$ ./configure --enable-suhosin --with-php-config=/usr/bin/php52/php-config
$ make
$ sudo make install

Ok, nu är allt kompilerat och installerat. Det är då dags att konfigurera suPHP till att använda vår "nygamla" php

Kopiera konfigurationsfiler till suPHP:

$ sudo cp /etc/php5/apache2/php.ini /etc/php52/apache2/php.ini
$ sudo mkdir -p /etc/php52/conf.d
$ sudo cp /etc/php5/apache2/conf.d/suhosin.ini /etc/php52/conf.d/suhosin.ini

Konfigurera suPHP till att använda php-5.2 och suhosin-extension:

$ # Använd din favoriteditor, tex nano för att ändra filen /etc/suphp/suphp.conf
$ # I sektionen [handlers] ska följande rader se ut som nedan:
;Handler for php-scripts
application/x-httpd-suphp="php:/usr/bin/php52/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"
x-httpd-suphp="php:/usr/bin/php52/php-cgi"
$ # Samma favoriteditor används för att i filen /etc/php52/apache2/php.ini lägga till raden:
extension=suhosin.so
$ # Starta om apache med kommandot:
$ sudo /etc/init.d/apache2 restart

Voila! Nu ska ISPConfig vara konfigurerat för att med suPHP köra PHP-5.2.16. Test genom att lägga upp en sajt som kör suPHP och i denna sajt lägga in filen info.php med följande innehåll:

phpinfo();

Du ska då få upp en sida med bl a följande innehåll:


Längre ner på sidan hittar vi att Suhosin-patchen är aktiverad:


Ännu längre ner kan vi se att även vårt suhosin-tillägg är aktiverat:

Källor: Som vanligt är Google en utmärkt källa till information. Utmärkande källor till information för detta inlägg har varit:

Uppdaterad 2011-09-28 med lite hjälp vid olika felsituationer.
Uppdaterad 2011-11-29 med lite städning av småfel.