ФорумПрограммированиеPHP для идиотов → PHPFarm, сборка php заданной версии

PHPFarm, сборка php заданной версии

  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 20 декабря 2012 г. 10:02

    Пару месяцев назад я обновил бубунту с 12.04 до 12.10, соответственно, обновился php с 5.3 до 5.4, что привело к неработоспособности 100% всех моих php-проектов. Честно говоря, я не понимаю, зачем так сделано, и почему в бубунте нет возможности выбирать, какой php установить - 5.2, 5.3 или 5.4, как это можно сделать во фряхе.

    Впрочем, это проблема не конкретной сборки ОС, а скорее концептуальный вопрос, касающийся настройки рабочих инструментов. Разработчик софта не должен зависеть от прихотей команды, собирающей дистрибутив ОС. Удобно и потому правильно иметь ОС без установленных интерпретаторов, а сами интерпретаторы устанавливать с помощью сборщиков версий. Например, для 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 &quot;.+\.ph(p[345]?|t|tml)$&quot;>
    SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch &quot;.+\.phps$&quot;>
    SetHandler application/x-httpd-php-source
    Order Deny,Allow
    Deny from all
    </FilesMatch>
    # Deny access to files without filename (e.g. &#39;.php&#39;)
    <FilesMatch &quot;^\.ph(p[345]?|t|tml|ps)$&quot;>
    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=&quot;$instdir&quot;/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=&quot;-march=native -O3&quot;

    9. Короче говоря, phpfarm - продукт любительский, степень готовности его - бета и ему нужна обработка напильником. Но плюсы его очевидны: после правильной настройки достаточно набрать &quot;compile.sh новая_версия&quot; - и вуаля, новая версия пыха установлена.

    10. Можно проще? Можно. Дёрните мой форк https://github.com/vsyrovat/phpfarm , в нём уже прописаны настройки для пунктов 3, 5, 7, 8.
    не всё полезно, что в swap полезло
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 20 декабря 2012 г. 13:50, спустя 3 часа 48 минут 7 секунд

    ну вот, как раз вышла версия 5.4.10
    не всё полезно, что в swap полезло
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 20 декабря 2012 г. 13:59, спустя 8 минут 55 секунд

    немного не понял, что это?

    зы: использую фмп а не мод пхп
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 21 декабря 2012 г. 3:28, спустя 13 часов 29 минут 17 секунд

    Абырвалг, кхм
    не всё полезно, что в swap полезло
  • 7 января 2014 г. 9:46, спустя 382 дня 6 часов 18 минут

    Пользователь был удалён, сообщения недоступны


Пожалуйста, авторизуйтесь, чтобы написать комментарий!