Solaris 10 and qmail with SMF
Posted on March 6, 2005
Solaris 10 and qmail HOW-TO
by Iouri Goussev
version 0.1
This how-to explains how to install qmail SMTP server on Solaris 10.
1 download qmail
wget http://www.qmail.org/netqmail-1.05.tar.gz
2 extract it
gunzip netqmail-1.05.tar.gz
tar xpf netqmail-1.05.tar
cd netqmail-1.05
3 set compiler (change from cc to gcc)
vi conf-ld
vi conf-cc
4 make qmail cirectory
mkdir /var/qmail
5 create user accounts
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
6 install qmail
gmake setup check
./config-fast dolphin.example.com
7 create /var/qmail/qmail.sh
#!/bin/sh
. /lib/svc/share/smf_include.sh
myname=qmail
qmail_dir=/var/qmail
subsys=/var/lock/subsys/$myname
PATH=”$qmail_dir/bin:$PATH”
export PATH
proccess=qmail-send
case “$1″ in
’start’)
echo “Starting qmail”
qmail-start ./Maildir/ splogger qmail &
if [ $? -eq 0 ]; then
echo “Starting qmail as background process: done”
exit $SMF_EXIT_OK
else
echo “Starting qmail as background process: POPFile already running”
exit $SMF_EXIT_ERR_FATAL
fi
;;
’stop’)
echo “Stoping qmail”
pkill $proccess
;;
*)
echo “Usage: $0 { start | stop }”
exit 1
;;
esac
8 make it executable
chmod 755 /var/qmail/qmail.sh
9 create SMF manifest (qmail.xml)
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
<service name='network/qmail-base' type='service' version='0'>
<create_default_instance enabled='true'/>
<single_instance/>
<dependency name='multi-user' grouping='require_all' restart_on='refresh' type='service'>
<service_fmri value='svc:/milestone/multi-user'/>
</dependency>
<exec_method name='start' type='method' exec='/var/qmail/qmail.sh start' timeout_seconds='60'>
<method_context/>
</exec_method>
<exec_method name='stop' type='method' exec='/var/qmail/qmail.sh stop' timeout_seconds='60'>
<method_context/>
</exec_method>
<stability value='Unstable'/>
<template>
<common_name>
<loctext xml:lang='C'>SMTP server</loctext>
</common_name>
<description>
<loctext xml:lang='C'>qmail SMTP server</loctext>
</description>
<documentation>
<doc_link name='qmail website' uri='http://www.qmail.org/‘/>
</documentation>
</template>
</service>
</service_bundle>
10 import it
svccfg import qmail.xml
11 download ucspi-tcp
wget ftp://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
12 extract ucspi-tcp
gunzip ucspi-tcp-0.88.tar.gz
tar xpf ucspi-tcp-0.88.tar
cd ucspi-tcp-0.88
13 configure it
vi conf-ld
vi conf-cc
vi conf-home (/var/qmail/bin)
make
make setup check
14 create qmail-smtp.sh
#!/bin/sh
. /lib/svc/share/smf_include.sh
proccess=tcpserver
QMAILDUID=`/usr/xpg4/bin/id -u qmaild`
NOFILESGID=`/usr/xpg4/bin/id -g qmaild`
MAXSMTPD=20
PATH=”$qmail_dir/bin:$PATH”
export PATH
if [ -z “$QMAILDUID” -o -z “$NOFILESGID” -o -z “$MAXSMTPD” ]; then
exit 1
fi
case “$1″ in
’start’)
echo “Starting qmail-smtp”
/var/qmail/bin/tcpserver -x /etc/tcp.smtp.cdb -c “$MAXSMTPD” -u “$QMAILDUID” -g “$NOFILESGID” 0 smtp /var/qmail/bin/qmail-smtpd /var/qmail/bin/checkpassword /usr/bin/true &
if [ $? -eq 0 ]; then
echo “Starting qmail as background process: done”
exit $SMF_EXIT_OK
else
echo “Starting qmail as background process: POPFile already running”
exit $SMF_EXIT_ERR_FATAL
fi
;;
’stop’)
echo “Stoping qmail”
pkill $proccess
;;
*)
echo “Usage: $0 { start | stop }”
exit 1
;;
esac
14 create qmail-smtp manifest
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
<service name='network/qmail-smtp' type='service' version='0'>
<create_default_instance enabled='true'/>
<single_instance/>
<dependency name='multi-user' grouping='require_all' restart_on='refresh' type='service'>
<service_fmri value='svc:/milestone/multi-user'/>
</dependency>
<exec_method name='start' type='method' exec='/var/qmail/qmail-smtp.sh start' timeout_seconds='60'>
<method_context/>
</exec_method>
<exec_method name='stop' type='method' exec='/var/qmail/qmail-stop.sh stop' timeout_seconds='60'>
<method_context/>
</exec_method>
<stability value='Unstable'/>
<template>
<common_name>
<loctext xml:lang='C'>SMTP server</loctext>
</common_name>
<description>
<loctext xml:lang='C'>qmail SMTP server</loctext>
</description>
<documentation>
<doc_link name='qmail website' uri='http://www.qmail.org/‘/>
</documentation>
</template>
</service>
</service_bundle>
15 import it into Solaris SMF
svccfg import qmail-smtp.xml
16 start qmail and qmail-smtp
svcadm enable qmail-smtp
svcadm enable qmail-base
17 enable it
svcadm enable network/qmail-base
svcadm enable network/qmail-smtp
to check if everything is ok run svcs -x network/smtp-server
and check log file
18 allow connections from localhost
echo ‘127.:allow,RELAYCLIENT=”"‘ >>/etc/tcp.smtp
/var/qmail/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
19 check is everything is runing
ps -ef | grep qmail
qmailr 17573 17570 0 02:22:42 ? 0:00 qmail-rspawn
qmailq 17574 17570 0 02:22:42 ? 0:00 qmail-clean
qmails 17570 13113 0 02:22:42 ? 0:00 qmail-send
qmaild 17565 13113 0 02:22:22 ? 0:00 /var/qmail/bin/tcpserver -x /etc/tcp.smtp.cdb -c 20 -u 102 -g 100 0 smtp /var/q
root 17572 17570 0 02:22:42 ? 0:00 qmail-lspawn ./Maildir/
qmaill 17571 17570 0 02:22:42 ? 0:00 splogger qmail
20 create Maildir for some user
$ /var/qmail/bin/maildirmake ./Maildir/
21 test mail delivery
telnet zone-1 smtp
Trying 192.168.110.11...
Connected to zone-1.
Escape character is '^]'.
220 zone-1.dagorlad.dynup.net ESMTP
HELO local.domain.name
250 zone-1.dagorlad.dynup.net
MAIL FROM: mail@domain.ext
250 ok
RCPT TO: elendal@zone-1.dagorlad.dynup.net
250 ok
DATA
354 go ahead
Subject:-type subject here-
hello elendal@zone-1.dagorlad.dynup.net how are you?
.
250 ok 1110095034 qp 18141
quit
221 zone-1.dagorlad.dynup.net
Connection to zone-1 closed by foreign host.
cat /home/elendal/Maildir/new/1110095034.18148.zone-1
Return-Path:
Delivered-To: elendal@zone-1.dagorlad.dynup.net
Received: (qmail 18141 invoked from network); 6 Mar 2005 07:43:15 -0000
Received: from unknown (HELO local.domain.name) (192.168.110.11)
by 192.168.110.11 with SMTP; 6 Mar 2005 07:43:15 -0000
Subject:-type subject here-
hello elendal@zone-1.dagorlad.dynup.net how are you?
Filed Under Uncategorized |
Leave a Comment
If you would like to make a comment, please fill out the form below.
Please if you have any idea on how to improve this how-to (better scripts, manifests, etc) post a comment.