Собираем PHP

Автор: Aport Пятница, Январь 30th, 2015 Нет комментариев

Рубрика: Разное

Моему любимому фреймворку 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.

 

Источник: yapro.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты