Postfix は情報を蓄積したり検索するのに様々な種類のデータベースを 使います。Postfix データベースは "type:name" のように指定します。 Berkeley DB は Postfix データベース種類のうち "hash" と "btree" を 実装しています。Postfix Berkeley DB データベースの名前はデータベース ファイル名から ".db" サフィックスを取り除いたものです。Berkeley DB データベースはpostmap(1) コマンドで管理 されます。
注意: Berkeley DB バージョン 4 は Postfix バージョン 2.0 以前ではサポート されません。
このドキュメントは以下の内容を記述しています:
Berkeley DB ライブラリのないシステムでの Postfix の構築方法。
パフォーマンスの調整方法。
pthread ライブラリが見つからない場合の問題。
多くの商用 UNIX は Berkeley DB がサポートされずに出荷されています。 Solaris や HP-UX、IRIX、UNIXWARE がその例です。Berkeley DB サポートを付けて Postfix をビルドするには、 http://www.sleepycat.com/ からソースコードをダウンロードしてインストールする必要があります。
警告: Linux システムのライブラリや SASL のようなサードパーティライブラリで Berkeley DB を使っているものがあります。異なる Berkeley DB の実装を使って Postfix をコンパイルすると、システムライブラリや SASL ライブラリ、または Postfix 自身のどちらかが間違ったバージョンを使ってしまい、あらゆる Postfix プログラムがコアダンプしてしまいます。
より最近のバージョンの Berkeley DB には、複数のバージョンの Berkeley DB が 同じアプリケーションで共存できるようにシンボルを改名するコンパイル時スイッチ "--with-uniquename" があります。無駄ではありますが、これが事態の破綻を避ける 唯一の方法かもしれません。
http://www.sleepycat.com/ の Berkeley DB をインストールした後で Postfix をインストールするには、 以下のようにします:
% make tidy % make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB.3.1/include" \ AUXLIBS="-L/usr/local/BerkeleyDB.3.1/lib -ldb" % make
正確なパス名はインストールした DB のバージョンに依存します。例えば、 Berkeley DB バージョン 2 は /usr/local/BerkeleyDB にインストールします。
警告: Berkeley DB バージョン 1 によって生成されたファイルフォーマットは バージョン 2 や 3 のものとは互換性がありません (バージョン 2 と 3 は 同じフォーマットです)。DB のバージョンを変更したら、全ての Postfix DB ファイルを再構築する必要があるかもしれません。
警告: Berkeley DB バージョン 2 以降を使う場合、DB 1.85 互換モードを 有効にしないでください。有効にすると fcntl ファイルロックを壊すことに なります。
警告: Postfix の Berkeley DB ファイルを操作するのに Perl を使う場合、 Perl でも Postfix と同じバージョンの Berkeley DB を使う必要があります。
BSD システムには複数の Berkeley DB 実装付きで出荷されているものが あります。通常は Postfix はシステムに付属して出荷されているデフォルトの DB バージョンでビルドします。
BSD システム上で特定のバージョンの DB で Postfix を構築するには、 以下のコマンドを書き換えて使います:
% make tidy % make makefiles CCARGS=-I/usr/include/db3 AUXLIBS=-ldb3 % make
警告: Berkeley DB バージョン 1 によって生成されたファイルフォーマットは バージョン 2 や 3 のものとは互換性がありません (バージョン 2 と 3 は 同じフォーマットです)。DB のバージョンを変更したら、全ての Postfix DB ファイルを再構築する必要があるかもしれません。
警告: Berkeley DB バージョン 2 以降を使う場合、DB 1.85 互換モードを 有効にしないでください。有効にすると fcntl ファイルロックを壊すことに なります。
警告: Postfix の Berkeley DB ファイルを操作するのに Perl を使う場合、 Perl でも Postfix と同じバージョンの Berkeley DB を使う必要があります。
Linux システムには複数の Berkeley DB 実装付きで出荷されているものが あります。通常は Postfix はシステムに付属して出荷されているデフォルトの DB バージョンでビルドします。
警告: Linux システムライブラリには Berkeley DB を使っているものが あります。デフォルト以外の Berkeley DB 実装で Postfix をコンパイルすると、 システムライブラリまたは Postfix 自身のどちらかが間違ったバージョンを 使ってしまい、あらゆる Postfix プログラムがコアダンプしてしまいます。
Linux では、非デフォルトの DB ライブラリを指定するために makedefs スクリプトを編集する必要があります。デフォルトの db.h インクルード ファイルはベンダーやバージョンによってランダムに変わるため、Postfix が ファイルを選ぶ必要があるというのがその理由です。
警告: Berkeley DB バージョン 1 によって生成されたファイルフォーマットは バージョン 2 や 3 のものとは互換性がありません (バージョン 2 と 3 は 同じフォーマットです)。DB のバージョンを変更したら、全ての Postfix DB ファイルを再構築する必要があるかもしれません。
警告: Berkeley DB バージョン 2 以降を使う場合、DB 1.85 互換モードを 有効にしないでください。有効にすると fcntl ファイルロックを壊すことに なります。
警告: Postfix の Berkeley DB ファイルを操作するのに Perl を使う場合、 Perl でも Postfix と同じバージョンの Berkeley DB を使う必要があります。
Postfix は Berkeley DB が使うバッファメモリの量を調節する2つの設定 パラメータを提供しています。
berkeley_db_create_buffer_size (デフォルト: 1テーブルあたり 16 MBytes)。この設定は Berkeley DB ファイルを 管理するコマンドによって使われます: postalias(1) および postmap(1)。"hash" ファイルでは、メモリプールが O(file size) でなければ生成パフォーマンスは急速に落ちます。"btree" ファイルでは、メモリプールが小さくてもソートされた入力に対しては問題 ありませんが、メモリプールが O(file size) でなければ、ランダムな入力は 急速に落ちます。
berkeley_db_read_buffer_size (デフォルト: テーブルごとに 128 kBytes)。この 設定は他の全ての Postfix プログラムによって使われます。バッファサイズは 読み込みに適したものです。キャッシュがテーブルよりも小さい場合、ランダム 読み込みのパフォーマンスは btree テーブルでなければほとんどキャッシュ サイズには依存しません。btree テーブルの場合、キャッシュサイズはルート ノードからのパス全体を含むのに十分大きくなければいけません。 経験的には 64 kByte で十分ということがわかっています。安全にするためと 実装の変更や膨張を見越して、この量を2倍にしました。
以下のように Postfix のビルドに失敗する場合:
undefined reference to `pthread_condattr_setpshared' undefined reference to `pthread_mutexattr_destroy' undefined reference to `pthread_mutexattr_init' undefined reference to `pthread_mutex_trylock'
"make makefiles" コマンドに "-lpthread" ライブラリを加えてください。
% make makefiles .... AUXLIBS="... -lpthread"
それ以上の情報は http://www.sleepycat.com/ で得られます。