- 论坛徽章:
- 0
|
[求助]在RH7.2下安装IMAP4的过程中出现的问题。
qmail Installation Guide
First, the ‘q’ of qmail was written in lowercase.
We talk about: qmail + OpenLDAP + CourierImap
qmail version 1.03 (tar ball)
OpenLDAP version 2.x (RPM package)
CourierImap version 1.3.8.2 (tar ball)
Ucspi-tcp version 0.88 (RPM package)
Daemontools version 0.76 (RPM package)
All of these working in Redhat Linux 7.2
Ok, let’s go.
· Prepare software
OpenLDAP: OpenLDAP*, Libldap* in Redhat Linux 7.2
qmail: http://cr.yp.to/software/qmail-1.03.tar.gz
LDAP patch: http://www.nrg4u.com/qmail/qmail-ldap-1.03-20011001a.patch.gz
CourierImap: http://download.sourceforge.net/courier/courier-imap-1.3.8.2.tar.gz
--- Other tools ---
Ucspi-tcp: \\Boston ->; root
Daemontools: \\Boston ->; root
· Install OpenLDAP
In the Redhat Linux 7.2 CDs, install:
Openldap*
Libldap*
· Install qmail
rpm -ivh daemontools* ucspi-tcp*
tar -zxvf qmail-1.03.tar.gz
gunzip qmail-ldap-1.03-20011101a.patch.gz
cd qmail-1.03
patch -p1 <../qmail-ldap-1.03-20011101a.patch
------
mkdir /var/qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails
vi Makefile
--uncomment the line MDIRMAKE=-DAUTOMAILDIRMAKE
--uncomment the line HDIRMAKE=-DAUTOHOMEDIRMAKE
make setup check
./config-fast
--- Edit /var/qmail/control/me, locals, rcpthosts, defaultdomain ---
--- Add abc.com to it ---
cd /var/qmail/alias
touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
chmod 644 /var/qmail/alias/.qmail*
vi /etc/passwd (and add):
vmail :600:600::/var/qmail/maildirs/:/bin/true
vi /etc/group and add:
vmail::600
mkdir /var/qmail/maildirs
chown -R vmail:vmail /var/qmail/maildirs
# Link standard sendmail locations to qmail's sendmail wrapper
--- Uninstall sendmail first ---
mv /usr/lib/sendmail /usr/lib/sendmail.sav
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
mv /usr/sbin/sendmail /usr/sbin/sendmail.sav
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
· Install CourierImap
--- Use non-root to compile CourierImap ---
tar -zxvf courier-imap-*.tar.gz
cd courier-imap-1.3.8.2
./configure --enable-workarounds-for-imap-client-bugs
make
su -c "make install" (enter root password when prompted)
su - -c "ldconfig"
· Configure OpenLDAP
--- Locate qmail.schema at qmail source directory ---
cp qmail.schema /etc/openldap/schema
cd /etc/openldap
vi slapd.conf
--- Add this line ---
include /etc/openldap/schema/qmail.schema
--- Change these setting ---
database ldbm
suffix "dc=abc,dc=com"
rootdn "cn=ldaproot,dc=abc,dc=com"
rootpw {SSHA}sdlkf;ljvflkajf;wiuffasjflj (use ‘slappasswd –h {SSHA}’ get password)
· Configure qmail for OpenLDAP
cd /var/qmail/control
- Create the following control files with specified contents in /var/qmail/control:
ldapmessagestore:
/var/qmail/maildirs
ldapgid:
600
ldapuid:
600
ldapbasedn:
dc=abc,dc=com
ldapserver:
localhost
ldaplogin:
cn=ldaproot,dc=abc,dc=com
ldappassword:
rootpw
ldaplocaldelivery:
0
ldapmessagestore:
/var/qmail/maildirs
ldapdefaultquota:
200000000S, 20000C
quotawarning:
You are about to be over your quota. Clean your mailbox.
custombouncetext:
You've experienced some sort of problem delivering mail to us.
Please contact us at for more information.
dirmaker:
/var/qmail/bin/custom_dirmaker
/var/qmail/bin/custom_dirmaker:
#!/bin/sh
logger "Creating Maildir/ for $1"
mkdir -m 700 -p $1
# Execute the following command to make the dirmaker executable
chmod +x /var/qmail/bin/custom_dirmaker
vi /var/qmail/rc
- Now create the qmail start script:
#!/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ./ by default.
# Don't change this delivery path. It breaks courier.
exec env - PATH="/var/qmail/bin PATH" qmail-start ./ splogger qmail
· Configure CourierImap for OpenLDAP
cd /usr/lib/courier-imap/etc
cp authdaemonrc.dist authdaemonrc
cp authldaprc.dist authldaprc
cp imapd.dist imapd
cp imapd-ssl.dist imapd-ssl
vi authdaemonrc
-- change the authmodulelist line to look like:
#authmodulelist="authcustom authcram authuserdb authldap authmysql"
authmodulelist="authldap"
vi authldaprc
-- I used the following values:
LDAP_SERVER localhost
LDAP_PORT 389
LDAP_BASEDN dc=abc,dc=com
LDAP_BINDDN cn=ldaproot,dc=abc,dc=com
LDAP_BINDPW rootpw
LDAP_TIMEOUT 5
LDAP_AUTHBIND 0
LDAP_MAIL mail
LDAP_DOMAIN Abc.com
LDAP_GLOB_UID vmail
LDAP_GLOB_GID vmail
LDAP_HOMEDIR mailMessageStore
LDAP_MAILDIR mailMessageStore
LDAP_FULLNAME cn
LDAP_CRYPTPW userPassword
vi imapd
-- modify this one line which tells it to daemonize
IMAPDSTART=YES
· Set up qmail init scripts with Daemontools
生成qmailctl 脚本
#!/bin/sh
# For Red Hat chkconfig
# chkconfig: - 30 80
# description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
case '$1' in
start)
echo 'Starting qmail'
if svok /service/qmail-send ; then
svc -u /service/qmail-send
else
echo qmail-send service not running
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd
else
echo qmail-smtpd service not running
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo 'Stopping qmail...'
echo ' qmail-smtpd'
svc -d /service/qmail-smtpd
echo ' qmail-send'
svc -d /service/qmail-send
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
;;
doqueue|alrm|flush)
echo 'Sending ALRM signal to qmail-send.'
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo 'Sending HUP signal to qmail-send.'
svc -h /service/qmail-send
;;
pause)
echo 'Pausing qmail-send'
svc -p /service/qmail-send
echo 'Pausing qmail-smtpd'
svc -p /service/qmail-smtpd
;;
cont)
echo 'Continuing qmail-send'
svc -c /service/qmail-send
echo 'Continuing qmail-smtpd'
svc -c /service/qmail-smtpd
;;
restart)
echo 'Restarting qmail:'
echo '* Stopping qmail-smtpd.'
svc -d /service/qmail-smtpd
echo '* Sending qmail-send SIGTERM and restarting.'
svc -t /service/qmail-send
echo '* Restarting qmail-smtpd.'
svc -u /service/qmail-smtpd
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo 'Reloaded /etc/tcp.smtp.'
;;
help)
cat < stop -- stops mail service (smtp connections refused, nothing goes out)
start -- starts mail service (smtp connection accepted, mail can go out)
pause -- temporarily stops mail service (connections accepted, nothing leaves)
cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo 'Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}'
exit 1
;;
esac
exit 0
此脚本可以通过http://www.lifewithqmail.org/qmailctl-script-dt70获得
使用vi 生成/var/qmail/bin/qmailctl基本将上面内容放入其中, 然后将其安装在
/etc/init.d
/etc/rc.d/init.d
执行下面命令,产生链接:
ln -s ../init.d/qmail /etc/rc0.d/K30qmail
ln -s ../init.d/qmail /etc/rc1.d/K30qmail
ln -s ../init.d/qmail /etc/rc2.d/S80qmail
ln -s ../init.d/qmail /etc/rc3.d/S80qmail
ln -s ../init.d/qmail /etc/rc4.d/S80qmail
ln -s ../init.d/qmail /etc/rc5.d/S80qmail
ln -s ../init.d/qmail /etc/rc6.d/K30qmail
ln -s /var/qmail/bin/qmailctl /etc/init.d/qmail
使得脚本可以执行 qmailctl且进入系统命令中
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
supervise 基本
现在产生qmail services目录:
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
chmod +t /var/qmail/supervise/qmail-send
chmod +t /var/qmail/supervise/qmail-smtpd
生成/var/qmail/supervise/qmail-send/run 文件:
#!/bin/sh
exec /var/qmail/rc
生成/var/qmail/supervise/qmail-send/log/run 文件:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
生成 /var/qmail/supervise/qmail-smtpd/run 文件:
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/local/bin/tcpserver -v -R -l 0 -x /etc/tcp.smtp.cdb -c '$MAXSMTPD'
-u '$QMAILDUID' -g '$NOFILESGID' 0 smtp /var/qmail/bin/qmail-smtpd 2>;&1
生成concurrencyincoming 控制文件:
echo 20 >; /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
生成/var/qmail/supervise/qmail-smtpd/log/run 文件:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
使得所生成的脚本可执行:
chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
建立log 目录:
mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd
将supervise 链接到/service:
ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
注: qmail 系统应该自动起来。如果不想此时候启动,执行:
qmailctl stop'
SMTP 访问控制
允许本地主机通过SMTP发信:
echo '127.:allow,RELAYCLIENT=''' >;>;/etc/tcp.smtp
qmailctl cdb
· Set up OpenLDAP database
--- Create top ldif file ---
top.ldif:
dn: dc=abc,dc=com
objectclass: top
dn: ou=user,dc=abc,dc=com
objectclass: top
objectclass: organizationalUnit
ou: user
--- Add top ---
ldapadd -x -W -D "cn=ldaproot,dc=abc,dc=com" -f top.ldif
--- Create user ldif file ---
Gary.ldif:
dn: uid=gary,ou=user,dc=abc,dc=com
cn: gary
sn: gary
objectclass: top
objectclass: person
objectclass: inetOrgPerson
objectclass: qmailUser
mail: gary@abc.com
userPassword: {SSHA}asdfklhasfjas;ldkfaslfl;asdfkl;sdfj
mailMessageStore: /var/qmail/maildirs/gary/Maildir
uid: gary
--- Add user ---
ldapadd -x -W -D "cn=ldaproot,dc=abc,dc=com" -f top.ldif
· At last |
|