TITLE: XMAIL LFS VERSION: 3.3, 4.0 and CVS AUTHOR: Richard Downing SYNOPSIS: How to set up xmail-1.11 instead of sendmail, postfix, qmail at al. HINT: This hint explains how to build and set up xmail on your LFS system. Xmail, by Davide Libenzi, is a single server which replaces, say, sendmail+qpopper+fetchmail, or as I used on an LFS system long ago, postfix+procmail+fetchmail+qpopper. And since I know that this hint is linked to from the Xmail website, I should add for Xmail readers that LFS = Linux From Scratch - the best way to learn Linux and Unix, by building one from sources: Visit http://www.linuxfromscratch.org Why Xmail? Basically: why install three or four packages when one will do the job? The big problem with xmail-1.11 is that Davide hasn't got around to writing either a configure script or an installation script. This presents just a few interesting opportunities for error, especially if you are still a bit unix-challenged. However once the package is installed it appears to work well and do what it is advertised to do. There is an active, knowledgable, but a bit busy, mailing list. I have used these instructions on a number of LFS builds, including my latest, An LFS CVS20021105 with glibc-2.3.1/gcc-3.2.1, with complete success. Obtain and Unpack the package. ------------------------------ Download the package from: http://www.xmailserver.org It's a .tar.gz, so unpack in the usual way, and cd xmail-1.11. (Note: I've used this process to build Xmail's since version 1.8, so I expect they will still work for the next few releases - let me know if they let you down or need clarifying) Start by checking out the documentation in the docs directory: Readme.html or Readme.txt is the only manual! Build the executables. ---------------------- Choose your Makefile depending on the architecture of your LFS machine: make -f Makefile.lnx - for an i86 box make -f Makefile.slx - for a SPARC make -f Makefile.plx - for a PPC (Note I only have experience with i86) You can strip the executables now if space is an issue. This will build Xmail and it's toolset, this includes a SysV init script which works on a LFS system, but more on that later. Install Xmail. -------- This is where the fun comes. Su to root if you are not already. cp -a MailRoot /var chmod 700 /var/MailRoot Most of XMail's files are held in /var/MailRoot, which is only accessable by root. cp XMail XMCrypt MkUsers sendmail /var/MailRoot/bin However the CtrlClnt binary needs to be accessible to whoever is going to administer the xmail system: cp CtrlClnt /usr/bin Copy the Manual to appropriate places: cp -p Readme.txt /usr/share/xmail/Manual.txt cp Readme.html /usr/share/xmail/Manual.html If you plan to use Davide's init script copy it now: cp xmail /etc/rc.d/init.d Or create a more LFS-like script, such as: cat > /etc/rc.d/init.d/xmail << "EOF" #!/bin/bash # Begin $rc_base/init.d/XMail # Based on sysklogd script from LFS-3.1 and earlier. # Rewritten by Gerard Beekmans - gerard@linuxfromscratch.org # # XMail init script by Richard A Downing - richard.downing@bcs.org.uk # using LFS template and XMail-1.11 skeleton. source /etc/sysconfig/rc source $rc_functions export MAIL_ROOT=/var/MailRoot export MAIL_CMD_LINE="-Qn 2 -Pl -Sl -Fl -Cl -Ll" PATH=$XMAIL_ROOT/bin:$PATH case "$1" in start) echo "Starting XMail ..." loadproc $MAIL_ROOT/bin/XMail ;; stop) echo "Stopping XMail ..." killproc XMail ;; reload) echo "Reloading XMail ..." reloadproc XMail ;; restart) $0 stop sleep 1 $0 start ;; status) statusproc XMail ;; *) echo "Usage: $0 {start|stop|reload|restart|status}" exit 1 ;; esac # End $rc_base/init.d/XMail EOF Replace or create a sendmail script ----------------------------------- If your MUA (Kmail, for instance) interfaces (when sending mail) with the MTA using SMTP you can skip this step entirely, but some MUA's need a sendmail script which you can create like this. The sendmail executable needs the SETGUID bit set to run as root and this might be a security hole. If you already have a sendmail script or program, move it aside (your's might be in /usr/bin or elsewhere): mv /usr/sbin/sendmail /usr/sbin/sendmail.orig Copy Xmail's sendmail executable to an appropriate place, and set it's SETUID bit so that it runs as root. cp sendmail /usr/sbin/sendmail.xmail chmod +s /usr/sbin/sendmail.xmail And create a sendmail script to set the environment and call the executable: cat > /usr/sbin/sendmail << "EOF" #!/bin/bash # This script sets the environment for XMail's sendmail and then calls it. # The script exists so that software that expects sendmail can use XMail. if [ -z $MAIL_ROOT ]; then export MAIL_ROOT=/var/MailRoot fi /usr/sbin/sendmail.xmail $* # End /usr/sbin/sendmail EOF chmod +x /usr/sbin/sendmail Configure Xmail's server.tab. ----------------------------- It's important to note that all of xmail's configuration files use the 'tab' character as a separator character - don't use spaces or extra tabs, and every line, EVEN THE LAST ONE in a file must have a terminating . For this reason, apart from the following, I don't edit the tab files directly, prefering the control interface, see later. Use your favourite text editor to edit /var/MailRoot/server.tab for your domain name, and set the names of the user's who will get error and postmaster messages. The files as delivered contain a reasonable starting point with a domain called 'xmailserver.test' which you can use to try things out if you want. The server configuration variables are well described in part 12 of the Manual (which you saved in /usr/share/xmail/Manual.txt !) - so check what your situation needs. My server.tab is: "RootDomain" "109bean.org.uk" "POP3Domain" "109bean.org.uk" "PostMaster" "root@109bean.org.uk" "ErrorsAdmin" "root@109bean.org.uk" "DefaultSMTPGateways" "smtp.your-isp.com" "RemoveSpoolErrors" "0" "MaxMTAOps" "16" "ReceivedHdrType" "0" "FetchHdrTags" "+X-Deliver-To,+Received,To,Cc" "Pop3SyncErrorAccount" "root@109bean.org.uk" "DefaultSmtpPerms" "MRVZ" (note: I have not registered 109bean.org.uk, as it's never seen outside of my network) Setup the domain.tab file to contain the name of your domain: "109bean.org.uk" Now set up a 'control' account, I called mine 'root'. Choose a nice complicated password and find its encrypted form with XMCrypt, I'll use 'ciao' as an example: /var/MailRoot/bin/XMCrypt ciao Now edit /var/MailRoot/ctrlaccounts.tab to read something like this, where the second element is the string that XMCrypt returned: "root" "060c040a" Note the double-quotes are really there in the file and the separator IS a single 'tab' and the line IS terminated with a . Wherever a 'tab' file format calls for a password, it's an XMCrypt password that's needed - this caused me a lot of problems! You will need at least one user set up in /var/MailRoot/mailusers.tab, and while you are editing it delete the sample account for 'xmailuser', remember to use XMCrypt to find your encrypted password. and that is sufficient to get XMail running. Start XMail for the first time. ------------------------------- Start XMail in debug mode with the following commands: export MAIL_ROOT=/var/MailRoot /var/MailRoot/bin/XMail -Md -Pl -Sl -Fl -Cl -Ll ... where the ... are any other command line switches you might want or need - see part 19 of the Manual. (By the way those switches end with a lower case L - not obvious in some fonts!) You will see the various XMail threads start up, and if all looks stable you have a working XMail. If you can start another terminal session, a second xterm or login on another tty, then you can command XMail (see next session) and watch the debugging output. When you are happy, hit Ctrl-C and abort the run, watching XMail shut down it's threads gracefully. Setup the SysV init script. --------------------------- Link the SysV init script as you see fit into the rc.d system, I set: cd /etc/rc.d ln -s init.d/xmail rc0.d/K27xmail ln -s init.d/xmail rc1.d/K27xmail ln -s init.d/xmail rc2.d/K27xmail ln -s init.d/xmail rc6.d/K27xmail ln -s init.d/xmail rc3.d/S43xmail ln -s init.d/xmail rc4.d/S43xmail ln -s init.d/xmail rc5.d/S43xmail although I actually do it with KDE3's SysV-Init editor. The aim is to close xmail before the network goes down, but after any activity which might cause mail activity, and to start xmail after the network is up, but before starting anything that might generate mail (for example: fcron). Now you can run the xmail daemon properly by issuing: /etc/rc.d/init.d/xmail start which will fork the daemon and display its process id (pid). Now you can set up your other accounts and the links to mail servers at your ISP, and becuase you are asking XMail to do it for you, you are assured that the setup will be self-consistent. Setting up another user account. -------------------------------- Type the following, you don't need to be 'root': /usr/bin/CtrlClnt -s 109bean.org.uk -u root -p ciao \ useradd 109bean.org.uk newuser newpassword U Of course, you need to substitute your domain name, Control Account and password. In these CtrlClnt (Control Client) commands you should NOT use MKCrypt-ed passwords. Once the user account(s) are set up, you can try sending mail between them locally. Set up your MUA, say Mutt or Kmail, to send via smtp localhost:110, and receive by POP3 from '109bean.org.uk' or whatever your domain is called, with the appropriate username and password as just setup. Setting up a POP3 drop from your ISP. ------------------------------------- Assuming your ISP presents a simple unencrypted (old-fashioned) POP3 service, you need to know your login name (you-at-isp) and password (your-isp-pop-password)and the address of the POP3 server. /usr/bin/CtrlClnt -s 109bean.org.uk -u root -p ciao \ poplnkadd 109bean.org.uk richard \ pop3.isp.com you-at-isp your-isp-pop-password CLR This will set up an automatic synchonisation between XMail and your pop3 account at pop3.isp.com, syncronising every 2 minutes (120 seconds). To change the synchronisation rate to, say, every 5 minutes, you need to edit the command line switch -Yi 300 (300 seconds) in /etc/rc.d/init.d/xmail. If your ISP supports APOP authorisation substitute APOP for CLR above. That's all I did, and it works for me. Good luck.