Впрочем, это проблема не конкретной сборки ОС, а скорее концептуальный вопрос, касающийся настройки рабочих инструментов. Разработчик софта не должен зависеть от прихотей команды, собирающей дистрибутив ОС. Удобно и потому правильно иметь ОС без установленных интерпретаторов, а сами интерпретаторы устанавливать с помощью сборщиков версий. Например, для Ruby такими сборщиками являются RVM и rbenv-installer. Для PHP одним из сборщиков является PHPFarm.
Сборщик - это обычный скрипт, выполняющий рутинные операции: проверку зависимостей (опционально), скачивание исходного кода, конфигурацию, компиляцию. Никакой магии, если разобраться.
Описание и краткая документация: http://cweiske.de/tagebuch/Introducing%20phpfarm.htm
Страница проекта на SF: http://sourceforge.net/projects/phpfarm/
Репозиторий на SF: git://git.code.sf.net/p/phpfarm/code
Страница и репозиторий на гитхабе: https://github.com/cweiske/phpfarm
Чтобы перевести свою тачку на phpfarm нужно выполнить следующие шаги:
1. удалить предустановленные пакеты php. впрочем, это опциональный шаг, пакеты можно оставить, просто они не будут использоваться. Перед удалением сохраните phpinfo.
2. Скачать и распаковать в /opt/phpfarm, делать это надо из-под рута
либо скачать архив и распаковать
либо выполнить команды
cd /opt
git clone git://git.code.sf.net/p/phpfarm/code phpfarm
получившаяся структура папок будет такой:
/opt/
phpfarm/
inst/ #папка со скомпилированными интерпретаторами
bin/
php-x.x.x/ #по папке на каждую версию php
src/ #скачанные исходники php
bzips/ #архивы
php-x.x.x/ #по папке на каждую версию php
compile.sh #этот скрипт компилирует php
options.sh #опции компиляции, подключаются из compile.sh
default-custom-php.ini #настройки php.ini для собранных версий
pyrus.sh #аналог PEAR
#всякие неинтересные файлы
3. Открыть файл options.sh и поковырять его, дописав те модули, которые нужны.
4. Набрать в консоли под рутом
src/compile.sh 5.3.19
(или src/compile.sh 5.4.9, смотря какая версия вам нужна). Если всё настроено правильно - пых скомпилируется и установится в папку inst/php-5.3.19.
5. Про Апач.
Как известно, апач цепляет пых через подключаемый модуль, который называется libphp5.so или типа того. Апач загружает его после команды в основном conf-файле
LoadModule php5_module /path/to/libphp5.so
путь к so-модулю может отличаться в зависимости от дистрибутива, например, у меня он /usr/lib/apache2/modules/libphp5.so
вручную прописывать его не нужно, хотя и можно, если в собранной конфигурации его не окажется.
Сам файл libphp5.so получается в момент компиляции php. Для этого нужно при конфигурации указать путь до apxs2-модуля
–with-apxs2=/usr/bin/apxs2
вместо /usr/bin/apxs2 может быть другой путь, смотря какой у вас дистрибутив
то есть нужно открыть файл options.sh и добавить эту строку, после чего опять запустить compile.sh.
Не забудьте перед компиляцией установить dev-пакеты апача.
Ну а чтобы апач подхватывал php-файлы и скармливал их php нужно ему указать
<IfModule mod_php5.c>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
SetHandler application/x-httpd-php-source
Order Deny,Allow
Deny from all
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
Order Deny,Allow
Deny from all
</FilesMatch>
Ладно, будем считать, что пых к апачу вы прикрутили и можете увидеть phpinfo в браузере. Идём дальше.
6. Сравниваете полученное phpinfo с phpinfo из пункта 1, добавляете в options.sh нужные параметры и перезапускаете compile.sh до тех пор, пока не получите что вам нужно. Не забывайте перезапускать апач после компиляции php.
7. Про PEAR/PECL
Phpfarm ставит и эту радость тоже, но как-то эээ… в общем, предлагает альтернативу в виде pyrus: http://pear2.php.net/
Оно как бы понятно, новый софт, новые возможности, но пакетов там почему-то совсем мало. Поэтому при желании можно отказаться от pyrus и поставив pear, заменив в compile.sh строку –without-pear на –with-pear="$instdir"/pear, тогда все пакеты будут ставиться в /opt/phpfarm/inst/php-x.x.x/pear
вызываться pear/pecl будут как обычно, только нужно путь указать
/opt/phpfarm/inst/php-x.x.x/bin/pear …
/opt/phpfarm/inst/php-x.x.x/bin/pecl …
либо добавить путь в $PATH. PHPFarm сам этого не делает
8. Самое интересное - про оптимизацию.
gcc может использовать оптимизацию при компиляции, включается она с помощью переменной окружения CFLAGS march и O3
-march=native означает оптимизацию под микроархитектуру вашего процессора, а -O3 означает выполнить оптимизацию уровня 3.
phpfarm из коробки не даёт этого делать, потому что использует опцию –enable-debug, в результате php компилируется в жутко тормозном виде. поэтому открываем compile.sh, убираем строку –enable-debug и добавляем export CFLAGS="-march=native -O3"
9. Короче говоря, phpfarm - продукт любительский, степень готовности его - бета и ему нужна обработка напильником. Но плюсы его очевидны: после правильной настройки достаточно набрать "compile.sh новая_версия" - и вуаля, новая версия пыха установлена.
10. Можно проще? Можно. Дёрните мой форк https://github.com/vsyrovat/phpfarm , в нём уже прописаны настройки для пунктов 3, 5, 7, 8.