Unfortunately, I failed to find any suitable instructions for doing this when I was looking to set up a single fetchmail daemon for Centos. It appears this is easy on debian flavours, and perhaps there are better ways of doing it than this, but I thought I’d share the method I used…
I’ve kept the steps fairly simple, so please forgive me if some of it is completely obvious…
1 – Install fetchmail if not already installed
Check if fetchmail is already installed, and perhaps update it if it is out of date.
yum list fetchmail
will show you if you’ve already got it installed, and which versions are available for install. I used the x86_64 package version 6.3.6-1.1.el5
Use yum to install or update this as required.
2 – Configure fetchmail
Why is nothing ever simple under Centos? I tried to find a RPM fetchmailconf, the gui fetchmailrc file configurator, for Centos 5 but couldn’t find one for the current version of fetchmail.
I ended up with fetchmailconf-6.3.4-1.1_6.0.1.el5.x86_64.rpm which wouldn’t install as it depends on the fetchmail-6.3.4 rather than the 6.3.6 version I had installed, so I had to install it using
rpm -i --nodeps fetchmailconf-6.3.4-1.1_6.0.1.el5.x86_64.rpm
This at least worked, and so I used it to configure my .fetchmailrc file for my mail servers etc. I then copied the ~/.fetchmailrc file to /etc/fetchmailrc for use by the daemon.
3 – Set up a script in /etc/init.d.
I largely copied the script for the Samba daemon.
#!/bin/sh # # chkconfig: - 91 35 # description: Starts and stops fetchmail in daemon mode # # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 1 fi # Avoid using root's TMPDIR unset TMPDIR # Check that fetchmailrc exists. [ -f /etc/fetchmailrc ] || exit 6 RETVAL=0 start() { KIND="fetchmail" echo -n $"Starting $KIND services: " daemon --user fetchmail fetchmail -f /etc/fetchmailrc --syslog RETVAL=$? echo return $RETVAL } stop() { KIND="fetchmail" echo -n $"Shutting down $KIND services: " runuser fetchmail -c 'fetchmail --syslog --quit >dev/null 2>&1' RETVAL=$? [ "$RETVAL" -eq 0 ] && success $"$base startup" || failure $"$base startup" echo return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading fetchmailrc file: " RETVAL=$? echo return $RETVAL } rhstatus() { status fetchmail RETVAL=$? } # Allow status as non-root. if [ "$1" = status ]; then rhstatus exit $? fi # Check that we can write to it... so non-root users stop here [ -w /etc/fetchmailrc ] || exit 4 case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; status) rhstatus ;; *) echo $"Usage: $0 {start|stop|restart|reload|status}" exit 2 esac exit $?
You can download this file by right clicking here.
4 – Set up a fetchmail user.
Create a user on the system called fetchmail. I used the -r option with useradd but then I had to create a home directory as the fetchmail program expects one. You can set up an alternative directory using an environment variable, but I took the easy way and just created a home directory.
You then chown the /etc/fetchmailrc file to fetchmail, and the home directory.
5 – Start it up…
Now try and start the service.
service fetchmail start
With any luck, the service starts… I suggest you then try and stop it with
service fetchmail stop
to ensure the stop code works too.
Next steps…
I then added the service using the gui services control, and this works ok, allowing me to start, stop, and configure the service for automatic startup on level 5.
However, selinux is doing something I don’t quite understand. It works using the service command from the command line, but it doesn’t work during the normal start up process. I suspect this is to do with the context task initrc_exec_t, but what I’ve tried so far doesn’t work. Someone who understands selinux better than me can probably tell me what I’m doing wrong.
I hope this is useful to someone. Let me know if you find a better way…