CentOS5.5にpostgresql8.4構築

moodleとかmaharaを使うのにどうもmySQLよりpostgreSQLの方が推奨されているようなので、CentOS5.5+Apache+PostgreSQL8.4+PHPのLAPP環境を作ってみました。
postgreSQLについてはRedhat7.3のころはかなり使っていたのですが大分変わっているようで以外と苦戦したのでメモを残しておきます。
方針はコンパイルせずにyumで出来るだけ済ませるようにしています。

インストールするpostgreSQL

公式だとpostgreSQLのバージョンが8.1系となっています。Windowsだとバイナリのリリースがすでに終わっているなど今から利用するには若干古いしその後のvacumの改良などを考えると新しいものが入れたいと思い、新しいバージョンを入れました。
yumでインストールするにはpostgresが置いてあるリポジトリを追加する必要があります。
http://yum.pgsqlrpms.org/reporpms/repoview/letter_p.group.html
こちらから該当のディストリビューションとpostgresのバージョンに対応したrpmをダウンロードしてインストールします。
yumコマンドでこちらを利用するように /etc/yum.repos.d/CentOS-Base.repo を編集して[base],[upfates]にexcludeにpostgresを
追加します。
参照:@IT:特定のファイルをyumのアップデート対象から外すには

[base]
priority=1
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=postgres* php-pgsql*

これで希望するバージョンのpostgreSQLがインストールできるはずです。
あとは通常と同様です。

tcpip接続の有効化

postgresqlの場合、phpからローカル接続する場合もtcp/ipが利用されます。そこでtcp/ip接続を有効化する必要があります。
listen_addressesがコメントアウトされているので外します。外部から接続する場合はIPを設定します。
接続ポートを変える場合はportのコメントアウトを外して変更します。変更してしまうと他の設定個所にもいろいろ影響があるのでそのままにしておいた方がよいかと。

listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
port = 5432 # (change requires restart)

設定を反映させるにはpostgresqlをリロードします。

# /sbin/service postgresql reload

SELINUXの設定変更

SELINUXを有効にしているとローカル接続であってもはじかれます。
はじかれているかどうかはログで確認できます。
これを通すようにするにはhttpd_can_network_connect_dbを有効にします。
mySQLpostgreSQLに有効らしいです。

# /usr/sbin/setsebool -P httpd_can_network_connect_db on

ちなみにmySQLでローカル接続の場合は無効の場合でも繋がりました。
接続ポートを変えた場合は他の処置が必要かと。
参考:SELinuxを使ってみる入門BoF

pg_hda.confによるクライアント認証設定

デフォルトのままだとほとんどの場合、接続できません。認証付でローカルだけ接続できるように設定してみます。
よくtrustにしている例がありますが、こうしてしまうとセキュリティが低すぎるのでmd5による認証ができるようにします。

  • /var/lib/pgsql/data/pg_hda.conf抜粋

# IPv4 local connections:
host all all 127.0.0.1/32 md5

変更したらpostgresqlをreloadします。

phpPgAdmin

Webによるphp管理ツールとしてphpPgAdminをインストールします。
これが動けばLAPP環境は出来たことになるかと。
インストールはrpmなどを使わず、公式サイトから落としたものを使いました。

設定ファイル

conf/config.inc.phpファイルが必要ですが、初めはありません。conf/config.inc.php-distをコピーして編集します。
とりあえず接続するpostgresqlサーバのホスト名を登録しておきます。($conf['servers'][0]['host'] = 'localhost';)|

  • conf/config.inc.php抜粋

// Hostname or IP address for server. Use '' for UNIX domain socket.
// use 'localhost' for TCP/IP connection on this computer
$conf['servers'][0]['host'] = 'localhost';

ログインですが、postgesやrootなどのよく使うユーザ名はphpPgAdminではじくようになっています。conf/config.inc.phpの設定で変更出来ますが、セキュリティ上このままのほうが好ましいでので専用のパスワード付のユーザをpostgresqlに作成しておく必要があります。
実際の運用時はphpPgAdminのページに対してIPアドレス規制やら認証などをつけてセキュリティーを高くする処置が必要です。

間違い等ありましたらご指摘いただけると助かります。

追記

2010/7/20: /etc/yum.repos.d/CentOS-Base.repoのexcludeの設定にミスがあったので修正しました。