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