constify
[exim.git] / src / README
1 THE EXIM MAIL TRANSFER AGENT VERSION 4
2 --------------------------------------
3
4 Copyright (c) 1995 - 2018 University of Cambridge.
5 SPDX-License-Identifier: GPL-2.0-or-later
6 See the file NOTICE for conditions of use and distribution.
7
8 There is a book about Exim by Philip Hazel called "The Exim SMTP Mail Server",
9 published by UIT Cambridge in May 2003. This is the official guide for Exim 4.
10 The current edition covers release 4.10 and a few later extensions.
11
12 The O'Reilly book about Exim ("Exim The Mail Transfer Agent" by Philip Hazel)
13 covers Exim 3, which is now deprecated. Exim 4 has a large number of changes
14 from Exim 3, though the basic structure and philosophy remains the same. The
15 older book may be helpful for the background, but a lot of the detail has
16 changed, so it is likely to be confusing to newcomers.
17
18 There is a website at https://www.exim.org; this contains details of the
19 mailing list exim-users@exim.org.
20
21 A copy of the Exim FAQ should be available from the same source that you used
22 to obtain the Exim distribution. Additional formats for the documentation
23 (PostScript, PDF, Texinfo, and HTML) should also be available there.
24
25
26 EXIM DISTRIBUTION
27 -----------------
28
29 Unpacking the tar file should produce a single directory called exim-<version>,
30 containing the following files and directories:
31
32 ACKNOWLEDGMENTS  some acknowledgments
33 CHANGES          a conventional file name; it indirects to some files in doc/
34 LICENCE          the GNU General Public Licence
35 Local/           an empty directory for local configuration files
36 Makefile         top level Makefile
37 NOTICE           notice about conditions of use
38 OS/              directory containing OS-specific files
39 README           this file
40 README.UPDATING  special notes about updating from previous versions
41 doc/             directory of documentation files
42 exim_monitor/    directory of source files for the Exim monitor
43 scripts/         directory of scripts used in the build process
44 src/             directory of source files
45 util/            directory of independent utilities
46
47 Please see the documentation files for full instructions on how to build,
48 install, and run Exim. For straightforward installations on operating systems
49 to which Exim has already been ported, the building process is as follows:
50
51 . Ensure that the top-level Exim directory (e.g. exim-4.80) is the current
52   directory (containing the files and directories listed above).
53
54 . Edit the file called src/EDITME and put the result in a new file called
55   Local/Makefile. There are comments in src/EDITME telling you what the various
56   parameters are. You must at least provide values for BIN_DIRECTORY,
57   CONFIGURE_FILE, EXIM_USER and EXIM_GROUP (if EXIM_USER is numeric), and it is
58   recommended that SPOOL_DIRECTORY also be defined here if it is a fixed path.
59
60 . There are a number of additional parameters whose defaults can also be
61   overridden by additions to Local/Makefile. The basic defaults are in
62   OS/Makefile-Default, but these settings are overridden for some operating
63   systems by values on OS/Makefile-<osname>. The most commonly-required change
64   is probably the setting of CC, which defines the command to run the C
65   compiler, and which defaults to gcc. To change it to cc, add the following
66   line to Local/Makefile:
67
68   CC=cc
69
70   If you are running the Berkeley DB package as your dbm library, then it is
71   worth putting USE_DB=yes in Local/Makefile, to get Exim to use the native
72   interface. This is the default for some operating systems. See
73   doc/dbm.discuss.txt for discussion on dbm libraries.
74
75 . If you want to compile the Exim monitor, edit the file called
76   exim_monitor/EDITME and put the result in a file called Local/eximon.conf.
77   If you are not going to compile the Exim monitor, you should have commented
78   out the line starting EXIM_MONITOR= when creating Local/Makefile. There are
79   comments in exim_monitor/EDITME about the values set therein, but in this
80   case everything can be defaulted if you wish.
81
82 . If your system is not POSIX compliant by default, then you might experience
83   fewer problems if you help point the build tools to the POSIX variants. For
84   instance, on Solaris:
85
86   PATH=/usr/xpg4/bin:$PATH make SHELL=/usr/xpg4/bin/sh
87
88 . Type "make". This will determine what your machine's architecture and
89   operating system are, and create a build directory from those names (e.g.
90   "build-SunOS5-sparc"). Symbolic links are created from the build directory
91   to the source directory. A configured make file called <build-dir>/makefile
92   is then created, and "make" then goes on to use this to build various
93   binaries and scripts inside the build directory.
94
95 . Type "make install", while running as root, to install the binaries,
96   scripts, and a default configuration file. To see what this command is
97   going to do before risking it, run "../scripts/exim_install -n" (not as
98   root) from within the build directory.
99
100 . When you are ready to try running Exim, see the section entitled "Testing"
101   in the chapter called "Building and Installing Exim" in doc/spec.txt, or in
102   one of the other forms of the documentation.
103
104 . Running the install script does NOT replace /usr/sbin/sendmail or
105   /usr/lib/sendmail with a link to Exim. That step you must perform by hand
106   when you are satisfied that Exim is running correctly.
107
108 . Note that the default configuration refers to an alias file called
109   /etc/aliases. It used to be the case that every Unix had that file, because
110   it was the Sendmail default. These days, there are systems that don't have
111   /etc/aliases, so you might need to set it up. Your aliases should at least
112   include an alias for "postmaster".
113
114 . Consider notifying users of the change of MTA. Exim has different
115   capabilities, and there are various operational differences, such as stricter
116   adherence to the RFCs than some MTAs, and differences in the text of
117   messages produced by various command-line options.
118
119 . The default configuration file will use your host's fully qualified name (as
120   obtained from the uname() function) as the only local mail domain and as the
121   domain which is used to qualify unqualified local mail addresses. See the
122   comments in the default configuration file if you want to change these.
123
124 The operating systems currently supported are: AIX, BSD/OS (aka BSDI), Darwin
125 (Mac OS X), DGUX, FreeBSD, GNU/Hurd, GNU/Linux, HI-OSF (Hitachi), HP-UX, IRIX,
126 MIPS RISCOS, NetBSD, OpenBSD, QNX, SCO, SCO SVR4.2 (aka UNIX-SV), Solaris (aka
127 SunOS5), SunOS4, Tru64-Unix (formerly Digital Unix, formerly DEC-OSF1), Ultrix,
128 and Unixware. However, code is not available for determining system load
129 averages on Ultrix. There are also configuration files for compiling Exim in
130 the Cygwin environment that can be installed on systems running Windows.
131 However, the documentation supplied with the distribution does not contain any
132 information about running Exim in the Cygwin environment.
133
134
135 ******* Modifying the building process ******
136
137 Instructions for overriding the build-time options for Exim are given in the
138 manual. You should never have to modify any of the supplied files; it should be
139 possible to override everything that is necessary by creating suitable files in
140 the Local directory. This means that you won't need to redo your modifications
141 for the next release of Exim. If you find you can't avoid changing some other
142 file, let me know and I'll see if I can find a way of making that unnecessary.
143
144 Briefly, the building process concatenates a number of files in order to
145 construct its working makefile. If <ostype> and <archtype> are the operating
146 system and architecture types respectively, the files used are:
147
148   OS/Makefile-Default
149   OS/Makefile-<ostype>
150   Local/Makefile
151   Local/Makefile-<ostype>
152   Local/Makefile-<archtype>
153   Local/Makefile-<ostype>-<archtype>
154   Local/Makefile-<buildname>
155   OS/Makefile-Base
156
157 Of the Local/* files, only Local/Makefile is required to exist; the rest are
158 optional. Because of the way "make" works, values set in later files override
159 values set in earlier ones. Thus you can set up general options that are
160 overridden for specify operating systems and/or architectures if you wish.
161
162
163 ******* IMPORTANT FOR GNU/LINUX USERS *******
164
165 Exim 4 won't work with some versions of Linux if you put its spool directory on
166 an NFS partition. You get an error about "directory sync failed". This is
167 because of a bug in Linux NFS. A fix has been promised in due course. It is in
168 any case much better to put Exim's spool directory on local disc.
169
170 If you get an error complaining about the lack of functions such as dbm_open()
171 when building Exim, the problem is that it hasn't been able to find a DBM
172 library. See the file doc/dbm.discuss.txt for a discussion about the various
173 DBM libraries.
174
175 Different versions of Linux come with different DBM libraries, stored in
176 different places. As well as setting USE_DB=yes in Local/Makefile if Berkeley
177 DB is in use, it may also be necessary to set a value in DBMLIB to specify the
178 inclusion of the DBM library, for example: DBMLIB=-ldb or DBMLIB=-lgdbm.
179
180 If you are using RedHat 7.0, which has DB3 as its DBM library, you need to
181 install the db-devel package before building Exim. This will have a name like
182 db3-devel-3.1.14-16.i386.rpm (but check which release of DB3 you have).
183
184 The building scripts now distinguish between versions of Linux with the older
185 libc5 and the more recent ones that use libc6. In the latter case, USE_DB and
186 -ldb are the default settings, because DB is standard with libc6.
187
188 It appears that with glibc-2.1.x (a minor libc upgrade), they have standardised
189 on Berkeley DB2 (instead of DB1 in glibc-2.0.x). If you want to get DB1 back,
190 you need to set
191
192   INCLUDE=-I/usr/include/db1
193   DBMLIB=-ldb1
194
195 in your Local/Makefile. If you omit DBMLIB=-ldb1 Exim will link successfully
196 using the DB1 compatibility interface to DB2, but it will expect the file
197 format to be that of DB2, and so will not be able to read existing DB1 files.
198
199
200 ******* IMPORTANT FOR FREEBSD USERS *******
201
202 On FreeBSD there is a file called /etc/mail/mailer.conf which selects what to
203 run for various MTA calls. Instead of changing /usr/sbin/sendmail, you should
204 edit this file instead, to read something like this:
205
206 sendmail          /usr/exim/bin/exim
207 send-mail         /usr/exim/bin/exim
208 mailq             /usr/exim/bin/exim -bp
209 newaliases        /usr/bin/true
210
211 You will most probably need to add the line:
212
213 daily_status_include_submit_mailq="NO"  # No separate 'submit' queue
214
215 to /etc/periodic.conf. This stops FreeBSD running the command "mailq -Ac"
216 (which Exim doesn't understand) to list a separate submit queue (which Exim
217 doesn't have).
218
219 If you are using FreeBSD prior to 3.0-RELEASE, and you are not using the ports
220 mechanism to install Exim, then you should install the perl5 package
221 (/usr/local/bin/perl) and use that instead of perl in the base system, which is
222 perl4 up until 3.0-RELEASE. If you are using the ports mechanism, this is
223 handled for you.
224
225 If you are upgrading from version 2.11 of Exim or earlier, and you are using
226 DBM files, and you did not previously have USE_DB=yes in your Local/Makefile,
227 then you will either have to put USE_DB=no in your Local/Makefile or (better)
228 rebuild your DBM data files. The default for FreeBSD has been changed to
229 USE_DB=yes, since FreeBSD comes with Berkeley DB. However, using the native DB
230 interface means that the data files no longer have the ".db" extension.
231
232
233
234 ******* IMPORTANT FOR Tru64 (aka Digital Unix aka DEC-OSF1) USERS *******
235
236 The default compiler may not recognize ANSI C by default. You may have to set
237
238 CC=cc
239 CFLAGS=-std1
240
241 in Local/Makefile in order to compile Exim. A user reported another small
242 problem with this operating system: In the file /usr/include/net/if.h a
243 semicolon was missing at the end of line 143.
244
245
246
247 ******* IMPORTANT FOR SCO USERS *******
248
249 The building scripts assume the existence of the "ar" command, which is part of
250 the Development System. However, it is also possible to use the "gar" command
251 that is part of the GNU utilities that are distributed with the 5.0.7 release.
252 If you have "gar" and not "ar" you should include
253
254 AR=gar
255
256 in your Local/Makefile.
257
258
259
260 ******* IMPORTANT FOR Unixware 2.x USERS *******
261
262 Unixware does not include db/dbm/ndbm with its standard compiler (it is
263 available with /usr/ucb/cc, but that has bugs of its own). You should install
264 gcc and Berkeley DB (or another dbm library if you really insist). If you use a
265 different dbm library you will need to override the default setting of DBMLIB.
266
267 DB 1.85 and 2.x can be found at http://www.sleepycat.com/. They have different
268 characteristics. See the discussion of dbm libraries in doc/dbm.discuss.txt. DB
269 needs to be compiled with gcc and you need a 'cc' in your path before the
270 Unixware CC to compile it.
271
272 Don't bother even starting to install exim on Unixware unless you have
273 installed gcc and use it for everything.
274
275
276 ******* IMPORTANT FOR SOLARIS 2.3 (SUNOS 5.3) USERS *******
277
278 The file /usr/include/sysexits.h does not exist on Solaris 2.3 (and presumably
279 earlier versions), though it is present in 2.4 and later versions. To compile
280 Exim on Solaris 2.3 it is necessary to include the line
281
282 CFLAGS=-O -DNO_SYSEXITS -DEX_TEMPFAIL=75
283
284 in your Local/Makefile.
285
286
287 ******* IMPORTANT FOR IRIX USERS *******
288
289 There are problems with some versions of gcc on IRIX, as a result of which all
290 DNS lookups yield either 0.0.0.0 or 255.255.255.255. Releases of gcc after
291 2.7.2.3 (which works ok) are affected. Specifically, 2.8.* is affected, as are
292 the 2.95 series. From release 3.21 of Exim, a workaround for this problem
293 should automatically be enabled when Exim is compiled on IRIX using gcc.
294
295 As from version 2.03 there is IRIX-specific code in Exim to obtain a list of
296 all the IP addresses on local interfaces, including alias addresses, because
297 the standard code gives only non-alias addresses in IRIX. The code came from
298 SGI, with the comment:
299
300 "On 6.2 you need the libc patch to get the sysctl() stub and the networking
301 kernel patch to get the support."
302
303 It seems that this code doesn't work on at least some earlier versions of IRIX
304 (e.g. IRIX 5.3). If you can't compile under IRIX and the problem appears to
305 relate to sysctl(), try commenting or #ifdef-ing out all the code in the
306 file OS/os.c-IRIX.
307
308
309 ******* IMPORTANT FOR HP-UX USERS *******
310
311 There are two different sets of configuration files for HP-UX. Those ending in
312 HP-UX-9 are used for HP-UX version 9, and have been tested on HP-UX version
313 9.05. Those ending in HP-UX are for later releases, and have been tested on
314 HP-UX version 11.00. If you are using a version of HP-UX between 9.05 and
315 11.00, you may need to edit the file OS/os.h-HP-UX if you encounter problems
316 building Exim.
317
318 If you want to use the Sieve facility in Exim, the alias iso-8859-1 should be
319 added to the alias definition for iso81 in /usr/lib/nls/iconv/config.iconv. You
320 also need to add a new alias definition: "alias utf8 utf-8".
321
322
323 ******* IMPORTANT FOR QNX USERS *******
324
325 1. Exim makes some assumptions about the shell in the makefiles. The "normal"
326    QNX shell (ksh) will not work. You need to install "bash", which can be
327    obtained from the QNX freeware on QUICS. Install it to /usr/local/bin/bash
328    Then you need to change the SHELL definition at the top of the main Makefile
329    to SHELL=/usr/local/bin/bash. The file OS/Makefile-QNX sets the variable
330    MAKE_SHELL to /usr/local/bin/bash. If you install bash in a different place,
331    you will need to set MAKE_SHELL in your Local/Makefile in order to override
332    this.
333
334 2. For some strange reason make will fail at building "exim_dbmbuild" when
335    called the first time. However simply calling make a second time will solve
336    the problem. Alternatively, run "make makefile" and then "make".
337
338
339 ******* IMPORTANT FOR ULTRIX USERS *******
340
341 You need to set SHELL explicitly in the make call when building on ULTRIX,
342 that is, type "make SHELL=sh5".
343
344
345 ******* IMPORTANT FOR GNU/HURD USERS *******
346
347 GNU/Hurd doesn't (at the time of writing, June 1999) have the ioctls for
348 finding out the IP addresses of the local interfaces. You therefore have to set
349 local_interfaces yourself. Otherwise it will treat only 127.0.0.1 as local.
350
351 Philip Hazel