[APACHE][PHP][ISPConfig] Różne wersje PHP na serwerze z ISPConfig

Posiadając serwer hostingowy obsługujący różnorakie projekty zachodzi czasem potrzeba użycia starszej, bądź nowszej wersji PHP, niż aktualnie zainstalowana. Panel ISPConfig ułatwia zarządzanie wersjami dla konkretnych projektów, lecz aby zacząć korzystać z takiej możliwości trzeba wpierw zainstalować dodatkową wersje PHP. Takim problemem zajmę się tym razem w oparciu o materiał z HowToForge.com. Poniższy artykuł będzie praktycnzie tłumaczeniem wersji oryginalnej wraz z uzupełnieniem o napotkane w czasie kolejnych kroków problemy jakie przytrafiły się w moim konkretnym przypadku.

 

Słowem wstępu należy nadmienić, iż wersje PHP występują w różnych mutacjach. Skupimy się na PHP-FPM, oraz FastCGI. Osobiście posiadam serwer Apache i obie mutacje działają na nim bez problemów, jednak jeżeli ktoś wybrał działanie w oparciu o NGINX to dla niego FastCGI nie jest wskazane i działać nie będzie.

 

Artykuł przedstawia dwie drogi instalacji. Pierwszą dla PHP-FPM, oraz drugą oddzielnie dla FastCGI. Możliwa jest kompilacja dwóch mutacji PHP za jednym zamachem jak podaje autor oryginału, choć w moim przypadku coś poszło źle (gdzieś przekombinowałem ;) ) dlatego wolę opcje małych kroczków i budowania kolejnych wersji osobno. 

 

WAŻNE!!: Pamiętać należy, aby do odpowiedniej mutacji używać odpowiednich zmiennych. Tak więc przy konfiguracji kompilacji PHP-FPM dodajemy na końcu --enable-fpm, oraz używamy właściwej dla danej mutacji ścieżki do plików źródłowych w postaci /opt/php-5.3.22. Odpowiednio dla FastCGI do konfiguracji dodajemy wpis --enable-cgi, oraz korzystamy ze ścieżki w postaci /opt/phpfcgi-5.3.22. Oczywiście powyższe ścieżki dostępu są właściwe dla tego konkretnego przykładu i jeżeli pliki źródłowe zapisaliśmy w innej lokalizacji to też należy konsekwentnie z danej lokalizacji korzystać.

 

 Ściągamy i wypakowujemy pliki źródłowe PHP 5.3.22

 
mkdir /opt/php-5.3.22
mkdir /usr/local/src/php5-build
cd /usr/local/src/php5-build
wget http://museum.php.net/php5/php-5.3.22.tar.bz2 -O php-5.3.22.tar.bz2
tar jxf php-5.3.22.tar.bz2
cd php-5.3.22/
 

 Wersje starsze lub nowsze niż 5.3.22 znajdziemy w Muzeum PHP

 Instalujemy pakiety dodatkowe wymagane do prawidłowej instalacji.

 
apt-get install build-essential
apt-get build-dep php5
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev
apt-get install libc-client2007e libc-client2007e-dev
 

 

 Poniższa komenda konieczna jest  w przypadku gdy kompilujemy PHP wraz z parametrem --with-imap.

 
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
 

 

W przypadku braku powyższej komendy ./configure zwróci następujący błąd: 

 
checking for crypt in -lcrypt... yes
configure: error: Cannot find imap library (libc-client.a). 
Please check your c-client installation.
root@server1:/usr/local/src/php5-build/php-5.3.22#
 

 

Konfigurujemy PHP 5.3.22 przy pomocy polecenia ./configure. Dodatkowe parametry możemy ustawić zgodnie z własnymi preferencjami. Szczegóły uzyskamy wpisując następującą komendę:

 
./configure --help
 

 

Należy pamiętać, iż korzystanie z niektórych parametrów może wiązać się z koniecznością instalacji dodatkowych bibliotek, lub też proces kompilacji nie powiedzie się.

 

Dla naszych potrzeb odpowiednia będzie następująca komenda i parametry:

 
./configure \
--prefix=/opt/php-5.3.22 \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-libdir=/lib/x86_64-linux-gnu \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--enable-fpm
 

 

Ostatni parametr --enable-fpm informuje, iż budowana wersja PHP będzie współpracowała z PHP-FPM.

 

W miejscu tym pojawia się mały problem. Konfiguracja zostaje przerwana i zwracany jest błąd:

 

Dokładnie chodzi o fragment:

 
configure: error: freetype.h not found.
 

 

W pierwszej kolejności zasugerujmy się podpowiedzią i zmodyfikujmy konfigurację o parametr --with-xpm-dir=/opt/php-5.3.22 (dla naszego przykładu). Uruchamiamy ponownie ./configure z nowymi parametrami i czekamy. W moim przypadku niestety problem ponownie wystąpił w identycznej formie. Na myśl przychodzi brak jakiegoś pakietu i takie też rozwiązanie sugerują w polskim internecie. Sprawdzić nie zaszkodzi.

 
aptitude install libfreetype6-dev
 

 

 Niestety okazało się, iż pakiet istnieje w systemie i jest zainstalowany prawidłowo. 

 

Po dłuższym grzebaniu doszukałem się wskazówki na blogu Daniela Stavrovskiego który to stwierdził, iż nawet jeśli mamy zainstalowany pakiet libfreetype6-dev, oraz wykonaliśmy poprawki w konfiguracji, a błąd nadal występuje to rozwiązaniem jest utworzenie dowiązania symbolicznego w odpowiedniej lokalizacji, bo system choć wszystko co potrzebuje posiada, to szuka w złym miejscu. 

 
mkdir /usr/include/freetype2/freetype
ln -s /usr/include/freetype2/freetype.h /usr/include/freetype2/freetype/freetype.h
 

 

I to była porada za 100 punktów, gdyż wszystko poszło gładko i zakończyło się sukcesem. Danielowi wielkie dzięki, natomiast wyszperane w sieci inne warianty błędów umieszczam dla potomnych w materiale Typowe błędy kompilacji wraz z rozwiązaniami.

 

Kompilujemy

 
make
make install
 

 

Kopiujemy php.ini, oraz php-fpm.conf do właściwych lokalizacji. 

 
cp /usr/local/src/php5-build/php-5.3.22/php.ini-production /opt/php-5.3.22/lib/php.ini
cp /opt/php-5.3.22/etc/php-fpm.conf.default /opt/php-5.3.22/etc/php-fpm.conf
 

 

Otwieramy w celu edycji plik /opt/php-5.3.22/etc/php-fpm.conf, a następnie dostosowujemy go do naszych potrzeb.

 
nano /opt/php-5.3.22/etc/php-fpm.conf
 

 

W linii listen należy wpisać nieużywany port np. 8999, gdyż port 9000 zapewne jest używany przez domyślną wersję PHP-FPM. Na końcu pliku dodajemy również linię w postaci include=/opt/php-5.3.22/etc/pool.d/*.conf. Całość powinna wyglądać mniej więcej jak poniżej.

 
[...]
pid = run/php-fpm.pid
[...]
user = www-data
group = www-data
[...]
listen = 127.0.0.1:8999
[...]
include=/opt/php-5.3.22/etc/pool.d/*.conf
 

 

Tworzymy katalog pool.d dla PHP-FPM

 
mkdir /opt/php-5.3.22/etc/pool.d
 

 

Następnie tworzymy skrypt inicjujący dla PHP-FPM

 
nano /etc/init.d/php-5.3.22-fpm
 

 

Wyglądać powinien mniej więcej tak jak poniżej

 
#! /bin/sh
### BEGIN INIT INFO
# Provides:          php-5.3.22-fpm
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-5.3.22-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/opt/php-5.3.22/sbin/php-fpm
php_fpm_CONF=/opt/php-5.3.22/etc/php-fpm.conf
php_fpm_PID=/opt/php-5.3.22/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"

wait_for_pid () {
        try=0
        while test $try -lt 35 ; do
                case "$1" in
                        'created')
                        if [ -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                        'removed')
                        if [ ! -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                esac
                echo -n .
                try=`expr $try + 1`
                sleep 1
        done
}
case "$1" in
        start)
                echo -n "Starting php-fpm "
                $php_fpm_BIN $php_opts
                if [ "$?" != 0 ] ; then
                        echo " failed"
                        exit 1
                fi
                wait_for_pid created $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        stop)
                echo -n "Gracefully shutting down php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -QUIT `cat $php_fpm_PID`
                wait_for_pid removed $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed. Use force-exit"
                        exit 1
                else
                        echo " done"
                       echo " done"
                fi
        ;;
        force-quit)
                echo -n "Terminating php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -TERM `cat $php_fpm_PID`
                wait_for_pid removed $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        restart)
                $0 stop
                $0 start
        ;;
        reload)
                echo -n "Reload service php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -USR2 `cat $php_fpm_PID`
                echo " done"
        ;;
        *)
                echo "Usage: $0 {start|stop|force-quit|restart|reload}"
                exit 1
        ;;
esac
 

 

Nadajemy skryptowi prawa dostępu, oraz tworzymy wpis autostartu:

 

 
chmod 755 /etc/init.d/php-5.3.22-fpm
 update-rc.d php-5.3.22-fpm defaults
 

 

Na zakończenie uruchamiamy PHP-FPM

 

 
/etc/init.d/php-5.3.22-fpm start
 

 

Tak długo jak nie będzie katalogu pool /opt/php-5.3.22/etc/pool.d na ekranie widoczne będzie ostrzeżenie, które można zignorować

 
root@server1:/usr/local/src/php5-build/php-5.3.22# /etc/init.d/php-5.3.22-fpm start
Starting php-fpm [04-Mar-2013 14:58:41] WARNING: Nothing matches the include pattern '/opt/php-5.3.22/etc/pool.d/*.conf' from /opt/php-5.3.22/etc/php-fpm.conf at line 512.
done
root@server1:/usr/local/src/php5-build/php-5.3.22#
 

 

 

 

 

 

Materiały Źródłowe:

HowToForge - How To Use Multiple PHP Versions (PHP-FPM & FastCGI) With ISPConfig 3 (Ubuntu 12.10) 

Daniel Stavrovski Blog - Build and install PHP 5.3.29 from source on an Ubuntu 14.04 LTS server

CRYBIT - 20+ common PHP compilation errors and fix – Unix

 

 

 

 

 

Dodaj komentarz

Kod antyspamowy
Odśwież



Twój koszyk jest pusty

Odsłony:
207341
Wszelkie prawa zastrzeżone. Copyright © 2009 - 2017 Maciej Kaleta