Пошаговый мануал по сборке PHP-FPM в Deb пакет
(ОС: Debian GNU/Linux 6.0 amd64, PHP 5.2.17, PHP-FPM 0.5.14)
Устанавливаем пакеты необходимые для работы
apt-get install build-essential dh-make libxml2-dev
Создаем каталог в который будем производить инсталляцию пакета до его сборки в deb пакет
mkdir /tmp/package
Логинимся в систему под обычным пользователем и все дальнейшие действия выполняем из под него. Скачиваем нужную нам версию PHP (в примере это будет PHP версии 5.2.17) и распаковываем ее в домашнем каталоге пользователя, под которым зашли в систему
cd ~
wget http://ru.php.net/distributions/php-5.2.17.tar.gz
tar -xf php-5.2.17.tar.gz
скачиваем PHP-FPM патч для нашей версии PHP, выполняем декомпрессию
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
gzip -d php-5.2.17-fpm-0.5.14.diff.gz
проходим в каталог с исходным кодом PHP
cd php-5.2.17
теперь патчим наш PHP патчем PHP-FPM и включаем поддержку FastCGI и собственно PHP-FPM (в ./configure не забываем добавить нужные нам ключи для сборки PHP с необходимыми нам модулями, например поддержка Mysql)
patch -p1 < ../php-5.2.17-fpm-0.5.14.diff
./configure --prefix= --bindir=/usr/bin --sbindir=/usr/sbin --mandir=/usr/share/man --libdir=/usr/lib --includedir=/usr/include --enable-fastcgi --enable-fpm --with-fpm-log=/var/log/php-fpm.log --with-fpm-pid=/var/run/php-fpm.pid --with-mysql --with-zlib --with-config-file-path=/etc
выполняем компиляцию и установку PHP в заранее подготовленный нами каталог /tmp/package. Данный процесс займет некоторое время, зависит от мощности сервера
INSTALL_ROOT=/tmp/package make all install
если все пройдет нормально, то по завершению будет примерно такой вывод
Build complete.
Don't forget to run 'make test'.
Installing PHP SAPI module: cgi
Installing PHP CGI binary: /tmp/package/usr/bin/
Installing FPM config: /tmp/package/etc/php-fpm.conf
Installing init.d script: /tmp/package/sbin/php-fpm
Installing PHP CLI binary: /tmp/package/usr/bin/
Installing PHP CLI man page: /tmp/package/usr/share/man/man1/
Installing build environment: /tmp/package/usr/lib/build/
Installing header files: /tmp/package/usr/include/php/
Installing helper programs: /tmp/package/usr/bin/
program: phpize
program: php-config
Installing man pages: /tmp/package/usr/share/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /tmp/package/usr/lib/php/
[PEAR] Archive_Tar - installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.2.3
[PEAR] Structures_Graph- installed: 1.0.3
[PEAR] XML_Util - installed: 1.2.1
warning: pear/PEAR requires package "pear/Archive_Tar" (recommended version 1.3.7)
warning: pear/PEAR requires package "pear/Structures_Graph" (recommended version 1.0.3)
warning: pear/PEAR requires package "pear/Console_Getopt" (recommended version 1.2.3)
warning: pear/PEAR requires package "pear/XML_Util" (recommended version 1.2.1)
[PEAR] PEAR - installed: 1.9.1
Wrote PEAR system config file at: /tmp/package//etc/pear.conf
You may want to add: /usr/lib/php to your php.ini include_path
Installing PDO headers: /tmp/package/usr/include/php/ext/pdo/
(в корне каталога /tmp/package удаляем все файлы и каталоги имя которых начинается на точку)
В каталоге /tmp/package создаем подкаталог DEBIAN, в нем файл control с примерно таким содержимым
Package: php-5.2.17-fpm-0.5.14
Architecture: amd64
Depends:
Provides:
Priority:
Version: 5.2.17
Maintainer: nobody
Description: PHP 5.2.17 with PHP-FPM 0.5.14
в этом же каталоге создаем еще один файл c именем preinst (выставляем ему права 775). Этот файл выполняется перед разворачиванием пакета в системе, в нашем случае это простой скрипт, который создаст системного пользователя php-fpm из под которого будет работать PHP-FPM. Выглядит скрипт вот так
#!/bin/sh -e
id php-fpm >/dev/null 2>&1 || addgroup --system php-fpm && \
adduser --system --no-create-home --disabled-password --ingroup php-fpm php-fpm
В файле /tmp/package/sbin/php-fpm корректируем путь к php-cgi
php_fpm_BIN=/usr/bin/php-cgi
в /tmp/package/etc/php-fpm.conf выставляем пользователя из под которого будет работать PHP-FPM, эту часть конфига:
Unix user of processes
<!-- <value name="user">nobody</value> -->
Unix group of processes
<!-- <value name="group">nogroup</value> -->
меняем на такую:
Unix user of processes
<value name="user">php-fpm</value>
Unix group of processes
<value name="group">php-fpm</value>
из под root пользователя меняем владельца и группу для всех файлов в каталоге /tmp/package
chown -R root:root /tmp/package
и из под обычного пользователя выполняем сборку Deb пакета
cd ~
dpkg-deb -b /tmp/package/ php-5.2.17-fpm-0.5.14-amd64.deb
будет аналогичное сообщение
dpkg-deb: building package `php-5.2.17-fpm-0.5.14' in `php-5.2.17-fpm-0.5.14-amd64.deb'.
и в текущем каталоге появится собранный Deb пакет php-5.2.17-fpm-0.5.14-amd64.deb
Теперь из под root пользователя можем установить собранный нами пакет
dpkg -i php-5.2.17-fpm-0.5.14-amd64.deb
(конфигурационный файл php.ini размещаем в каталоге /etc)
(ОС: Debian GNU/Linux 6.0 amd64, PHP 5.2.17, PHP-FPM 0.5.14)
Устанавливаем пакеты необходимые для работы
apt-get install build-essential dh-make libxml2-dev
Создаем каталог в который будем производить инсталляцию пакета до его сборки в deb пакет
mkdir /tmp/package
Логинимся в систему под обычным пользователем и все дальнейшие действия выполняем из под него. Скачиваем нужную нам версию PHP (в примере это будет PHP версии 5.2.17) и распаковываем ее в домашнем каталоге пользователя, под которым зашли в систему
cd ~
wget http://ru.php.net/distributions/php-5.2.17.tar.gz
tar -xf php-5.2.17.tar.gz
скачиваем PHP-FPM патч для нашей версии PHP, выполняем декомпрессию
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
gzip -d php-5.2.17-fpm-0.5.14.diff.gz
проходим в каталог с исходным кодом PHP
cd php-5.2.17
теперь патчим наш PHP патчем PHP-FPM и включаем поддержку FastCGI и собственно PHP-FPM (в ./configure не забываем добавить нужные нам ключи для сборки PHP с необходимыми нам модулями, например поддержка Mysql)
patch -p1 < ../php-5.2.17-fpm-0.5.14.diff
./configure --prefix= --bindir=/usr/bin --sbindir=/usr/sbin --mandir=/usr/share/man --libdir=/usr/lib --includedir=/usr/include --enable-fastcgi --enable-fpm --with-fpm-log=/var/log/php-fpm.log --with-fpm-pid=/var/run/php-fpm.pid --with-mysql --with-zlib --with-config-file-path=/etc
выполняем компиляцию и установку PHP в заранее подготовленный нами каталог /tmp/package. Данный процесс займет некоторое время, зависит от мощности сервера
INSTALL_ROOT=/tmp/package make all install
если все пройдет нормально, то по завершению будет примерно такой вывод
Build complete.
Don't forget to run 'make test'.
Installing PHP SAPI module: cgi
Installing PHP CGI binary: /tmp/package/usr/bin/
Installing FPM config: /tmp/package/etc/php-fpm.conf
Installing init.d script: /tmp/package/sbin/php-fpm
Installing PHP CLI binary: /tmp/package/usr/bin/
Installing PHP CLI man page: /tmp/package/usr/share/man/man1/
Installing build environment: /tmp/package/usr/lib/build/
Installing header files: /tmp/package/usr/include/php/
Installing helper programs: /tmp/package/usr/bin/
program: phpize
program: php-config
Installing man pages: /tmp/package/usr/share/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /tmp/package/usr/lib/php/
[PEAR] Archive_Tar - installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.2.3
[PEAR] Structures_Graph- installed: 1.0.3
[PEAR] XML_Util - installed: 1.2.1
warning: pear/PEAR requires package "pear/Archive_Tar" (recommended version 1.3.7)
warning: pear/PEAR requires package "pear/Structures_Graph" (recommended version 1.0.3)
warning: pear/PEAR requires package "pear/Console_Getopt" (recommended version 1.2.3)
warning: pear/PEAR requires package "pear/XML_Util" (recommended version 1.2.1)
[PEAR] PEAR - installed: 1.9.1
Wrote PEAR system config file at: /tmp/package//etc/pear.conf
You may want to add: /usr/lib/php to your php.ini include_path
Installing PDO headers: /tmp/package/usr/include/php/ext/pdo/
(в корне каталога /tmp/package удаляем все файлы и каталоги имя которых начинается на точку)
В каталоге /tmp/package создаем подкаталог DEBIAN, в нем файл control с примерно таким содержимым
Package: php-5.2.17-fpm-0.5.14
Architecture: amd64
Depends:
Provides:
Priority:
Version: 5.2.17
Maintainer: nobody
Description: PHP 5.2.17 with PHP-FPM 0.5.14
в этом же каталоге создаем еще один файл c именем preinst (выставляем ему права 775). Этот файл выполняется перед разворачиванием пакета в системе, в нашем случае это простой скрипт, который создаст системного пользователя php-fpm из под которого будет работать PHP-FPM. Выглядит скрипт вот так
#!/bin/sh -e
id php-fpm >/dev/null 2>&1 || addgroup --system php-fpm && \
adduser --system --no-create-home --disabled-password --ingroup php-fpm php-fpm
теперь создаем файл postinst (выставляем ему права 775), это скрипт запускается после разворачивания пакета. Он копирует php-fpm скрипт к init скриптам, делает его исполняемым и прописывает в автозагрузку
#!/bin/sh -e
cp /sbin/php-fpm /etc/init.d/ && \
chmod +x /etc/init.d/php-fpm && \
/usr/sbin/update-rc.d -f php-fpm defaults
и последний файл имеющий отношение к pre, post, rm скриптам Deb пакета это prerm. Он запускается перед удалением пакета из системы, у нас он останавливает PHP-FPM, удаляет системного пользователя php-fpm, убирает php-fpm из автозагрузки и удаляет init скрипт. Как обычно права на него 775
#!/bin/sh -e
/usr/sbin/invoke-rc.d php-fpm stop && \
userdel php-fpm && \
/usr/sbin/update-rc.d -f php-fpm remove && \
rm -f /etc/init.d/php-fpm
/usr/sbin/update-rc.d -f php-fpm remove && \
rm -f /etc/init.d/php-fpm
В файле /tmp/package/sbin/php-fpm корректируем путь к php-cgi
php_fpm_BIN=/usr/bin/php-cgi
в /tmp/package/etc/php-fpm.conf выставляем пользователя из под которого будет работать PHP-FPM, эту часть конфига:
Unix user of processes
<!-- <value name="user">nobody</value> -->
Unix group of processes
<!-- <value name="group">nogroup</value> -->
Unix user of processes
<value name="user">php-fpm</value>
Unix group of processes
<value name="group">php-fpm</value>
chown -R root:root /tmp/package
и из под обычного пользователя выполняем сборку Deb пакета
cd ~
dpkg-deb -b /tmp/package/ php-5.2.17-fpm-0.5.14-amd64.deb
будет аналогичное сообщение
dpkg-deb: building package `php-5.2.17-fpm-0.5.14' in `php-5.2.17-fpm-0.5.14-amd64.deb'.
и в текущем каталоге появится собранный Deb пакет php-5.2.17-fpm-0.5.14-amd64.deb
Теперь из под root пользователя можем установить собранный нами пакет
dpkg -i php-5.2.17-fpm-0.5.14-amd64.deb
(конфигурационный файл php.ini размещаем в каталоге /etc)
Комментариев нет:
Отправить комментарий