212 lines
7.4 KiB
HTML
212 lines
7.4 KiB
HTML
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"http://www.w3.org/TR/html4/loose.dtd">
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<title>Postfix Berkeley DB Howto</title>
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix Berkeley DB Howto</h1>
|
|
|
|
<hr>
|
|
|
|
<h2>Introduction</h2>
|
|
|
|
<p> Postfix uses databases of various kinds to store and look up
|
|
information. Postfix databases are specified as "type:name".
|
|
Berkeley DB implements the Postfix database type "hash" and
|
|
"btree". The name of a Postfix Berkeley DB database is the name
|
|
of the database file without the ".db" suffix. Berkeley DB databases
|
|
are maintained with the <a href="postmap.1.html">postmap(1)</a> command. </p>
|
|
|
|
<p> Note: Berkeley DB version 4 is not supported by Postfix versions
|
|
before 2.0. </p>
|
|
|
|
<p> This document describes: </p>
|
|
|
|
<ol>
|
|
|
|
<li> <p> How to build Postfix on <a href="#no_db">systems without
|
|
Berkeley DB library</a>. </p>
|
|
|
|
<li> <p> How to build Postfix on <a href="#bsd">BSD</a> or <a
|
|
href="#linux">Linux</a> systems with multiple Berkeley DB
|
|
versions. </p>
|
|
|
|
<li> <p> How to <a href="#tweak">tweak</a> performance. </p>
|
|
|
|
<li> <p> Missing <a href="#pthread">pthread</a> library trouble. </p>
|
|
|
|
</ol>
|
|
|
|
<h2><a name="no_db">Building Postfix on systems without Berkeley
|
|
DB</a></h2>
|
|
|
|
<p> Many commercial UNIXes ship without Berkeley DB support. Examples
|
|
are Solaris, HP-UX, IRIX, UNIXWARE. In order to build Postfix with
|
|
Berkeley DB support you need to download and install the source
|
|
code from <a href="http://www.sleepycat.com/">http://www.sleepycat.com/</a> </p>
|
|
|
|
<p> Warning: some Linux system libraries use Berkeley DB, as do
|
|
some third-party libraries such as SASL. If you compile Postfix
|
|
with a different Berkeley DB implementation, then every Postfix
|
|
program will dump core because either the system library, SASL
|
|
library, or Postfix itself ends up using the wrong version. </p>
|
|
|
|
<p>The more recent Berkeley DB versions have a compile-time switch,
|
|
"--with-uniquename", which renames the symbols so that multiple
|
|
versions of Berkeley DB can co-exist in the same application.
|
|
Although wasteful, this may be the only way to keep things from
|
|
falling apart. </p>
|
|
|
|
<p> To build Postfix after you installed the Berkeley DB from
|
|
<a href="http://www.sleepycat.com/">http://www.sleepycat.com/</a>, use something like: </p>
|
|
|
|
<blockquote>
|
|
<pre>
|
|
% make tidy
|
|
% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB.3.1/include" \
|
|
AUXLIBS="-L/usr/local/BerkeleyDB.3.1/lib -ldb"
|
|
% make
|
|
</pre>
|
|
</blockquote>
|
|
|
|
<p> The exact pathnames depend on the DB version that you installed.
|
|
For example, Berkeley DB version 2 installs in /usr/local/BerkeleyDB.
|
|
</p>
|
|
|
|
<p> Warning: the file format produced by Berkeley DB version 1 is
|
|
not compatible with that of versions 2 and 3 (versions 2 and 3 have
|
|
the same format). If you switch between DB versions, then you may
|
|
have to rebuild all your Postfix DB files. </p>
|
|
|
|
<p> Warning: if you use Berkeley DB version 2 or later, do not
|
|
enable DB 1.85 compatibility mode. Doing so would break fcntl file
|
|
locking. </p>
|
|
|
|
<p> Warning: if you use Perl to manipulate Postfix's Berkeley DB
|
|
files, then you need to use the same Berkeley DB version in Perl
|
|
as in Postfix. </p>
|
|
|
|
<h2><a name="bsd">Building Postfix on BSD systems with multiple
|
|
Berkeley DB versions</a></h2>
|
|
|
|
<p> Some BSD systems ship with multiple Berkeley DB implementations.
|
|
Normally, Postfix builds with the default DB version that ships
|
|
with the system. </p>
|
|
|
|
<p> To build Postfix on BSD systems with a specific DB version,
|
|
use a variant of the following commands: </p>
|
|
|
|
<blockquote>
|
|
<pre>
|
|
% make tidy
|
|
% make makefiles CCARGS=-I/usr/include/db3 AUXLIBS=-ldb3
|
|
% make
|
|
</pre>
|
|
</blockquote>
|
|
|
|
<p> Warning: the file format produced by Berkeley DB version 1 is
|
|
not compatible with that of versions 2 and 3 (versions 2 and 3 have
|
|
the same format). If you switch between DB versions, then you may
|
|
have to rebuild all your Postfix DB files. </p>
|
|
|
|
<p> Warning: if you use Berkeley DB version 2 or later, do not
|
|
enable DB 1.85 compatibility mode. Doing so would break fcntl file
|
|
locking. </p>
|
|
|
|
<p> Warning: if you use Perl to manipulate Postfix's Berkeley DB
|
|
files, then you need to use the same Berkeley DB version in Perl
|
|
as in Postfix. </p>
|
|
|
|
<h2><a name="linux">Building Postfix on Linux systems with multiple
|
|
Berkeley DB versions</a></h2>
|
|
|
|
<p> Some Linux systems ship with multiple Berkeley DB implementations.
|
|
Normally, Postfix builds with the default DB version that ships
|
|
with the system. </p>
|
|
|
|
<p> Warning: some Linux system libraries use Berkeley DB. If you
|
|
compile Postfix with a non-default Berkeley DB implementation, then
|
|
every Postfix program will dump core because either the system
|
|
library or Postfix itself ends up using the wrong version. </p>
|
|
|
|
<p> On Linux, you need to edit the makedefs script in order to
|
|
specify a non-default DB library. The reason is that the location
|
|
of the default db.h include file changes randomly between vendors
|
|
and between versions, so that Postfix has to choose the file for
|
|
you. </p>
|
|
|
|
<p> Warning: the file format produced by Berkeley DB version 1 is
|
|
not compatible with that of versions 2 and 3 (versions 2 and 3 have
|
|
the same format). If you switch between DB versions, then you may
|
|
have to rebuild all your Postfix DB files. </p>
|
|
|
|
<p> Warning: if you use Berkeley DB version 2 or later, do not
|
|
enable DB 1.85 compatibility mode. Doing so would break fcntl file
|
|
locking. </p>
|
|
|
|
<p> Warning: if you use Perl to manipulate Postfix's Berkeley DB
|
|
files, then you need to use the same Berkeley DB version in Perl
|
|
as in Postfix. </p>
|
|
|
|
<h2><a name="tweak">Tweaking performance</a></h2>
|
|
|
|
<p> Postfix provides two configuration parameters that control how
|
|
much buffering memory Berkeley DB will use. </p>
|
|
|
|
<ul>
|
|
|
|
<li> <p> <a href="postconf.5.html#berkeley_db_create_buffer_size">berkeley_db_create_buffer_size</a> (default: 16 MBytes per
|
|
table). This setting is used by the commands that maintain Berkeley
|
|
DB files: <a href="postalias.1.html">postalias(1)</a> and <a href="postmap.1.html">postmap(1)</a>. For "hash" files, create
|
|
performance degrades rapidly unless the memory pool is O(file size).
|
|
For "btree" files, create performance is good with sorted input even
|
|
for small memory pools, but with random input degrades rapidly
|
|
unless the memory pool is O(file size). </p>
|
|
|
|
<li> <p> <a href="postconf.5.html#berkeley_db_read_buffer_size">berkeley_db_read_buffer_size</a> (default: 128 kBytes per
|
|
table). This setting is used by all other Postfix programs. The
|
|
buffer size is adequate for reading. If the cache is smaller than
|
|
the table, random read performance is hardly cache size dependent,
|
|
except with btree tables, where the cache size must be large enough
|
|
to contain the entire path from the root node. Empirical evidence
|
|
shows that 64 kBytes may be sufficient. We double the size to play
|
|
safe, and to anticipate changes in implementation and bloat. </p>
|
|
|
|
</ul>
|
|
|
|
<h2><a name="pthread">Missing pthread library trouble</a></h2>
|
|
|
|
<p> When building Postfix fails with: </p>
|
|
|
|
<blockquote>
|
|
<pre>
|
|
undefined reference to `pthread_condattr_setpshared'
|
|
undefined reference to `pthread_mutexattr_destroy'
|
|
undefined reference to `pthread_mutexattr_init'
|
|
undefined reference to `pthread_mutex_trylock'
|
|
</pre>
|
|
</blockquote>
|
|
|
|
<p> Add the "-lpthread" library to the "make makefiles" command. </p>
|
|
|
|
<blockquote>
|
|
<pre>
|
|
% make makefiles .... AUXLIBS="... -lpthread"
|
|
</pre>
|
|
</blockquote>
|
|
|
|
<p> More information is available at <a href="http://www.sleepycat.com/">http://www.sleepycat.com/</a>. </p>
|
|
|
|
</body>
|
|
|
|
</html>
|