Hello,

on a fresh installed Debian Jessie with systemd and all packages updated, I call "apt-get install clamav-daemon". Then systemctl status clamav-daemon.socket shows:

● clamav-daemon.socket - Socket for Clam AntiVirus userspace daemon
   Loaded: loaded (/lib/systemd/system/clamav-daemon.socket; enabled)
  Drop-In: /etc/systemd/system/clamav-daemon.socket.d
           └─extend.conf
   Active: inactive (dead)
start condition failed at Fri 2016-04-22 17:00:29 CEST; 16min ago
     Docs: man:clamd(8)
           man:clamd.conf(5)
           http://www.clamav.net/lang/en/doc/
   Listen: /var/run/clamav/clamd.ctl (Stream)

and systemctl status clamav-daemon.service prints:
● clamav-daemon.service - Clam AntiVirus userspace daemon
   Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled)
   Active: inactive (dead)
start condition failed at Fri 2016-04-22 17:00:23 CEST; 16min ago
     Docs: man:clamd(8)
           man:clamd.conf(5)
           http://www.clamav.net/lang/en/doc/

systemctl show clamav-daemon.socket emits
  ListenStream=/var/run/clamav/clamd.ctl

The directory /var/run/clamav does not exist, despite systemd.socket.xml in systemd v215, coming with Jessie, states under DirectoryMode= that if listening on a file system socket the parent directories are automatically created if needed.

Restarting the system and calling the show commands above, adds after "start condition failed" the text "ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc} was not met". Indeed, freshclam has not downloaded yet the signatures and the CondtionPathExistsGlob is added by clamav_0.99+dfsg-0+deb8u2.debian.tar.xz:debian/patches/Add-upstream-systemd-support.patch .

Reinstalling the system again, waiting for freshclam to download all the signatures, issuing the two show commands prints still the text above: (unnamed) start condition failed. After restarting the system, following successful download of all the signatures by freshclam, everything works as expected.

My understanding is that during service start ConditionPathExistsGlob is checked once and if it fails, it is not retried, contrary to something like ExecStartPre=/bin/bash -c 'while ! [ -s /var/lib/clamav/main.inc -o -s /var/lib/clamav/main.cvd -o -s /var/lib/clamav/main.cld ) -a ( -s /var/lib/clamav/daily.inc -o -s /var/lib/clamav/daily.cvs -o -s /var/lib/clamav/daily.cld ] ; do sleep 1 ; done ' .

For the mentioned reasons with the current configuration clamd is not going to start automatically, once freshclam has downloaded all the files.

I propose removing the ConditionPathExistsGlob from clamav-daemon.s(ervice,ocket). Then, once freshclam is ready, it will notify clamd over the socket, systemd will start clamd because of clamav-daemon.socket and everything is fine. If somebody tries to contact the socket before freshclam is ready, and clamd starts and fails due to missing databases, we have the current situation: in order to start clamd, it has to be restarted manually, once the databases have been downloaded. So removing ConditionPathExistsGlob is an improvement, as it boots the system correctly in more cases, than now.

Greetings
  Dilian

_______________________________________________
Pkg-clamav-devel mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-clamav-devel

Reply via email to