Introduction to Exim
The Exim package contains a Mail
Transport Agent written by the University of Cambridge, released
under the GNU Public License.
This package is known to build and work properly using an LFS 12.2
platform.
Package Information
Additional Downloads
Exim Dependencies
Required
libnsl-2.0.1, File-FcntlLock-0.22 and pcre2-10.44
Optional
TDB (alternative to
GDBM, built in LFS), Cyrus
SASL-2.1.28, libidn-1.42, Linux-PAM-1.6.1, MariaDB-10.11.8 or
MySQL, OpenLDAP-2.6.8, GnuTLS-3.8.7.1,
PostgreSQL-16.4, SQLite-3.46.1, a graphical
environment, Heimdal GSSAPI, libspf2, and
OpenDMARC
Installation of Exim
Before building Exim, as the
root
user you should create the
group and user exim
which will run
the exim daemon:
groupadd -g 31 exim &&
useradd -d /dev/null -c "Exim Daemon" -g exim -s /bin/false -u 31 exim
Configure Exim with the following
commands:
sed -e 's,^BIN_DIR.*$,BIN_DIRECTORY=/usr/sbin,' \
-e 's,^CONF.*$,CONFIGURE_FILE=/etc/exim.conf,' \
-e 's,^EXIM_USER.*$,EXIM_USER=exim,' \
-e '/# USE_OPENSSL/s,^#,,' src/EDITME > Local/Makefile &&
printf "USE_GDBM = yes\nDBMLIB = -lgdbm\n" >> Local/Makefile
If you want to add Linux PAM
support, also run the following commands:
sed -i '/# SUPPORT_PAM=yes/s,^#,,' Local/Makefile
echo "EXTRALIBS=-lpam" >> Local/Makefile
Build Exim with the following
command:
make
This package does not come with a test suite.
Now, as the root
user:
make install &&
install -v -m644 doc/exim.8 /usr/share/man/man8 &&
install -vdm 755 /usr/share/doc/exim-4.98 &&
cp -Rv doc/* /usr/share/doc/exim-4.98 &&
ln -sfv exim /usr/sbin/sendmail &&
install -v -d -m750 -o exim -g exim /var/spool/exim
Command Explanations
sed -e ... >
Local/Makefile: Most of Exim's configuration options are defined in
Local/Makefile
, which is created from
the src/EDITME
file. This command
specifies the minimum set of options. Descriptions for the options
are listed below.
printf ... >
Local/Makefile: Setting those variables allows to
use GDBM instead of the default Berkeley DB. Remove this command if
you have installed Berkeley
DB (deprecated).
BIN_DIRECTORY=/usr/sbin
:
This installs all of Exim's
binaries and scripts in /usr/sbin
.
CONFIGURE_FILE=/etc/exim.conf
: This
installs Exim's main configuration
file in /etc
.
EXIM_USER=exim
: This tells
Exim that after the daemon no
longer needs root
privileges, the
process needs to hand off the daemon to the exim
user.
USE_OPENSSL
: uncommenting
USE_OPENSSL=yes
and USE_OPNSSL_PC=yes
tells the build system to use
OpenSSL, and to find the needed
libraries with pkg-config.
Uncomment EXIM_MONITOR
: This allows
building the Exim monitor program,
which requires X Window System
support, and is commented out by default.
ln -sfv exim
/usr/sbin/sendmail: Creates a link to sendmail for applications which
need it. Exim will accept most
Sendmail command-line options.
install -v -m750 -o exim -g exim
/var/spool/exim: Since /var/spool is owned by root
and this version of exim drops root
privileges early, to run as user
exim
, it cannot create the
/var/spool/exim
directory. As a work
around, it is created manually.
Adding Additional Functionality
To utilize some or all of the dependency packages, you'll need to
modify Local/Makefile
to include the
appropriate directives and parameters to link additional libraries
before you build Exim.
Local/Makefile
is heavily commented
with instructions on how to do this. Listed below is additional
information to help you link these dependency packages or add
additional functionality.
If you wish to build and install the .info
documentation, refer to
https://exim.org/exim-html-4.98/doc/html/spec_html/ch04.html#SECTinsinfdoc.
If you wish to build in Exim's interfaces for calling virus and
spam scanning software directly from access control lists,
uncomment the WITH_CONTENT_SCAN=yes
parameter and review the information found at
https://exim.org/exim-html-4.98/doc/html/spec_html/ch45.html.
To use a backend database other than GDBM , see the instructions at
https://exim.org/exim-html-4.98/doc/html/spec_html/ch04.html#SECTdb.
For SSL functionality, see the instructions at
https://exim.org/exim-html-4.98/doc/html/spec_html/ch04.html#SECTinctlsssl
and https://exim.org/exim-html-4.98/doc/html/spec_html/ch42.html.
For tcpwrappers functionality, see
the instructions at
https://exim.org/exim-html-4.98/doc/html/spec_html/ch04.html#SECID27.
For information about adding authentication mechanisms to the
build, see chapters 33—41 of https://exim.org/exim-html-4.98/doc/html/spec_html/index.html.
For information about linking Linux-PAM, refer to the instructions
https://exim.org/exim-html-4.98/doc/html/spec_html/ch11.html#SECTexpcond.
For information about linking database engine libraries used for
Exim name lookups, see the
instructions at https://exim.org/exim-html-4.98/doc/html/spec_html/ch09.html.
If you wish to add Readline
support to Exim when invoked in
“test
expansion” (-be
) mode,
see the information in the -be
section
of
https://exim.org/exim-html-4.98/doc/html/spec_html/ch05.html#id2525974.
You may wish to modify the default configuration and send log files
to syslog instead of the default /var/spool/exim/log
directory. See the
information at
https://exim.org/exim-html-4.98/doc/html/spec_html/ch-log_files.html.
A wealth of information can be also found at the Exim Wiki.
Configuring Exim
Config Files
/etc/exim.conf
and /etc/aliases
Configuration Information
Review the file /etc/exim.conf
, and
modify any settings to suit your needs. Note that the default
configuration assumes that the /var/mail
directory is world writable, but has
the sticky bit set. If you want to use the default configuration,
issue as the root
user:
chmod -v a+wt /var/mail
A default (nothing but comments) /etc/aliases
file is installed during the
package installation if this file did not exist on your system.
Create the necessary aliases and start the Exim daemon using the following commands:
cat >> /etc/aliases << "EOF"
postmaster: root
MAILER-DAEMON: root
EOF
/usr/sbin/exim -bd -q15m
Note
To protect an existing /etc/aliases
file, the command above appends
these aliases to it. This file should be checked and duplicate
aliases removed, if present.
The /usr/sbin/exim -bd
-q15m command starts the Exim daemon with a 15 minute interval in
processing the mail queue. Adjust this parameter to suit your
desires.
Linux PAM Configuration
If you have built Exim with
Linux PAM support, you need to
create a PAM configuration file
to get it working correctly with BLFS.
Issue the following command as the root
user to create the configuration file
for Linux PAM:
cat > /etc/pam.d/exim << "EOF"
# Begin /etc/pam.d/exim
auth include system-auth
account include system-account
session include system-session
# End /etc/pam.d/exim
EOF
Systemd Unit
To automatically start exim at boot, install the
exim.service
unit included in the blfs-systemd-units-20240801 package:
make install-exim
Contents
Installed Programs:
exicyclog, exigrep, exim, exim-4.98-2,
exim_checkaccess, exim_dbmbuild, exim_dumpdb, exim_fixdb,
exim_lock, exim_tidydb, eximstats, exinext, exipick, exiqgrep,
exiqsumm, exiwhat, and optionally, eximon, eximon.bin, and
sendmail (symlink)
Installed Libraries:
None
Installed Directories:
/usr/share/doc/exim-4.98 and
/var/spool/exim
Short Descriptions
exicyclog
|
cycles Exim log files
|
exigrep
|
searches Exim log files
|
exim
|
is a symlink to the exim-4.98-2 MTA daemon
|
exim-4.98-2
|
is the Exim mail
transport agent daemon
|
exim_checkaccess
|
states whether a given recipient address from a given
host is acceptable or not
|
exim_dbmbuild
|
creates and rebuilds Exim databases
|
exim_dumpdb
|
writes the contents of Exim databases to the standard
output
|
exim_fixdb
|
modifies data in Exim
databases
|
exim_lock
|
locks a mailbox file
|
exim_tidydb
|
removes old records from Exim databases
|
eximstats
|
generates mail statistics from Exim log files
|
exinext
|
queries remote host retry times
|
exipick
|
selects messages based on various criteria
|
exiqgrep
|
is a utility for selective queue listing
|
exiqsumm
|
produces a summary of the messages in the mail queue
|
exiwhat
|
queries running Exim
processes
|
eximon
|
is a start-up shell script for eximon.bin used to set
the required environment variables before running the
program
|
eximon.bin
|
is a monitor program which displays current information
in an X window, and also
contains a menu interface to Exim's command line administration
options
|