pixiv insideは移転しました! ≫ https://inside.pixiv.blog/

PHPビルド職人の朝は早い

こんにちは、はじめまして。 pixiv.comのバックエンドAPIを作成しています、ソフトウェアエンジニアのサイリュムです。

pixiv.comではバッグエンドAPIDebianのsqueezeに野良ビルドして入れたPHP5.4.xで動かしているのですが、最近PHPの更新頻度が高くて困ります。 なるべく更新の手間を押さえるため、pixivではDebianパッケージの作成まで自動で行うPHP5.4パッケージ自動生成スクリプトを作成して対応しています。

今回はそのスクリプトの一部を紹介しつつ、2012年8月21日現在の最新版であるPHP5.4.6のビルド手順を紹介したいと思います。

ビルドの準備

まずはPHPのビルドに必要なパッケージ群をaptを使ってインストールしておきます。

1
apt-get build-dep php5

これでビルドに必要な環境は揃いました。 早速最新のソースをダウンロードしてきましょう。

最新の安定版パッケージはphp.netから取得できます。

http://www.php.net/downloads.php#v5

ダウンロードしたらtarで展開します。

1
2
tar -xvf php-5.4.6.tar.bz2
cd php-5.4.6

ビルド & インストール

あとはいい感じのconfigureオプションを指定してビルドします。 DebianのパッケージはCLIのみのパッケージとApacheモジュールのみのパッケージがあり、同じような構成にしたい場合は–disable-cliオプションを指定しながら分けてビルドする必要がありますが、今回は一緒くたにしてしまいます。

php-fpmも有効にしておきましょう。 その他必要なものとそうでないものを適宜指定&解除してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
./configure \
    --prefix=/usr \
    --enable-shared \
    --with-apxs2=/usr/bin/apxs2 \
    --with-config-file-path=/etc/php5/apache2 \
    --with-config-file-scan-dir=/etc/php5/apache2/conf.d \
    --build=x86_64-linux-gnu \
    --host=x86_64-linux-gnu \
    --sysconfdir=/etc \
    --localstatedir=/var \
    --mandir=/usr/share/man \
    --disable-debug \
    --disable-rpath \
    --disable-cgi \
    --disable-static \
    --enable-calendar \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-sysvmsg \
    --enable-bcmath \
    --enable-ctype \
    --enable-exif \
    --enable-ftp \
    --enable-mbstring \
    --enable-shmop \
    --enable-sockets \
    --enable-wddx \
    --enable-soap \
    --enable-zip \
    --enable-intl \
    --enable-fpm \
    --enable-gd-native-ttf \
    --with-regex=php \
    --with-pic \
    --with-layout=GNU \
    --with-pear=/usr/share/php \
    --with-bz2 \
    --with-iconv \
    --with-gettext \
    --with-onig=/usr \
    --with-pcre-regex=/usr \
    --with-libxml-dir=/usr \
    --with-zlib \
    --with-kerberos=/usr \
    --with-openssl=/usr \
    --with-mhash \
    --without-mm \
    --with-curl=shared,/usr \
    --with-enchant=shared,/usr \
    --with-zlib-dir=/usr \
    --with-gd \
    --with-gmp=shared,/usr \
    --with-jpeg-dir=shared,/usr \
    --with-xpm-dir=shared,/usr/X11R6 \
    --with-png-dir=shared,/usr \
    --with-freetype-dir=shared,/usr \
    --with-imap=shared,/usr \
    --with-imap-ssl \
    --with-interbase=shared,/usr \
    --with-pdo-firebird=shared,/usr \
    --with-t1lib=shared,/usr \
    --with-ldap=shared,/usr \
    --with-ldap-sasl=/usr \
    --with-mcrypt=shared,/usr \
    --with-mysql=shared,/usr \
    --with-mysqli=shared,/usr/bin/mysql_config \
    --with-unixODBC=shared,/usr \
    --with-xsl=shared,/usr \
    --with-snmp=shared,/usr \
    --with-pdo-mysql \
    --with-sqlite3=/usr

–enable-zend-multibyteオプションは5.4系では指定する必要はありません。

あとはmakeしてインストールするだけですが、既知のどれくらいバグがあるのかmake testして確認しておきましょう。

1
2
make
make test

大丈夫だと思えるならmake installしましょう・・・と行きたいところですが、せっかくDebianを使っていることですし、debパッケージを作ってみたいですよね。

ところが、PHPMakefileにはdebianパッケージを作成するためのオプションはありません…

Debianパッケージを作る

実はこういった需要に対応するためのツールがあります。 今回はCheckInstallを使って作成することにします。 checkinstalldebianパッケージ以外にもいくつかのパッケージを作成することができます。便利ですね。

まだcheckinstallをインストールしていない場合は、aptitudeでインストールしておきましょう。 ただし、Debian squeezeのcheckinstallにはバグがあるため、パッチが当たっているwheezyのパッケージをインストールしましょう。

というわけで、ちょっと面倒ですが、whezzyのcheckinstallをインストールすることにします。 一時的にsource.dにwheezy.listを作成しましょう。root権が必要です。

1
2
3
sh -c 'echo "deb http://ftp.de.debian.org/debian wheezy main" >> /etc/apt/sources.list.d/wheezy.list'
aptitude update
aptitude install -y checkinstall

checkinstallだけ新しいバージョンをインストールしたら、他のパッケージが更新されないように、wheezy.listは削除してしまいましょう。もちろんroot権が必要です。

1
2
sudo rm /etc/apt/sources.list.d/wheezy.list
sudo aptitude update

それではcheckinstallを使ってパッケージを作成しましょう。 今回はパッケージの作成のみを行うため–install=noを指定していますが、そのままインストールしてしまってもOKな場合は–install=noは外してしまっても問題ありません。

1
sudo checkinstall -y --pkglicense=PHP --pkgname=php --maintainer=maintainer-name --install=no

これでPHP5.4のパッケージ作成は完了です。 dpkgコマンドを使って、インストールしてみましょう。

1
sudo dpkg -i php_5.4.6-1_amd64.deb

php -vで実際にバージョンを確認してみましょう。

1
php -v

APC

みんなが大好きなアクセラレータさん。 残念なことに、現在の安定版APCはPHP5.4に対応していませんが、beta版である3.1.10でPHP5.4に対応しました。

8月21日現在の最新版は3.1.12です。beta版ですがインストールしてみましょう。(root権が必要です)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
#
# Install Alternative PHP Cache 3.1.12 (beta)
#
wget http://pecl.php.net/get/APC-3.1.12.tgz
tar xvf APC-3.1.12.tgz
cd APC-3.1.12
phpize
./configure
make
make test

同じく、APCdebianパッケージにしてしまいましょう。

1
sudo checkinstall -y --pkglicense=PHP --pkgname=apc --maintainer=maintainer-name --install=no

インストールも同じくdpkgです。

1
sudo dpkg -i apc_3.1.12-1_amd64.deb

さて、いかがでしょうか。

たったこれだけでPHP5.4環境を整えることができるのです。

Debian WheezyではPHP5.4が入ることが確実になっていますので、この機会にPHP5.4の検証に入ってみてはいかがでしょうか。

ピクシブでは新卒、中途を問わず優秀なエンジニアを募集しています。 興味のある方はぜひ採用サイトからご応募ください!