Skip to content

Instantly share code, notes, and snippets.

@Sketches-su
Created January 26, 2015 06:46
Show Gist options
  • Save Sketches-su/44df801b768e69841a0e to your computer and use it in GitHub Desktop.
Save Sketches-su/44df801b768e69841a0e to your computer and use it in GitHub Desktop.
Сборка PHP из исходников

Сборка 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=
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment