VirtualBoxで作るCentOS+nginxの検証環境Webサーバの構築ももう何度目かを経験して慣れた感じになってきたのだが、今までMySQLをご贔屓にしていたのでPostgreSQLは初めてなのである。何事も初めが肝心。初めてで痛い目を見ると後々まで苦手意識を持ってしまうことになりかねない。初めてのPostgreSQLを使う前に今一度不安要素を洗いなおす必要がある。
実は一つ気になっている点がある。最初にPHPの動作確認でphpinfo()の出力を確認したとき、pdo_sqliteとpgsqlの項目のpostgreSQLのバージョン表記が8.4になっているのに気が付いたのだ。確かに、PHP関連のモジュールはremiリポジトリからインストールしており、remiリポジトリのpostgreSQLは8.4であるためもっともと言えば尤もな話である。しかし私はposgtreSQLのリポジトリからPostgreSQL9.2をインストールしている。これはとても気になる。どうにか合わせてしまえないものだろうか。google先生に聞いてみたところ、ドンピシャの記事を見つけた。PostgreSQL(libpq) Version を合わせる (あぱーブログ)どうやらソースを取ってきてコンパイルしちゃえばいいって事かと、早速着手してみる事にした。
まずは、PDOのドライバのアップデートから。
# pecl install pdo_pgsql
~省略~
configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
怒られた。どうやらlibpq-fe.hが見つからないのだという。libpq-fe.hは本当にいないのだろうか。思い切ってルートディレクトリから検索をかけてみる。ルートからの検索はシステムに負荷がかかるのでよい子は真似しちゃダメである。
# find / -name libpq-fe.h -print
/usr/pgsql-9.2/include/libpq-fe.h
#
普通にいらっしゃる。ユーザーpstgresににならないとパスが通らないのだろうかなどと思案したが、とりあえずconfigで失敗しているようなので、peclコマンドにインストールを任せるのではなく、ダウンロードしてコマンドでコンパイルを試みる。
# pecl download pdo_pgsql
downloading PDO_PGSQL-1.0.2.tgz ...
Starting to download PDO_PGSQL-1.0.2.tgz (14,961 bytes)
.....done: 14,961 bytes
File /tmp/pear/download/PDO_PGSQL-1.0.2.tgz downloaded
#
# phpize
# tar xvfz PDO_PGSQL-1.0.2.tgz
~省略~
#
# cd PDO_PGSQL-1.0.2
# phpize
# vi configure
~省略~
for i in $PGSQL_SEARCH_PATHS; do
for j in include include/pgsql include/postgres include/postgresql pgsql-9.2/include ""; do
if test -r "$i/$j/libpq-fe.h"; then
PGSQL_INC_BASE=$i
PGSQL_INCLUDE=$i/$j
~省略~
for j in lib lib/pgsql lib/postgres lib/postgresql pgsql-9.2/lib ""; do
if test -f "$i/$j/libpq.so" || test -f "$i/$j/libpq.a"; then
PGSQL_LIBDIR=$i/$j
fi
~省略~
ダウンロードして解凍して、コンフィグファイルに太字の部分を追加した。libpq-fe.hのディレクトリを探すループが見当違いのディレクトリで一生懸命探していたようだ。だから正しいディレクトリの組み合わせが現れるようにループに細工した。あえて最後に入れたのは私のいじわる心である。無駄なループを楽しむ心の余裕が必要なのだ。これであとは、コンフィグして、メイクしてインストールすればいい。
# ./configure
# make
# make test
# make install
~省略~
これでうまくいった。同様にpgsqlもコンパイルしてしまう。phpの家元からソースコードをダウンロードして解凍し、pgsqlのディレクトリに移動してconfigファイルを同様に編集し、makeしてインストールする。
# wget http://www.php.net/get/php-5.4.13.tar.gz/from/jp1.php.net/mirror
~省略~
#
#
# tar xvfz ./php-5.4.13.tar.gz
~省略~
#
#
# cd ./php-5.4.13/ext/pgsql
# phpize
# vi configure
~省略~
for i in $PGSQL_SEARCH_PATHS; do
for j in include include/pgsql include/postgres include/postgresql pgsql-9.2/include ""; do
if test -r "$i/$j/libpq-fe.h"; then
PGSQL_INC_BASE=$i
PGSQL_INCLUDE=$i/$j
~省略~
for j in lib $PHP_LIBDIR/pgsql $PHP_LIBDIR/postgres $PHP_LIBDIR/postgresql pgsql-9.2/lib ""; do
if test -f "$i/$j/libpq.so" || test -f "$i/$j/libpq.a"; then
PGSQL_LIBDIR=$i/$j
fi
~省略~
# ./configure
# make
# make test
# make install
~省略~
#
これでnginxとphp-fpmを再起動してphpinfo()の出力をもう一度確認すれば、見事9.2になった。これで不安要素を一つ削ったつもりだが、果たしてどうだろうか。実のところDBとの接続確認はまだとっていないのだ!PHPを書くのがめんどくさいのだ!!だが、DB2を卒業し、MySQLを卒業した私は、PostgreSQLとともに歩むと決めたのだ。LAMP環境(Linux+Apache+MySQL+PHP)に別れを告げて、LNPP環境(Linux+nginx+PostgreSQL+PHP)の未知なる世界へと旅立ったのだ。覚悟を決めてそのうちボチボチやろうと思う。次回をのんびり待て!
2 件のコメント!
とても参考になりました。
ありがとうございました。
同様の状態で詰んでしまい、どのサイトを参考にしても
できなかったことができました。
ちなみに、まだ接続等の動作確認はできていませんが、
念のため確認報告として私の環境を残しておきます。
——————–以下環境———————
OS:CentOS6/64bit
Apache/2.2.15
PHP 5.3.3
PostgreSQL(libpq) Version 9.3.2
お役に立てて何よりです。
確認環境のご報告ありがとうございます。
あばばばばさんの動作確認がつつがなく終了しますように。