Сборка PHP (CLI, FPM) и XCache из исходников. Скрипт использовался для сборки под непривилегированным пользователем в свой домашний каталог, поэтому `sudo` не расставлены где надо. Вначале нужно поставить зависимости. Для Debian примерно так (более-менее катит, доустановить что нужно по мере надобности): ``` $ sudo apt-get update $ sudo apt-get install libbz2-dev libc6-dev libcomerr2 libdb5.1-dev libfreetype6-dev \ libgd2-xpm-dev libgssapi-krb5-2 libjpeg8-dev libk5crypto3 libkrb5-dev libmagic-dev \ libonig2 libpcre3-dev libpng12-dev libqdbm-dev libssl-dev libx11-dev libxml2-dev \ libxpm-dev mime-support tzdata ucf zlib1g-dev libcurl4-gnutls-dev libmcrypt-dev \ libreadline-dev libxslt-dev autoconf build-essential ``` Скрипт проверен в Debian Wheezy на нескольких 64-битных VPS на сборке PHP 5.5.10, 5.5.11 и 5.3.28. Для 5.3.28 необходимо поставить не самую свежую версию `autoconf` (`sudo apt-get install autoconf2.13`, конфликта со свежей версией не будет), а также доустановить пакет `libltdl-dev`. Во время сборки не подцепляется PCRE из-за установки библиотек в подкаталог. Самое простое решение - использовать симлинки: ``` $ cd /usr/lib $ ln -s x86_64*/libpcre.a libpcre.a $ ln -s x86_64*/libpcre.so libpcre.so ``` Собственно сборка: ```bash #!/bin/bash PHP_VER=5.5.10 XCACHE_VER=3.1.0 PHP_URL=http://www.php.net/get/php-$PHP_VER.tar.bz2/from/this/mirror XCACHE_URL=http://xcache.lighttpd.net/pub/Releases/$XCACHE_VER/xcache-$XCACHE_VER.tar.bz2 PREFIX=$HOME # куда ставим, в данном случае в свой домашний каталог PHP_INI=$PREFIX/etc/php55 FPM_INI=$PREFIX/etc/php55/php-fpm.conf FPM_USER=www-data FPM_GROUP=www-data cd "`dirname "$0"`" # качаем PHP и XCache, если ещё не скачаны ранее if [ ! -d php-$PHP_VER ]; then wget -O php-$PHP_VER.tar.bz2 $PHP_URL \ && tar xvjf php-$PHP_VER.tar.bz2 \ && rm php-$PHP_VER.tar.bz2 fi if [ ! -d xcache-$XCACHE_VER ]; then wget -O xcache-$XCACHE_VER.tar.bz2 $XCACHE_URL \ && tar xvjf xcache-$XCACHE_VER.tar.bz2 \ && rm xcache-$XCACHE_VER.tar.bz2 fi # очищаем старое if [ -f php-$PHP_VER/Makefile ]; then cd php-$PHP_VER make clean cd .. fi # копируем XCache для статической линковки [ -d php-$PHP_VER/ext/xcache ] || mkdir php-$PHP_VER/ext/xcache rm -rf php-$PHP_VER/ext/xcache/* cp -R xcache-$XCACHE_VER/* php-$PHP_VER/ext/xcache/ # Собираем cd php-$PHP_VER ./buildconf --force ./configure \ --prefix=$PREFIX \ --with-config-file-path=$PHP_INI \ --with-config-file-scan-dir=$PHP_INI/conf.d \ --without-apache \ --enable-fpm \ --with-fpm-user=$FPM_USER \ --with-fpm-group=$FPM_GROUP \ --disable-cgi \ --with-openssl=shared \ --with-pcre-regex=/usr \ --with-pcre-dir=/usr \ --with-zlib=shared \ --enable-bcmath \ --with-bz2=shared \ --with-curl=shared \ --enable-exif \ --enable-ftp \ --with-gd=shared \ --with-jpeg-dir=/usr \ --with-png-dir=/usr \ --enable-gd-native-ttf \ --with-freetype-dir=/usr \ --with-mhash=shared \ --enable-mbstring \ --with-mcrypt=/usr \ --with-mysql=mysqlnd \ --with-mysql-sock=/var/run/mysqld/mysqld.sock \ --with-mysqli=mysqlnd \ --enable-pcntl \ --with-pdo-mysql=mysqlnd \ --with-readline=shared \ --enable-sockets \ --enable-zip \ --with-zlib-dir=shared \ --with-xsl=shared \ --with-pear \ --enable-xcache \ --enable-xcache-coverager \ && make && make install # размещаем конфиги cd .. [ -f $PHP_INI/php.ini ] || cp php-$PHP_VER/php.ini-production $PHP_INI/php.ini [ -f $PHP_INI/php-cli.ini ] || cp php-$PHP_VER/php.ini-production $PHP_INI/php-cli.ini [ -d $PHP_INI/conf.d ] || mkdir $PHP_INI/conf.d [ -f $FPM_INI ] || mv $FPM_INI.default $FPM_INI # теперь можно проходиться по конфигам и настраивать PHP под себя. Учтите, что по умолчанию # многие расширения будут отключены и их нужно будет включать с помощью extension= # или zend_extension= ```