1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
SAVE COPIES OF YOUR OUTGOING MAIL! Like any other piece of software (and
information generally), the qmail system comes with NO WARRANTY. It's
much more secure and reliable than sendmail, but that's not saying much.
Here's how to upgrade from qmail 1.01 to qmail 1.02. This procedure will
overwrite the old qmail binaries. Furthermore, it may begin delivering
messages from the queue before you have had a chance to test it.
WARNING: qlist has been split into a separate package. You can obtain it
from http://pobox.com/~djb/qlist.html if you have any users who need it.
WARNING: recipientmap is gone. The virtualdomains mechanism has been
expanded to support virtual users.
WARNING: qmail-start is now normally started from /var/qmail/rc. If you
have changed your qmail-start line, you will have to change
/var/qmail/rc accordingly in step 8.
Before starting, compare conf* to your old conf*, and make any necessary
changes. Do not copy your old conf*; the baseline has changed.
How to install:
1. Compile the programs and create the formatted man pages:
# make it man
2. Inform your users that mail will not be accepted for a few minutes.
3. Disable deliveries by killing your old qmail-send. Wait for it to
print ``exiting'' in the log.
4. Disable SMTP service by commenting out the smtp line in inetd.conf;
kill -HUP your inetd. (If you are using tcpserver, simply kill -STOP
your tcpserver. If you are running a QMTP server, disable that too.)
Wait for current qmail-smtpd processes to die.
5. Install the new binaries and man pages:
# make setup
6. Run instcheck to make sure it doesn't print any warnings:
# make check
7. Copy /var/qmail/boot/home to /var/qmail/rc. (Use home+df instead if
you have installed dot-forward; use proc or proc+df if you are using
procmail by default for local deliveries.)
8. Compare /var/qmail/rc to the qmail-start boot line in your boot
scripts. Edit /var/qmail/rc if necessary. Replace the qmail-start
boot line in your boot scripts with
csh -cf '/var/qmail/rc &'
9. Reenable deliveries:
# csh -cf '/var/qmail/rc &'
10. Reenable SMTP service by restoring the smtp line in inetd.conf; kill
-HUP your inetd. (If you are using tcpserver, simply kill -CONT your
tcpserver. If you are running a QMTP server, reenable that too.)
How to test (steps 11-17 can be done before step 10):
11. Look for a
qmail: status: local 0/10 remote 0/20
line in syslog. (The big number is a splogger timestamp.)
12. Local-local test: Send yourself an empty message. (Replace ``me''
with your username. Make sure to include the ``to:'' colon.)
% echo to: me | /var/qmail/bin/qmail-inject
The message will show up immediately in your mailbox, and syslog
will show something like this:
qmail: new msg 53
qmail: info msg 53: bytes 246 from <me@domain> qp 20345 uid 666
qmail: starting delivery 1: msg 53 to local me@domain
qmail: status: local 1/10 remote 0/20
qmail: delivery 1: success: did_1+0+0/
qmail: status: local 0/10 remote 0/20
qmail: end msg 53
(53 is an inode number; 20345 is a process ID; your numbers will
probably be different.)
13. Local-error test: Send a message to a nonexistent local address.
% echo to: nonexistent | /var/qmail/bin/qmail-inject
qmail: new msg 53
qmail: info msg 53: bytes 246 from <me@domain> qp 20351 uid 666
qmail: starting delivery 2: msg 53 to local nonexistent@domain
qmail: status: local 1/10 remote 0/20
qmail: delivery 2: failure: No_such_address.__#5.1.1_/
qmail: status: local 0/10 remote 0/20
qmail: bounce msg 53 qp 20357
qmail: end msg 53
qmail: new msg 54
qmail: info msg 54: bytes 743 from <> qp 20357 uid 666
qmail: starting delivery 3: msg 54 to local me@domain
qmail: status: local 1/10 remote 0/20
qmail: delivery 3: success: did_1+0+0/
qmail: status: local 0/10 remote 0/20
qmail: end msg 54
You will now have a bounce message in your mailbox.
14. Local-remote test: Send an empty message to your account on another
machine.
% echo to: me@wherever | /var/qmail/bin/qmail-inject
qmail: new msg 53
qmail: info msg 53: bytes 246 from <me@domain> qp 20372 uid 666
qmail: starting delivery 4: msg 53 to remote me@wherever
qmail: status: local 0/10 remote 1/20
qmail: delivery 4: success: 1.2.3.4_accepted_message./...
qmail: status: local 0/10 remote 0/20
qmail: end msg 53
There will be a pause between ``starting delivery'' and ``success'';
SMTP is slow. Check that the message is in your mailbox on the other
machine.
15. Local-postmaster test: Send mail to postmaster, any capitalization.
% echo to: POSTmaster | /var/qmail/bin/qmail-inject
Look for the message in the alias mailbox.
16. Double-bounce test: Send a message with a completely bad envelope.
% /var/qmail/bin/qmail-inject -f nonexistent
To: unknownuser
Subject: testing
This is a test. This is only a test.
%
(Use end-of-file, not dot, to end the message.) Look for the double
bounce in the alias mailbox.
17. Group membership test:
% cat > ~me/.qmail-groups
|groups >> MYGROUPS; exit 0
% /var/qmail/bin/qmail-inject me-groups < /dev/null
% cat ~me/MYGROUPS
MYGROUPS will show your normal gid and nothing else. (Under Solaris,
make sure to use /usr/ucb/groups; /usr/bin/groups is broken.)
18. SMTP server test: Forge some mail locally via SMTP.
% telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 domain ESMTP
helo dude
250-domain
250-PIPELINING
250 8BITMIME
mail <me@domain>
250 ok
rcpt <me@domain>
250 ok
data
354 go ahead
Subject: testing
This is a test.
.
250 ok 812345679 qp 12345
quit
221 domain
Connection closed by foreign host.
%
Look for the message in your mailbox.
19. Remote-local test: Send yourself some mail from another machine.
20. Remote-error test: I think you can figure this one out.
21. UA test: Try sending mail, first to a local account, then to a
remote account, with your normal user agent.
22. Remote-postmaster test: Send mail from another machine to
PoStMaStEr@domain. Look for the message in the alias mailbox.
That's it! To report success:
% ( echo 'First M. Last'; cat `cat SYSDEPS` ) \
| mail djb-qst@cr.yp.to
Replace First M. Last with your name. If you have questions about qmail,
join the qmail mailing list; see http://pobox.com/~djb/qmail.html.
|