Size: 5845
Comment:
|
Size: 9759
Comment: revised CVS instructions
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
[[TableOfContents]] |
|
Line 3: | Line 5: |
For most people it's enough to do: | For most people it is enough to do: |
Line 8: | Line 10: |
sudo make install }}} |
sudo make install }}} |
Line 11: | Line 12: |
That installs Dovecot under `/usr/local` directory. | 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 13: | Line 14: |
If you have installed some libraries into locations which require special include or library paths, you can give them in `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 16: | Line 18: |
CPPFLAGS=-I/opt/openssl/include LDFLAGS=-L/opt/openssl/lib ./configure }}} |
CPPFLAGS=-I/opt/openssl/include LDFLAGS=-L/opt/openssl/lib ./configure }}} |
Line 19: | Line 20: |
= CVS = | 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 21: | Line 22: |
If you got Dovecot from CVS, you'll first need to run `./autogen.sh` to generate `configure` script. This also requires that you have `pkg-config` package installed (`/usr/share/aclocal/pkg.m4` file is needed). | {{{ 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 }}} |
Line 25: | Line 51: |
Dovecot initially was built to support both OpenSSL and GNUTLS. GNUTLS however had some problems and nowadays it doesn't work anymore. Patches to fix it are welcome. | 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. |
Line 27: | Line 53: |
OpenSSL is used by default now, and it should be automatically detected. If it's not, you're missing some header files or libraries, or they're just in nonstandard path. Make sure you have `openssl-dev` or similiar package installed, and if it's not in standard location set `CPPFLAGS` and `LDFLAGS` as shown in 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 29: | Line 55: |
By default SSL certificate is read from `/etc/ssl/certs/dovecot.pem` and private key from `/etc/ssl/private/dovecot.pem`. The `/etc/ssl` directory can be changed using `--with-ssldir=DIR` configure option. Both can of course be overridden from 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. [[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 }}} |
Line 33: | Line 72: |
`--help` gives a full list of available options. | --help:: gives a full list of available options --help=short:: just lists the options added by the particular package (= Dovecot) |
Line 37: | Line 78: |
Here's a list of options that Dovecot adds. You shouldn't usually have to change these, but they're described here just for completeness: | 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: |
Line 39: | Line 80: |
`--enable-ipv6` Enable IPv6 support. Enabled by default if system is detected to support it. | --enable-ipv6:: Enable IPv6 support. This is enabled by default if the system is detected to support it. |
Line 41: | Line 82: |
`--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-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. |
Line 43: | Line 84: |
`--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 aren't detected as early. | --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. |
Line 45: | Line 86: |
`--with-file-offset-size=BITS` Specifies if we use 32bit or 64bit file offsets. 64bit is the default if system supports it (Linux and Solaris does). Dropping this to 32bit may save some memory, but it prevents accessing any file larger than 2GB. | --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. |
Line 47: | Line 88: |
`--with-mem-align=BYTES` Specifies memory alignment used for memory allocations. It's needed with many non-x86 systems and doing it should speed up x86 systems too. Default is 8 to make sure 64bit memory accessing work. | --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. |
Line 49: | Line 90: |
`--with-ioloop=IOLOOP` Specifies what I/O loop method to use. Possibilities are `select`, `poll` and `epoll`. Default is to use `poll` if possible and fallback to `select`. `epoll` is faster than either of them, but it works only only on Linux 2.6 kernels. | --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. |
Line 51: | Line 92: |
`--with-pop3d` Build POP3 server binary as well as IMAP server (default). It still has to be separately enabled from configuration file before it's actually used. | --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 53: | Line 94: |
`--with-storages=FORMATS` Specifies what mailbox formats to support. Default is `maildir,mbox`. | --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. |
Line 55: | Line 96: |
= Authentication Backend Options = | --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 == |
Line 60: | Line 116: |
--with-passwd Build with /etc/passwd support (default) --with-passwd-file Build with passwd-like file support (default) --with-shadow Build with shadow password support (default) --with-pam Build with PAM support (default) --with-checkpassword Build with checkpassword support (default) --with-bsdauth Build with BSD authentication support (default) --with-static-userdb Build with static userdb support (default) --with-vpopmail Build with vpopmail support (default) |
--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 |
Line 70: | Line 126: |
Some backends require extra libraries and aren't necessarily wanted, so they're built only if specifically enabled: | Some backends require extra libraries and are not necessarily wanted, so they are built only if specifically enabled: |
Line 73: | Line 129: |
--with-sql Build with generic SQL support (drivers are enabled separately) | |
Line 74: | Line 131: |
--with-pgsql Build with PostgreSQL support --with-mysql Build with MySQL support |
--with-gssapi Build with GSSAPI authentication support --with-vpopmail Build with vpopmail support |
Line 80: | Line 137: |
Dovecot can also dynamically load authentication modules from $prefix/lib/dovecot/auth/ directory. Binary packages builders should use them for authentication modules which require external libraries (eg. LDAP and vpopmail). There's 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 85: | Line 142: |
db-ldap.c userdb-ldap.c passdb-ldap.c -o ldap.so \ ../lib-settings/libsettings.a -lldap gcc -shared -fPIC -DHAVE_CONFIG_H -DUSERDB_PGSQL -DPASSDB_PGSQL \ -I../.. -I../lib -I../lib-settings -I/usr/include/postgresql \ db-pgsql.c userdb-pgsql.c passdb-pgsql.c -o pgsql.so \ ../lib-settings/libsettings.a -L/usr/lib/postgresql -lpq |
db-ldap.c userdb-ldap.c passdb-ldap.c -o ldap.so -lldap |
Line 95: | Line 146: |
-lvpopmail }}} |
-lvpopmail }}} |
Line 98: | Line 148: |
Including libsettings.a in ldap.so and pgsql.so is kind of annoying, but it's not needed elsewhere in dovecot-auth. | Including `libsettings.a` in `ldap.so` and `pgsql.so` is kind of annoying, but it is not needed elsewhere in dovecot-auth. |
Line 102: | Line 152: |
If `imap_use_modules` or `pop3_use_modules` is set to yes, Dovecot will load all `*.so` modules from directory pointed by `mail_modules` setting. These modules can do anything, they're only expected to contain `<module name>_init` and `<module name>_deinit` functions which are called. | 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 }}} |
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
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.
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
Including libsettings.a in ldap.so and pgsql.so is kind of annoying, but it is not needed elsewhere in dovecot-auth.
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