This documentation is for Dovecot v1.x, see wiki2 for v2.x documentation.
Differences between revisions 17 and 18
Revision 17 as of 2006-08-13 22:02:25
Size: 9633
Editor: TimoSirainen
Comment:
Revision 18 as of 2006-11-13 19:43:17
Size: 10786
Editor: HEJvdB
Comment:
Deletions are marked like this. Additions are marked like this.
Line 4: Line 4:
Line 11: Line 10:
That installs Dovecot under the {{{/usr/local}}} directory. The configuration file is in {{{/usr/local/etc/dovecot.conf}}}. Logging goes to syslog's mail facility by default, which typically goes to {{{/var/log/mail.log}}} or something similar. If you are in a hurry, you can then jump to QuickConfiguration.
Line 12: Line 12:
That installs Dovecot under the `/usr/local` directory. The configuration file is in `/usr/local/etc/dovecot.conf`. Logging goes to syslog's mail facility by default, which typically goes to `/var/log/mail.log` or something similar. If you are in a hurry, you can then jump to QuickConfiguration.

[[Anchor(nonstdpaths)]]
If you have installed some libraries into locations which require special include or library paths, you can pass them in the `CPPFLAGS` and `LDFLAGS` environment variables. For example:
[[Anchor(nonstdpaths)]] If you have installed some libraries into locations which require special include or library paths, you can pass them in the {{{CPPFLAGS}}} and {{{LDFLAGS}}} environment variables. For example:
Line 19: Line 16:

Solaris 10 includes a bundled OpenSSL that does not function correctly with Dovecot 1.0beta8 when attempting to use TLS/SSL. The bundled version of OpenSSL cannot be removed. Installing a newer OpenSSL from source or package (for instance, from http://sunfreeware.com/) will enable Dovecot to work correctly as long as you link against the new OpenSSL. Assuming you are building with the built-in ld, make and gcc, then your build should go something like this (notice the -R required by Sun's linker that sets the runtime linking path in the resulting programs so the OpenSSL libraries load from `/usr/local/ssl/lib`):
Solaris 10 includes a bundled OpenSSL that does not function correctly with Dovecot 1.0beta8 when attempting to use TLS/SSL. The bundled version of OpenSSL cannot be removed. Installing a newer OpenSSL from source or package (for instance, from http://sunfreeware.com/) will enable Dovecot to work correctly as long as you link against the new OpenSSL. Assuming you are building with the built-in ld, make and gcc, then your build should go something like this (notice the -R required by Sun's linker that sets the runtime linking path in the resulting programs so the OpenSSL libraries load from {{{/usr/local/ssl/lib}}}):
Line 29: Line 25:
= Compiling Dovecot From CVS =
If you got Dovecot from CVS, for instance with
Line 30: Line 28:
= Compiling Dovecot From CVS = {{{
cvs -d :pserver:anonymous@dovecot.org:/home/cvs checkout -r branch_1_0 dovecot }}}
you will first need to run {{{autoreconf -isv}}} to generate the {{{configure}}} script.
Line 32: Line 32:
If you got Dovecot from CVS, for instance with {{{
cvs -d :pserver:anonymous@dovecot.org:/home/cvs checkout -r branch_1_0 dovecot }}}
you will first need to run `autoreconf -isv` to generate the `configure` script.

This requires that you have the `autoconf`, `automake`, `libtool` and `pkg-config` packages installed. It is also advisable to add `--enable-maintainer-mode` to the `configure` script. Thus:
This requires that you have the {{{autoconf}}}, {{{automake}}}, {{{libtool}}} and {{{pkg-config}}} packages installed. It is also advisable to add {{{--enable-maintainer-mode}}} to the {{{configure}}} script. Thus:
Line 43: Line 39:
For later updates from CVS, you can use:
Line 44: Line 41:
For later updates from CVS, you can use: {{{ {{{
Line 48: Line 45:
= Compiling Dovecot with rpmbuild (Mandriva, RedHat, etc.) =
Fetch the source rpm from ftp://ftp.surfnet.nl/vol/5/mandrakelinux/official/2007.0/SRPMS/contrib/release/ or any other mirror. At the moment of this writing dovecot-10.rc7.src.rpm can be found there. Current release is rc14. Updating the source rpm is not difficult.
Unpack with 'rpm -ivh dovecot-10.rc7.src.rpm' to a build environment (/usr/src/rpm...)
Copy the newer tarball (rc14) from the dovecot site to the SOURCES directory of the build environment.
Change the dovecot.spec file in the SPECS direcctory to reflect the new release and the new name of the tarball. The maintainer seems to work with a bz2 tarball; a tar.gz tarball makes no difference
Issue a rpmbuild -ba dovecot.spec. The resulting rpm will be placed in RPMS/i586
Install with rpm or urpmi.

{{{
rpm -ivh dovecot-1.0.rc7.src.rpm
cd /usr/src/rpm
mv ~/downloads/dovecot-1.0.rc14.tar.gz ./SOURCES
}}}

Hopefully dovecot will move to the main tree as soon as 1.0-final is released.
Line 50: Line 62:
Line 53: Line 64:
OpenSSL is used by default now, and it should be automatically detected. If it is not, you are missing some header files or libraries, or they are just in a non-standard path. Make sure you have the `openssl-dev` or a similar package installed, and if it is not in the standard location, set `CPPFLAGS` and `LDFLAGS` as shown in [#nonstdpaths the first section above.] OpenSSL is used by default now, and it should be automatically detected. If it is not, you are missing some header files or libraries, or they are just in a non-standard path. Make sure you have the {{{openssl-dev}}} or a similar package installed, and if it is not in the standard location, set {{{CPPFLAGS}}} and {{{LDFLAGS}}} as shown in [#nonstdpaths the first section above.]
Line 55: Line 66:
By default the SSL certificate is read from `/etc/ssl/certs/dovecot.pem` and the private key from `/etc/ssl/private/dovecot.pem`. The `/etc/ssl` directory can be changed using the `--with-ssldir=DIR` configure option. Both can of course be overridden from the configuration file. By default the SSL certificate is read from {{{/etc/ssl/certs/dovecot.pem}}} and the private key from {{{/etc/ssl/private/dovecot.pem}}}. The {{{/etc/ssl}}} directory can be changed using the {{{--with-ssldir=DIR}}} configure option. Both can of course be overridden from the configuration file.
Line 58: Line 69:
Line 59: Line 71:
Line 61: Line 72:

Note that current `inotify` is in the Linux kernel since version 2.6.13 and it is preferred over `dnotify`. If your distribution does not have the required `inotify` header file, you can get it from the inotify maintainer (this example requires [http://curl.haxx.se/ cURL]):
Note that current {{{inotify}}} is in the Linux kernel since version 2.6.13 and it is preferred over {{{dnotify}}}. If your distribution does not have the required {{{inotify}}} header file, you can get it from the inotify maintainer (this example requires [http://curl.haxx.se/ cURL]):
Line 69: Line 79:
Line 71: Line 80:
Line 73: Line 81:
Line 75: Line 82:

Options are usually listed as `--with-something` or `--enable-something`. If you want to disable them, do it as `--without-something` or `--disable-something`. There are many default options that come from autoconf, automake or libtool. They are explained elsewhere.
Options are usually listed as {{{--with-something}}} or {{{--enable-something}}}. If you want to disable them, do it as {{{--without-something}}} or {{{--disable-something}}}. There are many default options that come from autoconf, automake or libtool. They are explained elsewhere.
Line 81: Line 87:
Line 83: Line 88:
Line 85: Line 89:
Line 87: Line 90:
Line 89: Line 91:

--with-ioloop=IOLOOP:: Specifies what I/O loop method to use. Possibilities are `select`, `poll`, `epoll` and `kqueue`. The default is to use `poll` if possible and fall back to `select`. `epoll` is faster than either of them, but it works only on Linux 2.6 kernels. `kqueue` is also faster, but works only on BSDs.

 --with-notify=NOTIFY:: Specifies what file system notification method to use. Possibilities are `dnotify`, `inotify` (both on Linux), `kqueue` (FreeBSD) and `none`. The default is to use dnotify if it is compilable, otherwise none. See [#notify Notify method] above for more information.
 --with-ioloop=IOLOOP:: Specifies what I/O loop method to use. Possibilities are {{{select}}}, {{{poll}}}, {{{epoll}}} and {{{kqueue}}}. The default is to use {{{poll}}} if possible and fall back to {{{select}}}. {{{epoll}}} is faster than either of them, but it works only on Linux 2.6 kernels. {{{kqueue}}} is also faster, but works only on BSDs.
 --with-notify=NOTIFY:: Specifies what file system notification method to use. Possibilities are {{{dnotify}}}, {{{inotify}}} (both on Linux), {{{kqueue}}} (FreeBSD) and {{{none}}}. The default is to use dnotify if it is compilable, otherwise none. See [#notify Notify method] above for more information.
Line 95: Line 94:
Line 97: Line 95:

--with-storages=FORMATS:: Specifies what mailbox formats to support. Default is `maildir,mbox`.
 --with-storages=FORMATS:: Specifies what mailbox formats to support. Default is {{{maildir,mbox}}}.
Line 101: Line 97:
Line 110: Line 105:
Line 112: Line 106:
Line 125: Line 118:
Line 134: Line 126:
Line 136: Line 127:

Dovecot can also dynamically load authentication modules from the `$prefix/lib/dovecot/auth/` directory. Binary packages builders should use them for authentication modules which require external libraries (e. g. LDAP and vpopmail). There is no standard way to build them as modules currently, but something like this should work:
Dovecot can also dynamically load authentication modules from the {{{$prefix/lib/dovecot/auth/}}} directory. Binary packages builders should use them for authentication modules which require external libraries (e. g. LDAP and vpopmail). There is no standard way to build them as modules currently, but something like this should work:
Line 147: Line 137:
Line 149: Line 138:

The `mail_plugins` setting lists all plugins that Dovecot is supposed to load from the `mail_plugin_dir` directory at program start. These plugins can do anything they want. They are only expected to contain the `<plugin name>_init` and `<plugin name>_deinit` functions which are called at startup and at exit.
The {{{mail_plugins}}} setting lists all plugins that Dovecot is supposed to load from the {{{mail_plugin_dir}}} directory at program start. These plugins can do anything they want. They are only expected to contain the {{{<plugin name>_init}}} and {{{<plugin name>_deinit}}} functions which are called at startup and at exit.
Line 155: Line 143:

TableOfContents

Compiling Dovecot From Sources

For most people it is enough to do:

./configure
make
sudo make install 

That installs Dovecot under the /usr/local directory. The configuration file is in /usr/local/etc/dovecot.conf. Logging goes to syslog's mail facility by default, which typically goes to /var/log/mail.log or something similar. If you are in a hurry, you can then jump to QuickConfiguration.

Anchor(nonstdpaths) If you have installed some libraries into locations which require special include or library paths, you can pass them in the CPPFLAGS and LDFLAGS environment variables. For example:

CPPFLAGS=-I/opt/openssl/include LDFLAGS=-L/opt/openssl/lib ./configure 

Solaris 10 includes a bundled OpenSSL that does not function correctly with Dovecot 1.0beta8 when attempting to use TLS/SSL. The bundled version of OpenSSL cannot be removed. Installing a newer OpenSSL from source or package (for instance, from http://sunfreeware.com/) will enable Dovecot to work correctly as long as you link against the new OpenSSL. Assuming you are building with the built-in ld, make and gcc, then your build should go something like this (notice the -R required by Sun's linker that sets the runtime linking path in the resulting programs so the OpenSSL libraries load from /usr/local/ssl/lib):

PATH=$PATH:/usr/sfw/bin:/usr/ccs/bin
export PATH
mv /usr/lib/pkgconfig/openssl.pc /usr/lib/pkgconfig/openssl.pc.orig
CPPFLAGS=-I/usr/local/ssl/include LDFLAGS='-L/usr/local/ssl/lib -R/usr/local/ssl/lib' ./configure --with-ssl=openssl
make
make install 

Compiling Dovecot From CVS

If you got Dovecot from CVS, for instance with

cvs -d :pserver:anonymous@dovecot.org:/home/cvs checkout -r branch_1_0 dovecot 

you will first need to run autoreconf -isv to generate the configure script.

This requires that you have the autoconf, automake, libtool and pkg-config packages installed. It is also advisable to add --enable-maintainer-mode to the configure script. Thus:

autoreconf -isv
./configure -C --enable-maintainer-mode
make
sudo make install 

For later updates from CVS, you can use:

cvs update -dP
make
sudo make install 

Compiling Dovecot with rpmbuild (Mandriva, RedHat, etc.)

Fetch the source rpm from ftp://ftp.surfnet.nl/vol/5/mandrakelinux/official/2007.0/SRPMS/contrib/release/ or any other mirror. At the moment of this writing dovecot-10.rc7.src.rpm can be found there. Current release is rc14. Updating the source rpm is not difficult. Unpack with 'rpm -ivh dovecot-10.rc7.src.rpm' to a build environment (/usr/src/rpm...) Copy the newer tarball (rc14) from the dovecot site to the SOURCES directory of the build environment. Change the dovecot.spec file in the SPECS direcctory to reflect the new release and the new name of the tarball. The maintainer seems to work with a bz2 tarball; a tar.gz tarball makes no difference Issue a rpmbuild -ba dovecot.spec. The resulting rpm will be placed in RPMS/i586 Install with rpm or urpmi.

rpm -ivh dovecot-1.0.rc7.src.rpm
cd /usr/src/rpm
mv ~/downloads/dovecot-1.0.rc14.tar.gz ./SOURCES

Hopefully dovecot will move to the main tree as soon as 1.0-final is released.

SSL/TLS Support

Dovecot was initially built to support both OpenSSL and GNUTLS. GNUTLS has however had some problems and nowadays it does not work any more. Patches to fix it are welcome.

OpenSSL is used by default now, and it should be automatically detected. If it is not, you are missing some header files or libraries, or they are just in a non-standard path. Make sure you have the openssl-dev or a similar package installed, and if it is not in the standard location, set CPPFLAGS and LDFLAGS as shown in [#nonstdpaths the first section above.]

By default the SSL certificate is read from /etc/ssl/certs/dovecot.pem and the private key from /etc/ssl/private/dovecot.pem. The /etc/ssl directory can be changed using the --with-ssldir=DIR configure option. Both can of course be overridden from the configuration file.

Anchor(notify)

Notify method

Linux

Note that current inotify is in the Linux kernel since version 2.6.13 and it is preferred over dnotify. If your distribution does not have the required inotify header file, you can get it from the inotify maintainer (this example requires [http://curl.haxx.se/ cURL]):

mkdir -p /usr/local/include/sys
cd /usr/local/include/sys
curl ftp://ftp.kernel.org/pub/linux/kernel/people/rml/inotify/headers/inotify.h -O
curl ftp://ftp.kernel.org/pub/linux/kernel/people/rml/inotify/headers/inotify-syscalls.h >> inotify.h 

Optional Configure Options

--help
gives a full list of available options
--help=short
just lists the options added by the particular package (= Dovecot)

Options are usually listed as --with-something or --enable-something. If you want to disable them, do it as --without-something or --disable-something. There are many default options that come from autoconf, automake or libtool. They are explained elsewhere.

Here is a list of options that Dovecot adds. You should not usually have to change these, but they are described here just for completeness:

--enable-ipv6
Enable IPv6 support. This is enabled by default if the system is detected to support it.
--enable-debug
Enables some extra checks for debugging. This is mostly useful for developers. It does quite a lot of unnecessary work but should catch some programming mistakes more quickly.
--enable-asserts
Enable assertion checks, enabled by default. Disabling them may slightly save some CPU, but if there are bugs they can cause more problems since they are not detected as early.
--with-file-offset-size=BITS
Specifies if we use 32bit or 64bit file offsets. 64bit is the default if the system supports it (Linux and Solaris do). Dropping this to 32bit may save some memory, but it prevents accessing any file larger than 2 GB.
--with-mem-align=BYTES
Specifies memory alignment used for memory allocations. It is needed with many non-x86 systems and it should speed up x86 systems too. Default is 8, to make sure 64bit memory accessing works.
--with-ioloop=IOLOOP

Specifies what I/O loop method to use. Possibilities are select, poll, epoll and kqueue. The default is to use poll if possible and fall back to select. epoll is faster than either of them, but it works only on Linux 2.6 kernels. kqueue is also faster, but works only on BSDs.

--with-notify=NOTIFY

Specifies what file system notification method to use. Possibilities are dnotify, inotify (both on Linux), kqueue (FreeBSD) and none. The default is to use dnotify if it is compilable, otherwise none. See [#notify Notify method] above for more information.

--with-pop3d
Build POP3 server binary as well as IMAP server. It still has to be separately enabled from the configuration file before it is actually used.
--with-deliver
Build Local Delivery Agent binary.
--with-storages=FORMATS

Specifies what mailbox formats to support. Default is maildir,mbox.

SQL Driver Options

SQL drivers are typically used only for authentication, but they may be used as a lib-dict backend too, which can be used by plugins for different purposes.

  --with-sql-drivers      Build with specified SQL drivers. Defaults to all that were found with autodetection.
  --with-pgsql            Build with PostgreSQL support
  --with-mysql            Build with MySQL support
  --with-sqlite           Build with SQLite3 driver support

Authentication Backend Options

The basic backends are built if the system is detected to support them:

  --with-passwd           Build with /etc/passwd support
  --with-passwd-file      Build with passwd-like file support
  --with-shadow           Build with shadow password support
  --with-pam              Build with PAM support
  --with-checkpassword    Build with checkpassword support
  --with-bsdauth          Build with BSD authentication support
  --with-static-userdb    Build with static userdb support
  --with-prefetch-userdb  Build with prefetch userdb support

Some backends require extra libraries and are not necessarily wanted, so they are built only if specifically enabled:

  --with-sql              Build with generic SQL support (drivers are enabled separately)
  --with-ldap             Build with LDAP support
  --with-gssapi           Build with GSSAPI authentication support
  --with-vpopmail         Build with vpopmail support

Dynamic Authentication Modules

Dovecot can also dynamically load authentication modules from the $prefix/lib/dovecot/auth/ directory. Binary packages builders should use them for authentication modules which require external libraries (e. g. LDAP and vpopmail). There is no standard way to build them as modules currently, but something like this should work:

gcc -shared -fPIC -DHAVE_CONFIG_H -DUSERDB_LDAP -DPASSDB_LDAP \
-I../.. -I../lib -I../lib-settings \
db-ldap.c userdb-ldap.c passdb-ldap.c -o ldap.so -lldap

gcc -shared -fPIC -DHAVE_CONFIG_H -DUSERDB_VPOPMAIL -DPASSDB_VPOPMAIL \
-I../.. -I../lib userdb-vpopmail.c passdb-vpopmail.c -o vpopmail.so \
-lvpopmail 

Dynamic IMAP and POP3 Modules

The mail_plugins setting lists all plugins that Dovecot is supposed to load from the mail_plugin_dir directory at program start. These plugins can do anything they want. They are only expected to contain the <plugin name>_init and <plugin name>_deinit functions which are called at startup and at exit.

The plugin filename is prefixed with a number which specifies the order in which the plugins are loaded. This is important if one plugin depends on another.

Dynamic SQL drivers

The SQL drivers can be used by dovecot-auth, but also by lib-dict. lib-dict then can be used by some plugins, for example enabling dict quota backend to keep the quota information in SQL database.

You could place the SQL drivers into main plugin directory and create symlinks for them into auth/, imap/, pop3/ and lda/.

cd src/lib-sql

gcc -shared -fPIC -DHAVE_CONFIG_H -DBUILD_PGSQL \
-I../.. -I../lib -I../lib-settings -I/usr/include/postgresql \
driver-pgsql.c -o driver_pgsql.so -L/usr/lib/postgresql -lpq

gcc -shared -fPIC -DHAVE_CONFIG_H -DBUILD_MYSQL \
-I../.. -I../lib -I../lib-settings -I/usr/include/mysql \
driver-mysql.c -o driver_mysql.so -lmysqlclient 

None: CompilingSource (last edited 2009-12-07 17:19:38 by p5B105044)