分类: LINUX
2011-12-16 13:50:17
安装模块:
MySQL+Nginx+php+postfix+CyrusSASL+courier-authlib+courier-imap+maildrop
Web客户端:gmail+gmailadm
所用源码包:
mysql-5.0.91.tar.gz
httpd-2.2.15.tar.gz
php-5.2.13.tar.gz
postfix-2.7.1.tar.gz
cyrus-sasl-2.1.22.tar.gz
courier-authlib-0.63.0.tar.bz2
courier-imap-4.8.0.20100628.tar.bz2
maildrop-2.5.0.20100628.tar.bz2
依赖包:
DBI-1.612.tar.gz
DBD-mysql-4.016.tar.gz
-1.1.tar.gz
-1.13.tar.gz
libmcrypt-2.5.8.tar.gz
mhash-0.9.9.9.tar.gz
mcrypt-2.6.8.tar.gz
安装程序:
1. 修改系统默认语言
把CentOS的默认语言改为en.UTF-8。如果安装时选择系统语言为us(美式英语),则系统的默认语言即为en.UTF-8。
# #LANG="zh_CN.UTF-8" [root@localhost ~]#source /etc/sysconfig/i18n |
一些Perl写的小程序遇到LANG="zh_CN.UTF-8"的时候无法继续执行下去,所以必须改。
2. 安装pcre和Nginx
PCRE是perl所用到的正则表达式,目的是让所装的软件支持正则表达式。默认情况下,Nginx只处理静态的网页请求,也就是html.如果是来自动态的网页请求,比如*.php,那么Nginx就要根据正则表达式查询路径,然后把*.PHP交给PHP去处理
#rpm -qa | grep pcre //查询系统中有没有安装PCRE,一般装系统是默认装有,所以我们要删掉系统自带的
# cp /lib/libpcre.so.0 / //在删除系统自带的PCRE之前,要先备份一下libpcre.so.0这个文件,因为RPM包的关联性太强,在删除后没libpcre.so.0这个文件时我们装PCRE是装不上的
# rpm -e --nodeps pcre-6.6-2.el5_1.7 //删除系统自带的PCRE
# tar zxvf pcre-8.12.tar.gz
# cd pcre-8.12
# cp /libpcre.so.0 /lib/ //把我们删除系统自带的PCRE之前备份的libpcre.so.0拷贝到/lib 目录下
#./configure //配置PCRE,因为PCRE是一个库,而不是像pache、php、postfix等这样的程序,所以我们安装时选择默认路径即可,这样会在后面安装其它东西时避免一些不必要的麻烦,执行完这部后会显示出下图,上面显示了我们对PCRE的配置
#make && make install
然后是安装Nginx
#tar zxvf nginx-1.0.3.tar.gz
#cd nginx-1.0.3
./configure \
--with-http_ssl_module \ (此模块需要已经安装了openssl 可以yum -y install openssl openssl-devel)
--with-http_flv_module \
--with-http_gzip_static_module \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
#make && make install
#/usr/local/nginx/sbin/nginx //启Nginx
#echo "/usr/local/nginx/sbin/nginx" >>/etc/rc.local
Nginx启动后有两个进程,master为主进程,worker为工作进程
3. 安装MySQL
mysql用户和mysql组
[root@localhost ~]# |
解压源码包
[root@localhost ~]#cd /usr/local/src [root@localhost src] [root@localhost src]#cd mysql-5.0.91 |
配置参数 需要 ncurses ncurses-devel软件包(若没有)
[root@localhost mysql-5.0.91] --prefix=/usr/local/mysql/ \ --enable-assembler \ --with-extra-charsets=complex \ --enable-thread-safe-client \ --with-big-tables \ --with-readline \ --with-ssl \ --with-embedded-server \ --enable-local-infile \ --with-plugins=partition,innobase,myisammrg \ --with-unix-socket-path=/var/lib/mysql/mysql.sock \
--with-low-memory \ --with-charset=utf8 \(这里要写成utf8,不能写成utf-8)
|
编译安装
[root@localhost mysql-5.0.91]#make [root@localhost mysql-5.0.91]#make install |
复制配置文件
[root@localhost mysql-5.0.91]#cp support-files/my-medium.cnf /etc/my.cnf |
修改目录权限
[root@localhost mysql-5.0.91]# chmod +w /usr/local/mysql |
创建Mysql数据数据存储目录
[root@localhost mysql-5.0.91]#mkdir -p /home//data [root@localhost mysql-5.0.91]#mkdir -p /home/db_mysql/binlog/ [root@localhost mysql-5.0.91]#chown -R mysql.mysql /home/db_mysql/ |
初始化数据库
[root@localhost mysql-5.5.3-m3]#cd /usr/local/mysql |
创建my.cnf配置文件
[root@localhost mysql ] |
修改以下内容:
在[client]下添加 character-set = utf8 在[mysqld]下添加basedir = /usr/local/mysql该参数指定了安装 MySQL 的安装路径,填写全路径可以解决相对路径所造成的问题 datadir = /home/db_mysql/data该参数指定了 MySQL 的数据库文件放在什么路径下默认在/var/lib/mysql/data下log-error = /home/db_mysql/该参数指定MySQL的日志文件路径 pid-file = /home/db_mysql/mysql.pidmysql.pid文件中存放的是mysql启动后的进程id,是启动后创建的。修改把下面参数注释去掉并改动innodb_data_home_dir = /home/db_mysql/datainnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /home/db_mysql innodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2M innodb_log_file_size = 5Minnodb_log_buffer_size = 8Minnodb_flush_log_at_trx_commit = 1innodb_lock_wait_timeout = 50
|
加入自动启动服务队列:
[root@localhost mysql]# |
配置库文件搜索路径:
[root@localhost mysql]# echo "/usr/local/mysql/lib/mysql" >> # echo "/usr/local/mysql/bin/mysql" >> /etc/ld.so.conf [root@localhost mysql]# ldconfig -v |
[root@localhost mysql]# export PATH=$PATH:/usr/local/mysql/bin |
这个写法,只能临时使用路径,电脑一旦重启就没有了。
测试启动数据库服务器
到此,MySQL已经安装完毕了,是不是成功了呢?测试一下就知道了。
[root@localhost mysql]# service mysqld start Starting MySQL [ OK ] Ok,启动了,其实也可以运行以下命令后直接启动mysql: # ln -s /usr/local/mysql/bin/mysql /bin/mysql # ln -s /usr/local/mysql/bin/mysql /sbin/mysql #
[root@localhost mysql]# mysql -u root -p |
(注意:以上方式安装好 MySQL 后,其 mysql.sock 文件位于 /var/lib/mysql 目录下。)
root用户的默认密码是空,直接输入回车就可以了。
看看是不是出现下面的信息了:
Welcome to the MySQL monitor. Commands end with ; or \g. Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> |
那么恭喜你,MySQL数据库安装成功,并且已经启动了!
初始化mysql的管理员密码
[root@localhost mysql]#bin/mysqladmin -u root password '123456' |
4. 安装perl-DBI、DBD::mysql、Unix::syslogd
[root@localhost ~]#cd /usr/local/src [root@localhost src]#tar -zxvf -1.1.tar.gz [root@localhost src]#cd Unix-Syslog-1.1 [root@localhost Unix-Syslog-1.1]# [root@localhost Unix-Syslog-1.1]#make [root@localhost Unix-Syslog-1.1]#make install [root@localhost Unix-Syslog-1.1]#cd .. [root@localhost src]#tar -zxvf -1.612.tar.gz [root@localhost src]#cd DBI-1.612 [root@localhost DBI-1.612]# [root@localhost DBI-1.612]#make [root@localhost DBI-1.612]#make install [root@localhost DBI-1.612]#cd .. [root@localhost src]#tar -zxvf-4.016.tar.gz [root@localhost src]#cd DBD-mysql-4.016 [root@localhost DBD-mysql-4.016]# (此步骤中如果出现类同 Can't exec "mysql_config": No such file or directory at Makefile.PL line 76. 的错误是因为您的 mysql 的 bin 目录没有输出至 $PATH 环境变量中) 解决方法:#
[root@localhost DBD-mysql-4.016]#make (如果有报错就yum install mysql-devel-*) [root@localhost DBD-mysql-4.016]#make install |
5. 安装cyrus-sasl
若系统已安装cyrus-sasl,则先卸载,或以以下方式关闭它
[root@localhost ~]#mv /usr/lib/libsasl2.a /usr/lib/libsasl2.a.OFF [root@localhost ~]#mv /usr/lib/libsasl2.la /usr/lib/libsasl2.la.OFF [root@localhost ~]#mv /usr/lib/libsasl2.so.2.0.22 /usr/lib/libsasl2.so.2.0.22.OFF [root@localhost ~]#mv /usr/lib/sasl2 /usr/lib/sasl2.OFF [root@localhost ~]#rm /usr/lib/libsasl2.so [root@localhost ~]#rm /usr/lib/libsasl2.so.2 [root@localhost ~]#rm -rf /usr/sbin/pluginviewer [root@localhost ~]#rm -rf /usr/sbin/sasldblistusers2 [root@localhost ~]#rm -rf /usr/sbin/saslpasswd2 [root@localhost ~]#rm -rf /usr/sbin/testsaslauthd |
解压源码包
[root@localhost ~]# cd /usr/local/src [root@localhost src]# tar zxvf cyrus-sasl-2.1.22.tar.gz [root@localhost src]# cd cyrus-sasl-2.1.22 |
配置参数
[root@localhost -sasl-2.1.22]# --with-saslauthd=/var/run/saslauthd \ --with-openssl \ (如果没有这个选项,编译的时候会报错) |
编译安装
(#cp /usr/lib64/mysql/* /usr/lib/mysql/ 64位系统) [root@localhost cyrus-sasl-2.1.22]#make [root@localhost cyrus-sasl-2.1.22]#make install |
做一个软连接
[root@localhost cyrus-sasl-2.1.22]# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2 [root@localhost cyrus-sasl-2.1.22]# echo "/usr/local/lib" >> /etc/ld.so.conf |
编辑/usr/local/lib/sasl2/smtpd.conf文件
[root@localhost cyrus-sasl-2.1.22]#vi /usr/local/lib/sasl2/smtpd.conf |
6. 安装postfix
postfix 需要使用到 pcre 软件包,因此我们需要先安装下面这两个软件包
[root@localhost ~]# yum install pcre [root@localhost ~]# yum install pcre-devel |
如果系统上原来有sendmail,则先将其停止并将其文件改名
[root@localhost src]# [root@localhost src]#chkconfig --level 0123456 sendmail off [root@localhost src]# mv /usr/bin/newaliases /usr/bin/newaliases.orig |
建立postfix组和postfix用户
[root@localhost src ]# groupadd -g 12345 postfix |
解压
[root@localhost src]# tar -zxvf postfix-2.7.1.tar.gz [root@localhost src]# cd postfix-2.7.1 |
参数配置
(Building Postfix with SASL authentication and mysql support) 需要db*-devel软件包
[root@localhost postfix 2.7.1]#make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -DUSE_TLS -I/usr/local/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2 -lssl -lcrypto' |
编译安装
[root@localhost postfix 2.7.1]#make [root@localhost postfix 2.7.1]#make install (一直默认安装就可以了) |
如果/etc/aliases文件不存在,请用如下命令创建:
[root@localhost postfix 2.7.1]#mv /etc/aliases /etc/back_aliases [root@localhost postfix 2.7.1]#ln -s /etc/postfix/aliases /etc/aliases [root@localhost postfix 2.7.1]#echo postfix: root >>/etc/aliases [root@localhost postfix 2.7.1]# 如果出现:postalias: warning: /etc/aliases.db: duplicate entry: "postfix" 那就/etc/aliases文件里多了一个postfix别名记录,把其中一个注释就可。 |
生成别名二进制文件,这个步骤如果忽略,会造成 postfix 效率极低:
[root@localhost postfix 2.7.1]#chown root.root /var/spool/postfix [root@localhost postfix 2.7.1]#chmod 755 /var/spool/postfix |
配置postfix
建立kmail组和kmail用户
[root@localhost postfix 2.7.1]# groupadd kmail -g 1001 |
建立/home/mailbox并设置权限
[root@localhost postfix 2.6.5]# mkdir /home/mailbox |
编辑postfix的main配置文件
[root@localhost postfix 2.6.5]# vi /etc/postfix/main.cf
# sasl config here smtpd_sasl_application_name = smtpd smtpd_banner=$myhostname "Welcome to kenfor MailSystem"
smtpd_sasl_path = smtpd smtpd_sasl_auth_enable = yes #smtpd_sasl2_auth_enable = yes #smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination reject smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes
alias_maps = hash:/etc/aliases
message_size_limit = 409715200 注意:此处代表的是比特(bit),设置太大可能会出现报错(warning: not enough free space in mail queue: 1023983616 bytes < 1.5*message size limit)原因是邮件队列空间不足一般在/var/spool/postfix 也就是/var空间不足<1.5倍message size。解决方法是时设置小点符合/var >1.5倍message size 或者把更改邮件队列目录。
|
建立/etc/postfix/mysql文件夹和MySQL查询配置文件
以下的6个查询文件要格外注意,特别是user、password设置要小心别多出空格,以免出现类似如下报错warning: connect to mysql server localhost: Access denied for user (using password: YES)
[root@localhost postfix 2.6.5]#mkdir /etc/postfix/mysql |
建立mysql_virtual_sender_maps.cf查询配置文件
[root@localhost postfix 2.6.5]#user = kmail password = kmail hosts = localhost dbname = kmail table = mailbox select_field = username where_field = username additional_conditions = and active = '1' |
建立mysql_virtual_alias_maps.cf 查询配置文件
[root@localhost postfix 2.6.5]# vi /etc/postfix/mysql/mysql_virtual_alias_maps.cf additional_conditions = AND active = '1' |
建立mysql_virtual_domains_maps.cf 查询配置文件
[root@localhost postfix 2.6.5]#.cf |
建立mysql_virtual_ mailbox_maps.cf 查询配置文件
[root@localhost postfix 2.6.5]# vi /etc/postfix/mysql/mysql_virtual_mailbox_maps.cf |
建立mysql_virtual_mailbox_limit_maps.cf 查询配置文件
[root@localhost postfix 2.6.5]# vi /etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf |
建立mysql_virtual_transport.cf查询配置文件
[root@localhost postfix 2.6.5]# user = kmail |
实际上,这些文件都可以从extman源码包中解压得到
[root@localhost postfix 2.6.5]# |
这些文件的user和password都是extmail。不过这个不要紧,因为当把web服务添加进服务器之后,将不再通过postfix而是通过extmail去操作
[root@localhost postfix2.5.6]# log_level: 3 mech_list: PLAIN LOGIN authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket |
启动postfix
[root@localhost postfix_install_src]# |
测试smtp
[root@localhost postfix_install_src]# telnet localhost 25 |
sasl如果成功加载到postfix中,应有如下提示:
250-AUTH LOGIN PLAIN |
Ctrl +]
Ctrl +c 推出测试
7. 安装
新版本的imap不再包含authentication library,必须先安装 Courier authentication library
解压源码包
[root@localhost src]# tar -jxvf courier-authlib-0.63.0.tar.bz2 [root@localhost src]# cd courier-authlib-0.63.0 |
配置参数
[root@localhost courier-authlib-0.63.0]#kmail --with-mailgroup=kmail --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql/ |
这样的配置,系统会从/etc/authlib读取authdaemonrc和authmysql两个文件,而不是从一般的/etc路径读取这两个文件。可能跟--sysconfdir=/etc/这个选项有关。
编译安装
[root@localhost courier-authlib-0.63.0]#make [root@localhsot courier-authlib-0.63.0]# make install |
确保authlib支持mysql认证模块
[root@localhost src]# 以下内容: authmodulelist="authuserdb authpam authldap authmysql authcustom authpipe" authmodulelistorig="authuserdb authpam authldap authmysql authcustom authpipe" 改为: authmodulelist="authmysql" authmodulelistorig="authmysql" |
DEBUG_LOGIN=0 改为: DEBUG_LOGIN=2 |
[root@localhost courier-authlib-0.63.0] (逐个搜索更改) |
注意:确认在这个文件中不能用空格键,只能用tab键。
确认只使用单引号,比如:'/home/mailbox/','UID','GID'(本文为'1001')
localhost不能用单引号 确认你的文件中有localhost 编译时如果支持Ipv6可能导致错误 MYSQL_GID_FIELD 和MYSQL_UID_FIELD是maildrop的UID和GID,而不是MySQL的。 如果不想使用md5密码,把MYSQL_CRYPT_PWFIELD password改成MYSQL_CLEAR_PWFIELD password
加入启动服务
[root@localhost courier-authlib-0.63.0]# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib [root@localhost courier-authlib-0.63.0]# chmod 755 /etc/rc.d/init.d/courier-authlib [root@localhost courier-authlib-0.63.0]# chkconfig --level 0123456 courier-authlib on |
手动启动服务:
[root@localhost courier-authlib-0.63.0]# |
测试courier-authlib
检查进程:
[root@localhost courier-authlib-0.63.0]# |-authdaemond.mys---5*[authdaemond.mys] |
chmod o+x -R /usr/local/courier-authlib/var/spool/authdaemon/socket (foxmail设置)
8. 安装courier-imap
解压源码包:
[root@localhost src]# tar -jxvf courier-imap-4.8.0.20100628.tar.bz2 [root@localhost src]# cd courier-imap-4.8.0.20100628 |
配置参数:
[root@localhost courier-imap-4.8.0]# CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64" [root@localhost courier-imap-4.8.0] #export COURIERAUTHCONFIG=/usr/local/courier-authlib/bin/courierauthconfig
[root@localhost courier-imap-4.8.0] # ./configure --prefix=/usr/local/courier-imap --with-redhat --enable-unicode --disable-root-check --with-trashquota --without-ipv6 COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'
|
编译安装
courier-imap-4.8.0/imap下的Makefile -I.. -I./.. -Wall -g -O2 这样就可以make通过了 ( 注意:上面Makefile的修改我试行不成功,提示error,google后得出下面答案。 在预编译的时候加 CPPFLAGS='-I/usr/local/courier-authlib/include' 那完整的编译参数是
把courier-authlib下面的include复制一份到/usr/include下面 [root@localhost courier-imap-4.8.0]# make [root@localhost courier-imap-4.8.0]# (先install-strip ,如果失败,再make install) [root@localhost courier-imap-4.8.0]# |
开启POP3服务
[root@localhost courier-imap-4.8.0]# POP3DSTART=YES #将POP3DSTART=NO改为POP3DSTART=YES [root@localhost courier-imap-4.8.0]# vi /usr/local/courier-imap/etc/imapd IMAPDSTART=YES #将IMAPDSTART=NO改为IMAPDSTART=YES |
让POP3/IMAP自动启动:
[root@localhost courier-imap-4.8.0]# cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imap [root@localhost courier-imap-4.8.0]# chmod 755 /etc/rc.d/init.d/courier-imap [root@localhost courier-imap-4.8.0]# chkconfig --level 0123456 courier-imap on |
手动启动服务:
[root@localhost courier-imap-4.8.0]# /usr/local/courier-imap/libexec/pop3d.rc start [root@localhost courier-imap-4.8.0]# /usr/local/courier-imap/libexec/imapd.rc start [root@localhost courier-imap-4.8.0]# chkconfig --level 0123456 courier-imap on |
测试courier-imap
检查进程:
[root@localhost courier-imap-4.8.0]# pstree |grep courier |
检查端口,应该有如下端口打开:
[root@localhost courier-imap-4.8.0]# |
9. 安装-maildrop
maildrop是一个使用C++编写的用来代替本地MDA的带有过滤功能邮件投递代理,是courier邮件系统组件之一。它从标准输入接受信息并投递到用户邮箱;maildrop既可以将邮件投递到mailboxes格式邮箱,亦可以将其投递到maildirs格式邮箱。同时,maildrop可以从文件中读取入站邮件过滤指示,并由此决定是将邮件送入用户邮箱或者转发到其它地址等。和procmail不同的是,maildrop使用结构化的过滤语言,因此,邮件系统管理员可以开发自己的过滤规则并应用其中。
我们在此将使用maildrop来代替postfix自带的MDA,并以此为基础扩展后文的邮件杀毒和反垃圾邮件功能的调用;在此可能会修改前文中的许多设置,请确保您的设置也做了相应的修改。
先检查是否已经安装pcre和pcre-devel两个包(rpm -qa |grep pcre查看与之有关的)。若没有请先安装
建立extmail用户和用户组
[root@localhost src]# groupadd kmail -g 1001 [root@localhost src]# useradd kmail -u 1001 -g 1001 -s/bin/false -d/dev/null |
解压源码包:
[root@localhost src]# tar -jxvf maildrop-2.5.0.20100628.tar.bz2 [root@localhost src]# cd maildrop-2.5.0.20100628 |
配置参数:(以下步骤要仔细)yum install gdbm gdbm-devel (若无)否则maildrop –v
没有GDBM extensions enabled.
[root@localhost maildrop-2.5.0]# [root@localhost maildrop-2.5.0]# export COURIERAUTHCONFIG=/usr/local/courier-authlib/bin/courierauthconfig [root@localhost maildrop-2.5.0]# ln -s /usr/local/courier-authlib/include /usr/include [root@localhost maildrop-2.5.0]# =1 |
注意,最后一个选项需要写成--enable-authlib=1,“=1”不能省略,否则安装后会不能和authlib结合。
编译安装:
把 courier-authlib下面的include复制一份到/usr/include下面 [root@localhost maildrop-2.5.0]# make [root@localhost maildrop-2.5.0]# make install [root@localhost maildrop-2.5.0]# cp /usr/local/maildrop/bin/maildrop /usr/bin [root@localhost maildrop-2.5.0]# |
验证安装成功:
运行maildrop -v应该有如下提示信息
[root@localhost maildrop-2.5.0]# maildrop-2.5.0 Copyright 1998-2005 Double Precision, Inc. |
注意,确保信息中有“Courier Authentication Library extension enabled.”这一行。
在/etc下建立maildroprc文件
#
logfile "/home/maildrop/maildrop.log" # Include any rules set up for the user
##########避免邮件容量满反复退信############### if ((/^Subject:.*Undelivered\ Mail\ Returned\ to\ Sender/)) { if ((/Undelivered\ Mail\ Returned\ to\ Sender/:b)) { EXITCODE=0 exit } }
##############标题过滤##################### DECODER="/var/www/extsuite/gmail/tools/decode" if ((/^(From|Sender|Return-Path):.*MAILER\-DAEMON/)) { BADSENDER=1 }
##############邮件过滤规则目录(.mailfilter)############################### `test -r $HOME/$DEFAULT/.mailfilter` if ( $RETURNCODE == 0 ) {
log "(==) Including $HOME/$DEFAULT/.mailfilter" include "$HOME/$DEFAULT/.mailfilter" } |
配置postfix:
修改master.cf:
[root@localhost src]# vi /etc/postfix/master.cf
启用如下两行: maildrop unix - n n - - pipe flags=DRhu user=kmail argv=/usr/bin/maildrop -d ${recipient} |
其中,参数行flags必须以空格开头,否则会出错。
另外,参数行中user默认为vmail,必须改为authlib的用户(我的是extmail),否则会报错“signal 0x06”。因为authlib编译时没有指定用户和用户组,或者maildrop编译时指定的用户和用户组错误,也会出现这个报错,所以该错误有点小隐蔽。我就在这个问题上花了好多时间。
修改main.cf:
[root@localhost src]# vi /etc/postfix/main.cf
virtual_transport = maildrop: virtual_uid_maps = static:1001 virtual_gid_maps = static:1001 |
修改authmysqlrc:
[root@localhost src]# vi /etc/authlib/authmysqlrc
MYSQL_UID_FIELD ‘1001’ MYSQL_GID_FIELD ‘1001’ |
注意:没有此处的修改,maildrop可能会报告 “signal 0x06”的错误报告。
10. 安装gmail:
解压源码包:
[root@localhost src]# tar -zxvfgmail.tar.gz |
安装:
[root@localhost src]# mv gmail-1.2 /gmail [root@localhost src]# cp /var/www/extsuite/gmail/webmail.cf.default /var/www/extsuite/gmail/webmail.cf |
官网下载的extmail工程,过滤目录通过优化管理。修改extmail/libs/Ext/MailFilter.pm 28行:
file => $opt{file} ? $opt{file} : $ENV{HOME}.'/.mailfilter', 改为
file => $opt{file} ? $opt{file} : $ENV{HOME}.'/Maildir/.mailfilter',
修改主配置文件webmail.cf:
[root@localhost src]# vi /var/www/extsuite/gmail/webmail.cf
= /home/mailbox
SYS_MYSQL_USER = kmail SYS_MYSQL_PASS = kmail SYS_MYSQL_DB = kmail SYS_MYSQL_HOST = localhost SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock SYS_MYSQL_TABLE = mailbox SYS_MYSQL_ATTR_USERNAME = username SYS_MYSQL_ATTR_DOMAIN = domain SYS_MYSQL_ATTR_PASSWD = password
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket |
修改
SU_UID=kmail
SU_GID=kmail
配置Nginx支持fcgi
#vi /usr/local/nginx/conf/nginx.conf
添加:
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
保存退出。
然后在/usr/local/nginx/conf/目录下建立fcgi.conf文件:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
保存退出
这个文件在nginx.conf里被调用。
修改nginx.conf :
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php index.cgi;
root /var/www/extsuite/gmail/html/;
client_max_body_size 775m;
location /gmail/cgi/ {
fastcgi_pass 127.0.0.1:7777;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /var/www/extsuite/gmail/cgi/$fastcgi_script_name;
include fcgi.conf;
}
location /gmail/ {
#fastcgi_index index.html;
alias /var/www/extsuite/gmail/html/;
}
location /gmailadm/cgi/ {
fastcgi_pass 127.0.0.1:7777;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /var/www/extsuite/gmailadm/cgi/$fastcgi_script_name;
include fcgi.conf;
}
location /gmailadm/ {
#fastcgi_index index.html;
alias /var/www/extsuite/gmailadm/html/;
}
location ^~ /status {
#stub_status on;
access_log off;
#allow 192.168.0.0/24;
#deny all;
#allow 61.143.61.139;
}
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:7777;
fastcgi_index index.cgi;
include fcgi.conf;
}
#location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
#{
# expires 30d;
#}
#location ~ .*\.(js|css)?$
#{
# expires 1h;
#}
log_format gmail '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /var/log/nginx/gmail.log gmail;
}
跟着是运行 /PATH/gmail/ tools/pkg_stats.sh 脚本检查gmail所需的perl依赖包
如下:
it 与warning可以不用理会,但要参看如下的。
11. 安装gmailadm:
解压源码包:
[root@localhost src]# tar -zxvf gmailadm.tar.gz |
安装:
[root@localhost src]# mv extman-0.2.5 /var/www/extsuite/ |
修改配置文件webman.cf:
[root@localhost src]# vi /var/www/extsuite/ gmailadm /webman.cf
SYS_MAILDIR_BASE = /home/mailbox
SYS_MYSQL_USER = kmail SYS_MYSQL_PASS = kmail SYS_MYSQL_DB = kmail SYS_MYSQL_HOST = localhost SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock SYS_MYSQL_TABLE = manager SYS_MYSQL_ATTR_USERNAME = username SYS_MYSQL_ATTR_PASSWD = password |
使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库
[root@localhost src]# cd /var/www/extsuite/ gmailadm /docs/ [root@localhost docs]#extmail.sql [root@localhost docs]# mysql -u root -p |
导入extmail.sql数据库的时候若有如下报错:
ERROR 1064 (42000) at line 50: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM COMMENT='Ext/Webman - Admin Accounts'' at line 15
则
原因:编写数据库的版本比当前安装的版本不相同。
解决:
1、用文本编辑器打开extmail.sql;
2、查找/替换,将数据库文件内的所有TYPE=MyISAM修改为ENGINE=MyISAM,保存退出;
3、重新导入extmail.sql即可。
为gmail用户赋予权限grant all privileges on kmail.* to 'kmail'@'localhost' identified by 'kmail' with grant option;
创建extman运行时所需的临时目录,并修改其相应的权限::
[root@localhost src]# mkdir -pv /tmp/ gmailadm |
将用户邮件所在的目录/home/mailbox和gmailadm的临时目录(这个目录具体见webman.cf里指定的这里统一为gmailadm)/tmp/ gmailadm的属主和属组指定为kmail
[root@localhost src]#kmail.kmail /home/mailbox [root@localhost src]#chown -R kmail.kmail /tmp/ gmailadm [root@localhost src]#chown -R kmail.kmail /var/www/extsuite/gmail/cgi/ [root@localhost src]# |
:
http://IP/gmail/ http://IP/gmailadm/
选择管理即可登入gmail进行后台管理了。默认管理帐号为:root@extmail.org 密码为:extmail*123* (这里的extmail的最初密码,具体用户名与密码视gmail管理员的修改)
遇见问题与解决 :
(1)如果Extman 添加用户出现:(非常重要)
DBD::mysql::db do failed: INSERT command denied to user 'extmail'@'localhost' for table 'domain' at /var/www/extsuite/extman/libs/Ext/Mgr/MySQL.pm line 359.
在MySQL中
grant all privileges on ‘extmail’.* to 'extmail'@'localhost' identified by 'extmail' with grant option;
(2)报错:Apr 9 09:26:05 t4game postfix/smtpd[27421]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled
这个问题在main.cf中加了一条 alias_maps = hash:/etc/aliases就没有错误了。
(3)postfix: error while loading shared libraries: libmysqlclient.so.15
/usr/local/mysql/lib/mysql/libmysqlclient.so.15
把libmysqlclient.so.15拷一个放/usr/lib 或做个软连接
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
(4)如果出现extmail收件箱见不到邮件
在extman 里把所有(有关)用户删除 再创建
(5)目录(mailbox)都是0700权限,文件都是0600的,否则maildrop (mailbox)
就会报这个“Invalid home directory permissions - world writable. ”的问题。
(6)(用工具收发foxmail)
authdaemon/socket 目录authdaemon权限为(711),socket (777)
(7)Unable to write to temporary file - possibly out of disk space 可能是/var 空间不足或/tmp(临时文件过多)空间不足
(8)lost connection after DATA (XXXXXX bytes) from localhost.localdomain[127.0.0.1]
可能是连线时间短失去联系 在main.cf 加上
smtpd_delay_reject = yes
smtpd_helo_required = yes
max_idle = 900s
smtpd_policy_service_max_idle = 3600s
smtpd_policy_service_max_ttl = 3600s
smtpd_policy_service_timeout = 900s
(9) usr/bin/maildrop: Unable to create log file 请确保 没有错误 /home/maidrop 权限正确
同类型的问题 Unable to Open mailbox
(10)DBI connect('database=gmail;host=127.0.0.1;mysql_socket=/var/lib/mysql/mysql.sock','kmail',...) failed: Access denied for user 'kmail'@'127.0.0.1' (using password: YES) at /var/www/extsuite/gmail/libs/Ext/Auth/MySQL.pm line 45
在webmail.cf加上这行 类似的多为与数据库有关,例如extmail数据库用户没有赋予相关权限
(11) Can't call method "prepare" on an undefined value at /var/www/extsuite/gmailadm/libs/Ext/Mgr/MySQL.pm line 60.
/tmp/kmailadm 权限??
(12) authdaemond: file not found 或者 authdaemond: libauthmysql.so: cannot open shared object file: No such file or directory 则原有的mysql_config和自己编译的有冲突, 如下操作
rm /usr/bin/mysql_config
ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config
重新编译, ./configure ..... , make, make install, make install-configure
12. uthdaemond: failed to connect to mysql server (server=mysql.example.com, userid=admin): Can't connect to MySQL server on 'mysql.example.com' (111)
检查/etc/authlib/ authmysqlrc 校正后要/etc/init.d/courier-authlib restart
-------------------下面是一些操作备忘-----------------------------------
#postsuper -d ALL 删除所有的queue
# postsuper –d (ID) 删除对应的queue
#显示邮件队列 postqueue –p 或 mailq
用postfix check 检查错误
(extman 登录后no such directory 问题)
show global status like 'Max_used_connections';
show variables like 'max_connections';
Can't locate object method "new" via package "Ext::App::Folders" ??
loop to myself 的原因是 dns MX 記錄說是這台收,但這台的 postfix 的設定並沒有要收這 domain 的信,所以 postfix 想轉出去,可是一查 dns server, 明明 dns server 說 mail server 就是這台啊? postfix 很頭大,不知該如何,所以告訴你這個訊息。