at 16.09-beta 3.4 kB view raw
1# Zabbix server daemon. 2{ config, lib, pkgs, ... }: 3 4with lib; 5 6let 7 8 cfg = config.services.zabbixServer; 9 10 stateDir = "/var/run/zabbix"; 11 12 logDir = "/var/log/zabbix"; 13 14 libDir = "/var/lib/zabbix"; 15 16 pidFile = "${stateDir}/zabbix_server.pid"; 17 18 configFile = pkgs.writeText "zabbix_server.conf" 19 '' 20 LogFile = ${logDir}/zabbix_server 21 22 PidFile = ${pidFile} 23 24 ${optionalString (cfg.dbServer != "localhost") '' 25 DBHost = ${cfg.dbServer} 26 ''} 27 28 DBName = zabbix 29 30 DBUser = zabbix 31 32 ${optionalString (cfg.dbPassword != "") '' 33 DBPassword = ${cfg.dbPassword} 34 ''} 35 36 ${config.services.zabbixServer.extraConfig} 37 ''; 38 39 useLocalPostgres = cfg.dbServer == "localhost" || cfg.dbServer == ""; 40 41in 42 43{ 44 45 ###### interface 46 47 options = { 48 49 services.zabbixServer.enable = mkOption { 50 default = false; 51 type = types.bool; 52 description = '' 53 Whether to run the Zabbix server on this machine. 54 ''; 55 }; 56 57 services.zabbixServer.dbServer = mkOption { 58 default = "localhost"; 59 type = types.str; 60 description = '' 61 Hostname or IP address of the database server. 62 Use an empty string ("") to use peer authentication. 63 ''; 64 }; 65 66 services.zabbixServer.dbPassword = mkOption { 67 default = ""; 68 type = types.str; 69 description = "Password used to connect to the database server."; 70 }; 71 72 services.zabbixServer.extraConfig = mkOption { 73 default = ""; 74 type = types.lines; 75 description = '' 76 Configuration that is injected verbatim into the configuration file. 77 ''; 78 }; 79 80 }; 81 82 ###### implementation 83 84 config = mkIf cfg.enable { 85 86 services.postgresql.enable = useLocalPostgres; 87 88 users.extraUsers = singleton 89 { name = "zabbix"; 90 uid = config.ids.uids.zabbix; 91 description = "Zabbix daemon user"; 92 }; 93 94 systemd.services."zabbix-server" = 95 { description = "Zabbix Server"; 96 97 wantedBy = [ "multi-user.target" ]; 98 after = optional useLocalPostgres "postgresql.service"; 99 100 preStart = 101 '' 102 mkdir -m 0755 -p ${stateDir} ${logDir} ${libDir} 103 chown zabbix ${stateDir} ${logDir} ${libDir} 104 105 if ! test -e "${libDir}/db-created"; then 106 ${pkgs.postgresql}/bin/createuser --no-superuser --no-createdb --no-createrole zabbix || true 107 ${pkgs.postgresql}/bin/createdb --owner zabbix zabbix || true 108 cat ${pkgs.zabbix.server}/share/zabbix/db/schema/postgresql.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix' 109 cat ${pkgs.zabbix.server}/share/zabbix/db/data/images_pgsql.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix' 110 cat ${pkgs.zabbix.server}/share/zabbix/db/data/data.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix' 111 touch "${libDir}/db-created" 112 fi 113 ''; 114 115 path = [ pkgs.nettools ]; 116 117 serviceConfig.ExecStart = "@${pkgs.zabbix.server}/sbin/zabbix_server zabbix_server --config ${configFile}"; 118 serviceConfig.Type = "forking"; 119 serviceConfig.Restart = "always"; 120 serviceConfig.RestartSec = 2; 121 serviceConfig.PIDFile = pidFile; 122 }; 123 124 }; 125 126}