BerkeleyDBのソースからのインストール

総閲覧回数:4,014,087回 / ブログ拍手:2,609
作品DB等各サービスの機能追加情報や、技術系・面白系記事を中心に提供。
記事の投稿は基本Twitterでも告知させて頂いています。
連絡は作品DBの論客の方なら私書、DB外ユーザの方ならメールTwitterで可能です。
アクセス記録[推移 / PV内訳(過去1日 / 過去1週間) / 外部アクセス元 (昨日 / 過去1週間) / ログイン論客足跡]
プロフィール私書(メール)
   /   /送済
評価(一覧   /)
投票   /共:   /
ファン登録
作品/情報/
DB構築()
ブログ
[書く]
攻略記事リンク集
My Play List
<=次の記事 パフォーマンス::バージョンアップがパフォーマンス向上になるかは実際に調査しないと分からない
=>前の記事 検索エンジンの作り方::日本語を対象の検索エンジンに最適な内部文字コードとは(UTF8 or EUC-JP or ?)

1.
2008/09/14 同日2番目 Berkeley DB > インストール > BerkeleyDBのソースからのインストール」
[この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)]

1. Berkeley DBのソースコードからのインストールについて
2. 基本コピペで出来るインストール方法
3. 最終確認
4. mod_perlの環境で動かない

1. Berkeley DBのソースコードからのインストールについて

システムに最初から入っているものを使う場合には然程苦労する事はないでしょうが、
別途最新版とかを入れようとすると、本体はともかく、付属のBerkeleyDB.pmのインストールでは色々とはまる事になります。
ここではソースコードからのBerkeleyDBのインストール方法を書いておきます。
2. 基本コピペで出来るインストール方法

本体はコマンドのコピペだけでインストールできますが、付属のperlモジュールは現状インストール過程でファイルの編集が必要になります。

# 前準備 #
yum -y install gcc-c++;
yum -y intall tcl;
yum -y install tcl-devel;

# 配布元: http://www.oracle.com/technetwork/database/berkeleydb/downloads/index.html #
VER=6.0.20;
wget http://download.oracle.com/berkeley-db/db-$VER.tar.gz;
tar xvfz db-$VER.tar.gz;
cd db-$VER/build_unix;
make clean;
../dist/configure --prefix=/usr/local --enable-cxx --enable-sql;
make;
make install;
cd ../..;

# このバージョンと整合性があるBerkeleyDB.pmをインストール #
cd db-$VER/lang/perl/BerkeleyDB;
make clean;
export LI_LIBRARY_PATH=/usr/local/lib/:/usr/lib;
export BERKELEYDB_INCLUDE=/usr/local/include;
export BERKELEYDB_LIB=/usr/local/lib;

# vi config.in #
# /usr/local/BerkelyDB/lib #
# /usr/local/BerkelyDB/include #
# となっているところを #
# /usr/local/lib #
# /usr/local/include #
# に変更 #

# コマンドで置き換えるのなら #

perl -e 'use FileHandle;my $fh=new FileHandle("config.in");undef $/;my $con=<$fh>;$fh->close();$con=~ s!/usr/local/BerkeleyDB/!/usr/local/!gs;my $ofh=new FileHandle("> config.in");print $ofh $con;$ofh->close();';

perl Makefile.PL;

# vi Makefile #
# /usr/lib64 #
# となっているところを #
# /usr/local/lib #
# に変更 #

# コマンドで置き換えるのなら #
perl -e 'use FileHandle;my $fh=new FileHandle("Makefile");undef $/;my $con=<$fh>;$fh->close();$con=~ s!/usr/lib64!/usr/local/lib!gs;my $ofh=new FileHandle("> Makefile");print $ofh $con;$ofh->close();';

make test;

make;

make install;

# その他perlモジュールインストール #
cpan install BDB::Wrapper;

# インストールされたBerkeleyDB.pmのバージョンの確認 #
perl -MBerkeleyDB -e 'print qq{BerkeleyDB ver $BerkeleyDB::VERSION\n}';
perl -MBerkeleyDB -e 'print BerkeleyDB::DB_VERSION_STRING.qq{\n}';
3. 最終確認

あとは、
find /usr/local/|grep BerkeleyDB.so

としてインストールされたBerkeleyDB.soについて
ldd ...BerkeleyDB.so
と打って、今回インストールされたlibdbのバージョンとリンクされているのかも確認。

なお、--prefix=/usr/localを指定しているので、/usr/lib/libdb*系は残っています。
前の版と比較して、処理速度がどう変わるのかを見てから、この版を本当に使うのかどうか考えるといいでしょう。
4. mod_perlの環境で動かない

CGIでは動くけどmod_perlだと
BerkeleyDB needs compatible versions of libdb & db.h\n\tyou have db.h version 4.7.25 and libdb version 4.3.29

DB_File needs compatible versions of libdb & db.h\n\tyou have db.h version 4.3.29 and libdb version 4.7.25
といった感じでエラーになる場合には、読むべきlibdb.soがシステムのデフォルトの場所のが読まれて、新しいインストール場所のが読まれていない事になるので、

vi /etc/sysconfig/httpd
export LD_PRELOAD=/usr/local/lib/libdb.so

とPRELOADする対象としてlibdb.soを先に指定しておけば怒られないで済む。
なおapacheは
apachctl stop;

apachctl start;
する必要がある。
restart, gracefulでは駄目。

コメントする


[他の記事も読む]
<=次の記事 パフォーマンス::バージョンアップがパフォーマンス向上になるかは実際に調査しないと分からない
=>前の記事 検索エンジンの作り方::日本語を対象の検索エンジンに最適な内部文字コードとは(UTF8 or EUC-JP or ?)


大分類が「Berkeley DB」の記事
この論客の記事全て
↑上へ