Моему любимому фреймворку Symfony2 понадобилась версия PHP новее, чем 5.4.11, но в официальной репе ее еще нет, поэтому придется собирать PHP руками.
Итак, поехали.
1. Скачиваем PHP с официального сайта
2. распаковываем в директорию например /root/tmp
3. в итоге все сорцы лежат в /root/tmp/php-5.4.29/ заходим туда и смотрим, с какими опциями мы можем собрать наш PHP:
./configure --help
4. начинаем собирать PHP-конфиг с нужными нам опциями:
./configure \
'--with-pdo-mysql' \
'--with-mysql' \
'--with-curl' \
'--enable-intl' \
'--enable-mbstring=all' \
'--with-iconv' \
'--with-iconv-dir' \
'--enable-zip' \
'--with-xsl' \
'--with-zlib' \
'--with-gd' \
'--with-jpeg-dir' \
'--with-iconv-dir' \
'--with-openssl' \
'--with-config-file-path=/etc/php5/apache2' \
'--with-config-file-scan-dir=/etc/php5/conf.d' \
'--with-apxs2=/usr/bin/apxs2'
Если не указать путь к директории в настройке --with-config-file-path= то PHP будет искать файл по адресу /usr/local/lib/php.ini
В --with-config-file-scan-dir указывается директория, в которой PHP будет искать доп. файлы конфигураций, т.е. то, что Вы могли бы указать в php.ini, но решили вынести в отдельные файлы, обычно в этих файлах указываются настройки PHP-библиотек, например библиотек mysql или xdebug
Снова пробую собрать конфиг и получаю ошибку:
If configure fails try --with-jpeg-dir=<DIR>
If configure fails try --with-vpx-dir=<DIR>
configure: error: png.h not found.
Пришлось доустановить:
aptitude install libpng-dev
Все равно ругнулось:
configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
Пришлось доустановить:
aptitude install libxslt-dev
Опять ругнулось:
configure: error: jpeglib.h not found.
Пришлось доустановить:
aptitude install libjpeg-dev
Подробнее про опцию with-apxs2:
--with-apxs2=/usr/sbin/apxs2 - указывает путь к утилите apxs, необходимая для сборки и установки модулей для Apache (иначе php соберется без libphp5.so), но если попробовать ее установить:
aptitude install apxs
Couldn't find any package matching "apxs". However, the following
packages contain "apxs" in their description:
apache2-threaded-dev apache2-prefork-dev
нам подскажут, что утилита содержится в 2-х версиях пакетов, я согласно рекомендации офиц. документации выбираю apache2-prefork-dev, устанавливаю его и проверяю, куда установился apxs2:
# which apxs2
/usr/bin/apxs2
Все верно, параметр мы указали правильно. Пробуем собрать конфиг - ура, конфиг собрался. И т.к. далее, checkinstall будет подменять нам /usr/lib/apache2/modules/libphp5.so на новый, нужно остановить Apache:
service apache2 stop
На всякий случай выполним:
make clean
Узнаем текущую версию PHP:
# aptitude search '~i' | grep php i A php5-cli - command-line interpreter for the php5 scri i A php5-common - Common files for packages built from the p i php5-mysql - MySQL module for php5 i php5-xdebug - Xdebug Module for PHP 5 id php5.4.3 - php-5.4.3
и удалим ее (т.к. далее мы будем запускать checkinstall, который не только соберет нам пакет, но и установит нам его):
aptitude remove php5.4.3
Теперь, чтобы не делать make install соберем наш PHP в deb-пакет, который ничего не испортит и который можно удалить. Для этого есть замечательная утилита - checkinstall, давайте установим ее:
aptitude install checkinstall
Теперь соберем PHP в deb-пакет:
checkinstall --pkgname php5.4.29 --pkgversion 5.4.29 --maintainer my@site.ru
На определенном этапе checkinstall спросит описание пакета (short description), которое будет выводиться о пакете, если дать команду dpkg -l. Напишем там что-то незамысловатое:
PHP 5.4.29
Нажмем пару раз Enter и процесс побежал. Если checkinstall спросит:
This package will be built according to these values:
0 - Maintainer: [ my@site.ru ]
1 - Summary: [ php 5.4.29 ]
2 - Name: [ php5.4.29 ]
3 - Version: [ 5.4.29 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ i386 ]
8 - Source location: [ php-5.4.29 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ php5.3.29 ]
12 - Conflicts: [ ]
13 - Replaces: [ ]Enter a number to change any of them or press ENTER to continue:
просто нажмите Enter.
Примерно через 10 минут пакет будет собран в текущей директории и установлен + мы получим надпись:
**********************************************************************
Done. The new package has been installed and saved to
/root/tmp/php-5.4.29/php5.4.29_5.4.29-1_i386.deb
You can remove it from your system anytime using:
dpkg -r php5.4.29
**********************************************************************
Проверяем:
php -v
PHP 5.4.29 (cli) (built: Oct 15 2014 04:38:20)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
Чтобы Apache узнал про обновление PHP (при установке обновился /usr/lib/apache2/modules/libphp5.so), ребутнем Apache:
service apache2 restart
Теперь можете запустить в браузере какой-нибудь PHP-скрипт с кодом <?php phpinfo(); ?>
Удачи, господа.
Источник: 1
P.s. PHP 5.4.33 у меня не собирается и вылазит ошибка:
libphp5.so: undefined symbol: php_output_write Action 'configtest' failed."
поэтому, я решил собрать предыдущую версию 5.4.29.
Комментарии
Комментариев пока нет.