at 17.09-beta 3.2 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.rspamd; 8 9 mkBindSockets = socks: concatStringsSep "\n" (map (each: " bind_socket = \"${each}\"") socks); 10 11 rspamdConfFile = pkgs.writeText "rspamd.conf" 12 '' 13 .include "$CONFDIR/common.conf" 14 15 options { 16 pidfile = "$RUNDIR/rspamd.pid"; 17 .include "$CONFDIR/options.inc" 18 } 19 20 logging { 21 type = "syslog"; 22 .include "$CONFDIR/logging.inc" 23 } 24 25 worker { 26 ${mkBindSockets cfg.bindSocket} 27 .include "$CONFDIR/worker-normal.inc" 28 } 29 30 worker { 31 ${mkBindSockets cfg.bindUISocket} 32 .include "$CONFDIR/worker-controller.inc" 33 } 34 ''; 35 36in 37 38{ 39 40 ###### interface 41 42 options = { 43 44 services.rspamd = { 45 46 enable = mkEnableOption "Whether to run the rspamd daemon."; 47 48 debug = mkOption { 49 default = false; 50 description = "Whether to run the rspamd daemon in debug mode."; 51 }; 52 53 bindSocket = mkOption { 54 type = types.listOf types.str; 55 default = [ 56 "/run/rspamd/rspamd.sock mode=0660 owner=${cfg.user} group=${cfg.group}" 57 ]; 58 defaultText = ''[ 59 "/run/rspamd/rspamd.sock mode=0660 owner=${cfg.user} group=${cfg.group}" 60 ]''; 61 description = '' 62 List of sockets to listen, in format acceptable by rspamd 63 ''; 64 example = '' 65 bindSocket = [ 66 "/run/rspamd.sock mode=0666 owner=rspamd" 67 "*:11333" 68 ]; 69 ''; 70 }; 71 72 bindUISocket = mkOption { 73 type = types.listOf types.str; 74 default = [ 75 "localhost:11334" 76 ]; 77 description = '' 78 List of sockets for web interface, in format acceptable by rspamd 79 ''; 80 }; 81 82 user = mkOption { 83 type = types.string; 84 default = "rspamd"; 85 description = '' 86 User to use when no root privileges are required. 87 ''; 88 }; 89 90 group = mkOption { 91 type = types.string; 92 default = "rspamd"; 93 description = '' 94 Group to use when no root privileges are required. 95 ''; 96 }; 97 }; 98 }; 99 100 101 ###### implementation 102 103 config = mkIf cfg.enable { 104 105 # Allow users to run 'rspamc' and 'rspamadm'. 106 environment.systemPackages = [ pkgs.rspamd ]; 107 108 users.extraUsers = singleton { 109 name = cfg.user; 110 description = "rspamd daemon"; 111 uid = config.ids.uids.rspamd; 112 group = cfg.group; 113 }; 114 115 users.extraGroups = singleton { 116 name = cfg.group; 117 gid = config.ids.gids.rspamd; 118 }; 119 120 systemd.services.rspamd = { 121 description = "Rspamd Service"; 122 123 wantedBy = [ "multi-user.target" ]; 124 after = [ "network.target" ]; 125 126 serviceConfig = { 127 ExecStart = "${pkgs.rspamd}/bin/rspamd ${optionalString cfg.debug "-d"} --user=${cfg.user} --group=${cfg.group} --pid=/run/rspamd.pid -c ${rspamdConfFile} -f"; 128 Restart = "always"; 129 RuntimeDirectory = "rspamd"; 130 PrivateTmp = true; 131 }; 132 133 preStart = '' 134 ${pkgs.coreutils}/bin/mkdir -p /var/lib/rspamd 135 ${pkgs.coreutils}/bin/chown ${cfg.user}:${cfg.group} /var/lib/rspamd 136 ''; 137 }; 138 }; 139}