CentOS-5.5 64bit + PHP-5.3.5 のメモ
CentOS-5.5の64bit環境で,
PHP-5.3.5をソースからビルド,MySQL5.0もソースからビルド,
phpにバンドルされているgdと,libjpeg等の画像ライブラリをパッケージで導入しなければならない。
変えられないルールはこのとおり。
これらを利用するようPHPをビルドする必要がある。
これが大変面倒ではまっている。
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環境ではさらに面倒が増えるような感触。
そういうわけで,PHPとmysql拡張を同時にビルドして,
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 にしたままいっぺんにできるけども,
あまりエレガンスではない気がするる。