□ndbm or gdbm?
参考URL:
http://www.oracle.com/database/berkeley-db/db/index.html (ndbm)
http://www.gnu.org/software/gdbm/ (gdbm)
Plamoはなぜかお薦めインストールだと、あとで何かのパッケージを
入れようとすると、「dbm」関連をちゃんと認識してくれないので、色々と
インストールする前に、「ndbm」と「gdbm」を入れておく必要がある。
qpopper や Apache の auth_dbm は gdbm が必要だし、 drac は ndbm が
必要なのです。dbm系をちゃんと認識してくれるようにしておかないと
あとでとても苦労します。なので入れておきましょう。
・ndbm の場合(ORACLEからとって来ます)
tar xvzf package/db-4.7.25.tar.gz
cd db-4.7.25/build_unix
../dist/configure –prefix=/usr/
make
make install
・gdbm 1.8.x の場合
tar xvzf package/gdbm-1.8.3.tar.gz
cd gdbm-1.8.3/
./configure –prefix=/usr
make prefix=/usr
make prefix=/usr install
make prefix=/usr install-compat
インストールが終わったら、「ldconfig」でライブラリを再構成させて、
きちんとdbm系が入っているかどうか確認しましょう。
> /sbin/ldconfig
> /sbin/ldconfig -p | grep db
として、libdb とかが出てくればOK。
インストールした場所が上記と違う場合には、忘れてはいけないのが
環境変数に追加すること。
bash の場合、/etc/profile の最後に下記のように、
> export LD_LIBRARY_PATH=”/usr/local/lib”
tcsh の場合、/etc/csh.login の最後に下記のように
> setenv LD_LIBRARY_PATH /usr/local/lib
それぞれ追加すること。でないと Apache や「POP befor SMTP」の
インストールのときにはまることもあります。
各種ソフトは基本的に root でインストールすると思いますが、
「su」でなるのではなくて「su – root」としたほうが、root の
自分の環境変数ではなく、root の環境変数に変わるので良い。
補足:db_dump185 がいる場合
システムを新しくしたときに、前のシステムで古いバークレーDBを
使用していたDBファイルがあると、一度ダンプしてから新しいDB
フォーマットとして生成しなおさないといけない。
大抵は db.1.85 あたりが使われているものを db-3.x ないしは 4.x
にしないといけないが、全く新しいシステムに入れなおした場合、
ダンプするためのソフト「db_dump185」が入っていないことがある。
これを作るには結局古いバージョン(1.85)のDBライブラリを使わ
なければならないのだけど、とにかくこの辺はLinuxでは扱いず
らい。
・db.1.85 の作り方
tar xvzf package/db.1.85.tar.gz
cd db.1.85/PORT/linux/
として、ここでいきなり make してもエラーとなって動きません。
errno というテーブル構造内の変数がよく判らんがいかんらしいので
これを使っている部分を全て err_no とかに変える。
../../hash/hash.h
../../hash/hash.c
../../hash/ndbm.c
さらに、lorder とか tsort なんて無いので ./Makefile も書き直す。
> ${LIBDB}: ${OBJ1} ${OBJ2} ${OBJ3} ${OBJ4} ${OBJ5} ${MISC}
> rm -f $@
> # ar cq $@ \
> # `lorder ${OBJ1} ${OBJ2} ${OBJ3} ${OBJ4} ${OBJ5} ${MISC} | tsort`
> ar cq $@ ${OBJ1} ${OBJ2} ${OBJ3} ${OBJ4} ${OBJ5} ${MISC}
> ranlib $@
とまぁこんな感じ。これで make clean ; make すれば libdb.a ができる
ので、これをのちのちリンクします。
・db-3.xx とか db-4.xx とかでの作り方
./build_unix に入って ./configure をするときに、下記のように
1.85系のオプションをつける。
../dist/configure –prefix=/usr/ –enable-dump185 –enable-compat185
さらに、../db_dump185/db_dump185.c を書き直し。
なぜか ../db185/db185.c はちゃんと手元のヘッダファイルを見る
ようになっているのに、db_dump185.c はそうなっていないので、
> //#include <db.h>
> #include “db_185.h”
とする。さらに元々作った db.1.85 では db185_open では無くて
dbopen のままですから ./db_185.h を
> /* DO NOT EDIT: automatically built by dist/s_include. */
> #if defined(__cplusplus)
> extern “C” {
> #endif
> //#define dbopen __db185_open
> //DB185 *__db185_open __P((const char *, int, int, DBTYPE, const void *));
> #if defined(__cplusplus)
> }
> #endif
こんな風に余計な変換をコメントアウト。
で、make してできたら試しにダンプしたいDBファイルをダンプしてみる。
./db_dump185 DB_FILE.db
とかして、ちゃんとダンプできていたらOK。
※修正したファイルは ./configure するたびに書き換わるので注意。