silx: 2.1.1 -> 2.1.2 (#361612)
[NixPkgs.git] / nixos / modules / services / monitoring / osquery.nix
blob8f728ebab1157de2c9fd7bd46809688bcf627c9b
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.osquery;
4   dirname = path: with lib.strings; with lib.lists; concatStringsSep "/"
5     (init (splitString "/" (normalizePath path)));
7   # conf is the osquery configuration file used when the --config_plugin=filesystem.
8   # filesystem is the osquery default value for the config_plugin flag.
9   conf = pkgs.writeText "osquery.conf" (builtins.toJSON cfg.settings);
11   # flagfile is the file containing osquery command line flags to be
12   # provided to the application using the special --flagfile option.
13   flagfile = pkgs.writeText "osquery.flags"
14     (lib.concatStringsSep "\n"
15       (lib.mapAttrsToList (name: value: "--${name}=${value}")
16         # Use the conf derivation if not otherwise specified.
17         ({ config_path = conf; } // cfg.flags)));
19   osqueryi = pkgs.runCommand "osqueryi" { nativeBuildInputs = [ pkgs.makeWrapper ]; } ''
20     mkdir -p $out/bin
21     makeWrapper ${pkgs.osquery}/bin/osqueryi $out/bin/osqueryi \
22       --add-flags "--flagfile ${flagfile} --disable-database"
23   '';
26   options.services.osquery = {
27     enable = lib.mkEnableOption "osqueryd daemon";
29     settings = lib.mkOption {
30       default = { };
31       description = ''
32         Configuration to be written to the osqueryd JSON configuration file.
33         To understand the configuration format, refer to https://osquery.readthedocs.io/en/stable/deployment/configuration/#configuration-components.
34       '';
35       example = {
36         options.utc = false;
37       };
38       type = lib.types.attrs;
39     };
41     flags = lib.mkOption {
42       default = { };
43       description = ''
44         Attribute set of flag names and values to be written to the osqueryd flagfile.
45         For more information, refer to https://osquery.readthedocs.io/en/stable/installation/cli-flags.
46       '';
47       example = {
48         config_refresh = "10";
49       };
50       type = with lib.types;
51         submodule {
52           freeformType = attrsOf str;
53           options = {
54             database_path = lib.mkOption {
55               default = "/var/lib/osquery/osquery.db";
56               readOnly = true;
57               description = "Path used for the database file.";
58               type = path;
59             };
60             logger_path = lib.mkOption {
61               default = "/var/log/osquery";
62               readOnly = true;
63               description = "Base directory used for logging.";
64               type = path;
65             };
66             pidfile = lib.mkOption {
67               default = "/run/osquery/osqueryd.pid";
68               readOnly = true;
69               description = "Path used for pid file.";
70               type = path;
71             };
72           };
73         };
74     };
75   };
77   config = lib.mkIf cfg.enable {
78     environment.systemPackages = [ osqueryi ];
79     systemd.services.osqueryd = {
80       after = [ "network.target" "syslog.service" ];
81       description = "The osquery daemon";
82       serviceConfig = {
83         ExecStart = "${pkgs.osquery}/bin/osqueryd --flagfile ${flagfile}";
84         PIDFile = cfg.flags.pidfile;
85         LogsDirectory = cfg.flags.logger_path;
86         StateDirectory = dirname cfg.flags.database_path;
87         Restart = "always";
88       };
89       wantedBy = [ "multi-user.target" ];
90     };
91     systemd.tmpfiles.settings."10-osquery".${dirname (cfg.flags.pidfile)}.d = {
92       user = "root";
93       group = "root";
94       mode = "0755";
95     };
96   };