На просторах Интернета имеется достаточно большое количествео разнообразных мануалов на тему сборки PHP. К сожалению, всех их объединяет одно: все они делаются через make install (читайте: через интимное место). О причинах распыляться не буду, порекомендую лишь статью на Хабре с многоговорящим названием: Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install.
В данном мануале я не ограничусь только сборкой одного пакета.Мы соберем все популярные версии и {в}рапперы для него.
Все, что собирается - собирается на Debian Squeeze для FastCGI. Шаг влево/шаг вправо и мануал уже не подходит. Например на Lenny даже близко не так все будет. Я очень рекомендую установить чистенькую свежую систему, чтобы не спотыкаться об пакеты из неродных репозиториев и их разломанными зависимостями.
Начнем с того, что поставим зависимости, которые возможно нам и не понадобятся, но они указаны к стандартному PHP мейнтейнерами:
Отлично. Теперь поставим утилиту, которой будем собирать пакеты:
Создадим директории для работы над нашими пакетам:
mkdir -p /usr/src/php/php5.2 /usr/src/php/php5.3 /usr/src/php/php5.4 /usr/src/php/php-switcher
Итак перейдем с сборке первого пакета - PHP 5.2
Сборка пакета PHP 5.2 в альтернативную директорию.
Перейдем в директорию для нашего пакета:
Скачаем его с этой странички.
Теперь переименуем в нормальное имя:
Распакуем:
Далее конфигурируем. Но внимательно, я буду черным цветом помечать опции специфичные для этой версии (почему mysql везде цветной, объясню позже):
Внимание на пути конфигов: /etc/php5/alt/...
Не бойтесь, что их еще нет. Эти пути будут автоматически созданы при установке одного из собранных нами далее пакетов - php-switcher, который будет содержать рапперы и всякие полезные postinstall-скрипты.
Здесь я прошу обратить внимание на переменную extension_dir в файле scripts/php-config. Именно сюда надо будет складывать дополнительные библиотеки типа Zend Optimizer или прочих.
Кстати спасибо alekciy'ю за эту инфу, которую я так долго искал.
Готово. Теперь компилируем пакет и устанавливаем файлы. Только не в файловую систему, как это делает make install, а в .deb пакет. Поле мейнтейнера только поменяем на свой e-mail:
На определенном этапе спросит описание пакета (short description), которое будет выводиться о пакете, если дать команду dpkg -l. Напишем там что-то незамысловатое:
Сборка пакета PHP 5.3 в альтернативную директорию.
Перейдем в директорию для нашего пакета:
Теперь переименуем в нормальное имя:
Распакуем:
Далее конфигурируем. Но внимательно, я буду черным цветом помечать опции специфичные для этой версии. Кроме того, обратите внимание, что начиная с версии 5.3 у PHP из коробки идет поддержка нативного драйвера mysql-nd, вместо стороннего libmysqlclient:
Готово. Теперь компилируем пакет и устанавливаем файлы. Поле мейнтейнера только поменяем на свой e-mail:
Short description:
Жмеме Enter два раза, ждем...
Получаем .deb пакет в той же директории.
Сборка пакета PHP 5.4 в альтернативную директорию.
Перейдем в директорию для нашего пакета:
Теперь переименуем в нормальное имя:
Готово. Теперь компилируем пакет и устанавливаем файлы. Поле мейнтейнера только поменяем на свой e-mail:
Жмеме Enter два раза, ждем...
Получаем .deb пакет в той же директории.
Все пакеты PHP собраны. Но нам понадобится еще один пакет, в котором будут содержаться рапперы и задача копирования основных конфигов дебиановского PHP.
Но внимание: работа этого пакета подразумевает, что рапперы будут общие для всех. А значит каждый пользователь столкнется с пробелмой suexec, который требует, чтобы запускаемый файл был владением того же пользователя. Но это фиксится переработкой suexec.
Сборка пакета PHP-switcher.
Перейдем в директорию для нашего пакета:
Удалим все вызовы make:
По окончании сборки в директории выше, а не как раньше в той же, образуется .deb пакет.
Ставим все 4 пакета и проводим эксперимент.
Проведение эксперимента.
У нас есть две опции: делать один раппер на весь аккаунт пользователя или на каждый сайт отдельно.
В данном мануале я не ограничусь только сборкой одного пакета.Мы соберем все популярные версии и {в}рапперы для него.
Все, что собирается - собирается на Debian Squeeze для FastCGI. Шаг влево/шаг вправо и мануал уже не подходит. Например на Lenny даже близко не так все будет. Я очень рекомендую установить чистенькую свежую систему, чтобы не спотыкаться об пакеты из неродных репозиториев и их разломанными зависимостями.
Начнем с того, что поставим зависимости, которые возможно нам и не понадобятся, но они указаны к стандартному PHP мейнтейнерами:
apt-get install apache2-prefork-dev autoconf automake bison chrpath flex freetds-dev hardening-wrapper libapr1-dev libbz2-dev libc-client-dev libcurl4-openssl-dev libenchant-dev libevent-dev libexpat1-dev libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev libglib2.0-dev libgmp3-dev libicu-dev libjpeg-dev libkrb5-dev libldap2-dev libmcrypt-dev libmhash-dev libmysqlclient-dev libonig-dev libpam0g-dev libpng12-dev libpq-dev libpspell-dev libqdbm-dev librecode-dev libsasl2-dev libsnmp-dev libsqlite0-dev libsqlite3-dev libt1-dev libtidy-dev libtool libwrap0-dev libxmltok1-dev libxml2-dev libxslt1-dev locales-all mysql-server quilt re2c unixodbc-dev firebird2.1-dev libgdbm-dev libcurl4-openssl-dev libssl-dev libreadline-dev libedit-dev
Отлично. Теперь поставим утилиту, которой будем собирать пакеты:
apt-get install checkinstallКонечно эта утилита - детская лопатка для игры в песочнице. Настоящие мейнтейнеры таким не пользуются, но у меня пока не хватает знаний и ума сделать все вообще по высшему пилотажу. Да и quilty нам не особо пока нужен.
Создадим директории для работы над нашими пакетам:
mkdir -p /usr/src/php/php5.2 /usr/src/php/php5.3 /usr/src/php/php5.4 /usr/src/php/php-switcher
Итак перейдем с сборке первого пакета - PHP 5.2
Сборка пакета PHP 5.2 в альтернативную директорию.
Перейдем в директорию для нашего пакета:
/usr/src/php/php5.2
Скачаем его с этой странички.
Теперь переименуем в нормальное имя:
mv mirror php-5.2.17.tar.bz2
Распакуем:
И перейдем в директорию:tar xjf php-5.2.17.tar.bz2
cd php-5.2.17
Далее конфигурируем. Но внимательно, я буду черным цветом помечать опции специфичные для этой версии (почему mysql везде цветной, объясню позже):
./configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --sysconfdir=/etc --localstatedir=/var --disable-debug --with-regex=php --disable-rpath --disable-static --with-pic --with-layout=GNU --enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-bcmath --with-bz2 --enable-ctype --with-iconv --enable-exif --with-gettext --enable-mbstring --enable-shmop --enable-sockets --enable-wddx --with-libxml-dir=/usr --with-zlib --with-kerberos=/usr --enable-soap --enable-zip --with-mhash=yes --with-tidy=/usr --with-curl=/usr/bin --with-curlwrappers --with-openssl-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-xsl=/usr --with-xmlrpc --with-iconv-dir=/usr --with-snmp=/usr --with-mcrypt=/usr --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr/lib --with-zlib-dir=/usr --with-freetype-dir=/usr --with-imap --with-kerberos --with-imap-ssl --with-readline --with-libedit --without-pear --with-mysql=/usr --with-mysqli=/usr/bin/mysql_config --with-pdo-mysql=/usr --prefix=/opt/php/php5.2 --mandir=/opt/php/php5.2/man --with-exec-dir=/usr/lib/php5/libexec --with-config-file-path=/etc/php5/alt/php5.2 --with-config-file-scan-dir=/etc/php5/alt/php5.2/conf.d --enable-force-cgi-redirect --enable-fastcgiВозможно будут вылетать ошибки: придется допиливать по месту.
Внимание на пути конфигов: /etc/php5/alt/...
Не бойтесь, что их еще нет. Эти пути будут автоматически созданы при установке одного из собранных нами далее пакетов - php-switcher, который будет содержать рапперы и всякие полезные postinstall-скрипты.
Здесь я прошу обратить внимание на переменную extension_dir в файле scripts/php-config. Именно сюда надо будет складывать дополнительные библиотеки типа Zend Optimizer или прочих.
Кстати спасибо alekciy'ю за эту инфу, которую я так долго искал.
Готово. Теперь компилируем пакет и устанавливаем файлы. Только не в файловую систему, как это делает make install, а в .deb пакет. Поле мейнтейнера только поменяем на свой e-mail:
checkinstall --pkgname php5.2.alt --pkgversion 5.2.17 --maintainer michael.abramovich@nodesquad.com
На определенном этапе спросит описание пакета (short description), которое будет выводиться о пакете, если дать команду dpkg -l. Напишем там что-то незамысловатое:
PHP 5.2 in optional directory.Нажмем пару раз Enter и процесс побежал. Через 10 минут или более будет собран пакет, который будет лежать в этой же директории.
Сборка пакета PHP 5.3 в альтернативную директорию.
Перейдем в директорию для нашего пакета:
/usr/src/php/php5.3Скачаем его с этой странички.
Теперь переименуем в нормальное имя:
mv mirror php-5.3.10.tar.bz2
Распакуем:
И перейдем в директорию:tar xjf php-5.3.10.tar.bz2
cd php-5.3.10
Далее конфигурируем. Но внимательно, я буду черным цветом помечать опции специфичные для этой версии. Кроме того, обратите внимание, что начиная с версии 5.3 у PHP из коробки идет поддержка нативного драйвера mysql-nd, вместо стороннего libmysqlclient:
./configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --sysconfdir=/etc --localstatedir=/var --disable-debug --with-regex=php --disable-rpath --disable-static --with-pic --with-layout=GNU --enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-bcmath --with-bz2 --enable-ctype --with-iconv --enable-exif --with-gettext --enable-mbstring --enable-shmop --enable-sockets --enable-wddx --with-libxml-dir=/usr --with-zlib --with-kerberos=/usr --enable-soap --enable-zip --with-mhash=yes --with-tidy=/usr --with-curl=/usr/bin --with-curlwrappers --with-openssl-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-xsl=/usr --with-xmlrpc --with-iconv-dir=/usr --with-snmp=/usr --with-mcrypt=/usr --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr/lib --with-zlib-dir=/usr --with-freetype-dir=/usr --with-imap --with-kerberos --with-imap-ssl --with-readline --with-libedit --without-pear --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --prefix=/opt/php/php5.3 --mandir=/opt/php/php5.3/man --with-exec-dir=/usr/lib/php5/libexec --with-config-file-path=/etc/php5/alt/php5.3 --with-config-file-scan-dir=/etc/php5/alt/php5.3/conf.d --with-onig=/usr
Готово. Теперь компилируем пакет и устанавливаем файлы. Поле мейнтейнера только поменяем на свой e-mail:
checkinstall --pkgname php5.3.alt --pkgversion 5.3.10 --maintainer michael.abramovich@nodesquad.com
Short description:
PHP 5.3 in optional directory.
Жмеме Enter два раза, ждем...
Получаем .deb пакет в той же директории.
Сборка пакета PHP 5.4 в альтернативную директорию.
Перейдем в директорию для нашего пакета:
/usr/src/php/php5.4Скачаем его с этой странички.
Теперь переименуем в нормальное имя:
mv mirror php-5.4.0.tar.bz2Распакуем:
И перейдем в директорию:tar xjf php-5.4.0.tar.bz2
cd php-5.4.0Далее конфигурируем. Но внимательно, я буду черным цветом помечать опции специфичные для этой версии:
./configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --sysconfdir=/etc --localstatedir=/var --disable-debug --with-regex=php --disable-rpath --disable-static --with-pic --with-layout=GNU --enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-bcmath --with-bz2 --enable-ctype --with-iconv --enable-exif --with-gettext --enable-mbstring --enable-shmop --enable-sockets --enable-wddx --with-libxml-dir=/usr --with-zlib --with-kerberos=/usr --enable-soap --enable-zip --with-mhash=yes --with-tidy=/usr --with-curl=/usr/bin --with-curlwrappers --with-openssl-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-xsl=/usr --with-xmlrpc --with-iconv-dir=/usr --with-snmp=/usr --with-mcrypt=/usr --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr/lib --with-zlib-dir=/usr --with-freetype-dir=/usr --with-imap --with-kerberos --with-imap-ssl --with-readline --with-libedit --without-pear --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --prefix=/opt/php/php5.4 --mandir=/opt/php/php5.4/man --libexecdir=/usr/lib/php5/libexec --with-config-file-path=/etc/php5/alt/php5.4 --with-config-file-scan-dir=/etc/php5/alt/php5.4/conf.d --with-onig=/usr
Готово. Теперь компилируем пакет и устанавливаем файлы. Поле мейнтейнера только поменяем на свой e-mail:
Short description:checkinstall --pkgname php5.4.alt --pkgversion 5.4.0 --maintainer michael.abramovich@nodesquad.com
PHP 5.4 in optional directory.
Жмеме Enter два раза, ждем...
Получаем .deb пакет в той же директории.
Все пакеты PHP собраны. Но нам понадобится еще один пакет, в котором будут содержаться рапперы и задача копирования основных конфигов дебиановского PHP.
Но внимание: работа этого пакета подразумевает, что рапперы будут общие для всех. А значит каждый пользователь столкнется с пробелмой suexec, который требует, чтобы запускаемый файл был владением того же пользователя. Но это фиксится переработкой suexec.
Сборка пакета PHP-switcher.
Перейдем в директорию для нашего пакета:
cd /usr/src/php/php-switcherСоздадим в ней еще одну директорию и перейдем в нее:
Подготовим служебные для сборки пакеты:mkdir php-switcher-1.0cd php-switcher-1.0
dh_make -s --indep --createorig
Удалим все вызовы make:
Убираем quilt:grep -v makefile debian/rules > debian/rules.new
mv debian/rules.new debian/rules
echo "1.0" > debian/source/formatУдаляем все .ex файлы, так как они нам в нашей примитивной поделке не нужны:
rm debian/*.exСоздадим 3 или 4 раппера:
echo "#!/opt/php/php5.2/bin/php-cgi" > php5.2Теперь нам надо сказать файл, в котором будет перечисленно, в какую директорию какой файл совать и совать ли вообще:
echo "#!/opt/php/php5.3/bin/php-cgi" > php5.3
echo "#!/opt/php/php5.4/bin/php-cgi" > php5.4
ну и на вырост:
echo "#!/opt/php/php6.0/bin/php-cgi" > php6.0
tee > debian/install
php5.2 /var/www/php-versionДобавляем необходимые скрипты, которые будут вызваны после установки пакета (мы поправим права на файлы и скопируем php.ini основного дебиановского PHP в собствнные директории каждого из альтернативных пакетов. conf.d оставим пустым - его надо заполнять только по мере надобности):
php5.3 /var/www/php-version
php5.4 /var/www/php-version
php6.0 /var/www/php-version
Стартуем сборку пакета:tee > debian/postinst
#!/bin/bash
/bin/chmod -R 555 /var/www/php-versionmkdir -p /etc/php5/alt/php5.2/conf.d /etc/php5/alt/php5.3/conf.d /etc/php5/alt/php5.4/conf.d /etc/php5/alt/php6.0/conf.dcp /etc/php5/cgi/php.ini /etc/php5/alt/php5.2/php.inicp /etc/php5/cgi/php.ini /etc/php5/alt/php5.3/php.inicp /etc/php5/cgi/php.ini /etc/php5/alt/php5.4/php.inicp /etc/php5/cgi/php.ini /etc/php5/alt/php6.0/php.ini
debuild -us -uc
По окончании сборки в директории выше, а не как раньше в той же, образуется .deb пакет.
Ставим все 4 пакета и проводим эксперимент.
Проведение эксперимента.
У нас есть две опции: делать один раппер на весь аккаунт пользователя или на каждый сайт отдельно.
Комментариев нет:
Отправить комментарий