CentOS 5.1 下用源码编译安装 ExtMail (第二部分)





(一)安装 MySQL

# /usr/sbin/groupadd -g 27 mysql
# /usr/sbin/useradd -c "MySQL Server" -u 27 -d /usr/local/mysql -g mysql -s /bin/bash -M mysql
# tar zxvf mysql-5.0.45.tar.gz
# cd mysql-5.0.45

# ./configure \
--prefix=/usr/local/mysql \
--sysconfdir=/etc \
--enable-thread-safe-client \
--enable-local-infile \
--with-unix-socket-path=/var/lib/mysql/mysql.sock \
--with-charset=gbk \
--with-extra-charset=all \
--with-low-memory                    

# make
# make install
# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
# cd /usr/local/mysql
# chown -R mysql .
# chgrp -R mysql .
# bin/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql var
# bin/mysqld_safe --user=mysql &

# cd /usr/local/src/mysql-5.0.45     (这里的目录指的是原压缩包解压后的目录)
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld

加入自动启动服务队列:

# echo "/etc/rc.d/init.d/mysqld start" >> /etc/rc.local

添加 mysql-root 密码:

# /usr/local/mysql/bin/mysqladmin -uroot password 新密码

配置库文件搜索路径:

# echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
# ldconfig   (这一步骤,千万不要忘记了哦)
# ldconfig -v

添加 /usr/local/mysql/bin 到环境变量 PATH 中:

# export PATH=$PATH:/usr/local/mysql/bin

检查下 PATH 中是否写入了 /usr/local/mysql/bin 路径:

# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

测试 MySQL :

# /etc/rc.d/init.d/mysqld start
Starting MySQL                                             [  OK  ]

(注意:以上方式安装好 MySQL 后,其 mysql.sock 文件位于 /var/lib/mysql 目录下。)


(二)安装 perl-DBI ,DBD::Mysql 和 Unix::syslogd

ExtMail 将会用到 perl 的 DBD::Mysql 和 Unix::syslogd 功能,您可以去 http://search.cpan.org 搜索下载原码包进行安装。

# tar zxvf Unix-Syslog-1.0.tar.gz
# cd Unix-Syslog-1.0
# perl Makefile.PL
# make
# make install

# tar zxvf DBI-1.58.tar.gz
# cd DBI-1.58
# perl Makefile.PL
# make
# make install

DBD-Mysql 目前最新版本为 4.005,但它和系统中的 perl 结合使用时会造成 extmail 无法正常使用,因此我们采用 3 的版本:

# tar zxvf DBD-mysql-3.0002_4.tar.gz  
# cd DBD-mysql-3.0002_4
# perl Makefile.PL  

(此步骤中如果出现类同 Can't exec "mysql_config": No such file or directory at Makefile.PL line 76. 的错误是因为您的 mysql 的 bin 目录没有输出至 $PATH 环境变量中)

# make
# make install

(三)安装 rrdtool 所需的软件包

# rpm -ivh freetype-2.2.1-19.el5.i386.rpm
# rpm -ivh freetype-demos-2.2.1-19.el5.i386.rpm
# rpm -ivh freetype-devel-2.2.1-19.el5.i386.rpm

# rpm -ivh libart_lgpl-devel-2.3.17-4.i386.rpm

# rpm -Uvh libpng-1.2.10-7.1.el5_0.1.i386.rpm
# rpm -Uvh libpng-devel-1.2.10-7.1.el5_0.1.i386.rpm

(四)安装 Time::HiRes 和 File::Tail 和 rrdtool-1.2.26

安装 Time::HiRes

# tar zxvf Time-HiRes-1.9711.tar.gz
# cd Time-HiRes-1.9711
# perl Makefile.PL
# make
# make install

安装 File::Tail

# tar zxvf File-Tail-0.99.3.tar.gz
# cd File-Tail-0.99.3
# perl Makefile.PL
# make
# make install

安装 rrdtool-1.2.26

(建议使用下面 rpm 包方式来安装 rrdtool)

# rpm -ivh rrdtool-1.2.23-3.el5.i386.rpm
# rpm -ivh rrdtool-perl-1.2.23-3.el5.i386.rpm

=================================
# tar zxvf rrdtool-1.2.26.tar.gz
# cd rrdtool-1.2.26
# ./configure
# make
# make install
=================================

(五)安装 httpd 所需的软件包

# rpm -ivh apr-devel-1.2.7-11.i386.rpm
# rpm -ivh apr-docs-1.2.7-11.i386.rpm
# rpm -ivh apr-util-devel-1.2.7-6.i386.rpm
# rpm -ivh apr-util-docs-1.2.7-6.i386.rpm

(六)安装 httpd

# rpm -ivh httpd-2.2.3-11.el5.centos.i386.rpm
# rpm -ivh httpd-manual-2.2.3-11.el5.centos.i386.rpm
# rpm -ivh httpd-devel-2.2.3-11.el5.centos.i386.rpm

加入自动启动服务队列:

# echo "/etc/rc.d/init.d/httpd start" >> /etc/rc.local

(七)安装 mod_fastcgi 和 FCGI

# tar xzvf mod_fastcgi-2.4.6.tar.gz
# cd mod_fastcgi-2.4.6
# cp Makefile.AP2 Makefile
# make top_dir=/usr/lib/httpd install

检查下 mod_fastcgi 模块有没有安装到 http 中:

# ls -l /etc/httpd/modules/mod_fastcgi.so

# mkdir /var/lib/fcgi
# mkdir /var/lib/fcgi/dynamic
# chmod 777 /var/lib/fcgi
# chmod 777 /var/lib/fcgi/dynamic

# tar zxvf FCGI-0.67.tar.gz
# cd FCGI-0.67
# perl Makefile.PL
# make
# make install

(八)安装 courier-authlib

# tar jxvf courier-authlib-0.60.2.tar.bz2
# cd courier-authlib-0.60.2

# /usr/sbin/groupadd -g 1000 vgroup
# /usr/sbin/useradd -g 1000 -u 1000 -M -s /bin/false vuser

# ./configure \
--prefix=/usr/local/courier-authlib \
--without-stdheaderdir \
--without-authuserdb \
--without-authpam \
--without-authldap \
--without-authpwd \
--without-authshadow \
--without-authvchkpw \
--without-authpgsql \
--without-authcustom \
--with-authmysql \
--with-mysql-libs=/usr/local/mysql/lib/mysql \
--with-mysql-includes=/usr/local/mysql/include/mysql \
--with-redhat \
--with-mailuser=vuser \
--with-mailgroup=vgroup

(因为改变了 courier-authlib 的安装位置,所以需要加选项 --without-stdheaderdir)

(编译 courier-authlib 必须要加入--with-mailuser,--with-mailgroup 这两项;否则在 postfix 收取邮件的时候就会出现错误,在 /var/log/maillog 日志文件中可以看到这个错误提示:

temporary failure. Command output: ERR: authdaemon: s_connect() failed: Permission denied maildrop: Temporary authentication failure. )

(如果是用 RPM 安装的话,就必须敲这条命令 chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
该目录权限不正确修改,maildrop及postfix等将无法正确获取用户的信息及密码认证。)


# make
# make install
# make install-migrate
# make install-configure

# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf

# ldconfig
# ldconfig -v

(备注:如果没有运行 ldconfig 命令,则在安装完 maildrop,运行 maildrop -v 时会出现错误:maildrop:error while loading shared libraries: libcourierauth.so.0)

# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
# chmod 755 /etc/rc.d/init.d/courier-authlib

加入自动启动服务队列:

# echo "/etc/rc.d/init.d/courier-authlib start" >> /etc/rc.local

# cd /usr/local/courier-authlib/etc/authlib

编辑 authdaemonrc 文件:

authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=10

编辑 authmysqlrc 文件:

MYSQL_SERVER            localhost
MYSQL_USERNAME          extmail
MYSQL_PASSWORD          extmail
MYSQL_SOCKET            /tmp/mysql.sock   (注意这里哦!)
MYSQL_PORT              3306
MYSQL_OPT               0
MYSQL_DATABASE          extmail
MYSQL_USER_TABLE        mailbox
MYSQL_CRYPT_PWFIELD     password
MYSQL_UID_FIELD         uidnumber
MYSQL_GID_FIELD         gidnumber
MYSQL_LOGIN_FIELD       username
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota
MYSQL_SELECT_CLAUSE     SELECT username,"",password,uidnumber,gidnumber,             \
                       CONCAT('/home/domains/',homedir),                            \
                       CONCAT('/home/domains/',maildir),                            \
                       quota,                                                       \
                       name,                                                        \
                       CONCAT("disableimap=",disableimap,",disablepop3=",           \
                               disablepop3,",disablewebmail=",disablewebmail,       \
                              ",disablesmtpd=",disablesmtpd,",disablesmtp=",        \
                               disablesmtp,",disablenetdisk=",disablenetdisk,       \
                              ",netdiskquota=",netdiskquota)                        \
                       FROM mailbox                                                 \
                       WHERE username = '$(local_part)@$(domain)'

# /etc/rc.d/init.d/courier-authlib start  (启动服务)
# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon

(九)安装 cyrus-sasl-2.1.22

# rpm -qa|grep cyrus-sasl  (把查找出来的包都删除了)
# rpm -e --nodeps cyrus-sasl-2.1.22-4 cyrus-sasl-plain-2.1.22-4 cyrus-sasl-devel-2.1.22-4 cyrus-sasl-lib-2.1.22-4
# rm -rf /usr/lib/sasl
# rm -rf /usr/lib/sasl2

# tar xzvf cyrus-sasl-2.1.22.tar.gz
# cd cyrus-sasl-2.1.22

# ./configure \
--enable-plain \
--enable-cram \
--enable-digest \
--enable-login \
--enable-sql \
--disable-anon \
--disable-ntlm \
--disable-gssapi \
--disable-krb4 \
--disable-otp \
--disable-srp \
--disable-srp-setpass \
--with-authdaemond=/usr/local/courier-authlib/var/spool/authdaemon/socket \
--with-mysql \
--with-mysql-includes=/usr/local/mysql/include/mysql \
--with-mysql-libs=/usr/local/mysql/lib/mysql

# make
# make install
# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
# ldconfig -v

# vi /usr/local/lib/sasl2/smtpd.conf

pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

(十)安装 DB 库文件

# rpm -ivh giflib-4.1.3-7.1.el5.1.i386.rpm

# rpm -ivh libgdiplus-1.2.5-1.el5.centos.i386.rpm

# rpm -ivh mono-core-1.2.4-2.el5.centos.i386.rpm

# rpm -ivh dbus-sharp-0.63-8.el5.centos.i386.rpm
# rpm -ivh dbus-sharp-devel-0.63-8.el5.centos.i386.rpm

# rpm -ivh dbh-1.0.24-5.el5.centos.i386.rpm
# rpm -ivh dbh-devel-1.0.24-5.el5.centos.i386.rpm

# rpm -ivh dbus-glib-devel-0.70-5.i386.rpm

(十一)安装 postfix

postfix 需要使用到 pcre 软件包,因此我们需要先安装下面这两个软件包:

# rpm -Uvh pcre-6.6-2.el5_1.7.i386.rpm
# rpm -Uvh pcre-devel-6.6-2.el5_1.7.i386.rpm

# /etc/init.d/sendmail stop
# chkconfig --level 0123456 sendmail off

# tar zxvf postfix-2.4.6.tar.gz
# cd postfix-2.4.6
# make tidy
# /usr/sbin/groupadd postdrop -g 101
# /usr/sbin/groupadd postfix -g 102   (如果原来系统中有该用户则不需要再建)
# /usr/sbin/useradd -d /var/spool/postfix -s /bin/true -u 100 -g postfix -G postdrop postfix

# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_CYRUS_SASL -DUSE_SASL_AUTH
-I/usr/local/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lm -lz -L/usr/local/lib -lsasl2'

# make
# make install
===================================
install_root: [/]
tempdir: [/mnt/softs/postfix-2.4.6] /tmp
config_directory: [/etc/postfix]
daemon_directory: [/usr/libexec/postfix]
command_directory: [/usr/sbin]
queue_directory: [/var/spool/postfix]
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid_group: [postdrop]
manpage_directory: [/usr/local/man]
===================================
# mv /etc/aliases /etc/aliases.old
# ln -s /etc/postfix/aliases /etc/aliases

生成别名二进制文件,这个步骤如果忽略,会造成 postfix 效率极低:

# echo 'root: admin@example.com'>>/etc/postfix/aliases
# /usr/bin/newaliases

# postconf -n > /etc/postfix/main2.cf
# mv /etc/postfix/main.cf /etc/postfix/main.cf.old
# mv /etc/postfix/main2.cf /etc/postfix/main.cf

# vi /etc/postfix/main.cf

# hostname
mynetworks = 127.0.0.1
myhostname = mail.extmail.org
mydomain = extmai.com
myorigin = $mydomain
mydestination = $mynetworks $myhostname

# banner
mail_name = Postfix - by extmail.org
smtpd_banner = $myhostname ESMTP $mail_name

# response immediately
smtpd_error_sleep_time = 3s
unknown_local_recipient_reject_code = 550

# extmail config here
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = maildrop:

# cp /var/www/extsuite/extman/docs/mysql_* /etc/postfix/

(需要将 ExtMail extman 包解压,见下文“CentOS 5.1 下用源码编译安装 ExtMail (第三部分)”;当然亦可以参照下面步骤创建)

编辑 mysql_virtual_alias_maps.cf

# vi /etc/postfix/mysql_virtual_alias_maps.cf

内容如下:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = alias
select_field = goto
where_field = address

编辑 mysql_virtual_domains_maps.cf

# vi /etc/postfix/mysql_virtual_domains_maps.cf

内容如下:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = domain
select_field = description
where_field = domain
#additional_conditions = and backupmx ='0' and active ='1'

编辑 mysql_virtual_mailbox_maps.cf

# vi /etc/postfix/mysql_virtual_mailbox_maps.cf

内容如下:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'

SMTP 认证需要透过 Cyrus-SASL,连接到 authdaemon 获取认证信息,编辑 /etc/postfix/main.cf,增加如下内容:

# vi /etc/postfix/main.cf

# smtpd related config
smtpd_recipient_restrictions =
   permit_mynetworks,
  permit_sasl_authenticated,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_invalid_hostname,

# SMTP AUTH config here
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous

编辑 postfix 的启动脚本:

# vi /etc/rc.d/init.d/postfix

内容如下:
===============================================================
#!/bin/sh
#
# postfix      Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
#              that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
#
# $Revision: 2.4 $
#

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -x /usr/sbin/postfix ] || exit 0
[ -d /etc/postfix ] || exit 0
[ -d /var/spool/postfix ] || exit 0

RETVAL=0

start() {
       # Start daemons.
       echo -n "Starting postfix: "
       /usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure
       RETVAL=$?
       [ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
       echo
       return $RETVAL
}

stop() {
       # Stop daemons.
       echo -n "Shutting down postfix: "
       /usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure
       RETVAL=$?
       [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
       echo
       return $RETVAL
}

reload() {
       echo -n "Reloading postfix: "
       /usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure
       RETVAL=$?
       echo
       return $RETVAL
}

restart() {
       stop
       start
}

abort() {
       /usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure
       return $?
}

flush() {
       /usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure
       return $?
}

check() {
       /usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure
       return $?
}

# See how we were called.
case "$1" in
 start)
       start
       ;;
 stop)
       stop
       ;;
 restart)
       restart
       ;;
 reload)
       reload
       ;;
 abort)
       abort
       ;;
 flush)
       flush
       ;;
 check)
       check
       ;;
 status)
       status master
       ;;
 condrestart)
       # don't use /var/lock/subsys/postfix, check for postfix running directly
       daemon_directory=$(postconf -h daemon_directory)
       $daemon_directory/master -t 2>/dev/null && : || restart
       ;;
 *)
       echo "Usage: postfix {start|stop|restart|reload|abort|flush|check|status|condrestart}"
       exit 1
esac

exit $?

===============================================================

# chmod 755 /etc/rc.d/init.d/postfix

启动 postfix 服务:

#/etc/rc.d/init.d/postfix start

(十二)安装 maildrop

# tar jxvf maildrop-2.0.4.tar.bz2
# cd maildrop-2.0.4
# ln -s /usr/local/courier-authlib/bin/courierauthconfig /usr/bin/courierauthconfig

# ./configure \
--enable-sendmail=/usr/sbin/sendmail \
--enable-trusted-users='root vuser' \
--enable-syslog=1 \
--enable-maildirquota \
--enable-maildrop-uid=1000 \
--enable-maildrop-gid=1000 \
--with-trashquota \
--with-dirsync

# make
# make install
# cp /usr/local/bin/maildrop /usr/bin
# chmod a+rx /usr/bin/maildrop

# maildrop -v (检查信息,如果有 courier-authlib 则表示安装成功)

maildrop 2.0.4 Copyright 1998-2005 Double Precision, Inc.
GDBM extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.

新建其配置文件 /etc/maildroprc 文件,首先指定 maildrop 的日志记录位置:

# vi /etc/maildroprc

logfile "/var/log/maildrop.log"

# touch /var/log/maildrop.log
# chown vuser.vgroup /var/log/maildrop.log
# chmod a+r /etc/maildroprc

(十三)安装 courier-imap

# tar jxvf courier-imap-4.1.3.tar.bz2
# cd courier-imap-4.1.3

# ./configure \
--prefix=/usr/local/courier-imap \
--with-redhat \
--enable-unicode \
--disable-root-check \
--with-trashquota \
--without-ipv6 COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'

# make
# make install
# cp /usr/local/courier-imap/etc/imapd.dist /usr/local/courier-imap/etc/imapd
# cp /usr/local/courier-imap/etc/imapd-ssl.dist /usr/local/courier-imap/etc/imapd-ssl
# cp /usr/local/courier-imap/etc/pop3d.dist /usr/local/courier-imap/etc/pop3d
# cp /usr/local/courier-imap/etc/pop3d-ssl.dist /usr/local/courier-imap/etc/pop3d-ssl

# vi /usr/local/courier-imap/etc/pop3d

 POP3DSTART=yes

注:如果你想为用户提供 IMAP 服务,可以在 /usr/local/courier-imap/etc/imapd 文件中设置 " IMAPDSTART=YES "。

# cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imapd
# chmod 755 /etc/rc.d/init.d/courier-imapd

加入自动启动服务队列:

# echo "/etc/rc.d/init.d/courier-imapd start" >> /etc/rc.local

启动服务:

# /etc/rc.d/init.d/courier-imapd start

==================================================================

| 引用(0)
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]