注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

欢迎光临我的博客

 
 
 

日志

 
 

Dovecot  

2010-12-02 15:37:26|  分类: 邮件服务 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

目录

1.从源代码编译安装Dovecot
2.使用<Mercurial>编译安装Dovecot
3.使用RPM包安装Dovecot(包括Mandriva,RedHat,openSuSE等发行版)
4.SSL/TLS支持
1.Solaris中OpenSSL出现的问题
5.通知方法
1.Linux
6.可选配置选项
1.SQL驱动选项
2.认证后台选项
7.动态认证模块
8.动态IMAP和POP3模块
9.动态SQL驱动

从源代码编译安装Dovecot

对于大多数安装,以下三步就够了:

./configure
make
sudo make install

Dovecot会被安装到/usr/local目录下,主配置文件是/usr/local/etc/dovecot.conf,默认情况下,日志记录会纪录在系统邮件日志中,系统邮件日志通常是/var/log/mail.log,或者是名称与之类似的文件。如果您心急,可以参考<快速配置>。

如果您已经在自定义的目录安装了库文件,您可以将需要包含的头文件路径或库函数路径传递给环境变量CPPFLAGS和LDFLAGS,比如:

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

您还需要创建名为dovecot的用户(也可以通过参数login_user来改变用户名),dovecot用户被IMAP或POP3登陆进程使用,类似于其他服务中使用的NOBODY用户,并且该用户隶属于dovecot用户组,更多信息请参考<用户ID>。

使用<Mercurial>编译安装Dovecot

如果您使用Mercurial编译安装Dovecot,比如:

hg clone http://hg.dovecot.org/dovecot-1.2/

您应该先运行./autogen.sh脚本来生成configure脚本和其他的文件,这需要您已经安装autoconf,automake,libtool,pkg-config和gettext。当然,安装过程中您也需要GNU make。

我们建议您在使用configure脚本时添加--enable-maintainer-mode参数:

如果您想使用Mercurial来更新Dovecot,可以这样做:

hg pull
hg update
make
sudo make install

使用RPM包安装Dovecot(包括Mandriva,RedHat,openSuSE等发行版)

您可以在ftp://ftp.surfnet.nl/或其他镜像站点获取Dovecot的RPM包(我没找到~>_<~)。在写本文时最新版本是dovecot-10.rc26.src.rpm(翻译本文时最新版本是dovecot-1.2.4-0_99.el5.i386.rpm),如果官方发布了新版本的RPM包,更新RPM包并不困难。使用命令

rpm -ivh dovecot-10.rc26.src.rpm

来解压RPM包并创建一个RPM编译环境(/usr/src/rpm...)。下载最新的Dovecot源码包并复制到RPM编译环境的SOURCES子目录下。修改RPM编译环境下SPECS子目录中的dovecot.spec文件,使其与下载源码包的名称和版本相对应。使用gzip压缩过的tar包可以不必解压直接更新,使用bzip2压缩过的tar包貌似也可以。然后使用

rpmbuild -ba dovecot.spec

来更新RPM包,生成的RPM包会被放置在RPMS/i586目录下,最后使用rpm或urpmi命令安装RPM包。更新RPM包的过程如下:

rpm -ivh dovecot-1.0.rc26.src.rpm
cd /usr/src/rpm
mv ~/downloads/dovecot-1.0.rc28.tar.gz ./SOURCES
cd SPECS
vi dovecot.spec
...edit release and tarball name. Change default options if needed...
rpmbuild -ba dovecot.spec
cd ../RPMS/i586
urpmi ./dovecot-1.0.rc28-1mdv2007.0.i586.rpm

在安装开始前会检查Dovecot的RPM包依赖,如果您缺失了某个包导致无法使用RPM安装,先安装缺失的RPM包,再安装更新后Dovecot的RPM包。在安装插件(比如idxview和logview)之后,spec文件同样需要升级。

SSL/TLS支持

最初,Dovecot被设计成支持OpenSSL和GNUTLS。但是GNUTLS出现了一些问题,现在无法和Dovecot一起正常工作了。欢迎您给出解决这个问题的补丁。

默认Dovecot使用openSSL加密,Dovecot可以自动检测到已经安装的openSSL。如果没有,可能您缺少相应的头文件或库文件,或者您把openSSL安装到了某个自定义的目录下。如果缺少相应的头文件或库文件,您可以安装openssl-dev包;如果openSSL安装到了某个自定义的目录下,您可以设置环境变量CPPFLAGS和LDFLAGS,参见<第一节>。

Solaris中OpenSSL出现的问题

在Solaris 10中,openSSL是默认安装的。默认的配置下,Dovecot无法使用SSL/TLS加密,这个版本的openSSL与Dovecot相处的并不是很融洽。在Dovecot的主配置文件中参数ssl_cipher_list被设置为HIGH:!ALL;根据某些国家的进口限制(当然,现在好一些了),传输过程的高级功能属于SUNWcry包的一部分,所以,如果您没有安装SUNWcry,就无法使用SSL/TLS加密。这就导致了Dovecot客户端虽然声称支持高层加密,但是却无法传输。总之,以下三种任意一种方法都可以解决这个问题(由易到难):

1.在dovecot.conf文件中设置ssl_cipher_list = MEDIUM:!LOW
2.安装缺失的SUNWcry包;
3.选择一个没有为了保护您而移除部分高层传输功能的openSSL库(叹气),Solaris 10下默认安装的openSSL无法删除,从源代码或二进制包(例如,从

http://sunfreeware.com/)重新安装openSSL,为了使Dovecot能正常工作,还要为openSSL创建一个新的链接。假定您已经您的系统已经安装好了ld,make和gcc,编译过程如下(注意,Sun的链接器要求-R参数设定openSSL库的目录,这样Dovecot就可以从/usr/local/ssl/lib载入openSSL库):

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

通知方法

Linux

需要注意的是,Linux内核2.6.13及以上版本使用的是inotify而不是dnotify。如果您的发行版没有安装所要求的inotify头文件, 您可以从inotify的FTP站点获得(这个例子需要安装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

/usr/local/include并不是标准的include查询路径,所以您还需要在configure脚本之前设置环境变量:

CPPFLAGS=-I/usr/local/include ./configure --with-notify=inotify

Debian发行版将sys/inotify.h文件装在inotify-tools包内,并安装到/usr/include/inotifytools/目录下。可以创建如下脚本来使用头文件:

if ! test -e /usr/include/sys/inotify.h; then
aptitude install inotify-tools
ln -sf /usr/include/inotifytools/inotify.h /usr/include/sys/inotify.h
fi

然后按照上例的方法,将参数传递给环境变量CPPFLAGS:

CPPFLAGS=-I/usr/include/inotifytools ./configure --with-notify=inotify

可选配置选项

--help

列出所有可用选项

--help=short

仅仅列出某个包(这里是Dovecot)添加的特定选项。

列出的选项通常是--with-something或--enable-something形式的。如果您想禁用它们,可以使用--without-something或--disable-something。还有很多默认的选项是由autoconf,automake和libtool生成的,在这里不做讨论。

下面是一些Dovecot添加的选项列表。您不必经常更改这些选项,将它们列在这里仅仅是出于完整性的考虑。

--enable-ipv6

支持IPv6。如果Dovecot检测到您的操作系统支持IPv6,那么选项是默认开启的。

--enable-devel-checks

开启一些更为全面的检查,这个选项对开发者比较有用。为了更快地找到程序中出现的错误,Dovecot做了很多不必要的工作 (在v1.1及以上版本中这个选项是 --enable-debug)。

--enable-asserts

开启断言检查,选项默认是开启的。禁用断言检查可能在一点程度上会减轻CPU负荷,但是因为无法尽早检查出BUG,所以可能会由BUG产生更多的问题。

--disable-largefile

指定在32位CPU下使用32位还是64位的文件偏移。 如果系统(Linux和Solaris)支持64位,那么选项是默认开启的。将选项设置为32位可能会节省一些内存,但是这样会导致无法访问任何大于2GB的文件(在v1.0版本中这个选项是 --with-file-offset-size=32)。

--with-mem-align=BYTES

指定用于内存分配的内存对齐。该参数主要用于一些非x86的系统,在x86系统上会使Dovecot表现的更出色。选项默认值是8字节,确保64位CPU下内存可以正常工作。

--with-ioloop=IOLOOP

指定使用的I/O loop参数值。该参数有三个值可供选择,分别是poll,epoll和kqueue,默认使用系统可用的最佳值。

--with-notify=NOTIFY

指定使用哪种文件系统通知方法。该参数有四个值可供选择,分别是dnotify,inotify(这两种Linux都使用),kqueue (FreeBSD使用) 和none,默认使用系统可用的最佳值。

更多信息请参考通知方法。

--with-storages=FORMATS

指定支持哪种邮箱格式。注意: 独立于此选项,还要同时建立邮箱的原始格式和共享格式。

--with-solr

使用solr全文检索支持编译。

--with-zlib

使用zlib压缩支持编译(如果检测到zlib,默认启用该选项) 。

--with-bzlib

使用bzip2压缩支持编译(如果检测到bzip2,默认启用该选项) 。

SQL驱动选项

SQL驱动通常只是用于认证,但是同样可以用做lib-dict的后台,也可以将其作为插件用于其他用途。

--with-sql-drivers

使用指定SQL驱动编译。默认使用所有自动检测到的数据库。

--with-pgsql

使用PostgreSQL支持编译(需要pgsql-devel,libpq-dev或其他类似的包)。

--with-mysql

使用MySQL支持编译(需要mysql-devel,libmysqlclient15-dev或其他类似的包)。

--with-sqlite

使用SQLite3驱动支持编译(需要sqlite-devel,libsqlite3-dev或其他类似的包)。

后台认证选项

如果检测到了系统支持后台认证,编译的时候会默认将对应的选项编译进去:

--with-passwd

使用Passwd文件支持编译(典型的包括NSS、/etc/passwd等)。

--with-passwd-file

使用类似Passwd文件格式支持编译。

--with-shadow

使用Shadow密码文件支持编译。

--with-pam

使用PAM支持编译。

--with-nss

使用NSS支持编译。

--with-sia

使用Tru64 SIA支持编译。

--with-checkpassword

使用Checkpassword支持编译。

--with-bsdauth

使用BSD支持 (如果您的操作系统支持的话) 编译。

--with-static-userdb

使用静态用户数据库支持编译。

--with-prefetch-userdb

使用与获取用户数据库支持编译。

一些后台程序需要额外的库,但它们不是必须的,所以,只有在编译时明确标识开启这些后台程序的选项,它们才会被编译进去:

--with-sql

使用SQL支持(启动驱动支持需要额外的选项)。

--with-ldap

使用LDAP支持(需要openldap-devel,libldap2-dev或其他类似的包)。

--with-gssapi

使用GSSAPI认证支持(需要krb5-devel,libkrb5-dev或其他类似的包)。

--with-vpopmail

使用vpopmail支持(需要vpopmail源代码包或a devel package)。

动态认证模块

Dovecot也可以从$prefix/lib/dovecot/auth/目录动态加载认证模块。编译二进制安装包的同学们也可以使用其他的库(比如LDAP和vpopmail)来实现动态认证。目前为止,编译动态认证模块并没有标准的方法,但是类似以下的命令可能会起作用:

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

动态IMAP和POP3模块

mail_plugin 选项列出了Dovecot启动时从目录mail_plugin_dir加载的所有插件。这些插件可以做任何它们想做的事情,但一般情况下这些插件仅仅是为了包含在程序开始和结束时调用的<plugin name>_init和<plugin name>_deinit函数。

插件的文件名会被置以数字前缀,数字的大小指定了插件加载的顺序。这对于一个依赖另一个插件的插件来说是很重要的。

动态SQL驱动

SQL驱动既可以用于dovecot-auth,也可以用于lib-dict,而lib-dict可以被另外一些插件所用。比如,开启后台dict配额来限制SQL数据库中配额信息的大小。

您可以将SQL驱动放在主插件目录中,然后在auth/,imap/,pop3/和lda/目录中创建指向其的链接

  评论这张
 
阅读(1933)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017