Сборка 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
Собственно сборка:
#!/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=