Maybe I'll install them later. As usual I'm going to use a zone for this install, I realy like zones in OpenSolaris! I've been cutting and pasting a lot in this howto so I hope that I've got every step right - if not please leave a comment.
I have a real domain at a webhosting company. In this howto it's called YOUR-DOMAIN.COM. I'm going to create a local fake domain called YOURDOMAIN.BOGUS.
So now I'm going to create a virual domain in a virtual server :-) I'm going to use my ISP:s smtp server for outgoing mail. For incoming mail I'm using fetchmail to get new mails from my webhosting company.
Many thnx to D.J Bernstein (http://cr.yp.to/cv.html) for this great piece of software!
Create a new zone in OpenSolaris - see previous post. In this howto it's called mailz.
# zlogin -e\# -C mailz
¤ Install some packages that is needed for the build process
# pkg install SUNWpkgcmds
# pkg install SUNWwget
# pkg install SUNWtnetc
# pkg install SUNWgnu-diffutils
# pkg install SUNWgcc
# pkg install SUNWgmake
# pkg install SUNWggrp
# pkg install SUNWperl584core
# pkg install SUNWgnu-coreutils
# pkg install SUNWlibm
# pkg install SUNWfetchmail
¤ Create qmail and vpopmail user(s) and their homes
# mkdir -p /var/qmail
# groupadd -g 81 nofiles
# groupadd -g 82 qmail
# groupadd -g 83 vchkpw
# useradd -u 81 -g nofiles -s /bin/false -d /var/qmail/alias alias
# useradd -u 82 -g nofiles -s /bin/false -d /var/qmail qmaild
# useradd -u 83 -g nofiles -s /bin/false -d /var/qmail qmaill
# useradd -u 84 -g nofiles -s /bin/false -d /var/qmail qmailp
# useradd -u 85 -g qmail -s /bin/false -d /var/qmail qmailq
# useradd -u 86 -g qmail -s /bin/false -d /var/qmail qmailr
# useradd -u 87 -g qmail -s /bin/false -d /var/qmail qmails
# useradd -u 88 -g vchkpw -d /home/vpopmail vpopmail
# mkdir -p /var/log/qmail
# chown -R qmaill:nofiles /var/log/qmail
¤ I had some problems with /home so this is what I did:
# umount /home
¤ Edit /etc/auto_master and remove the line starting with /home
# mv /etc/auto_home /etc/auto_home.ORI
# mkdir -p /home/vpopmail
# chown -R vpopmail:vchkpw /home/vpopmail
¤ Create a download folder
# cd
# mkdir dl
# cd dl
¤ Get a patched qmail source tarball
# wget http://qmail.internet.bs/netqmail-1.06.tar.gz
# gunzip netqmail-1.06.tar.gz
# tar xvf netqmail-1.06.tar
# cd netqmail-1.06
# make setup check
¤ Configure your local mail domain
# cd /root/dl/netqmail-1.06
# ./config-fast mailz.YOURDOMAIN.BOGUS
¤ Configure qmail
# cd /var/qmail/control
# echo "mailz.YOUR-DOMAIN.COM" > me
# echo "mailz.YOURDOMAIN.BOGUS" > locals
# vi rcpthosts
mailz.YOURDOMAIN.BOGUS
YOUR-DOMAIN.COM
localhost
¤ Create some alias
# cd /var/qmail/alias
# echo "pr0xy@YOUR-DOMAIN.COM" > .qmail-root
# cp .qmail-root .qmail-mailer-daemon
# cp .qmail-root .qmail-postmaster
¤ Configure your ISP:s outgoing smtp-server (you're probably not allowed to use port 25 from home)
# vi /var/qmail/control/smtproutes
:smtp.YOURISP.com
¤ Download and install checkpassword
# cd; cd dl
# wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
# gunzip checkpassword-0.90.tar.gz
# tar -xvf checkpassword-0.90.tar
# cd checkpassword-0.90
# make
# make install
¤ Download and install TCP-rules
# cd; cd dl
# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# gunzip ucspi-tcp-0.88.tar.gz
# tar -xvf ucspi-tcp-0.88.tar
# cd ucspi-tcp-0.88
# make setup check
# vi /etc/tcp.smtp
127.:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT=""
¤ Create a database for tcprules
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
¤ Download and install vpopmail
# cd; cd dl
# wget http://puzzle.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.27.tar.bz2
# bzip2 -d vpopmail-5.4.27.tar.bz2
# tar -xvf vpopmail-5.4.27.tar
# cd vpopmail-5.4.27
# ./configure \
--enable-tcprules-prog=/usr/local/bin/tcprules \
--enable-tcpserver-file=/etc/tcp.smtp \
--enable-roaming-users=y \
--enable-relay-clear-minutes=60 \
--enable-logging=p \
--enable-auth-logging \
--enable-logging=y
# make
# make install-strip
¤ Download and install Maildrop, but first, you'll need gdbm to compile it
# wget http://ftp.gnu.org/pub/gnu/gdbm/gdbm-1.8.3.tar.gz
# gzip -d gdbm-1.8.3.tar.gz
# tar -xvf gdbm-1.8.3.tar
# cd gdbm-1.8.3
# ./configure
# make
# make install
# wget http://prdownloads.sourceforge.net/courier/maildrop-2.0.4.tar.bz2
# bzip2 -d maildrop-2.0.4.tar.bz2
# tar -xvf maildrop-2.0.4.tar
# cd maildrop-2.0.4
# export LDFLAGS="-L/usr/local/lib"
# ./configure --prefix=/usr/local \
--exec-prefix=/usr/local \
--enable-maildrop-uid=root \
--enable-maildrop-gid=vchkpw \
--enable-maildirquota
# make install-strip
¤ Download and install qmail autoresponder
# cd; cd dl
# wget http://www.inter7.com/devel/autorespond-2.0.2.tar.gz
# gzip -d autorespond-2.0.2.tar.gz
# tar -xvf autorespond-2.0.2.tar
# cd autorespond-2.0.2
# make
# make install
¤ Install daemontools from blastwave (I couldn't compile it on Solaris due to sh -e )
# pfexec pkg set-authority -O http://blastwave.network.com:10000 blastwave.network.com
# pkg install IPSdaemontools
¤ Create a "home" for daemontools
# mkdir /command
# chmod 755 /command
# cd /command
# ln -s /opt/csw/bin/envdir envdir
# ln -s /opt/csw/bin/envuidgid envuidgid
# ln -s /opt/csw/bin/fghack fghack
# ln -s /opt/csw/bin/multilog multilog
# ln -s /opt/csw/bin/pgrphack pgrphack
# ln -s /opt/csw/bin/readproctitle readproctitle
# ln -s /opt/csw/bin/setlock setlock
# ln -s /opt/csw/bin/setuidgid setuidgid
# ln -s /opt/csw/bin/softlimit softlimit
# ln -s /opt/csw/bin/supervise supervise
# ln -s /opt/csw/bin/svc svc
# ln -s /opt/csw/bin/svok svok
# ln -s /opt/csw/bin/svscan svscan
# ln -s /opt/csw/bin/svscanboot svscanboot
# ln -s /opt/csw/bin/svstat svstat
# ln -s /opt/csw/bin/tai64n tai64n
# ln -s /opt/csw/bin/tai64nlocal tai64nlocal
# cd /usr/local/bin
# ln -s /command/softlimit softlimit
# ln -s /command/svstat svstat
¤ Create the start up scripts
# mkdir /service
# chmod 755 /service
# mkdir /var/qmail/supervise
# chmod 755 /var/qmail/supervise
# mkdir /var/qmail/supervise/qmail-smtpd
# mkdir /var/qmail/supervise/qmail-smtpd/log
# chmod +t /var/qmail/supervise/qmail-smtpd
# mkdir /var/qmail/supervise/qmail-send
# mkdir /var/qmail/supervise/qmail-send/log
# chmod +t /var/qmail/supervise/qmail-send
# mkdir /var/qmail/supervise/qmail-pop3d
# mkdir /var/qmail/supervise/qmail-pop3d/log
# chmod +t /var/qmail/supervise/qmail-pop3d
# vi /var/qmail/rc
#!/bin/sh
exec env - PATH="/var/qmail/bin:/usr/local/bin" \
qmail-start ./Maildir/
# chmod 700 /var/qmail/rc
# vi /var/qmail/supervise/qmail-pop3d/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin:/opt/csw/bin
export PATH
exec tcpserver -H -R -v -c100 0 110 qmail-popup mailz.YOURDOMAIN.BOGUS \
/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1
# chmod 755 /var/qmail/supervise/qmail-pop3d/run
# vi /var/qmail/supervise/qmail-pop3d/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin:/opt/csw/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-pop3d 2>&1
# chmod 755 /var/qmail/supervise/qmail-pop3d/log
# chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
# echo "30" > /var/qmail/control/concurrencyincoming
# vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec /usr/local/bin/softlimit -m 40000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
/var/qmail/bin/qmail-smtpd mailz.YOURDOMAIN.BOGUS \
/home/vpopmail/bin/vchkpw /usr/bin/true 2>&1
# chmod ugo+x /var/qmail/supervise/qmail-smtpd/run
# vi /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin:/opt/csw/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1
# chmod 755 /var/qmail/supervise/qmail-smtpd/log
# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
# vi /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec env - PATH="/var/qmail/bin:/usr/local/bin" \
qmail-start ./Maildir/
# vi /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin:/opt/csw/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-send 2>&1
# chmod 755 /var/qmail/supervise/qmail-send/log
# chmod 755 /var/qmail/supervise/qmail-send/log/run
# ln -s /var/qmail/supervise/* /service/
¤ Configure vpopmail
# cd /home/vpopmail/bin/
# ./vadddomain YOUR-DOMAIN.COM pAsSwOrD
# ./vadduser pr0xy@YOUR-DOMAIN.COM pAsSwOrD
# cd /home/vpopmail/domains/YOUR-DOMAIN.COM
# echo "&pr0xy@YOUR-DOMAIN.COM" > .qmail-catchall
# vi .qmail-default
| /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox
# chown vpopmail.vchkpw .qmail-*
¤ Create a startup script for qmail
# vi /etc/init.d/qmailctl
#!/bin/sh
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/opt/csw/bin
export PATH
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
case "$1" in
start)
echo "Starting qmail..."
echo ""
if svok /service/qmail-send ; then
svc -u /service/qmail-send /service/qmail-send/log
echo "Starting qmail-send"
else
echo "qmail-send supervise not running"
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
echo "Starting qmail-smtpd"
else
echo "qmail-smtpd supervise not running"
fi
if svok /service/qmail-pop3d ; then
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
echo "Starting qmail-pop3d"
else
echo "qmail-pop3d supervise not running"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo ""
echo " qmail-smtpd"
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo " qmail-send"
svc -d /service/qmail-send /service/qmail-send/log
echo " qmail-pop3d"
svc -d /service/qmail-pop3d /service/qmail-pop3d/log
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
svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
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
echo "Pausing qmail-pop3d"
svc -p /service/qmail-pop3d
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
echo "Continuing qmail-pop3d"
svc -c /service/qmail-pop3d
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send /service/qmail-send/log
echo "* Sending qmail-pop3d SIGTERM and restarting."
svc -t /service/qmail-pop3d /service/qmail-pop3d/log
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
;;
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 <
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 -- schedules queued messages for immediate 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
# chmod 750 /etc/init.d/qmailctl
¤¤¤ "Replace" sendmail (You don't usually have sendmail in a new zone)
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
¤ Put svscanboot in inittab
# vi /etc/inittab
SV:123456:respawn:/command/svscanboot /var/adm/svscan.log 2>&1
¤¤¤ Reboot the mailz zone
# shutdown -i 5 -g 5
# zoneadm -z mailz boot
# zlogin -e\# -C mailz
¤ Now, it's time to use telnet to test your setup
Test: Outgoing mail
# telnet 127.0.0.1 25
rcpt
data
Subject: Testing qmail
Does it work?
.
quit
Test: Local test of vpopmail
root@mailz:/etc/init.d# telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
+OK <1271.1236437828@mailz.yourdomain.bogus>
user pr0xy@YOUR-DOMAIN.COM
+OK
pass sEcReTs
+OK
list
+OK
1 253
2 252
3 269
.
quit
+OK
Connection to 127.0.0.1 closed by foreign host.
Test: Remote test of vpopmail (from CentOS in my case)
$ telnet 192.168.0.7 110
Trying 192.168.0.7...
Connected to 192.168.0.7 (192.168.0.7).
Escape character is '^]'.
+OK <1975.1236503509@mailz.yourdomain.bogus>
user pr0xy@YOUR-DOMAIN.COM
+OK
pass sEkReTs
+OK
list
+OK
1 252
2 253
3 269
.
quit
+OK
Connection closed by foreign host.
¤ Now you know that it works local/remote - now it's up to you to test it from your MTU.
¤ Configure fetchmail
# cd
# vi .fetchmailrc
set postmaster "postmaster@YOUR-DOMAIN.COM"
set no bouncemail
poll pop.YOURISP.com localdomains YOUR-DOMAIN.COM:
protocol pop3
timeout 15
no dns
auth password
user catchall@YOUR-DOMAIN.COM there
password sEkReTs
is * here
forcecr
Done!