hew 2008-7-18 02:02
gentoo下源码安装postfix+courier-imap+extmail
作者:精灵萌萌
我以前工作的系统环境一直都是FreeBSD的环境,所以对Linux系统的接触很少,希望各位如果看到我的文档里有什么问题或者错误的地方希望指点出来,让我趁这个机会向您学习学习。
这里面postfix以及相对应的配套程序大部份都是采用源码的方式安装
编译安装mysql,这个基本没什么好说的,只要照着INSTALL-SOURCE安装应该不会出现什么问题.
step1:
INSTALL MySQL server:
shell> ./configure --prefix=/opt/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /opt/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
/opt/mysql/bin/mysqladmin -u root password 'new-password'
vi mysql
#!/sbin/runscript
depend() {
need net
}
start() {
ebegin "Starting mysql..."
start-stop-daemon --start --quiet --exec /opt/mysql/share/mysql/mysql.server start
eend $?
}
stop() {
ebegin "Stoping mysql..."
start-stop-daemon --start --quiet --exec /opt/mysql/share/mysql/mysql.server stop
eend $?
}
restart() {
stop
sleep 3
start
}
rc-update add mysql default
安装apache与php服务这个也可以按照php.net里面的document做,做apache的目的就是为了基于webmail的实现
step2:
INSTALL Apache&php Server:
./confiure --enable-so
make
make install
PHP:
1.
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/opt/mysql
2.
make
3.
make install
4.
vi /usr/local/apache2/conf/httpd.conf
5.
AddType application/x-httpd-php .php .phthml
AddType application/x-httpd-php-sources .phps
6.
cp php.ini-dist /usr/local/lib/php.ini
7.
vi apache2
#!/sbin/runscript
depend() {
use logger dns
need net
}
start(){
ebegin "Starting Apache2..."
/usr/local/apache2/bin/apachectl start
eend $?
}
stop(){
ebegin "Stopping Apache2..."
/usr/local/apache2/bin/apachectl stop
eend $?
}
restart(){
ebegin "Resting Apache2..."
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
eend $?
8.
rc-update add apache2 default
配置postfixadmin也特别的简单,基本上就是把数据表导入到数据库里,但是在导入表之前要修改这个DATABASE.TXT里面的postfix与postfixadmin的密码,还要再修改一下config.inc.php这个文件即可。
step3:
INSTALL postfixadmin
mysql -u root -p < DATABASE.TXT
......
安装sasl2的认证支持
Step4:
cyrus-sasl2
获得cyrus-sasl2地址是:
[url]http://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.20.tar.gz[/url]
在编译安装之前可以用./configure --help看一下cyrus-sasl2所支持的安装参数,可以根据自己的需要来进行配置安装。
./configure --with-mysql=/opt/mysql --with-authdaemond
make
make install
ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
Step5:
postfix-2.3-20051227.tar.gz
因为mysql不是安装在默认的目录下面所以如果不加下面的操作启动postfix的时候会在日志里面提示libmysqlclient.so.12找不到。
echo "/opt/mysql/lib/mysql" >>/etc/ld.so.conf
ldconfig
编译安装postfix,这里面涉及到两个参数,一个是CCARGS一个是AUXLIBS,现在说一下CCARGS这个参数的作用,它是提供额外的支持选项可以根据CCARGS提供的参数来告诉postfix所支持的模块,而AUXLIBS是提供默认以外的函数库就是动态链接库的地址。
make -f Makefile.init makefiles \
'CCARGS=-DHAS_MYSQL -I/opt/mysql/include/mysql \
-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \
-I/usr/local/include/sasl' \
'AUXLIBS=-L/opt/mysql/lib/mysql -lmysqlclient -lz -lm \
-L/usr/local/lib -lsasl2'
添加postfix的启动到默认的级别里。
ln -s /usr/sbin/postfix /etc/init.d/postfix
rc-update add postfix default
step6:
创建postfix虚拟用户的目录,并且付与这个目录相应的权限。
mkdir -p /usr/local/mail/virtual
chown postfix:postfix /usr/local/mail/virtual
step7:
安装courier-authlib与courier-imap
首先先安装courier-authlib
因为gentoo的系统事会先替你建立好你所需要的用户,甚至qmail的用户也包括在内,如果不把vpopmail这个用户和组给注释掉会安装失败 #vpopmail user and group.
./configure --with-mysql-libs=/opt/mysql/lib/mysql \
--with-mysql-includes=/opt/mysql/include/mysql \
--with-authmysql
make
make install
make install-configure //生成相应的配置文件
cp courier-authlib.sysvinit /etc/init.d/courier-authlib //复制courier-authlib的启动文件到init.d
chmod 755 /etc/init.d/courier-authlib
/etc/init.d/courier-authlib start
chmod +x /usr/local/var/spool/authdaemon
INSTALL courier-imap
./configure --prefix=/usr/local/imap --disable-root-check
make
make install-strip
make install-configure
cp courier-imap.sysvinit /etc/init.d/courier-imap
chmod 755 /etc/init.d/courier-imap
rc-update add courier-imap default
cd /usr/local/imap/etc
modify POP3DSTART=YES to pop3d
vi pop3d
POP3DSTART=YES
modify IMAPDSTART=YES to imapd
vi imapd
IMAPDSTART=YES
编写courier-authlib与courier-imap的启动脚本
vi courier
#!/sbin/runscript
depend() {
need net
}
start() {
ebegin "Starting courier-authlib & courier-imap..."
start-stop-daemon --start --quiet --exec /etc/init.d/courier-authlib start
start-stop-daemon --start --quiet --exec /etc/init.d/courier-imap start
eend $?
}
stop() {
ebegin "Stoping courier-authlib & courier-imap..."
start-stop-daemon --start --quiet --exec /etc/init.d/courier-authlib stop
start-stop-daemon --start --quiet --exec /etc/init.d/courier-imap stop
eend $?
}
restart() {
stop
sleep 3
start
}
rc-update add courier default
step8:
configure postfix base to main.cf
vi /etc/postfix/main.cf
myhostname = lnyk.2288.org
mydomain = lnyk.2288.org
mydestination = localhost
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8, /etc/postfix/mynetworks
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
recipient_delimiter = +
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP
local_destination_concurrency_limit = 5
default_destination_concurrency_limit = 50
#######Virtual User############
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:208
virtual_mailbox_base = /usr/local/mail/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 207
virtual_transport = virtual
virtual_uid_maps = static:207
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota,please try again later.
virtual_overquota_bounce = yes
########use MySQL also to store your Backup MX domains add###########
#relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf
##########SASL AUTH#########
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
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,
reject_rbl_client opm.blitzed.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client cbl.anti-spam.org.cn,
reject_rbl_client cdl.anti-spam.org.cn,
reject_rbl_client cblplus.anti-spam.org.cn,
reject_rbl_client sbl-xbl.spamhaus.org
touch mynetworks
vi mysql_relay_domains_maps.cf
user = postfix
password = 'you password'
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '1'
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'
vi mysql_virtual_alias_maps.cf
user = postfix
password = 'your password'
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
query = SELECT goto FROM alias WHERE address='%s'
vi mysql_virtual_domains_maps.cf
user = postfix
password = 'your password'
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
query = SELECT description FROM domain WHERE domain='%s'
vi mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = 'your password'
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
query = SELECT quota FROM mailbox WHERE username='%s'
vi mysql_virtual_mailbox_maps.cf
user = postfix
password = 'your password'
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
query = SELECT maildir FROM mailbox WHERE username='%s'
vi /etc/aliases
postmaster: root
root: [email]postmaster@lnyk.2288.org[/email]
newaliases
vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/usr/local/var/spool/authdaemon/socket
vi /usr/local/etc/authlib/authdaemonrc
修改下面这二行做为mysql的认证方式
authmodulelist="authmysql"
authmodulelistorig="authmysql"
vi /usr/local/etc/authlib/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD 'your password'
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_PORT 3306
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 207
MYSQL_GID_FIELD 207
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/usr/local/mail/virtual'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
INSTALL DBI and DBD for perl
/usr/portage/dev-perl:
emerge DBI
emerge DBD-mysql
Step9:
configure extmail
vi /usr/local/apache2/conf/httpd.conf
User: postfix
Group: nobody
####Extmail####
Alias /extmail/cgi/ /usr/local/apache2/htdocs/extmail/cgi/
Alias /extmail/ /usr/local/apache2/htdocs/extmail/html/
<Location "/extmail/cgi">
SetHandler cgi-script
Options +ExecCGI
AllowOverride All
</Location>
<Directory /usr/local/extmail/>
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
Step10:
configure webmail.cf for extmail
# sys_config, the config file and webmail programe root
SYS_CONFIG = /usr/local/apache2/htdocs/extmail/
# sys_langdir, the i18n dir
SYS_LANGDIR = /usr/local/apache2/htdocs/extmail/lang
# sys_templdir, the template dir
SYS_TEMPLDIR = /usr/local/apache2/htdocs/extmail/html
# sys_user_lang, user default language
SYS_USER_LANG = zh_CN
# sys_user_template, user default template
SYS_USER_TEMPLATE = enhanced
# sys auth type, mysql/ldap/flat
SYS_AUTH_TYPE = mysql
# maildir_base, the base dir of user maildir, use absolute path
# if not set.
SYS_MAILDIR_BASE = /usr/local/mail/virtual
# crypt_type, the encrypt type of password, possible type currently
# is crypt|clear|md5|sha
SYS_CRYPT_TYPE = crypt
# if mysql, all relate paramters should prefix as SYS_MYSQL
SYS_MYSQL_USER = postfix
SYS_MYSQL_PASS = 'your password'
SYS_MYSQL_DB = postfix
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
# table name
SYS_MYSQL_TABLE = mailbox
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_PASSWD = password
SYS_MYSQL_ATTR_QUOTA = quota
SYS_MYSQL_ATTR_HOME = maildir
SYS_MYSQL_ATTR_MAILDIR = maildir