92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								{ config, lib, pkgs, ... }:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								with builtins;
							 | 
						||
| 
								 | 
							
								with lib;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let
							 | 
						||
| 
								 | 
							
								  cfg = config.services.osquery;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								in
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  options = {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    services.osquery = {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      enable = mkEnableOption "osquery";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      loggerPath = mkOption {
							 | 
						||
| 
								 | 
							
								        type = types.path;
							 | 
						||
| 
								 | 
							
								        description = "Base directory used for logging.";
							 | 
						||
| 
								 | 
							
								        default = "/var/log/osquery";
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      pidfile = mkOption {
							 | 
						||
| 
								 | 
							
								        type = types.path;
							 | 
						||
| 
								 | 
							
								        description = "Path used for pid file.";
							 | 
						||
| 
								 | 
							
								        default = "/var/osquery/osqueryd.pidfile";
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      utc = mkOption {
							 | 
						||
| 
								 | 
							
								        type = types.bool;
							 | 
						||
| 
								 | 
							
								        description = "Attempt to convert all UNIX calendar times to UTC.";
							 | 
						||
| 
								 | 
							
								        default = true;
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      databasePath = mkOption {
							 | 
						||
| 
								 | 
							
								        type = types.path;
							 | 
						||
| 
								 | 
							
								        description = "Path used for database file.";
							 | 
						||
| 
								 | 
							
								        default = "/var/osquery/osquery.db";
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      extraConfig = mkOption {
							 | 
						||
| 
								 | 
							
								        type = types.attrs // {
							 | 
						||
| 
								 | 
							
								          merge = loc: foldl' (res: def: recursiveUpdate res def.value) {};
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        description = "Extra config to be recursively merged into the JSON config file.";
							 | 
						||
| 
								 | 
							
								        default = { };
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  config = mkIf cfg.enable {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    environment.systemPackages = [ pkgs.osquery ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    environment.etc."osquery/osquery.conf".text = toJSON (
							 | 
						||
| 
								 | 
							
								      recursiveUpdate {
							 | 
						||
| 
								 | 
							
								        options = {
							 | 
						||
| 
								 | 
							
								          config_plugin = "filesystem";
							 | 
						||
| 
								 | 
							
								          logger_plugin = "filesystem";
							 | 
						||
| 
								 | 
							
								          logger_path = cfg.loggerPath;
							 | 
						||
| 
								 | 
							
								          database_path = cfg.databasePath;
							 | 
						||
| 
								 | 
							
								          utc = cfg.utc;
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								      } cfg.extraConfig
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    systemd.services.osqueryd = {
							 | 
						||
| 
								 | 
							
								      description = "The osquery Daemon";
							 | 
						||
| 
								 | 
							
								      after = [ "network.target" "syslog.service" ];
							 | 
						||
| 
								 | 
							
								      wantedBy = [ "multi-user.target" ];
							 | 
						||
| 
								 | 
							
								      path = [ pkgs.osquery ];
							 | 
						||
| 
								 | 
							
								      preStart = ''
							 | 
						||
| 
								 | 
							
								        mkdir -p ${escapeShellArg cfg.loggerPath}
							 | 
						||
| 
								 | 
							
								        mkdir -p "$(dirname ${escapeShellArg cfg.pidfile})"
							 | 
						||
| 
								 | 
							
								        mkdir -p "$(dirname ${escapeShellArg cfg.databasePath})"
							 | 
						||
| 
								 | 
							
								      '';
							 | 
						||
| 
								 | 
							
								      serviceConfig = {
							 | 
						||
| 
								 | 
							
								        TimeoutStartSec = 0;
							 | 
						||
| 
								 | 
							
								        ExecStart = "${pkgs.osquery}/bin/osqueryd --logger_path ${escapeShellArg cfg.loggerPath} --pidfile ${escapeShellArg cfg.pidfile} --database_path ${escapeShellArg cfg.databasePath}";
							 | 
						||
| 
								 | 
							
								        KillMode = "process";
							 | 
						||
| 
								 | 
							
								        KillSignal = "SIGTERM";
							 | 
						||
| 
								 | 
							
								        Restart = "on-failure";
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |