#### Beyond Linux® From Scratch (System V Edition) - Version 12.3

### Chapter 21. Mail Server Software

- Prev

  Dovecot-2.4.0

- Next

  Postfix-3.10.1

- Up
- Home

# Exim-4.98.1

## 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.3 platform.

### Package Information

- Download (HTTP): https://ftp.exim.org/pub/exim/exim4/exim-4.98.1.tar.xz

- Download MD5 sum: 7465a700b17ce3c01d59d7e0d59be5a1

- Download size: 1.9 MB

- Estimated disk space required: 19 MB

- Estimated build time: 0.1 SBU

### Additional Downloads

- Additional formats of the documentation (text-based docs are shipped with the sources) can be downloaded by following the links shown at https://exim.org/docs.html.

### Exim Dependencies

#### Required

libnsl-2.0.1, File-FcntlLock-0.22 and pcre2-10.45

#### Optional

TDB (alternative to GDBM, built in LFS), Cyrus SASL-2.1.28, libidn-1.42, Linux-PAM-1.7.0, MariaDB-11.4.5 or MySQL, OpenLDAP-2.6.9, GnuTLS-3.8.9, PostgreSQL-17.4, SQLite-3.49.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.1 &&
    cp      -Rv doc/*   /usr/share/doc/exim-4.98.1 &&

    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.1/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.1/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.1/doc/html/spec_html/ch04.html#SECTdb.

For SSL functionality, see the instructions at https://exim.org/exim-html-4.98.1/doc/html/spec_html/ch04.html#SECTinctlsssl and https://exim.org/exim-html-4.98.1/doc/html/spec_html/ch42.html.

For tcpwrappers functionality, see the instructions at https://exim.org/exim-html-4.98.1/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.1/doc/html/spec_html/index.html.

For information about linking Linux-PAM, refer to the instructions https://exim.org/exim-html-4.98.1/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.1/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.1/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.1/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

### Boot Script

To automatically start exim at boot, install the `/etc/rc.d/init.d/exim` init script included in the blfs-bootscripts-20250225 package:

    make install-exim

The bootscript also starts the Exim daemon and dispatches a queue runner process every 15 minutes. Modify the `-q`<time interval>`` parameter in `/etc/rc.d/init.d/exim`, if necessary for your installation.

## Contents

Installed Programs: exicyclog, exigrep, exim, exim-4.98.1-2, exim_checkaccess, exim_dbmbuild, exim_dumpdb, exim_fixdb, exim_id_update, exim_lock, exim_msgdate, 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.1 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.1-2 MTA daemon
exim-4.98.1-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_update_id | upgrades and downgrades Exim message-id formats in spool files
exim_lock | locks a mailbox file
exim_msgdate | converts an Exim message-id to a human readable form
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

- Prev

  Dovecot-2.4.0

- Next

  Postfix-3.10.1

- Up
- Home