Hogyan telepítsük a PHP 5.6.40-et választható verzióként a Debian 9 (Stretch) tökéletes szerverre

botond küldte be 2019. 02. 19., k – 01:08 időpontban

Az 1. oldal tartalma

 

Bevezető

A Debian 9 (Stretch) disztribúciója a PHP 7.0-ás változatát tartalmazza alapértelmezettként. A PHP fő verziói nem teljesen kompatibilisek egymással, így gyakran előfordul, hogy a szerveren futtatott weboldalak ennél újabb, vagy éppen régebbi PHP verziót igényelnek. Ebben a leírásban feltelepítjük a PHP 5.6-os ágából a jelenlegi legfrissebb változatot, az 5.6.40-et egy Debian 9 (Stretch) alapú tökéletes szerverre választható PHP verzióként, melyeket FastCGI és PHP-FPM módokban lehet ezután működtetni. Így a disztribúcióban lévő alapértelmezett PHP verziója mellett lesz használható a weboldalak számára.

Korábban már készítettem egy másik leírást, amelyben Debian 8 (Jessie) alapú szerverre telepítettem a 7.1-es PHP-t.

 

 

Előfeltételek

A leírás kivitelezéséhez szükség van egy Debian 9-en futó ISPConfig -os szerverkörnyezetre. Ezt a telepítést én a Debian 9 (Stretch) tökéletes szerver 1.0 változaton készítem el.

 

Előkészítés

Legelőször frissítsük a Debian csomagtár adatbázisát és a csomagokat. Root-ként adjuk ki a szokásos apt-get parancsokat:

apt-get update
apt-get upgrade

Ezt a PHP-t opcionális verzióként fogjuk telepíteni, ami azt jelenti, hogy a disztribúcióban lévő alapértelmezett PHP mellett fog tudni működni, annál a weboldalnál, amelyiknél szükség van rá. Mivel a Debian 9 már nem tartalmazza a PHP 5.6-ot, és nem is alapértelmezettként fogjuk telepíteni, ezért most nem a megszokott módon telepítjük csomagokból, hanem a forráskódjából kell lefordítanunk.

A fordítás előtt még szükség lesz jó néhány előkészületre, beállításra, hogy a PHP 5.6 számára a Debian 8-hoz hasonló, kompatibilis környezetet állíthassunk össze. Továbbá a fordítás előtti konfiguráció során is még sok paramétert be kell neki állítani, hogy egy teljesen működőképes és független PHP rendszerként tudják majd használni a szerveren lévő webtárhelyek.

Fordításhoz szükséges csomagok telepítése

A PHP lefordításához szükség van a fejlesztői és fordító eszközökre. Telepítsük a build-essentialautoconf, pkg-config csomagokat:

apt-get -y install build-essential  autoconf  pkg-config

Majd telepítsük a PHP környezet fejlesztői csomagjait, amik szintén szükségesek a fordításhoz:

apt-get -y install \
    libfcgi-dev \
    libfcgi0ldbl \
    libjpeg62-turbo-dev \
    libmcrypt-dev \
    libssl-dev \
    libc-client2007e \
    libc-client2007e-dev \
    libxml2-dev \
    libbz2-dev \
    libcurl4-openssl-dev \
    libjpeg-dev libpng-dev \
    libfreetype6-dev \
    libkrb5-dev \
    libpq-dev \
    libxml2-dev \
    libxslt1-dev

Az áttekinthetőség kedvéért több sorba tördeltem a parancsot. Ugyanígy kimásolva futtatható.

Szükséges linkek létrehozása

A PHP IMAP moduljának lefordításához még szükség van két linkre, ezeket hozzuk létre:

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

Régebbi OpenSSL telepítése

A Debian 9 disztribúciójában lévő OpenSSL verziója (1.1.0) túl új a PHP 5.6 számára, ezért fel kell telepítenünk a régebbi változatát (1.0.1t), ami alapból Debian 8 (Jessie) disztribúciójának a része. Mivel a Debian 9 nem tartalmazza ezt a csomagot, ezért le kell fordítanunk a forráskódjából. A régebbi OpenSSL verziót természetesen másodlagosként telepítjük fel a meglévő mellé, amit csak a PHP 5.6 fog használni, és nem fogja zavarni az alapértelmezett verzió működését.

Töltsük le az OpenSSL 1.0.1t változatát a hivatalos oldaláról, majd csomagoljuk ki:

cd /tmp
wget "https://www.openssl.org/source/old/1.0.1/openssl-1.0.1t.tar.gz"
tar xzf openssl-1.0.1t.tar.gz 

Hozzuk létre a cél könyvtárát:

mkdir /opt/openssl

Lépjünk be a forrás könyvtárába, majd konfiguráljuk:

cd openssl-1.0.1t
./config shared --prefix=/opt/openssl

Függőségek összeállítása a forrás számára:

make depend
Az eredeti leírásban nem volt benne a make depend parancs, nálam enélkül hibával leállt az ez után következő make parancs. Így hát betettem ezt a make elé, utána már szépen lefordult.
Írták is lent a kommentekben, hogy a leírás készítése óta változhattak a körülmények a Debian 9-ben. Az ilyesmivel mindig érdemes számolni egy régebbi leírás elkészítésénél.

Most már jöhet az OpenSSL fordítása:

make

Majd ha hiba nélkül lefutott, akkor jöhet a telepítés:

make install

Link létrehozása és az OpenSSL-hez szükséges friss gyökér tanúsítvány csomag letöltése a wget paranccsal:

ln -s /opt/openssl/lib /opt/openssl/lib/x86_64-linux-gnu
wget -O /opt/openssl/ssl/cert.pem "http://curl.haxx.se/ca/cacert.pem"

További linkek létrehozása, hogy a PHP 5.6 elérje a libcrypto és libssl függvénykönyvtárakat:

ln -s /opt/openssl/lib/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/
ln -s /opt/openssl/lib/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/
ln -fs /opt/openssl /usr/local/ssl

Végül töröljük az átmeneti dolgokat:

rm -rf /tmp/openssl*

 

 

FreeType függvénykönyvtár elérhetővé tétele

Az eredeti leírás szerinti freetype2 linkeléses résznél nem stimmelt valami, ezért körülnéztem a Debian 8-ban, hogy ott hogyan van ez a freetype2 könyvtár.

A Debian 8-ban a /usr/include/freetype2/ könyvtárban  vannak közvetlenül a FreeType header fájljai, és egy config alkönyvtár. A Debian 9-ben pedig ugyanez a struktúra egy könyvtárszinttel beljebb van: /usr/include/freetype2/freetype/.

Ezt az eltérést a dpkg paranccsal is tudjuk ellenőrizni mindkét rendszeren:

dpkg -L libfreetype6-dev | grep "/usr/include"

Itt két megoldás lehetséges: Vagy átlinkeljük a fájlokat és a config könyvtárat egy könyvtárszinttel kijjebb, vagy pedig a PHP konfigurációjánál adjuk meg a FreeType támogatás számára a megfelelő könyvtárat:

[...]
    --with-freetype-dir=/usr/include/freetype2/freetype
[...]

Én ez utóbbit tartom ésszerűbbnek, tehát majd a PHP konfigurációjánál fogjuk ezt beállítani.

Ezzel az előkészületek meg is volnának, jöhet a PHP letöltése, konfigurálása, fordítása és telepítése.

 

PHP 5.6 letöltése

A leírás készítésének idején a PHP 5.6-os ágából az 5.6.40 a legfrissebb, ezért én ezzel dolgozom végig. Ez a verzió később frissülhet, ezért a leírás olvasásakor érdemes az újabb verzióval végig haladni.

Hozzuk létre a telepítési célkönyvtárat:

mkdir -p /opt/php-5.6.40
A pontos verziószámmal célszerű elnevezni a célkönyvtárat, mert ki tudja, lehet hogy később bekerül egy olyan javítás a PHP 5.6 valamelyik újabb verziójába, ami miatt érdemesnek fogjuk tartani arra, hogy az újabbat is lefordítsuk a szerverünkre. Így rendezettek maradhatnak a könyvtáraink. Tehát érdemes nagyobb távlatban gondolkodni.

Hozzuk létre a forrás és a fordítás számára az ideiglenes könyvtárat, majd lépjünk bele:

mkdir /usr/local/src/php-5.6-build
cd /usr/local/src/php-5.6-build

Töltsük le a PHP kiadásainak letöltőoldaláról az 5.6.40-es forráscsomagját, illetve ha ennek a leírásnak az elkészítése óta van frissebb, akkor azt. Én itt az Ausztriai tükröt választom, de lehet bármelyikről tölteni.

wget http://at2.php.net/get/php-5.6.40.tar.gz/from/this/mirror -O php-5.6.40.tar.gz

Csomagoljuk ki:

tar -xzf php-5.6.40.tar.gz

 

 

Fordítás és telepítés

Konfigurálás

A fordítás előtt konfigurálni kell a forrást, ami előkészíti a szoftvert az adott hardverre történő lefordításra. Többek között itt kell megadni neki nagyon sok paramétert, amiknek köszönhetően fogunk egy kész, működő rendszert kapni.

Lépjünk be a forrás könyvtárba:

cd /usr/local/src/php-5.6-build/php-5.6.40

Az összes konfigurálási lehetőségeket, kapcsolókat megtekinthetjük az alábbi paranccsal:

./configure --help

Itt pedig egy kész konfiguráció, amit az eredeti leírás alapján, és az itt felmerült változtatások figyelembevételével állítottam össze:

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

Ebben a konfigurációban tehát majdnem minden benne van, ami kellhet egy teljes PHP-be, egy dolgot kivéve: az IMAP támogatást.

A Debian 9-ben túl friss az IMAP a PHP 5.6 számára. Régebbi változatot még le lehet fordítani hozzá, de ahhoz még további régi függőségek kellenének, amik pedig már biztonsági kockázatot jelentenek. Másrészt ha Egy Debian 9-es szerverre választható verzióként telepítünk PHP 5.6-ot, akkor nem is létszükséges bele az IMAP, mivel a disztribúció alapértelmezett 7-es PHP változatában benne van, így azzal a változattal tudunk futtatni webmail klienseket, vagy bármi egyebet, ami az IMAP-ot igényli. Így tehát ezen a szerveren a PHP 5.6-ot csak a mentőövként használjuk, ha például futtatni kell egy régi weboldalt, ami a PHP 5-re lett írva annak idején.

Nálam hiba nélkül le is futott ez a konfiguráció, így jöhet is a következő lépés.

Fordítás

Az előkészített szoftvercsomag forrásának lefordítását a make paranccsal végezhetjük, a forrás könyvtárban maradva (/usr/local/src/php-5.6-build/php-5.6.40). Én még kíváncsiságból elé szoktam tenni a time parancsot is, így le tudom mérni a pontos futási időt is:

time make

Dobott jópár warningot, de hiba nem volt benne, és lefutott 9 perc 42 másodperc alatt a VirtualBox-os gépen. A gazda gép pedig egy Intel I7-3770-es CPU.

Telepítés

És végül jöhet a telepítés, ami a végleges helyére rakja a PHP-t:

make install

Ezzel tehát a /opt/php-5.6.40/ könyvtárba került a PHP 5.6 rendszerünk.

Ellenőrzés

A sikeres telepítést ellenőrizhetjük is a parancssori (CLI) PHP módon keresztül:

/opt/php-5.6.40/bin/php --version

A megfelelő kimenet pedig:

PHP 5.6.40 (cli) (built: Feb 18 2019 16:47:39) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

 

A következő oldalon folytatjuk a PHP 5.6.40 telepítés utáni beállításainak elvégzésével.

 

 

Lapozó

Ez a leírás több oldalból áll: