Subject: Re: clamsmtpd started too early (pkg/36292)
To: Martti Kuparinen <martti.kuparinen@iki.fi>
From: Johnny C. Lam <jlam@pkgsrc.org>
List: pkgsrc-users
Date: 05/31/2007 21:21:08
On Tue, May 29, 2007 at 12:12:25PM +0300, Martti Kuparinen wrote:
>
> As the new maintainer for clamsmtpd, I started to look at (my own)
> pkg/36292. I'm running now the following patch on my servers and all
> problems are gone.
>
> Any objection for this change? Is it okay to use expr?
I see your changes have already gone in. It's safe to use expr because
by the time LOGIN happens, /usr should already have been mounted.
Plus, I mean, we're already using /usr/bin/awk earlier in the script.
> PS. On my secondary MX host it takes over 40 seconds for clamd to start.
> This is a 2.8 GHz P4 with 2 GB RAM and only DNS and SMTP services
> running...
>
> Martti
>
>
>
> --- /var/tmp/clamsmtpd 2007-05-29 10:46:13.000000000 +0300
> +++ /etc/rc.d/clamsmtpd 2007-05-29 11:27:16.000000000 +0300
> @@ -39,11 +39,34 @@
> /^#/ {next}; /^User[ ]/ {r = $2};
> END {print r}' ${clamav_conffile}`}
> else
> + : ${socket="/tmp/clamd"}
> : ${clamsmtpd_user="clamav"}
> fi
>
> clamsmtpd_prestart()
> {
> + if [ ! -S "${socket}" ]; then
> + # Max wait time is 2 minutes
> + retries=11
> +
> + echo -n "Waiting for clamd to become ready"
> + while [ ${retries} -gt 0 -a ! -S "${socket}" ]; do
> + echo -n "."
> + sleep 10
> + retries=`expr ${retries} - 1`
> + slow=true
> + done
> + if [ ! -S "${socket}" ]; then
> + echo ""
> + echo "ERROR: Unable to start clamsmtpd as clamd is
> not running!"
> + exit 1
> + fi
> +
> + # Wait another 10 seconds so that clamd is really ready
> + echo -n "."
> + sleep 10
> + echo ""
> + fi
> /usr/bin/touch ${pidfile}
> /usr/sbin/chown ${clamsmtpd_user} ${pidfile}
> }
If you're really worried about script portability, or not using $((...)),
you could always write the loop as:
# Max wait time is 2 minutes.
echo -n "Waiting for clamd to become ready"
for dummy in 1 2 3 4 5 6 7 8 9 10 11; do
# Poll for presence of clamd's socket in 10-second blocks.
if [ -S "${socket}" ]; then
# Wait 10 more seconds for clamd to settle.
echo -n "."
sleep 10
break
fi
echo -n "."
sleep 10
done
echo ""
if [ ! -S "${socket}" ]; then
echo "ERROR: Unable to start clamsmtpd as clamd is not running!"
exit 1
fi
Also, given that we now pretty much assume the use of NetBSD's rc.d
system, you can remove the extra checks and guards for the non-rc.d
case within that script.
Cheers,
-- Johnny Lam <jlam@pkgsrc.org>