Совершенно недавно я перешел в состояние вооруженного конфликта (разумеется, в конфликте я с ними уже года 4, но вот вооруженная стадия только-только началась) с некоторыми "странными" репозиториями ПО, первыми попали под раздачу dotdeb и rpmforge.
И тут-то мне понадобилось сделать PHP в режиме FPM на Debian Squeeze (который, как известно, имеет PHP 5.3.3, в котором патч FPM уже интегрирован). Но вот не задача - в пакете исходных кодов deb пакета для Debian Squeeze нету бинарного пакета для FPM. А вот в Debian Wheezy этот пакет есть (и с сорцах и бинарный).
Оборотная сторона проблемы - 99% мануалов в интернете рекомендуют использовать dotdeb репозитория и тащить оттуда PHP FPM. Сомнительная перспектива, знаете ли. И это при условии, что я хочу оставить прежний PHP 5.3.3 (ибо на него стоит 2 десятка расширений, которые совершенно не хочется рекомпилировать).
Что делать? Что делать? Очень просто - будем делать хитрый бэкпортинг.
Стягиваем пакеты-зависимости:
Теперь пересобираем пакет (отключив тесты):
Но так как патчи мои далеко не идеальны, конфигурация в пакете отсутствует (там хитрый код генерирующий стандартный конфиг и я не стал с ним парится), нам нужно скрипт иницилизации и конфиги FPM и его стандартный пул взять из Wheezy:
Все, теперь можно запускать FPM и он отлично заработает:
Для большей определенности привожу структуру ini_fpm_pool_options из PHP 5.3.3, в которой перечислены все параметры конфигурации, актуальные для версии PHP FPM в Squeeze (источник - sapi/fpm/fpm/fpm_conf.c, cat sapi/fpm/fpm/fpm_conf.c|grep '&fpm_conf_set_'|awk '{print $2}'):
И тут-то мне понадобилось сделать PHP в режиме FPM на Debian Squeeze (который, как известно, имеет PHP 5.3.3, в котором патч FPM уже интегрирован). Но вот не задача - в пакете исходных кодов deb пакета для Debian Squeeze нету бинарного пакета для FPM. А вот в Debian Wheezy этот пакет есть (и с сорцах и бинарный).
Оборотная сторона проблемы - 99% мануалов в интернете рекомендуют использовать dotdeb репозитория и тащить оттуда PHP FPM. Сомнительная перспектива, знаете ли. И это при условии, что я хочу оставить прежний PHP 5.3.3 (ибо на него стоит 2 десятка расширений, которые совершенно не хочется рекомпилировать).
Что делать? Что делать? Очень просто - будем делать хитрый бэкпортинг.
Стягиваем пакеты-зависимости:
cd /usr/srcИтак, мы в папке пакета, надо наложить патчи (суть этих патчей в том, что я взял фрагменты кода отвечающего за сборку PHP FPM в Wheezy и перенес их на Squeeze, более ничего не менялось и не исправлялось!):
apt-get install -y dpkg-dev devscripts build-essential fakeroot
apt-get source libapache2-mod-php5
apt-get build-dep -y libapache2-mod-php5
cd php5-5.3.3
wget -Odebian/rules http://fastvps.googlecode.com/svn/trunk/patches/php_fpm_debian_squeeze/rules
wget -Odebian/control http://fastvps.googlecode.com/svn/trunk/patches/php_fpm_debian_squeeze/control
Теперь пересобираем пакет (отключив тесты):
DEB_BUILD_OPTIONS=nocheck debuild -us -ucГде-то через полчаса после сборки в папке /usr/src Вы получите пакет php5-fpm-x.deb, который можно сразу установить :)
Но так как патчи мои далеко не идеальны, конфигурация в пакете отсутствует (там хитрый код генерирующий стандартный конфиг и я не стал с ним парится), нам нужно скрипт иницилизации и конфиги FPM и его стандартный пул взять из Wheezy:
wget -O/etc/init.d/php5-fpm http://fastvps.googlecode.com/svn/trunk/patches/php_fpm_debian_squeeze/php5-fpmТеперь малость косметики (это чтобы FPM имел общий со всеми системными php5-cgi/cli/apache набор модулей):
chmod +x /etc/init.d/php5-fpm
wget -O/etc/php-fpm.conf http://fastvps.googlecode.com/svn/trunk/patches/php_fpm_debian_squeeze/php-fpm.conf
wget -O/etc/php-fpm-pool.conf http://fastvps.googlecode.com/svn/trunk/patches/php_fpm_debian_squeeze/php-fpm-pool.conf
ln -s /etc/php5/conf.d /etc/php5/fpm/conf.dТакже надо создать php.ini конфиг для FPM (отлично подойдет от CGI версии):
cp /etc/php5/cgi/php.ini /etc/php5/fpm
Все, теперь можно запускать FPM и он отлично заработает:
/etc/init.d/php5-fpmВнимание! Примеры конфигурации (именно то, что закомментировано) для более новой версии FPM патча (Wheezy), так что будьте внимательны - работатать будет не все!
Для большей определенности привожу структуру ini_fpm_pool_options из PHP 5.3.3, в которой перечислены все параметры конфигурации, актуальные для версии PHP FPM в Squeeze (источник - sapi/fpm/fpm/fpm_conf.c, cat sapi/fpm/fpm/fpm_conf.c|grep '&fpm_conf_set_'|awk '{print $2}'):
"emergency_restart_threshold",
"emergency_restart_interval",
"process_control_timeout",
"daemonize",
"pid",
"error_log",
"log_level",
"user",
"group",
"chroot",
"chdir",
"request_terminate_timeout",
"request_slowlog_timeout",
"slowlog",
"rlimit_files",
"rlimit_core",
"catch_workers_output",
"listen",
"listen.owner",
"listen.group",
"listen.mode",
"listen.backlog",
"listen.allowed_clients",
"pm",
"pm.max_requests",
"pm.max_children",
"pm.start_servers",
"pm.min_spare_servers",
"pm.max_spare_servers",
"pm.status_path",
"ping.path",
"ping.response",
Я вот так делал: http://www.zagirov.name/debian-testing-install-php5-fpm/
ReplyDeleteStamm, при таком варианте вы получите бажный PHP без испарвления актуальных проблем в безопасности за более, чем год. я бы такой вариант не рекомендовал.
ReplyDeleteОффтоп: Очень рад был увидеть в оф репе php-fpm на CentOS, резко жизнь упростилась. Ждем ответа Debian.
ReplyDeleteВ Debian очень скоро выходит Wheezy, в Squeeze уже бесполезно что-то продвигать, к сожалению.
Delete