···
stateDir = "/var/lib/clamav";
6
+
runDir = "/var/run/clamav";
7
+
logDir = "/var/log/clamav";
clamavGroup = clamavUser;
cfg = config.services.clamav;
10
+
clamdConfigFile = pkgs.writeText "clamd.conf" ''
11
+
DatabaseDirectory ${stateDir}
12
+
LocalSocket ${runDir}/clamd.ctl
13
+
LogFile ${logDir}/clamav.log
14
+
PidFile ${runDir}/clamd.pid
17
+
${cfg.daemon.extraConfig}
24
+
enable = mkEnableOption "clamd daemon";
19
-
Whether to enable automatic ClamAV virus definitions database updates.
26
+
extraConfig = mkOption {
30
+
Extra configuration for clamd. Contents will be added verbatim to the
36
+
enable = mkEnableOption "freshclam updater";
···
41
-
###### implementation
43
-
config = mkIf cfg.updater.enable {
56
+
config = mkIf cfg.updater.enable or cfg.daemon.enable {
environment.systemPackages = [ pkgs.clamav ];
45
-
users.extraUsers = singleton
46
-
{ name = clamavUser;
47
-
uid = config.ids.uids.clamav;
48
-
description = "ClamAV daemon user";
58
+
users.extraUsers = singleton {
60
+
uid = config.ids.uids.clamav;
61
+
description = "ClamAV daemon user";
52
-
users.extraGroups = singleton
53
-
{ name = clamavGroup;
54
-
gid = config.ids.gids.clamav;
65
+
users.extraGroups = singleton {
67
+
gid = config.ids.gids.clamav;
57
-
services.clamav.updater.config = ''
70
+
services.clamav.updater.config = mkIf cfg.updater.enable ''
DatabaseDirectory ${stateDir}
Checks ${toString cfg.updater.frequency}
DatabaseMirror database.clamav.net
66
-
name = "clamav-updater";
67
-
startOn = "started network-interfaces";
68
-
stopOn = "stopping network-interfaces";
77
+
systemd.services.clamd = mkIf cfg.daemon.enable {
78
+
description = "ClamAV daemon (clamd)";
79
+
path = [ pkgs.clamav ];
80
+
after = [ "network.target" "freshclam.service" ];
81
+
requires = [ "freshclam.service" ];
82
+
wantedBy = [ "multi-user.target" ];
84
+
mkdir -m 0755 -p ${logDir}
85
+
mkdir -m 0755 -p ${runDir}
86
+
chown ${clamavUser}:${clamavGroup} ${logDir}
87
+
chown ${clamavUser}:${clamavGroup} ${runDir}
90
+
ExecStart = "${pkgs.clamav}/bin/clamd --config-file=${clamdConfigFile}";
92
+
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
93
+
Restart = "on-failure";
95
+
StartLimitInterval = "1min";
71
-
mkdir -m 0755 -p ${stateDir}
72
-
chown ${clamavUser}:${clamavGroup} ${stateDir}
74
-
exec = "${pkgs.clamav}/bin/freshclam --daemon --config-file=${pkgs.writeText "freshclam.conf" cfg.updater.config}";
99
+
systemd.services.freshclam = mkIf cfg.updater.enable {
100
+
description = "ClamAV updater (freshclam)";
101
+
after = [ "network.target" ];
102
+
wantedBy = [ "multi-user.target" ];
103
+
path = [ pkgs.clamav ];
105
+
mkdir -m 0755 -p ${stateDir}
106
+
chown ${clamavUser}:${clamavGroup} ${stateDir}
109
+
ExecStart = "${pkgs.clamav}/bin/freshclam --daemon --config-file=${pkgs.writeText "freshclam.conf" cfg.updater.config}";
110
+
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
111
+
Restart = "on-failure";
112
+
RestartSec = "10s";
113
+
StartLimitInterval = "1min";