126 lines
4.1 KiB
HTML
126 lines
4.1 KiB
HTML
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"https://www.w3.org/TR/html4/loose.dtd">
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<title>Postfix CDB Howto</title>
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<link rel='stylesheet' type='text/css' href='postfix-doc.css'>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix CDB Howto</h1>
|
|
|
|
<hr>
|
|
|
|
<h2>Introduction</h2>
|
|
|
|
<p> CDB (Constant DataBase) is an indexed file format designed by
|
|
Daniel Bernstein. CDB is optimized exclusively for read access
|
|
and guarantees that each record will be read in at most two disk
|
|
accesses. This is achieved by forgoing support for incremental
|
|
updates: no single-record inserts or deletes are supported. CDB
|
|
databases can be modified only by rebuilding them completely from
|
|
scratch, hence the "constant" qualifier in the name. </p>
|
|
|
|
<p> Postfix CDB databases are specified as "cdb:<i>name</i>", where
|
|
<i>name</i> specifies the CDB file name without the ".cdb" suffix
|
|
(another suffix, ".tmp", is used temporarily while a CDB file is
|
|
under construction). CDB databases are maintained with the postmap(1)
|
|
or postalias(1) command. The DATABASE_README document has general
|
|
information about Postfix databases. </p>
|
|
|
|
<p> You can use "cdb:" tables wherever you can use read-only "hash",
|
|
"btree" or "lmdb" tables with the following limitations: </p>
|
|
|
|
<ul>
|
|
|
|
<li> <p> CDB databases cannot be larger than 4GB on LP64 and ILP32
|
|
systems, because the CDB library API uses unsigned integers for
|
|
file offsets. </p>
|
|
|
|
<li> <p> The "<b>postmap -i</b>" (incremental record insertion) and
|
|
"<b>postmap -d</b>" (incremental record deletion) command-line
|
|
options are not available. For the same reason the "cdb:" map type
|
|
cannot be used to for persistent caches, such as the address
|
|
verification cache for the verify(8) service, the TLS session cache
|
|
for the tlsmgr(8) service, or the dynamic allowlist for postscreen(8).
|
|
</p>
|
|
|
|
<li> <p> The "sequence" operation ("<b>postmap -s</b>" or "<b>postalias
|
|
-s</b>") is available only wen Postfix is built with tinycdb by
|
|
Michael Tokarev, not with the original cdb library by Daniel Bernstein.
|
|
</p>
|
|
|
|
</ul>
|
|
|
|
<p> CDB support is available with Postfix 2.2 and later releases.
|
|
The remainder of this document describes how to build Postfix with
|
|
CDB support. </p>
|
|
|
|
<h2>Building Postfix with CDB support</h2>
|
|
|
|
<p> These instructions assume that you build Postfix from source
|
|
code as described in the INSTALL document. Some modification may
|
|
be required if you build Postfix from a vendor-specific source
|
|
package. </p>
|
|
|
|
<p> Postfix is compatible with two CDB implementations: </p>
|
|
|
|
<ul>
|
|
|
|
<li> <p> The original cdb library from Daniel Bernstein, available
|
|
from https://cr.yp.to/cdb.html, and </p>
|
|
|
|
<li> <p> tinycdb (version 0.5 and later) from Michael Tokarev,
|
|
available from https://www.corpit.ru/mjt/tinycdb.html. </p>
|
|
|
|
</ul>
|
|
|
|
<p> Tinycdb is preferred, since it is a bit faster, has additional
|
|
useful functionality and is much simpler to use. </p>
|
|
|
|
<p>To build Postfix after you have installed tinycdb, use something
|
|
like: </p>
|
|
|
|
<blockquote>
|
|
<pre>
|
|
% make tidy
|
|
% CDB=../../../tinycdb-0.5
|
|
% make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
|
|
"AUXLIBS_CDB=$CDB/libcdb.a"
|
|
% make
|
|
</pre>
|
|
</blockquote>
|
|
|
|
<p> Alternatively, for the D.J.B. version of CDB:<p>
|
|
|
|
<blockquote>
|
|
<pre>
|
|
% make tidy
|
|
% CDB=../../../cdb-0.75
|
|
% make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
|
|
"AUXLIBS_CDB=$CDB/cdb.a $CDB/alloc.a $CDB/buffer.a $CDB/unix.a $CDB/byte.a"
|
|
% make
|
|
</pre>
|
|
</blockquote>
|
|
|
|
<p> Postfix versions before 3.0 use AUXLIBS instead of AUXLIBS_CDB.
|
|
With Postfix 3.0 and later, the old AUXLIBS variable still supports
|
|
building a statically-loaded CDB database client, but only the new
|
|
AUXLIBS_CDB variable supports building a dynamically-loaded or
|
|
statically-loaded CDB database client. </p>
|
|
|
|
<blockquote>
|
|
|
|
<p> Failure to use the AUXLIBS_CDB variable will defeat the purpose
|
|
of dynamic database client loading. Every Postfix executable file
|
|
will have CDB database library dependencies. And that was exactly
|
|
what dynamic database client loading was meant to avoid. </p>
|
|
|
|
</blockquote>
|