Postfix Berkeley DB Howto


Перевод: Доморадов Алексей. Все права защищены. Copyright © 2007.

Примечание: При размещении данного материала у себя на сайте, просьба указывать ссылку на оригинальный сайт - www.sys-adm.org.ua.

Все замечания и предложения по переводу документации на русский язык, а также найденные ошибки и опечатки присылайте на мой электронный адрес.

Благодарности: Спасибо всем, кто помогал мне переводить эту документацию.

Особенное спасибо: Галинурову Кириллу и Грозаку Михаилу aka RedStalker_Mike.

Special thanks to: Igor Luzanov aka ISKATEL.


Введение

Postfix использует множество типов баз данных для хранения и поиска информации. Базы данных Postfix определяются как "type:name". Berkeley DB реализует тип базы данных Postfix "hash" и "btree". Именем базы данных Postfix Berkeley DB является имя файла базы данных без суффикса ".db". Базы данных Berkeley DB управляются с помощью команды postmap(1).

Примечание: Berkeley DB версии 4 не поддерживается версиями Postfix до 2.0.

Этот документ описывает:

  1. Как собрать Postfix на системах без библиотеки Berkeley DB.

  2. Как собрать Postfix на BSD или Linux системах с множеством версий Berkeley DB.

  3. Как улучшить производительность.

  4. Проблема отсутствия библиотеки pthread.

Сборка Postfix на системах без Berkeley DB

Многие коммерческие UNIX системы поставляются без поддержки Berkeley DB. Примерами являются - Solaris, HP-UX, IRIX, UNIXWARE. Чтобы собрать Postfix с поддержкой Berkeley DB, вам необходимо загрузить и установить исходный код с http://www.sleepycat.com/

Предупреждение: некоторые системные библиотеки Linux используют Berkeley DB, также как и некоторые сторонние библиотеки, такие как SASL. Если вы соберете Postfix с разной реализацией Berkeley DB, тогда каждая программа Postfix будет аварийно завершаться, потому что системная библиотека, библиотека SASL или сам Postfix будет использовать неправильную версию.

Большинство последних версий Berkeley DB имеют ключ компиляции, "--with-uniquename", который переименовывает символы так, что множество версий Berkeley DB могут сосуществовать в том же приложении. Несмотря на не экономность, это может быть единственным выходом сохранения целостности системы.

Чтобы собрать Postfix после того, как вы установили Berkeley DB с http://www.sleepycat.com/, используйте, что-то типа этого:

% make tidy
% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB.3.1/include" \
    AUXLIBS="-L/usr/local/BerkeleyDB.3.1/lib -ldb"
% make

Точные пути зависят от установленной версии базы данных. Например, Berkeley DB версии 2 устанавливается в /usr/local/BerkeleyDB.

Предупреждение: формат файла создаваемый Berkeley DB версии 1 не совместим с версиями 2 и 3 (версии 2 и 3 имеют тот же самый формат). Если вы переключаетесь (как то слишком прямо звучит) между версиями базы данных, тогда вам необходимо пересобрать все ваши файлы базы данных Postfix.

Предупреждение: если вы используете Berkeley DB версии 2 или более поздние, не включайте режим совместимости с DB 1.85. Его включение может привести к нарушению способности fcntl осуществлять блокировку файла.

Предупреждение: если вы используете Perl для управления Berkeley DB файлами, тогда вам необходимо использовать в Perl такую же версию Berkeley DB как в Postfix.

Сборка Postfix на BSD системах с множеством версий Berkeley DB

Некоторые BSD системы поставляются с множеством реализаций Berkeley DB. Обычно, Postfix собирается с версией DB по умолчанию, поставляемой с системой.

Чтобы собрать Postfix на BSD системах с определенной версией базы данных, используйте "вариации" следующих команд:

% make tidy
% make makefiles CCARGS=-I/usr/include/db3 AUXLIBS=-ldb3
% make

Предупреждение: формат файла создаваемый Berkeley DB версии 1 не совместим с версиями 2 и 3 (версии 2 и 3 имеют тот же самый формат). Если вы переключаетесь между версиями базы данных, тогда вам необходимо пересобрать все ваши файлы базы данных Postfix.

Предупреждение: если вы используете Berkeley DB версии 2 или более поздние, не включайте режим совместимости с DB 1.85. Его включение может привести к нарушению способности fcntl осуществлять блокировку файла.

Предупреждение: если вы используете Perl для управления Berkeley DB файлами, тогда вам необходимо использовать в Perl такую же версию Berkeley DB как в Postfix.

Сборка Postfix на Linux системах с множеством версий Berkeley DB

Некоторые Linux системы поставляются с множеством реализаций Berkeley DB. Обычно, Postfix собирается с версией DB по умолчанию, поставляемой с системой.

Предупреждение: некоторые системные библиотеки Linux используют Berkeley DB. Если вы соберете Postfix с реализацией не по умолчанию, тогда каждая программа Postfix будет завершаться аварийно, потому что системная библиотека, библиотека SASL или сам Postfix будет использовать неправильную версию.

На Linux, вам необходимо отредактировать скрипт makedefs, чтобы указать библиотеку базы данных не по умолчанию. Причина в том, что расположение по умолчанию файла db.h изменяется случайно между поставщиками и между версиями, поэтому Postfix должен "выбрать" для вас необходимый файл.

Предупреждение: формат файла создаваемый Berkeley DB версии 1 не совместим с версиями 2 и 3 (версии 2 и 3 имеют тот же самый формат). Если вы переключаетесь (как то слишком прямо звучит) между версиями базы данных, тогда вам необходимо пересобрать все ваши файлы базы данных Postfix.

Предупреждение: если вы используете Berkeley DB версии 2 или более поздние, не включайте режим совместимости с DB 1.85. Его включение может привести к нарушению способности fcntl осуществлять блокировку файла.

Предупреждение: если вы используете Perl для управления Berkeley DB файлами, тогда вам необходимо использовать в Perl такую же версию Berkeley DB как в Postfix.

Тонкая настройка производительности

Postfix предоставляет два конфигурационных параметра, которые управляют объемом памяти, используемым Berkeley DB.

Проблема отсутствия библиотеки 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'

Добавьте библиотеку "-lpthread" к команде "make makefiles".

% make makefiles .... AUXLIBS="... -lpthread"

Больше информации доступно на http://www.sleepycat.com/.


Дата последнего обновления: 30.10.2008. Postfix version: 2.3.4.