Собираем PHP

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

Оцени публикацию:
  • 1,5
Оценили человек: 1

Похожие статьи:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2019 YaPro.Ru

Главная » Веб-мастеру » Unix »