CentOS-5.5 64bit + PHP-5.3.5 のメモ

CentOS-5.5の64bit環境で,
PHP-5.3.5をソースからビルド,MySQL5.0もソースからビルド,
phpにバンドルされているgdと,libjpeg等の画像ライブラリをパッケージで導入しなければならない。


変えられないルールはこのとおり。
これらを利用するようPHPをビルドする必要がある。

  • MySQLのprefixは /usr/local/mysql (諸々の事情)
  • libjpegのprefixは /usr/lib64 (通常のパッケージ)
    • /usr/lib64/libjpeg.so


これが大変面倒ではまっている。
PHPのconfigureスクリプトが気が利かないのである。


たとえば,このようにconfigureしたとする。

./configure \
--prefix=/usr/local/php-5.3.5 \
--without-pear \
--with-mysql=shared,"/usr/local/mysql-5.0.91" \
--with-pdo-mysql=shared,"/usr/local/mysql-5.0.91" \
--with-gd=shared \
--with-jpeg-dir=/usr

すると libjpeg が見つからないといわれる。

configure: error: libjpeg.(a|so) not found.

libjpegの検索順序はこのとおり。(configure 36644行目)
赤文字部分が --with-jpeg-dir の値である。
/usr/lib/libjpeg.so
/usr/local/lib/libjpeg.so
/usr/lib/libjpeg.so


64bit環境なので,lib64を探しに行かなければならない。
青文字の部分は $PHP_LIBDIR であり,--with-libdir で指定できる。
すると検索順序はこうなって見つけることができる。
/usr/lib64/libjpeg.so (これ)
/usr/local/lib64/libjpeg.so
/usr/lib64/libjpeg.so


が,今度はlibmysqlclientが見つからなくなる。

configure: error: Cannot find libmysqlclient under /usr/local/mysql-5.0.91.
Note that the MySQL client library is not bundled anymore!

検索順序を見てみると(59786行目)
/usr/local/mysql/lib/libmysqlclient.so
/usr/local/mysql/lib/mysql/libmysqlclient.so (これ)
これならいいのだが,先ほど指定した $PHP_LIBDIR の影響で
/usr/local/mysql/lib64/libmysqlclient.so
/usr/local/mysql/lib64/mysql/libmysqlclient.so
こうなってしまう。



ふんぎー!



これってつまり,今回のような構成ではPHPのビルドと同時に
mysql拡張とgd拡張の両方をビルドすることはできないということなのでは。


phpでソースからのビルドとrpmでの導入を混在させると,
64bit環境ではさらに面倒が増えるような感触。


そういうわけで,PHPmysql拡張を同時にビルドして,
gd拡張は後から追加することにした。
これなら $PHP_LIBDIR のスコープが狭いのであんしん。

$ cd /usr/local/src/php-5.3.5/ext/gd
$ /usr/local/php-5.3.5/bin/phpize
$ ./configure \
 --with-libdir=lib64 \
 --with-php-config=/usr/local/php-5.3.5/bin/php-config \
 --enable-gd=shared \
 --with-jpeg-dir=/usr \
 --with-png-dir=/usr \
 --with-freetype-dir=/usr \
 --enable-gd-native-ttf \
 2>&1 | tee _config.log


/usr/local/mysql/lib へのリンクを /usr/local/mysql/lib64 に作るというのも手かにゃ。
そうすれば $PHP_LIBDIR を lib64 にしたままいっぺんにできるけども,
あまりエレガンスではない気がするる。