Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □ndbm or gdbm?

□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 するたびに書き換わるので注意。

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です