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/include" \
    AUXLIBS="-L/usr/local/BerkeleyDB/lib -ldb"
% make

Solarisではこのようにする必要があります:

% make tidy
% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \
    LIBS="-R/usr/local/BerkeleyDB/lib -L/usr/local/BerkeleyDB/lib -ldb"
% make

正確なパス名はBerkeley DBのバージョンやどのようにインストールしたかに依存します。

警告: 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/ で得られます。