Commit | Line | Data |
---|---|---|
2117e02e MW |
1 | SAVE COPIES OF YOUR OUTGOING MAIL! Like any other piece of software (and |
2 | information generally), the qmail system comes with NO WARRANTY. It's | |
3 | much more secure and reliable than sendmail, but that's not saying much. | |
4 | ||
5 | ||
6 | Things you have to decide before starting: | |
7 | ||
8 | * The qmail home directory, normally /var/qmail. To change this | |
9 | directory, edit conf-qmail now. | |
10 | ||
11 | * The names of the qmail users and the qmail groups. To change these | |
12 | names, edit conf-users and conf-groups now. | |
13 | ||
14 | ||
15 | Installation steps that won't interfere with sendmail: | |
16 | ||
17 | 1. Create the qmail home directory: | |
18 | # mkdir /var/qmail | |
19 | 2. Read INSTALL.ids. You must set up the qmail group and the qmail | |
20 | users before compiling the programs. | |
21 | 3. Compile the programs: | |
22 | # make | |
23 | 4. Create the formatted man pages, *.0: | |
24 | # make man | |
25 | 5. Create the qmail directory tree: | |
26 | # make setup | |
27 | 6. Run instcheck to make sure it doesn't print any warnings: | |
28 | # make check | |
29 | 7. Read INSTALL.ctl and FAQ. Minimal survival command: | |
30 | # ./qmail-config | |
31 | 8. Read INSTALL.alias. Minimal survival command: | |
32 | # (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root) | |
33 | # chmod 644 ~alias/.qmail* | |
34 | 9. Read INSTALL.mbox. | |
35 | 10. Read qmail-upgrade.0. This is what your users will need to know | |
36 | about the switch from sendmail to qmail. | |
37 | ||
38 | ||
39 | Pre-upgrade tests: | |
40 | ||
41 | 11. Enable deliveries of messages injected into qmail: | |
42 | # env - PATH="/var/qmail/bin:$PATH" \ | |
43 | qmail-start ./Mailbox splogger qmail & | |
44 | Make sure to include the ./ in ./Mailbox. | |
45 | 12. Look for a | |
46 | qmail: running | |
47 | line in syslog. qmail-send always prints either ``cannot start'' or | |
48 | ``running''. (The big number is a splogger timestamp.) | |
49 | 13. Do a ps and look for the qmail daemons. There should be four of | |
50 | them, all idle: qmail-send, running as qmails; qmail-lspawn, running | |
51 | as root; qmail-rspawn, running as qmailr; and qmail-clean, running | |
52 | as qmailq. You will also see the splogger process. | |
53 | 14. Local-local test: Send yourself an empty message. (Replace ``me'' | |
54 | with your username. Make sure to include the ``to:'' colon.) | |
55 | % echo to: me | /var/qmail/bin/qmail-inject | |
56 | The message will show up immediately in ~/Mailbox, and syslog will | |
57 | show something like this: | |
58 | qmail: new msg 53 | |
59 | qmail: info msg 53: bytes 246 from <me@domain> qp 20345 uid 666 | |
60 | qmail: starting delivery 1: msg 53 to local me@domain | |
61 | qmail: delivery 1: success: did_1+0+0/ | |
62 | qmail: end msg 53 | |
63 | (53 is an inode number; 20345 is a process ID; your numbers will | |
64 | probably be different.) | |
65 | 15. Local-error test: Send a message to a nonexistent local address. | |
66 | % echo to: nonexistent | /var/qmail/bin/qmail-inject | |
67 | qmail: new msg 53 | |
68 | qmail: info msg 53: bytes 246 from <me@domain> qp 20351 uid 666 | |
69 | qmail: starting delivery 2: msg 53 to local nonexistent@domain | |
70 | qmail: delivery 2: failure: No_such_address.__#5.1.1_/ | |
71 | qmail: bounce msg 53 qp 20357 | |
72 | qmail: end msg 53 | |
73 | qmail: new msg 54 | |
74 | qmail: info msg 54: bytes 743 from <> qp 20357 uid 666 | |
75 | qmail: starting delivery 3: msg 54 to local me@domain | |
76 | qmail: delivery 3: success: did_1+0+0/ | |
77 | qmail: end msg 54 | |
78 | You will now have a bounce message in ~/Mailbox. | |
79 | 16. Local-remote test: Send an empty message to your account on another | |
80 | machine. | |
81 | % echo to: me@wherever | /var/qmail/bin/qmail-inject | |
82 | qmail: new msg 53 | |
83 | qmail: info msg 53: bytes 246 from <me@domain> qp 20372 uid 666 | |
84 | qmail: starting delivery 4: msg 53 to remote me@wherever | |
85 | qmail: delivery 4: success: 1.2.3.4_accepted_message./... | |
86 | qmail: end msg 53 | |
87 | There will be a pause between ``starting delivery'' and ``success''; | |
88 | SMTP is slow. Check that the message is in your mailbox on the other | |
89 | machine. | |
90 | 17. Local-postmaster test: Send mail to postmaster, any capitalization. | |
91 | % echo to: POSTmaster | /var/qmail/bin/qmail-inject | |
92 | Look for the message in ~alias/Mailbox. | |
93 | 18. Double-bounce test: Send a message with a completely bad envelope. | |
94 | % /var/qmail/bin/qmail-inject -f nonexistent | |
95 | To: unknownuser | |
96 | Subject: testing | |
97 | ||
98 | This is a test. This is only a test. | |
99 | % | |
100 | (Use end-of-file, not dot, to end the message.) Look for the double | |
101 | bounce in ~alias/Mailbox. | |
102 | 19. Group membership test: | |
103 | % cat > ~me/.qmail-groups | |
104 | |groups >> MYGROUPS; exit 0 | |
105 | % /var/qmail/bin/qmail-inject me-groups < /dev/null | |
106 | % cat ~me/MYGROUPS | |
107 | MYGROUPS will show your normal gid and nothing else. (Under Solaris, | |
108 | make sure to use /usr/ucb/groups; /usr/bin/groups is broken.) | |
109 | ||
110 | ||
111 | Upgrading from sendmail to qmail: | |
112 | ||
113 | 20. Read INSTALL.boot. You must replace the sendmail invocation in your | |
114 | boot scripts with an appropriate qmail invocation. | |
115 | 21. Kill the sendmail daemon. You should first kill -STOP the daemon; if | |
116 | any children are running, you should kill -CONT, wait, kill -STOP | |
117 | again, and repeat ad nauseam. If there aren't any children, kill | |
118 | -TERM and then kill -CONT. | |
119 | 22. Replace sendmail with a link to qmail's ``sendmail'' wrapper: | |
120 | # mv /usr/lib/sendmail /usr/lib/sendmail.bak | |
121 | # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail | |
122 | 23. Set up qmail-smtpd in /etc/inetd.conf (all on one line): | |
123 | smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env | |
124 | tcp-env /var/qmail/bin/qmail-smtpd | |
125 | Also comment out comsat in /etc/inetd.conf. | |
126 | 24. Reboot. (Or kill -HUP your inetd and make sure the qmail daemons | |
127 | are running.) | |
128 | 25. Try to flush the sendmail queue: | |
129 | # /usr/lib/sendmail.bak -q | |
130 | You can safely run sendmail.bak -q (or even sendmail.bak -q15m) | |
131 | while qmail is running. Do this until the sendmail queue is empty. | |
132 | This may take several days. | |
133 | 26. Disable all the sendmail and binmail programs in your system. The | |
134 | safest approach is to chmod 0 everything. Some locations to check: | |
135 | /usr/sbin/sendmail, /usr/lib/sendmail.bak, /usr/lib/sendmail.mx, | |
136 | /bin/mail, /usr/libexec/mail.local. | |
137 | 27. Make sure that ``mail'' still invokes a reasonable mailer. Under | |
138 | SVR4 you may want to link mail to mailx. | |
139 | ||
140 | ||
141 | Post-upgrade tests (can be done immediately after step 24): | |
142 | ||
143 | 28. SMTP server test: Forge some mail locally via SMTP. | |
144 | % telnet 127.0.0.1 25 | |
145 | Trying 127.0.0.1... | |
146 | Connected to 127.0.0.1. | |
147 | Escape character is '^]'. | |
148 | 220 domain ESMTP | |
149 | helo dude | |
150 | 250-domain | |
151 | 250-PIPELINING | |
152 | 250 8BITMIME | |
153 | mail <me@domain> | |
154 | 250 ok | |
155 | rcpt <me@domain> | |
156 | 250 ok | |
157 | data | |
158 | 354 go ahead | |
159 | Subject: testing | |
160 | ||
161 | This is a test. | |
162 | . | |
163 | 250 ok 812345679 qp 12345 | |
164 | quit | |
165 | 221 domain | |
166 | Connection closed by foreign host. | |
167 | % | |
168 | Look for the message in your mailbox. | |
169 | 29. Remote-local test: Send yourself some mail from another machine. | |
170 | 30. Remote-error test: I think you can figure this one out. | |
171 | 31. UA test: Try sending mail, first to a local account, then to a | |
172 | remote account, with your normal user agent. | |
173 | 32. Remote-postmaster test: Send mail from another machine to | |
174 | PoStMaStEr@domain. Look for the message in ~alias/Mailbox. | |
175 | ||
176 | ||
177 | That's it! To report success: | |
178 | % ( echo 'First M. Last'; cat `cat SYSDEPS` ) \ | |
179 | | mail djb-qst@koobera.math.uic.edu | |
180 | Replace First M. Last with your name. If you have questions about qmail, | |
181 | contact qmail@pobox.com. |