Introduction to Exim
        
        
          The Exim package contains a Mail
          Transport Agent written by the University of Cambridge, released
          under the GNU Public License.
        
        
          ![[Note]](../images/note.png) 
          
            Note
          
          
            Development versions of BLFS may not build or run some packages
            properly if LFS or dependencies have been updated since the most
            recent stable versions of the books.
          
         
        
          Package Information
        
        
        
          Additional Downloads
        
        
        
          Exim Dependencies
        
        
          Required
        
        
          libnsl-2.0.1 and File-FcntlLock-0.22
        
        
          Optional
        
        
          TDB (alternative to
          GDBM, built in LFS), Cyrus
          SASL-2.1.28, libidn-1.43, Linux-PAM-1.7.1, MariaDB-11.8.3 or
          MySQL, OpenLDAP-2.6.10, GnuTLS-3.8.10,
          PostgreSQL-18.0, 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.2 &&
cp      -Rv doc/*   /usr/share/doc/exim-4.98.2 &&
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.2/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.2/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.2/doc/html/spec_html/ch04.html#SECTdb.
        
        
          For SSL functionality, see the instructions at 
          https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch04.html#SECTinctlsssl
          and https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch42.html.
        
        
          For tcpwrappers functionality, see
          the instructions at 
          https://exim.org/exim-html-4.98.2/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.2/doc/html/spec_html/index.html.
        
        
          For information about linking Linux-PAM, refer to the instructions 
          https://exim.org/exim-html-4.98.2/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.2/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.2/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.2/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]](../images/note.png) 
            
              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.2-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.2 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-2 MTA
                    daemon
                   | 
              
                | 
                    exim-4.98.2-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
                   |