FC5(Fedora Core 5)のphpの再コンパイル方法

もともと、このエントリーはFC5のphpsqliteに対応させるために、--with-sqliteのconfigで再コンパイルするつもりで書いた。しかし、php-5.1以降では、PDO経由でsqliteを使うのが正しいやり方のようなので、結局は元のバージョンに戻した。下記は、今後phpコンパイルが必要となった場合の参考まで。

FC5のphpのバージョンは現時点で、5.1.6-1.6になっている。

$ rpm -q php
php-5.1.6-1.6

しかし、標準のバイナリーパッケージでは、sqlite_open()など、sqlite関連の関数は使えなくなっている。phpinfo()で見てみればわかるが、これはコンパイルオプションに'--without-sqlite'が付加されているからだ。これをsqliteに対応させるためには、phpの再コンパイルが必要だ。

本家から最新版を取ってきて、コンパイルするという手もあるが、Fedoraディストリビューションの配置ルールの関係で、他のパッケージとの干渉を起こす可能性もあるので、FC5用のSRPMからspecファイルを書き換え、再コンパイルすることにする。specファイルを書き換えない場合、バイナリでのインストールと同じ設定になることが保障されているので安心だ。万一動かなくなってもspecファイルを元に戻してコンパイルし直すか、バイナリーからインストールし直せば元に戻る。

まずは、Fedora Projectから、FC5用のソースパッケージ(SRPM)を取ってきて、標準のソースディレクトリにセットアップする。

$ wget http://download.fedora.redhat.com/pub/fedora/linux/core/updates/5/SRPMS/php-5.1.6-1.6.src.rpm
$ su
# rpm -Uhv php-5.1.6-1.6.src.rpm

これで、/usr/src/redhat/ 配下にコンパイル用の環境一式がセットアップされる。

# ls /usr/src/redhat/
BUILD  RPMS  SOURCES  SPECS  SRPM

ソースはSOURCESに置かれ、SPECS/php.spec の内容に沿ってコンパイルされる準備が整っている。ここで、このファイルを書き換え、コンパイルし直す。

# cd /usr/src/redhat/SPECS
# cp -a php.spec php.spec.original    <- 念のためバックアップ
# vi php.spec

ここで426行目の、'--without-sqlite' を '--with-sqlite=shared' に書き換え、コンパイルする。コンパイルには、specファイルを指定して、rpmbuildコマンドを使用。Pentium4マシンなので、一応ターゲットをi686にしておく。コンパイルが終わると、/usr/src/redhat/RPMS/i686 配下に、php-5.1.6-1.6.i686.rpm が出来ているはずなので、こいつを上書きインストールすれば完了。

# rpmbuild -ba php.spec --target i686
(コンパイル中:Pen4 1.6Gマシンで20〜30分ぐらいかな...)
# cd /usr/src/redhat/RPMS/i686
# rpm -Uhv --replacepkgs php-5.1.6-1.6.i686.rpm
# /sbin/service httpd restart