Saturday, January 20, 2007

PostgreSQL 8.1.5 をインストール

Ubuntsu 6.06.1 にインストール。サーバガイドにあるように apt-get でインストールしようとしたのだが、「使用できるパッケージがない」 というようなことを言われた。

そこで、ソースをダウンロードしてきてビルドしたのだが、下にあるようにいろいろ問題が発生した。なんとか解決したけど。。。


./configure --prefix=/opt/pgsql

を実行。7.2 のときとは違って、--with-mb=EUC_JP オプションは指定しなくていい。7.3 以降からデフォルトでマルチバイト文字対応がなされている。

configure を実行中、libreadline.so がないというエラーが出た。これは linker name が定義されていないためだと分かったので、/lib/libreadline.so というシンボリックリンクを /lib/libreadline.so.5 に張ってやった。

しかし今度は、readline/readline.h がないというエラーが発生。仕方ないのでヘッダファイルのためだけに libreadline ライブラリ を /usr/local/lib/ に新たにインストールした。/lib/ に作った linker name は消して、/usr/local/lib/ に新たに linker name をつくったが、今度もエラーになった。config.log を見ると

/usr/local/lib/libreadline.so: undefined reference to `tgetnum'
/usr/local/lib/libreadline.so: undefined reference to `tgoto'
/usr/local/lib/libreadline.so: undefined reference to `tgetflag'
/usr/local/lib/libreadline.so: undefined reference to `BC'
/usr/local/lib/libreadline.so: undefined reference to `tputs'
/usr/local/lib/libreadline.so: undefined reference to `PC'
/usr/local/lib/libreadline.so: undefined reference to `tgetent'
/usr/local/lib/libreadline.so: undefined reference to `UP'
/usr/local/lib/libreadline.so: undefined reference to `tgetstr'
collect2: ld returned 1 exit status

というメッセージがある。どうも、新たに入れた libreadline が依存しているライブラリがあるようなのだ。仕方ないので、新しく入れた libreadline は使わずにヘッダファイルだけ使うことにして、linker name は /lib/ にもう一度作り直した。

しかし、

configure:7805: ./conftest
./conftest: symbol lookup error: /usr/local/lib/libreadline.so.5: undefined symbol: BC
configure:7808: $? = 127
configure: program exited with status 127

というエラーが出た。どうも /usr/local/lib/ のを見に行っている。ldconfig をやり直してみたがうまくいかない。仕方ないので、/usr/local/lib/libreadline.so.5 を削除したら、うまくいくようになったが、ldconfig をルートで実行すると、また同じエラーになる。仕方ないので /usr/local/lib/libreadline.* はすべて削除した。ヘッダファイルは、/usr/local/include/readline/ 内に残っているので、これでうまくいくようになった。


libz でも同じ問題が出たので、/usr/lib/ に linker name を作成し、ヘッダファイルがないのは、ダウンロードしてきてビルドすることで /usr/local/include/ にヘッダファイルが作成されて解決した。このとき/usr/local/lib/ にも静的ライブラリが作成された。ま、害はないので放置。

これでうまくいったので、

make
su
make install

でインストール。 --prefix=/opt/pgsql で指定したディレクトリは自動で作成された。

管理用ユーザ postgres を作成。PGDATA 等の環境変数も設定した。

そして、

# mkdir /opt/pgsql/data
# chwon postgres /opt/pgsql/data

のようにして、データベースクラスタとなるディレクトリを作成。その後、postgres ユーザで

$ initdb -E EUC_JP

としてデータベースクラスタを作成。デフォルトの文字セットとして EUC_JP を指定している。これは、createdb でデータベースを作成するときに同じオプションを使って文字セットを変更することもできる。initdb にはロケールも指定できるが、ここでは指定していない。

postgres ユーザで

$ postmaster -S

としてデータベースサーバを実行。これでデータベースクラスタに接続できるようになる。この後、postgresql-8.1.5/src/test/regress/ に移動し、

$ make installcheck

でリグレッションテストを行い、すべて OK であることを確認した。この際、ソースは別ユーザで展開してビルドしたので、postgresql-8.1.5/ 以下の所有者を一時的に postgres に変更してリグレッションテストを実行した。

No comments: