[ホーム] -> [Aache + PHP + PostgreSQL 実験室] |
まず、ソースを展開します。
> tar xzvf postgresql-7.2.1.tar.gz
次に、パッチを当てます。このパッチを当てることにより、いくつかのバグが修正されます。特に理由がない限り、パッチを当てた方が良いでしょう。
> cd postgresql-7.2.1 > gzip -dc < ../jumbo.patch.gz | patch -p1
次に、configure
を実行します。そのとき、いろいろなオプションが指定できるので、主要なもののみですが、説明しておきます。
オプション | 説明 |
---|---|
--enable-multibyte=EUC_JP |
マルチバイトを使用できるようにするための指定です。この例では、漢字コードを 日本語 EUC に指定してありますが、これはデータベースをつくる際のデフォルトの漢字コードです。データベースをつくる際に漢字コードを指定することもできますので、あまり悩む必要はないでしょう。詳しくは、doc/README.mb.jp を読んでください。
|
--with-perl | perl からアクセスするためのライブラリを作成します。perl がインストールされていない環境の人は、このオプションをつけない方が良いでしょう。 |
--with-python | Python からアクセスするためのライブラリを作成します。Python がインストールされていない環境の人は、このオプションをつけない方が良いでしょう。 |
--with-tcl --with-tclconfig=/usr/lib |
Tcl/Tk がインストールされている人は、このオプションを指定すると、Tcl インターフェイスがコンパイルされます。この場合、tclConfig.sh のあるディレクトリを、オプションで指定する必要があるようです。この例では、/usr/lib の下に tclConfig.sh があると指定しています。
|
--with-java | Java からアクセスするための JDBC ドライバを作成します。このオプションをつけてコンパイルするには、J2SDK (JDK) と、Apache Ant が必要です。 |
--with-krb4=/usr/athena --with-krb5=/usr/athena |
他のマシンから PostgreSQL に接続する際に、Kerberos 認証をサポートするようにコンパイルします。バージョン 4 か 5 のどちらかしか指定することが出来ません。インストールされている環境に合わせてください。 |
--with-openssl | 他のマシンから PostgreSQL に接続する際に、SSL による認証や暗号化をサポートするようになります。OpenSSL が正しくインストールされている必要があります。 |
--with-pam |
ユーザ認証の際に、PAM を利用するようになります。PAM は Linux や Soralis でサポートされている機能で、/etc/pam.d というディレクトリがある場合は、PAM を利用できると思います。その場合このオプションをつけると、ユーザ認証に対して、PAM を利用した細かいユーザ管理(アカウントやパスワードの有効期限が切れてるとか、あるグループだけ利用できるようにするとか、特定のユーザがログインしたときにログをとるとか)を行えるようになります。
|
--enable-syslog | PostgreSQL の出力するログを、syslog に出力できるようになります。このオプションを指定したからといって、syslog にしか出力できなくなるわけではありません。設定した場合にのみ、syslog に出力するので、後々のことを考えて、指定しておいて損はありません。 |
利用するオプションをけってしたら、configure
を実行するわけですが、その前にちょっとしたアドバイスを。Linux とかでコンパイルするとき、gcc のオプションとして、「-g」が付いてしまうことがあります。PostgreSQL をポートしたい人とはともかく、一般的なユーザは、このオプションはあまり着ける必要がありません。逆にこのオプションが付くと、コンパイルされたファイルのサイズが非常に大きくなってしまいます。これを避けるには、次のように環境変数 CFLAGS を設定します。もちろん、「-g」オプションをつけたままでかまわない人は、環境変数 CFLAGS を設定する必要はありませんけど。
bash/ksh の場合 > export CFLAGS=-O2 csh/tcsh の場合 > setenv CFLAGS -O2
というわけで、configure
を実行です。
> export CFLAGS=-O2 > ./configure --enable-multibyte=EUC_JP \ --with-perl \ --with-tcl \ --with-tclconfig=/usr/lib \ --with-pam \ --enable-syslog
正常に終了したら、make
を行います。
> make
正常に終了したら、root
になって、インストールします。
> su # make install
そして、インストールしたディレクトリの中にある、data
ディレクトリのオーナーを、PostgreSQL のスーパーユーザに変更します。この PostgreSQL のスーパーユーザは、root
ではだめなので、root
以外で、だれが PostgreSQL のスーパーユーザになるかをきめて、オーナーを変更する必要があります。
ここでは、pgsql
と言うユーザを作り、そのユーザが所属するための pgsql
というグループも作ります。そして、pgsql
ユーザのパスワードを設定しておきます。
pgsql という名のグループとユーザを作成 # groupadd pgsql # useradd -g pgsql pgsql # passwd pgsql PostgreSQL 用のデータディレクトリを作成 # mkdir /usr/local/pgsql/data # chown pgsql.pgsql /usr/local/pgsql/data # exit
プログラムのインストールは、これで終了ですので、ここで利用するユーザの設定を、行います。実際には、PATH
と、MANPATH
に、PostgreSQL のインストール先のディレクトリを含めるのです。bash を使っている人は、自分のホームディレクトリにある ~/.bash_profile
ファイルの最後の方に、次の2行を追加してください。PostgreSQL のスーパーユーザも同じ設定が必要で、スーパーユーザに限り、PGDATA
も指定しておくと便利です。これは、先ほどのデータディレクトリを設定します。
export PATH=$PATH:/usr/local/pgsql/bin export MANPATH=$MANPATH:/usr/local/pgsql/man PostgreSQL のスーパーユーザのみ次も設定 export PGDATA=/usr/local/pgsql/data
csh を使っている人は、~/.cshrc
に(tcsh を使っている人は、場合によっては ~/.tcshrc
)に次の2行を追加してください。
setenv PATH $PATH:/usr/local/pgsql/bin setenv MANPATH $MANPATH:/usr/local/pgsql/man PostgreSQL のスーパーユーザのみ次も設定 export PGDATA /usr/local/pgsql/data
変更し終わったら、現在のシェルに反映させます。bash でしたら、次のようになると思います。
> . ~/.bash_profile
csh、tcsh でしたら、次のようにします。
> source ~/.cshrc
これで、ユーザ側の設定は終りです。この PATH
と MANPATH
設定は、PostgreSQL を使用するすべての人がやった方が良いでしょう。
それではいよいよ、サーバの起動に入ります。まずは、初期データベースを作成します。PostgreSQL のスーパーユーザでログインし直してください。そして、次のコマンドを実行します。
> su - pgsql > initdb
このコマンドが成功していれば、/usr/local/pgsql/data
の下に、幾つかファイルができているはずです。ここで失敗したら、ユーザ関係のトラブルです。/usr/local/pgsql/data
のオーナーが、PostgreSQL のスーパーユーザになっているか、または、そのスーパーユーザが、root
グループ(グループ ID が 0 のグループ)に属していないか確認してください。私は、root
グループに属していたため、結構ここで悩みました。
いよいよ、サーバの起動です。
> pg_ctl start
うまく起動できたでしょうか。成功したら、「database system is ready」と表示されるはずです。ちなみに、現在 PostgreSQL が実行されているかを調べるには、次のようにします。
> pg_ctl status
ここで、データベースのテストをすることもできます。PostgreSQL のソースのテストディレクトリ(postgresql-7.0/src/test/regress
)に入って、ランテストを行います。コンパイルしたユーザと、PostgreSQL のスーパーユーザが違う場合、ここのディレクトリの書き込み権限がないために、実行できないかもしれません。この場合、このディレクトリ以下に、PostgreSQL のスーパーユーザが書き込めるようにパーミッションを変更してしまうというのもひとつの方法です(ちょっと乱暴だけど)。
コンパイルしたユーザで、PostgreSQL のスーパーユーザ(全員にだけど)に書き込み権限を与える > cd test/regress > chmod a+w -R . PostgreSQL のスーパーユーザでランテストを実行 > su - pgsql > cd test/regress > make all runtest
テストの結果がすべて ok になれば問題ありませんが、ときどき failed になってしまいます。ただし、float や、geometry などは、表示や、精度の違いのために failed になるので、それほど神経質になる必要はないと思います(いや、精度の違いが起きるのが問題と言えば問題ですけど。まあ OS や CPU に依存する問題ですし)。
PostgreSQL を起動すると、PostgreSQL からのメッセージがやたらと端末に表示されて迷惑です。これをやめるには、pg_ctl start
を実行するときに -l ログファイル名
オプションを指定します。一度 PostgreSQL を終了させて、-l
オプションをつけて起動しなおしてみましょう。
> pg_ctl stop > pg_ctl -l /var/log/postgresql.log start
PostgreSQL は、コンピュータが再起動する度に起動する必要があるので、rc.local
(RedHat の場合、/etc/rc.d
の下にある)などの起動スクリプトに記述しておく方が良いかも知れません。一応例を示しておきます。
echo -n "Starting PostgreSQL: " su -l pgsql -s /bin/sh -c "/usr/local/pgsql/bin/pg_ctl -l /var/log/postgresql.log start > /dev/null 2>&1" < /dev/null echo "done."
かなり長かったですが、これで終了です。