Postfix Berkeley DB Howto


はじめに

Postfix は情報を蓄積したり検索するのに様々な種類のデータベースを 使います。Postfix データベースは "type:name" のように指定します。 Berkeley DB は Postfix データベース種類のうち "hash" と "btree" を 実装しています。Postfix Berkeley DB データベースの名前はデータベース ファイル名から ".db" サフィックスを取り除いたものです。Berkeley DB データベースはpostmap(1) コマンドで管理 されます。

注意: Berkeley DB バージョン 4 は Postfix バージョン 2.0 以前ではサポート されません。

このドキュメントは以下の内容を記述しています:

  1. Berkeley DB ライブラリのないシステムでの Postfix の構築方法。

  2. 複数のバージョンの Berkeley DB を持つ BSDLinux での Postfix の構築方法。

  3. パフォーマンスの調整方法。

  4. pthread ライブラリが見つからない場合の問題。

Berkeley DB ライブラリのないシステムでの Postfix の 構築

多くの商用 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 を使う必要があります。

複数のバージョンの Berkeley DB を持つ BSD での Postfix の 構築

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 を使う必要があります。

複数のバージョンの Berkeley DB を持つ Linux での Postfix の構築

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つの設定 パラメータを提供しています。

pthread ライブラリが見つからない場合の問題

以下のように 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/ で得られます。