Персональный блог Игоря Антонова aka "spider_net"

Установка PHP 5.2 в Debian 7.8. Собираем старый PHP из исходников


Рубрика: Администрирование -> Linux -> PHP -> Без рамки
Метки: | | | | | | |
Просмотров: 14804
Установка PHP 5.2 в Debian 7.8. Собираем старый PHP из исходников

Предположим, что в нашей системе установлена последняя версия php из репозиториев. У пользователей Debian 7.8 это будет 5.4. Все бы хорошо, но тут у нас появляется некий «проект», который категорически отказывается работать на современном ПО. Ему подавай только PHP 5.2! Не будем обсуждать качество кода и возможность его переписывания на новый лад. Наша задача попытаться установить в текущее окружение древнюю версию php, сохранив при этом работоспособность версии 5.4. В идеале мы должны получить возможность использовать 5.4 для одних сайтов, а 5.2 для других. Итак, под катом мой вариант установки PHP 5.2 в Debian 7.

Пятиминутная готовность

Как установить последнуюю версию PHP из репозитория в Debian я уже рассказывал. Поэтому будем считать, что PHP 5.4 и Apache у вас уже установлены. Теперь возьмемся за PHP 5.2

Установка пакетов необходимых для сборки php 5.2

Сначала установим несколько дополнительных пакетов. Они нам потребуются во время сборки старичка PHP 5.2.

apt-get install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libpng12-dev libjpeg62-dev make libxslt1-dev libbz2-dev libmcrypt-dev libmhash-dev libfcgi-dev libmhash-dev

Теперь необходимо создать символические ссылки на некоторые из выше перечисленных библиотек. PHP будет искать их именно в этих директориях.

ln -s /usr/lib/i386-linux-gnu/libjpeg.a /usr/lib/libjpeg.a
ln -s /lib/i386-linux-gnu/libpng12.so.0.49.0 /usr/lib/libpng.so
ln -s /usr/lib/i386-linux-gnu/libmysqlclient.so.18.0.0 /usr/lib/libmysqlclient.so

Загружаем исходники php 5.2

Загрузим нужную версию php из музея - http://museum.php.net/php5/. Находим в списке версию 5.2 и копируем на нее ссылку. Затем переходим в консоль и загружаем ее на север:

wget http://museum.php.net/php5/php-5.2.17.tar.gz

После загрузки извлекаем содержимое архива во временную папку:

tar -xzf php-5.2.17.tar.gz -C /tmp
cd /tmp/php-5.2.17/

Собираем php 5.2

Следующим шагом будет сборка php. Выполняем:

./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect --enable-mbstring --with-mcrypt

В случае успеха увидим текст лицензионного соглашения (на удивление оно не такое большое) и благодарности за выбор php.

+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+
Thank you for using PHP.

Сконфигурировали, теперь устанавливаем:

make 
make install

После метровой портянки мало полезной служебной информации, готовый к работе php, развернется в директории /opt/php52. Можно прямо сейчас выполнить команду и убедиться, что мы установили именно версию 5.2:

/opt/php5.2/bin/php -version

Результатом должно быть что-то вроде:

PHP 5.2.17 (cli) (built: Apr 22 2015 00:34:48)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

Последним шагом выставляем права на директорию с php:

chmod ugo+rX -R /opt/php5.2/

Соединяемся с Apache

Я буду считать, что Apache уже в вашей системе настроен. Если нет, то можете воспользоваться либо этой инструкцией или самостоятельно собрать Apache из исходников. В общем, выбирайте любой удобный для вас способ, а я буду ориентироваться на первый вариант (Apache, установленный из репозитория).

Готовим тестовую страницу

Для удобства тестирования, сразу создадим файлик phpinfo.php:

nano /var/www/phpinfo.php

В нем пишем вызов, знакомой каждому php’шнику функции:

<?php
phpinfo();

Сохраняем (Ctrl + O) и закрываем файл (Ctrl + X).

Устанавливаем модуль libapache2-mod-fastcgi

Для организации нашего плана нам обязательно придется установить дополнительный модуль для Apache – libapache2-mod-fastcgi. В репозиториях, прописанных в Debian по умолчанию, этого модуля нет. Откроем список репозиториев (/etc/apt/sources.list) и доведем его до следующего вида:

deb http://mirrors.digitalocean.com/debian wheezy main
deb http://ftp.es.debian.org/debian stable main contrib non-free
deb-src http://ftp.es.debian.org/debian stable main contrib non-free
deb http://ftp.debian.org/debian/ wheezy-updates main contrib non-free
deb-src http://ftp.debian.org/debian/ wheezy-updates main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

Сохраняем изменения в sources.list. Затем обновим список пакетов:

apt-get update

Отлично, теперь все готово для установки модуля libapache2-mod-fastcgi:

apt-get install libapache2-mod-fastcgi

Модуль поставили, активируем его:

a2enmod actions fastcgi

Если модуль успешно установился и активировался, то результатом выполнения последней команды будет:

Module actions already enabled
Module fastcgi already enabled

Подключаем PHP как FastCGI

Первым делом нам необходимо сделать обертку для наших скриптов. Создадим в директории с нашим сайтов каталог cgi-bin, выставим на него соответствующие права и сделаем конфиг для php:

mkdir /var/www/cgi-bin/
chmod o+rX /var/www/cgi-bin/

Создаем новый файл php52.fcgi:

nano /var/www/cgi-bin/php52.fcgi

Наполняем следующим содержимым:

#!/bin/sh
export PHP_FCGI_CHILDREN=4
export PHP_FCGI_MAX_REQUESTS=200
#export PHPRC="/var/www/php.ini" //Путь к конфигу
exec /opt/php5.2/bin/php-cgi

и устанавливаем права:

chmod a+rx /var/www/cgi-bin/php52.fcgi

Все, осталось сообщить Apache о нашем намерении использовать FastCGI для определенного сайта. В моем случае таким сайтом является default. В его конфигурационный файл (nano /etc/apache2/sites-available/default) дописываем:

php_admin_flag engine off
ScriptAlias /cgi-bin /var/www/cgi-bin
Action application/x-httpd-php /cgi-bin/php52.fcgi

Все, остается только перезапустить Apache и можно приступать к тестированию:

service apache2 restart

Тестируем версии php

Для начала проверим, как работает у нас версия 5.2. Обратитесь к подготовленному файлу phpinfo.php через браузер. В шапке страницы должна отображаться версия “PHP Version 5.2.17”. Отлично, первый тест пройдет. Теперь попробуем запустить этот же сценарий, но под PHP 5.4. Открываем конфигурационный файл сайт (у меня это /etc/apache2/sites-available/default) и комментируем строки (ставим перед строкой символ диеза):

#       php_admin_flag engine off
#       ScriptAlias /cgi-bin /var/www/cgi-bin
#       Action application/x-httpd-php /cgi-bin/php52.fcgi

После этого перезагружаем Apache и вновь пробуем обратиться к сценарию phpinfo.php. Теперь он должен быть обработан последней версией php.

Дополнение для x64

ln -s /usr/lib/x86_64-linux-gnu/libjpeg.a /usr/lib/libjpeg.a
ln -s /lib/x86_64-linux-gnu/libpng12.so.0.49.0 /usr/lib/libpng.so
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0 /usr/lib/libmysqlclient.so
Оставьте комментарий!
comments powered by HyperComments