Chinaunix首页 | 论坛 | 博客
  • 博客访问: 259735
  • 博文数量: 48
  • 博客积分: 930
  • 博客等级: 准尉
  • 技术积分: 654
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-28 12:31
文章分类

全部博文(48)

文章存档

2013年(10)

2012年(20)

2011年(18)

我的朋友

分类: 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.              安装pcreNginx

PCREperl所用到的正则表达式,目的是让所装的软件支持正则表达式。默认情况下,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是一个库,而不是像pachephppostfix等这样的程序,所以我们安装时选择默认路径即可,这样会在后面安装其它东西时避免一些不必要的麻烦,执行完这部后会显示出下图,上面显示了我们对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 ~]#

解压源码包

[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
[root@localhost
mysql-5.0.91]#

创建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]#mkdir -p /home/db_mysql/relaylog/

[root@localhost mysql-5.0.91]#chown -R mysql.mysql /home/db_mysql/

初始化数据库

[root@localhost mysql-5.5.3-m3]#cd /usr/local/mysql
[root@localhost 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/datalog-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]#[root@localhost mysql]#service mysqld start

配置库文件搜索路径:

[root@localhost mysql]# echo "/usr/local/mysql/lib/mysql" >>

# echo "/usr/local/mysql/bin/mysql" >> /etc/ld.so.conf

[root@localhost mysql]# ldconfig   
这一步骤,千万不要忘记了

[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
[root@localhost mysql]#Enter password:

(注意:以上方式安装好 MySQL 后,其 mysql.sock 文件位于 /var/lib/mysql 目录下。)
root
用户的默认密码是空,直接输入回车就可以了。
看看是不是出现下面的信息了:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.41-log Source distribution

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-DBIDBD::mysqlUnix::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 \
--with-authdaemond=/socket \
--with-mysql \
--with-mysql-includes=/usr/local/mysql/include/mysql \
--with-mysql-libs=/usr/local/mysql/lib/mysql \

    (如果没有这个选项,编译的时候会报错)

编译安装

(#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
[root@localhost cyrus-sasl-2.1.22]# ldconfig
[root@localhost cyrus-sasl-2.1.22]#ldconfig  -v

编辑/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
[root@localhost src]# mv /usr/bin/mailq /usr/bin/mailq.org
[root@localhost src]# mv /usr/sbin/sendmail /usr/sbin/sendmail.org

建立postfix组和postfix用户

[root@localhost src ]# groupadd -g 12345 postfix
[root@localhost src]#
 -u 12345 -g 12345 -c postfix -d/dev/null -s/bin/false postfix
[root@localhost src]# groupadd -g 54321 postdrop

解压

[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 
[root@localhost
postfix 2.7.1]#
useradd kmail -u 1001 -g 1001 -s/bin/false -d/dev/null

建立/home/mailbox并设置权限

[root@localhost postfix 2.6.5]# mkdir /home/mailbox 
[root@localhost postfix 2.6.5]# chown -R 
kmail.kmail
 /home/mailbox
[root@localhost postfix 2.6.5]#

编辑postfixmain配置文件

[root@localhost postfix 2.6.5]# vi  /etc/postfix/main.cf
# hostname
mynetworks = 127.0.0.1 192.168.1.0/24(空格再加入本地IP
myhostname = mail.
kmail.org
mydomain =
kmail
.org
myorigin = $mydomain
mydestination = $mynetworks $myhostname

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

# response immediately
smtpd_error_sleep_time = 3s
unknown_local_recipient_reject_code = 550

#
kmail
config here
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf

virtual_mailbox_domains = mysql:/etc/postfix/
mysql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/
mysql/
mysql_virtual_mailbox_maps.cf
virtual_transport =
maildrop:      (
不要少了“:”)

 

# 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.5message size。解决方法是时设置小点符合/var >1.5message size 或者把更改邮件队列目录。

 

 

 

建立/etc/postfix/mysql文件夹和MySQL查询配置文件

以下的6个查询文件要格外注意,特别是userpassword设置要小心别多出空格,以免出现类似如下报错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
user = 
kmail

password = 
kmail
hosts = localhost
dbname =
 kmail
table = alias
select_field = goto
where_field = address

additional_conditions = AND active = '1'

建立mysql_virtual_domains_maps.cf 查询配置文件

[root@localhost postfix 2.6.5]#.cf
user = 
kmail
password = 
kmail
hosts = localhost
dbname = 
kmail
table = domain
select_field = description
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'

建立mysql_virtual_ mailbox_maps.cf 查询配置文件

[root@localhost postfix 2.6.5]# vi /etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
user = 
kmail

password = 
kmail
hosts = localhost
dbname =
 kmail
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'

建立mysql_virtual_mailbox_limit_maps.cf  查询配置文件

[root@localhost postfix 2.6.5]# vi /etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
user = 
kmail

password = 
kmail
hosts = localhost
dbname =
 kmail
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = '1'

建立mysql_virtual_transport.cf查询配置文件

[root@localhost postfix 2.6.5]# user         = kmail
password     =
kmail
dbname       =
kmail
table        = transport
select_field = destination
where_field  = domain
hosts        = 127.0.0.1

       实际上,这些文件都可以从extman源码包中解压得到

[root@localhost postfix 2.6.5]#

       这些文件的userpassword都是extmail。不过这个不要紧,因为当把web服务添加进服务器之后,将不再通过postfix而是通过extmail去操作

[root@localhost postfix2.5.6]#
pwcheck_method: authdaemond

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
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 www.test.com ESMTP "Version not Available"
(输入)
250-www.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN

250 8BITMIME

       sasl如果成功加载到postfix中,应有如下提示:

250-AUTH LOGIN PLAIN
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读取authdaemonrcauthmysql两个文件,而不是从一般的/etc路径读取这两个文件。可能跟--sysconfdir=/etc/这个选项有关。

       编译安装

[root@localhost courier-authlib-0.63.0]#make

[root@localhsot courier-authlib-0.63.0]# make install
[root@localhsot courier-authlib-0.63.0]#make install-migrate
[root@localhsot courier-authlib-0.63.0]#

       确保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]   (逐个搜索更改)
MYSQL_SERVER 
localhost
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_DATABASE
 kmail
MYSQL_USERNAME kmail

MYSQL_PASSWORD
 kmail
MYSQL_USER_TABLE mailbox
MYSQL_LOGIN_FIELD username
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD '1001'
MYSQL_GID_FIELD '1001'
MYSQL_HOME_FIELD '/home/mailbox/'
MYSQL_MAILDIR_FIELD maildir
MYSQL_NAME_FIELD name
MYSQL_QUOTA_FIELD quota
 active='1'
DEFAULT_DOMAIN 
kmail.org

注意:确认在这个文件中不能用空格键,只能用tab键。
确认只使用单引号,比如:'/home/mailbox/','UID','GID'(本文为'1001'
localhost
不能用单引号 确认你的文件中有localhost 编译时如果支持Ipv6可能导致错误 MYSQL_GID_FIELD MYSQL_UID_FIELDmaildropUIDGID,而不是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
修改为
CFLAGS =

这样就可以make通过了

注意:上面Makefile的修改我试行不成功,提示errorgoogle后得出下面答案。

在预编译的时候加 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
|-2*[courierlogger]
|-2*[couriertcpd]

 

检查端口,应该有如下端口打开:

[root@localhost courier-imap-4.8.0]#
tcp??0??0 0.0.0.0:110??0.0.0.0:*??LISTEN
tcp??0??0 0.0.0.0:143??0.0.0.0:*??LISTEN

 

 

9.              安装-maildrop

maildrop是一个使用C++编写的用来代替本地MDA的带有过滤功能邮件投递代理,是courier邮件系统组件之一。它从标准输入接受信息并投递到用户邮箱;maildrop既可以将邮件投递到mailboxes格式邮箱,亦可以将其投递到maildirs格式邮箱。同时,maildrop可以从文件中读取入站邮件过滤指示,并由此决定是将邮件送入用户邮箱或者转发到其它地址等。和procmail不同的是,maildrop使用结构化的过滤语言,因此,邮件系统管理员可以开发自己的过滤规则并应用其中。

我们在此将使用maildrop来代替postfix自带的MDA,并以此为基础扩展后文的邮件杀毒和反垃圾邮件功能的调用;在此可能会修改前文中的许多设置,请确保您的设置也做了相应的修改。

 

先检查是否已经安装pcrepcre-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.
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.

注意,确保信息中有“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.sqlinit.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/mailboxgmailadm的临时目录(这个目录具体见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就没有错误了。

 

3postfix: 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)

 

7Unable to write to temporary file - possibly out of disk space 可能是/var 空间不足或/tmp(临时文件过多)空间不足

 

8lost 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

 

(10DBI 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 很頭大,不知該如何,所以告訴你這個訊息。

 

阅读(5787) | 评论(0) | 转发(0) |
0

上一篇:JDK+Apache+resin搭建

下一篇:apache+resin集群

给主人留下些什么吧!~~