Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

PhpBrew. Администратор версий PHP. ( установка и применение в Ubuntu 13.10)

Anna | 29.05.2014 | нет комментариев

Лирическое №1

PHP неуклонно взрослеет и обзаводится разными пригодными дополнениями и некоторые из них теснее ну вовсе как у старших (правда слово «младших» во многих случаях подойдет отменнее).

В этом ключе стоит, скажем, припомнить такие восхитительные вещи как администратор зависимостей composer, встроенный веб-сервер, возникновение namespace’ов и замыканий.

Сложилось так, что в качестве рабочей OS у меня установлена последняя версия Ubuntu (13.10). Длинное время я довольствовался последней стабильной версией PHP из репозиториев (видимо везло), но здесь по работе пришел план на 5.3 (а то и 5.2, но под 5.3 завелся), тот, что никак не хотел стартовать на последней 5.5.3, что из официальных репозиториев и я было опечалился (теснее имеется навык установки неактуального PHP на Ubuntu, хоть и удачный, но крайне печальный), но потом припомнил ruby и rvm.io и решил провести малое изыскание. В результате сотрудник подсказал озвученную в заголовке вещь.

Конец лирического. К фактам.

Если лаконично – исключительное предназначение phpbrew – вероятность применять различные версии PHP на одной машине. Стремительно, легко, фактически без танцев с народными музыкальными инструментами. (не продакшен, не параллельная работа, но мгновенное переключение между версиями при разработке).


Дабы не растекаться мыслью по древу приведу (нехорошо) переведенную выдержку из официального readme:

phpbrew горазд собрать и установить несколько разных версий PHP в домашнюю директорию нынешнего пользователя.
Также phpbrew помогает руководить переменными окружения – при помощи команд use и switch дозволено легко переключаться между версиями PHP.

Что может phpbrew:

  • Собирать PHP с разными растяжениями (PDO, mysql, sqlite, debug… и т.д.)
  • Собирать модули для Apache (для всякой версии по модулю)
  • Собирать и устанавливать PHP прямо в домашнюю директорию, а значит – не требовать root права для работы (здесь с оговорками – прим. переводчика, см. ниже)
  • Легко переключать версии PHP при помощи примитивных команд, интегрированных в оболочки bash/zsh
  • Механически определять фичи (Добросовестно говоря не осознал о чем это — прим. переводчика)
  • Легко устанавливать растяжения в нынешний environment
  • Устанавливать несколько версий PHP в систему
  • Выходит, короткая инструкция по установке и применению под Ubuntu 13.10 (Правда в readme все описано предельно ясно, так что фактически репост) с обзором нескольких подводных камней.

Cтоит добавить что не может он механически интегрироваться в nginx.

Установка

1) Установить зависимости согласно официальному документу с requirements

# apt-get build-dep php5
# apt-get install -y php5 php5-dev php-pear autoconf automake curl build-essential libxslt1-dev re2c libxml2 libxml2-dev php5-cli bison libbz2-dev libreadline-dev
# apt-get install -y libfreetype6 libfreetype6-dev libpng12-0 libpng12-dev libjpeg-dev
# libjpeg8-dev libjpeg8  libgd-dev libgd3 libxpm4
# apt-get install -y libssl-dev openssl
# apt-get install -y gettext libgettextpo-dev libgettextpo0
# apt-get install -y libicu48 libicu-dev
# apt-get install -y libmhash-dev libmhash2
# apt-get install -y libmcrypt-dev libmcrypt4
# apt-get install -y mysql-server mysql-client libmysqlclient-dev libmysqld-dev

Скорее каждого вам не потребуются ВСЕ эти зависимости, следственно имеет толк установить наименьший требуемый для сборки чистого PHP комплект, а дальше ориентироваться на сообщения PHP’шого configure, тот, что все равно будет вызываться для проверке соответствия системы требованиям.

2) Устанавливаем собственно phpbrew, все по той же инструкции

$ cd /tmp/
$ curl -O https://raw.github.com/c9s/phpbrew/master/phpbrew
$ chmod  x phpbrew
$ sudo cp phpbrew /usr/bin/phpbrew

3) По-бывшему по инструкции, инициализация

$ phpbrew init

4) Добавить следующую строку в .bashrc (либо .zhrc)

source ~/.phpbrew/bashrc

Позже этого необходимо закрыть и вновь открыть консоль (ну либо легко сделать logout/login, это по обстановки) Дабы новые команды в bashrc проинициализировались. Либо независимо запустить в консоли

$ source ~/.phpbrew/bashrc

Готово. Дозволено пользоваться.

Настройка

Информация из этого пункта также доступна в официальном readme. И часть ее в официальном гайдеtroubleshooting.

$ phpbrew known

Покажет список доступных версий (есть версии и старше – для них к команде необходимо добавить ключ –old)

$ phpbrew variants 

Покажет список доступных вариантов для установки PHP. (по факту — растяжения с которыми PHP будет собираться)
phpbrew install [version] [variants] установит PHP требуемой версии с указанными растяжениями. Варианты перечисляются через пробел, всякий начинается с “ ”. Скажем команда:

$ phpbrew install 5.3.28  default

Загрузит и соберет PHP 5.3.28 с базовым комплектом компонентов (разные zip, json, mbstring и другое ежедневно-утилитарное)

$ phpbrew install 5.3.28  default  dbs  icu  intl

* стоит подметить что (скорее каждого так у вас ничего не соберется, см. раздел Troubleshooting этой статьи.

Загрузит и соберет PHP 5.3.28 с базовым комплектом компонентов а также с icu и intl (intl абсолютно разумно не соберется без ICU, а без intl отчего-то не собирается PHP 5.3 на Ubuntu)

Здесь лирическое №2, по поводу root:

Дабы добавить механически собранный модуль для apache2 необходимо команде phpbrew install передать вариант apxs2. Но.
Задача в том, что Apache и его модули находятся не в пользовательских директориях, а посему phpbrew легко не сумеет свой модуль никуда положить и упадет при попытках сделать это.

Workaround’а два – оба абсолютно официально предложены автором в разделе coockbook и оба мне не нравятся:
1) Устанавливать phpbrew и все сопутствующие штуки не в домашнюю директорию, а system-wide (все примерно так же, только под root) – получается что как-то противоречит первоначальной идеологии плана. Детально расписан в coockbook.
2) Временно позволить себе запись в надобные директории.Потом не позабыть запретить обратно. Ну это легко как-то ненормально.

Для Ubuntu 13.10 и apache 2.4.6 необходимыми будут /usr/lib/apache2/modules/ и /etc/apache2/mods-available/

# chmod a w /usr/lib/apache2/modules/
# chmod a w /etc/apache2/mods-available/

Позже этих подготовительных процедур таки ставим PHP 5.3.28 с базовым комплектом компонентов, с модулем apache, а также с icu и intl:

$ phpbrew install 5.3.28  default  dbs  apxs2   icu  intl 

Сейчас проверим, что получилось:

$ php -v 
PHP 5.5.3-1ubuntu2.1 (cli) (built: Dec 12 2013 04:24:35)
$ phpbrew use php-5.3.28 
$ php -v 
PHP 5.3.28 (cli) (built: Jan 29 2014 00:55:42) 

Перезагрузим apache2 и проверим его:

# service apache2 restart

Добавим еще одну версию верно таким же методом:

$ phpbrew install 5.5.8  default  apxs2  dbs  icu  intl 
$ phpbrew use php-5.5.8 
$ php -v 
PHP 5.5.8 (cli) (built: Jan 29 2014 01:53:33)

Еще раз перезагрузим apache2 и проверим:

Все готово, осталось прибрать хвосты. Возвращаем доступы к системным директориям apache в типичное состояние и передаем владение собранными модулями root’у (ну Дабы не выбивались из всеобщего потока):

# chmod a-w /usr/lib/apache2/modules/
# chmod a-w /etc/apache2/mods-available/
# chown root:root /usr/lib/apache2/modules/libphp5.*

Установка растяжений

Еще один момент — установка растяжений. Все проще простого — phpbrew интегрирован с PEAR.
Легко используйте команду:

$ phpbrew ext install [extension_name]
И дальше phpbrew сделает все сам. Скачает растяжение, соберет его и активирует для энергичной версии php. Скажем:

$ phpbrew ext install apc

либо:

$ phpbrew etx install xdebug
Переключение версий

Собственно дальше, если необходимо переключить версию CLI – используем phpbrew use [version] (либо phpbrew switch [version]), если же необходимо переключить версию для apache2 – ищем где у apache происходит загрузка нашего модуля (в случае Apache 2.4.6 и Ubuntu 13.10 это будет /etc/apache2/mods-available/php5.load (либо симлинк в mods-enabled), открываем его любым текстовым редактором и в строчке (скажем):

LoadModule php5_module        /usr/lib/apache2/modules/libphp5.5.8.so

меняем версию на необходимую нам (и, безусловно, установленную в системе, скажем)

LoadModule php5_module        /usr/lib/apache2/modules/libphp5.3.28.so

Перезагружаем apache и:


(да, вы правы, на самом деле данный тот же самый скриншот, что и в первом случае, тем не менее он отражает объективную реальность.)

Альтернативы:

Помимо этого решения существуют еще (как минимум) phpenv и php-version. С ними предлагаю ознакомиться независимо (буде возникнет такая надобность)

Troubleshooting


В всеобщем-то все есть в официальном гайде. Два момента, с которыми столкнулся лично:

1) Проверка config жалится на отсутствующий libpcre.(a|so) и ничего не собирает под таким неблаговидным предлогом.

Это не задача phpbrew, эта задача лежит на стыке ubuntu и php — php и не пытается искать библиотеки по нестандартным путям, Ubuntu, для чего-то держит их в не вовсе стандартном расположении.

К счастью phpbrew разрешает при помощи ключа — передавать в make добавочные параметры. Вам остается только обнаружить эти библиотеки и скормить их команде phpbrew install.

Для Ubuntu 13.10 (скорее каждого для всех основанных на Debian дистрибутивов) настоящая команда для установки php в варианте из статьи будет выглядеть так:

$ phpbrew install 5.3.28  default  dbs  apxs2   icu  intl --  --with-libdir=lib/x86_64-linux-gnulibpcre.a


2) При сборке php 5.3 возникает оплошность вида:

libtool: unrecognized option `-export-dynamic' 
Try `libtool --help' for more information.


Баг специфичный именно для 5.3. Легко добавьте к phpbrew install варианты ” icu intl” (как и делается всюду в рамках этой статьи).

Еще раз формальные источники:

  1. phpbrew: github.com/c9s/phpbrew
  2. Readme: github.com/c9s/phpbrew/blob/master/README.md
  3. Troubleshooting: github.com/c9s/phpbrew/wiki/Troubleshooting
  4. Coockbook: github.com/c9s/phpbrew/wiki/Cookbook
 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB