summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2019-07-17 11:33:57 +0200
committerIsmaël Bouya <ismael.bouya@normalesup.org>2020-04-25 00:04:28 +0200
commit17eabf477b035ff4590640ebdfd69ca558437c51 (patch)
treece7f4b107f12ffad2ee3a221682779502e392ad3
parentb3244321d6919229a7778f47f61b0df9afee3435 (diff)
downloadNUR-17eabf477b035ff4590640ebdfd69ca558437c51.tar.gz
NUR-17eabf477b035ff4590640ebdfd69ca558437c51.tar.zst
NUR-17eabf477b035ff4590640ebdfd69ca558437c51.zip
Add monitoring modules via naemon
-rw-r--r--modules/default.nix2
-rw-r--r--modules/myids.nix1
-rw-r--r--modules/naemon/default.nix184
-rw-r--r--modules/naemon/naemon.cfg1059
-rw-r--r--pkgs/default.nix4
-rw-r--r--pkgs/monitoring-plugins/default.nix33
-rw-r--r--pkgs/naemon-livestatus/default.nix23
-rw-r--r--pkgs/naemon-livestatus/naemon-livestatus.json15
-rw-r--r--pkgs/naemon/default.nix34
-rw-r--r--pkgs/naemon/naemon.json15
10 files changed, 1370 insertions, 0 deletions
diff --git a/modules/default.nix b/modules/default.nix
index 53469562..9e9c4111 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -13,6 +13,8 @@
13 opendmarc = ./opendmarc.nix; 13 opendmarc = ./opendmarc.nix;
14 openarc = ./openarc.nix; 14 openarc = ./openarc.nix;
15 15
16 naemon = ./naemon;
17
16 php-application = ./websites/php-application.nix; 18 php-application = ./websites/php-application.nix;
17 websites = ./websites; 19 websites = ./websites;
18} // (if builtins.pathExists ./private then import ./private else {}) 20} // (if builtins.pathExists ./private then import ./private else {})
diff --git a/modules/myids.nix b/modules/myids.nix
index e949ca7a..ac9fd65e 100644
--- a/modules/myids.nix
+++ b/modules/myids.nix
@@ -14,6 +14,7 @@
14 mastodon = 399; 14 mastodon = 399;
15 }; 15 };
16 ids.gids = { 16 ids.gids = {
17 nagios = 11; # commented in the ids file
17 vhost = 390; 18 vhost = 390;
18 openarc = 391; 19 openarc = 391;
19 opendmarc = 392; 20 opendmarc = 392;
diff --git a/modules/naemon/default.nix b/modules/naemon/default.nix
new file mode 100644
index 00000000..38e99a9c
--- /dev/null
+++ b/modules/naemon/default.nix
@@ -0,0 +1,184 @@
1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6 cfg = config.services.naemon;
7
8 naemonConfig = pkgs.runCommand "naemon-config" {
9 objectsFile = pkgs.writeText "naemon_objects.cfg" cfg.objectDefs;
10 resourceFile = config.secrets.fullPaths."naemon/resources.cfg";
11 extraConfig = pkgs.writeText "extra.cfg" cfg.extraConfig;
12 inherit (cfg) logDir varDir runDir cacheDir;
13 } ''
14 substituteAll ${./naemon.cfg} $out
15 cat $extraConfig >> $out
16 '';
17in
18{
19 options = {
20 services.naemon = {
21 enable = mkOption {
22 default = false;
23 description = "
24 Whether to use <link
25 xlink:href='http://www.naemon.org/'>Naemon</link> to monitor
26 your system or network.
27 ";
28 };
29
30 objectDefs = mkOption {
31 type = types.lines;
32 default = "";
33 description = "
34 A list of Naemon object configuration that must define
35 the hosts, host groups, services and contacts for the
36 network that you want Naemon to monitor.
37 ";
38 };
39
40 extraResource = mkOption {
41 type = types.lines;
42 default = "";
43 example = ''
44 # Sets $USER2$ to be the path to event handlers
45 #$USER2$=/usr/lib/monitoring-plugins/eventhandlers
46
47 # Store some usernames and passwords (hidden from the CGIs)
48 #$USER3$=someuser
49 #$USER4$=somepassword
50 '';
51 description = "
52 Lines to add to the resource file
53 # You can define $USERx$ macros in this file, which can in turn be used
54 # in command definitions in your host config file(s). $USERx$ macros are
55 # useful for storing sensitive information such as usernames, passwords,
56 # etc. They are also handy for specifying the path to plugins and
57 # event handlers - if you decide to move the plugins or event handlers to
58 # a different directory in the future, you can just update one or two
59 # $USERx$ macros, instead of modifying a lot of command definitions.
60 #
61 # Naemon supports up to 256 $USERx$ macros ($USER1$ through $USER256$)
62 #
63 # Resource files may also be used to store configuration directives for
64 # external data sources like MySQL...
65 #
66 ";
67 };
68
69 extraConfig = mkOption {
70 type = types.lines;
71 default = "";
72 description = "
73 Extra config to append to main config
74 ";
75 };
76
77 user = mkOption {
78 type = types.str;
79 default = "naemon";
80 description = "User for naemon";
81 };
82
83 group = mkOption {
84 type = types.str;
85 default = "naemon";
86 description = "Group for naemon";
87 };
88
89 varDir = mkOption {
90 type = types.path;
91 default = "/var/lib/naemon";
92 description = "The directory where naemon stores its data";
93 };
94
95 cacheDir = mkOption {
96 type = types.path;
97 default = "/var/cache/naemon";
98 description = "The directory where naemon stores its cache";
99 };
100
101 runDir = mkOption {
102 type = types.path;
103 default = "/run/naemon";
104 description = "The directory where naemon stores its runtime files";
105 };
106
107 logDir = mkOption {
108 type = types.path;
109 default = "/var/log/naemon";
110 description = "The directory where naemon stores its log files";
111 };
112
113 package = mkOption {
114 type = types.package;
115 default = pkgs.naemon.override {
116 inherit (cfg) varDir cacheDir logDir runDir user group;
117 };
118 description = ''
119 Naemon package to use
120 '';
121 };
122 };
123 };
124
125
126 config = mkIf cfg.enable {
127 secrets.keys = [
128 {
129 dest = "naemon/resources.cfg";
130 user = cfg.user;
131 group = cfg.group;
132 permissions = "0400";
133 text = ''
134 $USER1$=${pkgs.monitoring-plugins}/libexec
135 ${cfg.extraResource}
136 '';
137 }
138 ];
139
140 users.users = optionalAttrs (cfg.user == "naemon") (singleton
141 {
142 name = "naemon";
143 group = cfg.group;
144 uid = config.ids.uids.nagios;
145 extraGroups = [ "keys" ];
146 });
147 users.groups = optionalAttrs (cfg.user == "naemon") (singleton
148 {
149 name = "naemon";
150 gid = config.ids.gids.nagios;
151 });
152
153 services.filesWatcher.naemon = {
154 paths = [ config.secrets.fullPaths."naemon/resources.cfg" ];
155 };
156 systemd.services.naemon = {
157 description = "Naemon monitoring daemon";
158 path = [ cfg.package pkgs.monitoring-plugins ];
159 wantedBy = [ "multi-user.target" ];
160 after = [ "network.target" ];
161
162 preStart = "${cfg.package}/bin/naemon -vp ${naemonConfig}";
163 script = "${cfg.package}/bin/naemon --daemon ${naemonConfig}";
164 reload = "${pkgs.utillinux}/bin/kill -HUP $MAINPID";
165 serviceConfig = {
166 User = cfg.user;
167 Restart = "always";
168 RestartSec = 2;
169 StandardOutput = "journal";
170 StandardError = "inherit";
171 PIDFile = "${cfg.runDir}/naemon.pid";
172 LogsDirectory = assert lib.strings.hasPrefix "/var/log/" cfg.logDir;
173 lib.strings.removePrefix "/var/log/" cfg.logDir;
174 CacheDirectory = assert lib.strings.hasPrefix "/var/cache/" cfg.cacheDir;
175 let unprefixed = lib.strings.removePrefix "/var/cache/" cfg.cacheDir;
176 in [ unprefixed "${unprefixed}/checkresults" ];
177 StateDirectory = assert lib.strings.hasPrefix "/var/lib/" cfg.varDir;
178 lib.strings.removePrefix "/var/lib/" cfg.varDir;
179 RuntimeDirectory = assert lib.strings.hasPrefix "/run/" cfg.runDir;
180 lib.strings.removePrefix "/run/" cfg.runDir;
181 };
182 };
183 };
184}
diff --git a/modules/naemon/naemon.cfg b/modules/naemon/naemon.cfg
new file mode 100644
index 00000000..792e03b3
--- /dev/null
+++ b/modules/naemon/naemon.cfg
@@ -0,0 +1,1059 @@
1##############################################################################
2#
3# naemon.cfg - Sample Main Config File for Naemon 1.0.10.gc2a87305.dirty.20190703.source
4#
5# Read the documentation for more information on this configuration
6# file. I've provided some comments here, but things may not be so
7# clear without further explanation.
8#
9#
10##############################################################################
11
12
13# LOG FILE
14# This is the main log file where service and host events are logged
15# for historical purposes. This should be the first option specified
16# in the config file!!!
17
18log_file=@logDir@/naemon.log
19
20
21
22# OBJECT CONFIGURATION FILE(S)
23# These are the object configuration files in which you define hosts,
24# host groups, contacts, contact groups, services, etc.
25# You can split your object definitions across several config files
26# if you wish (as shown below), or keep them all in a single config file.
27
28# You can specify individual object config files as shown below:
29#cfg_file=/etc/naemon/objects/commands.cfg
30#cfg_file=/etc/naemon/objects/contacts.cfg
31#cfg_file=/etc/naemon/objects/timeperiods.cfg
32#cfg_file=/etc/naemon/objects/templates.cfg
33cfg_file=@objectsFile@
34
35
36# You can also tell naemon to process all config files (with a .cfg
37# extension) in a particular directory by using the cfg_dir
38# directive as shown below:
39#cfg_dir=/etc/naemon/conf.d
40
41
42
43
44# OBJECT CACHE FILE
45# This option determines where object definitions are cached when
46# naemon starts/restarts. The CGIs read object definitions from
47# this cache file (rather than looking at the object config files
48# directly) in order to prevent inconsistencies that can occur
49# when the config files are modified after naemon starts.
50
51object_cache_file=@varDir@/objects.cache
52
53
54
55# PRE-CACHED OBJECT FILE
56# This options determines the location of the precached object file.
57# If you run naemon with the -p command line option, it will preprocess
58# your object configuration file(s) and write the cached config to this
59# file. You can then start naemon with the -u option to have it read
60# object definitions from this precached file, rather than the standard
61# object configuration files (see the cfg_file and cfg_dir options above).
62# Using a precached object file can speed up the time needed to (re)start
63# the naemon process if you've got a large and/or complex configuration.
64# Read the documentation section on optimizing naemon to find our more
65# about how this feature works.
66
67precached_object_file=@varDir@/objects.precache
68
69
70
71# RESOURCE FILE
72# This is an optional resource file that contains $USERx$ macro
73# definitions. Multiple resource files can be specified by using
74# multiple resource_file definitions. The CGIs will not attempt to
75# read the contents of resource files, so information that is
76# considered to be sensitive (usernames, passwords, etc) can be
77# defined as macros in this file and restrictive permissions (600)
78# can be placed on this file.
79
80resource_file=@resourceFile@
81
82
83
84# STATUS FILE
85# This is where the current status of all monitored services and
86# hosts is stored. Its contents are read and processed by the CGIs.
87# The contents of the status file are deleted every time naemon
88# restarts.
89
90status_file=@varDir@/status.dat
91
92
93
94# STATUS FILE UPDATE INTERVAL
95# This option determines the frequency (in seconds) that
96# naemon will periodically dump program, host, and
97# service status data. Set it to 0 to disable updates.
98
99status_update_interval=10
100
101
102
103# EXTERNAL COMMAND OPTION
104# This option allows you to specify whether or not Naemon should check
105# for external commands (in the command file defined below). By default
106# Naemon will *not* check for external commands, just to be on the
107# cautious side. If you want to be able to use the CGI command interface
108# you will have to enable this.
109# Values: 0 = disable commands, 1 = enable commands
110
111check_external_commands=1
112
113
114
115# EXTERNAL COMMAND FILE
116# This is the file that Naemon checks for external command requests.
117# It is also where the command CGI will write commands that are submitted
118# by users, so it must be writeable by the user that the web server
119# is running as (usually 'nobody'). Permissions should be set at the
120# directory level instead of on the file, as the file is deleted every
121# time its contents are processed.
122
123command_file=@runDir@/naemon.cmd
124
125
126
127# QUERY HANDLER INTERFACE
128# This is the socket that is created for the Query Handler interface
129
130query_socket=@runDir@/naemon.qh
131
132
133
134# LOCK FILE
135# This is the lockfile that Naemon will use to store its PID number
136# in when it is running in daemon mode.
137
138lock_file=@runDir@/naemon.pid
139
140
141
142# TEMP FILE
143# This is a temporary file that is used as scratch space when Naemon
144# updates the status log, cleans the comment file, etc. This file
145# is created, used, and deleted throughout the time that Naemon is
146# running.
147
148temp_file=@cacheDir@/naemon.tmp
149
150
151
152# TEMP PATH
153# This is path where Naemon can create temp files for service and
154# host check results, etc.
155
156temp_path=@cacheDir@
157
158
159
160# EVENT BROKER OPTIONS
161# Controls what (if any) data gets sent to the event broker.
162# Values: 0 = Broker nothing
163# -1 = Broker everything
164# <other> = See documentation
165
166event_broker_options=-1
167
168
169
170# EVENT BROKER MODULE(S)
171# This directive is used to specify an event broker module that should
172# be loaded by Naemon at startup. Use multiple directives if you want
173# to load more than one module. Arguments that should be passed to
174# the module at startup are seperated from the module path by a space.
175#
176# Example:
177#
178# broker_module=<modulepath> [moduleargs]
179
180#broker_module=/usr/lib/naemon/naemon-livestatus/livestatus.so @cacheDir@/live
181#broker_module=/somewhere/module1.o
182#broker_module=/somewhere/module2.o arg1 arg2=3 debug=0
183
184# In order to provide drop-in support for new modules, you can also make use of
185# the include_dir directive. The include_dir directive causes Naemon to parse
186# any configuration (not just object configuration, as with cfg_dir) as if the
187# contents of the files in the pointed-to directory was included on this line.
188# The path to the directory is relative to the path of the main naemon.cfg
189# file.
190#include_dir=module-conf.d
191
192# LOG ARCHIVE PATH
193# This is the directory where archived (rotated) log files are placed by the
194# logrotate daemon. It is used by out of core add-ons to discover the logfiles.
195
196log_archive_path=@logDir@/archives
197
198
199
200# LOGGING OPTIONS
201# If you want messages logged to the syslog facility, as well as the
202# Naemon log file set this option to 1. If not, set it to 0.
203
204use_syslog=0
205
206# NOTIFICATION LOGGING OPTION
207# If you don't want notifications to be logged, set this value to 0.
208# If notifications should be logged, set the value to 1.
209
210log_notifications=1
211
212# Notification suppression reason (NSR) logging causes the reason for a
213# notification suppression to be logged, when it occurs. This can potentially
214# add some noise to your log file, but is highly useful when troubleshooting
215# missing notifications.
216
217enable_notification_suppression_reason_logging=1
218
219
220# SERVICE RETRY LOGGING OPTION
221# If you don't want service check retries to be logged, set this value
222# to 0. If retries should be logged, set the value to 1.
223
224log_service_retries=1
225
226
227
228# HOST RETRY LOGGING OPTION
229# If you don't want host check retries to be logged, set this value to
230# 0. If retries should be logged, set the value to 1.
231
232log_host_retries=1
233
234
235
236# EVENT HANDLER LOGGING OPTION
237# If you don't want host and service event handlers to be logged, set
238# this value to 0. If event handlers should be logged, set the value
239# to 1.
240
241log_event_handlers=1
242
243
244
245# INITIAL STATES LOGGING OPTION
246# If you want Naemon to log all initial host and service states to
247# the main log file (the first time the service or host is checked)
248# you can enable this option by setting this value to 1. If you
249# are not using an external application that does long term state
250# statistics reporting, you do not need to enable this option. In
251# this case, set the value to 0.
252
253log_initial_states=0
254
255
256
257# CURRENT STATES LOGGING OPTION
258# If you don't want Naemon to log all current host and service states
259# after log has been rotated to the main log file, you can disable this
260# option by setting this value to 0. Default value is 1.
261
262log_current_states=1
263
264
265
266# EXTERNAL COMMANDS LOGGING OPTION
267# If you don't want Naemon to log external commands, set this value
268# to 0. If external commands should be logged, set this value to 1.
269# Note: This option does not include logging of passive service
270# checks - see the option below for controlling whether or not
271# passive checks are logged.
272
273log_external_commands=1
274
275
276
277# PASSIVE CHECKS LOGGING OPTION
278# If you don't want Naemon to log passive host and service checks, set
279# this value to 0. If passive checks should be logged, set
280# this value to 1.
281
282log_passive_checks=1
283
284
285
286# GLOBAL HOST AND SERVICE EVENT HANDLERS
287# These options allow you to specify a host and service event handler
288# command that is to be run for every host or service state change.
289# The global event handler is executed immediately prior to the event
290# handler that you have optionally specified in each host or
291# service definition. The command argument is the short name of a
292# command definition that you define in your host configuration file.
293# Read the HTML docs for more information.
294
295#global_host_event_handler=somecommand
296#global_service_event_handler=somecommand
297
298
299
300# MAXIMUM CONCURRENT SERVICE CHECKS
301# This option allows you to specify the maximum number of
302# service checks that can be run in parallel at any given time.
303# Specifying a value of 1 for this variable essentially prevents
304# any service checks from being parallelized. A value of 0
305# will not restrict the number of concurrent checks that are
306# being executed.
307
308max_concurrent_checks=0
309
310
311# CHECK RESULT PATH
312# This is directory where Naemon reads check results of host and
313# service checks to further process them.
314#
315# Note: Naemon does not require this folder internally but it still
316# can be used to pass check results to Naemon.
317
318check_result_path=@cacheDir@/checkresults
319
320
321# CACHED HOST CHECK HORIZON
322# This option determines the maximum amount of time (in seconds)
323# that the state of a previous host check is considered current.
324# Cached host states (from host checks that were performed more
325# recently that the timeframe specified by this value) can immensely
326# improve performance in regards to the host check logic.
327# Too high of a value for this option may result in inaccurate host
328# states being used by Naemon, while a lower value may result in a
329# performance hit for host checks. Use a value of 0 to disable host
330# check caching.
331
332cached_host_check_horizon=15
333
334
335
336# CACHED SERVICE CHECK HORIZON
337# This option determines the maximum amount of time (in seconds)
338# that the state of a previous service check is considered current.
339# Cached service states (from service checks that were performed more
340# recently that the timeframe specified by this value) can immensely
341# improve performance in regards to predictive dependency checks.
342# Use a value of 0 to disable service check caching.
343
344cached_service_check_horizon=15
345
346
347
348# ENABLE PREDICTIVE HOST DEPENDENCY CHECKS
349# This option determines whether or not Naemon will attempt to execute
350# checks of hosts when it predicts that future dependency logic test
351# may be needed. These predictive checks can help ensure that your
352# host dependency logic works well.
353# Values:
354# 0 = Disable predictive checks
355# 1 = Enable predictive checks (default)
356
357enable_predictive_host_dependency_checks=1
358
359
360
361# ENABLE PREDICTIVE SERVICE DEPENDENCY CHECKS
362# This option determines whether or not Naemon will attempt to execute
363# checks of service when it predicts that future dependency logic test
364# may be needed. These predictive checks can help ensure that your
365# service dependency logic works well.
366# Values:
367# 0 = Disable predictive checks
368# 1 = Enable predictive checks (default)
369
370enable_predictive_service_dependency_checks=1
371
372
373
374# SOFT STATE DEPENDENCIES
375# This option determines whether or not Naemon will use soft state
376# information when checking host and service dependencies. Normally
377# Naemon will only use the latest hard host or service state when
378# checking dependencies. If you want it to use the latest state (regardless
379# of whether its a soft or hard state type), enable this option.
380# Values:
381# 0 = Don't use soft state dependencies (default)
382# 1 = Use soft state dependencies
383
384soft_state_dependencies=0
385
386
387
388# TIME CHANGE ADJUSTMENT THRESHOLDS
389# These options determine when Naemon will react to detected changes
390# in system time (either forward or backwards).
391
392#time_change_threshold=900
393
394
395
396# TIMEOUT VALUES
397# These options control how much time Naemon will allow various
398# types of commands to execute before killing them off. Options
399# are available for controlling maximum time allotted for
400# service checks, host checks, event handlers, notifications, the
401# ocsp command, and performance data commands. All values are in
402# seconds.
403
404service_check_timeout=60
405host_check_timeout=30
406event_handler_timeout=30
407notification_timeout=30
408ocsp_timeout=5
409perfdata_timeout=5
410
411
412
413# RETAIN STATE INFORMATION
414# This setting determines whether or not Naemon will save state
415# information for services and hosts before it shuts down. Upon
416# startup Naemon will reload all saved service and host state
417# information before starting to monitor. This is useful for
418# maintaining long-term data on state statistics, etc, but will
419# slow Naemon down a bit when it (re)starts. Since its only
420# a one-time penalty, I think its well worth the additional
421# startup delay.
422
423retain_state_information=1
424
425
426
427# STATE RETENTION FILE
428# This is the file that Naemon should use to store host and
429# service state information before it shuts down. The state
430# information in this file is also read immediately prior to
431# starting to monitor the network when Naemon is restarted.
432# This file is used only if the retain_state_information
433# variable is set to 1.
434
435state_retention_file=@varDir@/retention.dat
436
437
438
439# RETENTION DATA UPDATE INTERVAL
440# This setting determines how often (in minutes) that Naemon
441# will automatically save retention data during normal operation.
442# If you set this value to 0, Naemon will not save retention
443# data at regular interval, but it will still save retention
444# data before shutting down or restarting. If you have disabled
445# state retention, this option has no effect.
446
447retention_update_interval=60
448
449
450
451# USE RETAINED PROGRAM STATE
452# This setting determines whether or not Naemon will set
453# program status variables based on the values saved in the
454# retention file. If you want to use retained program status
455# information, set this value to 1. If not, set this value
456# to 0.
457
458use_retained_program_state=1
459
460
461
462# USE RETAINED SCHEDULING INFO
463# This setting determines whether or not Naemon will retain
464# the scheduling info (next check time) for hosts and services
465# based on the values saved in the retention file. If you
466# If you want to use retained scheduling info, set this
467# value to 1. If not, set this value to 0.
468
469use_retained_scheduling_info=1
470
471
472# RETAINED_SCHEDULING_RANDOMIZE_WINDOW
473# If use_retained_scheduling info is enabled, this setting
474# sets the window (in seconds), in which checks that were
475# supposed to executed during a restart, is rescheduled.
476# That is, if set to 60 seconds, then all checks that were
477# missed due to a restart will be scheduled randomly to be
478# executed in the first 60 seconds after a restart.
479# If the retained_scheduling_randomize_window is larger than
480# the objects check_interval, the check_interval is used
481# instead.
482
483retained_scheduling_randomize_window=60
484
485
486# RETAINED ATTRIBUTE MASKS (ADVANCED FEATURE)
487# The following variables are used to specify specific host and
488# service attributes that should *not* be retained by Naemon during
489# program restarts.
490#
491# The values of the masks are bitwise ANDs of values specified
492# by the "MODATTR_" definitions found in include/common.h.
493# For example, if you do not want the current enabled/disabled state
494# of flap detection and event handlers for hosts to be retained, you
495# would use a value of 24 for the host attribute mask...
496# MODATTR_EVENT_HANDLER_ENABLED (8) + MODATTR_FLAP_DETECTION_ENABLED (16) = 24
497
498# This mask determines what host attributes are not retained
499retained_host_attribute_mask=0
500
501# This mask determines what service attributes are not retained
502retained_service_attribute_mask=0
503
504# These two masks determine what process attributes are not retained.
505# There are two masks, because some process attributes have host and service
506# options. For example, you can disable active host checks, but leave active
507# service checks enabled.
508retained_process_host_attribute_mask=0
509retained_process_service_attribute_mask=0
510
511# These two masks determine what contact attributes are not retained.
512# There are two masks, because some contact attributes have host and
513# service options. For example, you can disable host notifications for
514# a contact, but leave service notifications enabled for them.
515retained_contact_host_attribute_mask=0
516retained_contact_service_attribute_mask=0
517
518
519
520# INTERVAL LENGTH
521# This is the seconds per unit interval as used in the
522# host/contact/service configuration files. Setting this to 60 means
523# that each interval is one minute long (60 seconds). Other settings
524# have not been tested much, so your mileage is likely to vary...
525
526interval_length=60
527
528
529
530# AGGRESSIVE HOST CHECKING OPTION
531# If you don't want to turn on aggressive host checking features, set
532# this value to 0 (the default). Otherwise set this value to 1 to
533# enable the aggressive check option. Read the docs for more info
534# on what aggressive host check is or check out the source code in
535# base/checks.c
536
537use_aggressive_host_checking=0
538
539
540
541# SERVICE CHECK EXECUTION OPTION
542# This determines whether or not Naemon will actively execute
543# service checks when it initially starts. If this option is
544# disabled, checks are not actively made, but Naemon can still
545# receive and process passive check results that come in. Unless
546# you're implementing redundant hosts or have a special need for
547# disabling the execution of service checks, leave this enabled!
548# Values: 1 = enable checks, 0 = disable checks
549
550execute_service_checks=1
551
552
553
554# PASSIVE SERVICE CHECK ACCEPTANCE OPTION
555# This determines whether or not Naemon will accept passive
556# service checks results when it initially (re)starts.
557# Values: 1 = accept passive checks, 0 = reject passive checks
558
559accept_passive_service_checks=1
560
561
562
563# HOST CHECK EXECUTION OPTION
564# This determines whether or not Naemon will actively execute
565# host checks when it initially starts. If this option is
566# disabled, checks are not actively made, but Naemon can still
567# receive and process passive check results that come in. Unless
568# you're implementing redundant hosts or have a special need for
569# disabling the execution of host checks, leave this enabled!
570# Values: 1 = enable checks, 0 = disable checks
571
572execute_host_checks=1
573
574
575
576# PASSIVE HOST CHECK ACCEPTANCE OPTION
577# This determines whether or not Naemon will accept passive
578# host checks results when it initially (re)starts.
579# Values: 1 = accept passive checks, 0 = reject passive checks
580
581accept_passive_host_checks=1
582
583
584
585# NOTIFICATIONS OPTION
586# This determines whether or not Naemon will sent out any host or
587# service notifications when it is initially (re)started.
588# Values: 1 = enable notifications, 0 = disable notifications
589
590enable_notifications=1
591
592
593
594# EVENT HANDLER USE OPTION
595# This determines whether or not Naemon will run any host or
596# service event handlers when it is initially (re)started. Unless
597# you're implementing redundant hosts, leave this option enabled.
598# Values: 1 = enable event handlers, 0 = disable event handlers
599
600enable_event_handlers=1
601
602
603
604# PROCESS PERFORMANCE DATA OPTION
605# This determines whether or not Naemon will process performance
606# data returned from service and host checks. If this option is
607# enabled, host performance data will be processed using the
608# host_perfdata_command (defined below) and service performance
609# data will be processed using the service_perfdata_command (also
610# defined below). Read the HTML docs for more information on
611# performance data.
612# Values: 1 = process performance data, 0 = do not process performance data
613
614process_performance_data=0
615
616
617
618# HOST AND SERVICE PERFORMANCE DATA PROCESSING COMMANDS
619# These commands are run after every host and service check is
620# performed. These commands are executed only if the
621# enable_performance_data option (above) is set to 1. The command
622# argument is the short name of a command definition that you
623# define in your host configuration file. Read the HTML docs for
624# more information on performance data.
625
626#host_perfdata_command=process-host-perfdata
627#service_perfdata_command=process-service-perfdata
628
629
630
631# HOST AND SERVICE PERFORMANCE DATA FILES
632# These files are used to store host and service performance data.
633# Performance data is only written to these files if the
634# enable_performance_data option (above) is set to 1.
635
636#host_perfdata_file=@varDir@/host-perfdata
637#service_perfdata_file=@varDir@/service-perfdata
638
639
640
641# HOST AND SERVICE PERFORMANCE DATA FILE TEMPLATES
642# These options determine what data is written (and how) to the
643# performance data files. The templates may contain macros, special
644# characters (\t for tab, \r for carriage return, \n for newline)
645# and plain text. A newline is automatically added after each write
646# to the performance data file. Some examples of what you can do are
647# shown below.
648
649#host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$
650#service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
651
652
653
654# HOST AND SERVICE PERFORMANCE DATA FILE MODES
655# This option determines whether or not the host and service
656# performance data files are opened in write ("w") or append ("a")
657# mode. If you want to use named pipes, you should use the special
658# pipe ("p") mode which avoid blocking at startup, otherwise you will
659# likely want the defult append ("a") mode.
660
661#host_perfdata_file_mode=a
662#service_perfdata_file_mode=a
663
664
665
666# HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING INTERVAL
667# These options determine how often (in seconds) the host and service
668# performance data files are processed using the commands defined
669# below. A value of 0 indicates the files should not be periodically
670# processed.
671
672#host_perfdata_file_processing_interval=0
673#service_perfdata_file_processing_interval=0
674
675
676
677# HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING COMMANDS
678# These commands are used to periodically process the host and
679# service performance data files. The interval at which the
680# processing occurs is determined by the options above.
681
682#host_perfdata_file_processing_command=process-host-perfdata-file
683#service_perfdata_file_processing_command=process-service-perfdata-file
684
685
686
687# HOST AND SERVICE PERFORMANCE DATA PROCESS EMPTY RESULTS
688# These options determine wether the core will process empty perfdata
689# results or not. This is needed for distributed monitoring, and intentionally
690# turned on by default.
691# If you don't require empty perfdata - saving some cpu cycles
692# on unwanted macro calculation - you can turn that off. Be careful!
693# Values: 1 = enable, 0 = disable
694
695#host_perfdata_process_empty_results=1
696#service_perfdata_process_empty_results=1
697
698
699# OBSESS OVER SERVICE CHECKS OPTION
700# This determines whether or not Naemon will obsess over service
701# checks and run the ocsp_command defined below. Unless you're
702# planning on implementing distributed monitoring, do not enable
703# this option. Read the HTML docs for more information on
704# implementing distributed monitoring.
705# Values: 1 = obsess over services, 0 = do not obsess (default)
706
707obsess_over_services=0
708
709
710
711# OBSESSIVE COMPULSIVE SERVICE PROCESSOR COMMAND
712# This is the command that is run for every service check that is
713# processed by Naemon. This command is executed only if the
714# obsess_over_services option (above) is set to 1. The command
715# argument is the short name of a command definition that you
716# define in your host configuration file. Read the HTML docs for
717# more information on implementing distributed monitoring.
718
719#ocsp_command=somecommand
720
721
722
723# OBSESS OVER HOST CHECKS OPTION
724# This determines whether or not Naemon will obsess over host
725# checks and run the ochp_command defined below. Unless you're
726# planning on implementing distributed monitoring, do not enable
727# this option. Read the HTML docs for more information on
728# implementing distributed monitoring.
729# Values: 1 = obsess over hosts, 0 = do not obsess (default)
730
731obsess_over_hosts=0
732
733
734
735# OBSESSIVE COMPULSIVE HOST PROCESSOR COMMAND
736# This is the command that is run for every host check that is
737# processed by Naemon. This command is executed only if the
738# obsess_over_hosts option (above) is set to 1. The command
739# argument is the short name of a command definition that you
740# define in your host configuration file. Read the HTML docs for
741# more information on implementing distributed monitoring.
742
743#ochp_command=somecommand
744
745
746
747# TRANSLATE PASSIVE HOST CHECKS OPTION
748# This determines whether or not Naemon will translate
749# DOWN/UNREACHABLE passive host check results into their proper
750# state for this instance of Naemon. This option is useful
751# if you have distributed or failover monitoring setup. In
752# these cases your other Naemon servers probably have a different
753# "view" of the network, with regards to the parent/child relationship
754# of hosts. If a distributed monitoring server thinks a host
755# is DOWN, it may actually be UNREACHABLE from the point of
756# this Naemon instance. Enabling this option will tell Naemon
757# to translate any DOWN or UNREACHABLE host states it receives
758# passively into the correct state from the view of this server.
759# Values: 1 = perform translation, 0 = do not translate (default)
760
761translate_passive_host_checks=0
762
763
764
765# PASSIVE HOST CHECKS ARE SOFT OPTION
766# This determines whether or not Naemon will treat passive host
767# checks as being HARD or SOFT. By default, a passive host check
768# result will put a host into a HARD state type. This can be changed
769# by enabling this option.
770# Values: 0 = passive checks are HARD, 1 = passive checks are SOFT
771
772passive_host_checks_are_soft=0
773
774
775
776# ORPHANED HOST/SERVICE CHECK OPTIONS
777# These options determine whether or not Naemon will periodically
778# check for orphaned host service checks. Since service checks are
779# not rescheduled until the results of their previous execution
780# instance are processed, there exists a possibility that some
781# checks may never get rescheduled. A similar situation exists for
782# host checks, although the exact scheduling details differ a bit
783# from service checks. Orphaned checks seem to be a rare
784# problem and should not happen under normal circumstances.
785# If you have problems with service checks never getting
786# rescheduled, make sure you have orphaned service checks enabled.
787# Values: 1 = enable checks, 0 = disable checks
788
789check_for_orphaned_services=1
790check_for_orphaned_hosts=1
791
792
793
794# SERVICE FRESHNESS CHECK OPTION
795# This option determines whether or not Naemon will periodically
796# check the "freshness" of service results. Enabling this option
797# is useful for ensuring passive checks are received in a timely
798# manner.
799# Values: 1 = enabled freshness checking, 0 = disable freshness checking
800
801check_service_freshness=1
802
803
804
805# SERVICE FRESHNESS CHECK INTERVAL
806# This setting determines how often (in seconds) Naemon will
807# check the "freshness" of service check results. If you have
808# disabled service freshness checking, this option has no effect.
809
810service_freshness_check_interval=60
811
812
813
814# SERVICE CHECK TIMEOUT STATE
815# This setting determines the state Naemon will report when a
816# service check times out - that is does not respond within
817# service_check_timeout seconds. This can be useful if a
818# machine is running at too high a load and you do not want
819# to consider a failed service check to be critical (the default).
820# Valid settings are:
821# c - Critical (default)
822# u - Unknown
823# w - Warning
824# o - OK
825
826service_check_timeout_state=c
827
828
829
830# HOST FRESHNESS CHECK OPTION
831# This option determines whether or not Naemon will periodically
832# check the "freshness" of host results. Enabling this option
833# is useful for ensuring passive checks are received in a timely
834# manner.
835# Values: 1 = enabled freshness checking, 0 = disable freshness checking
836
837check_host_freshness=0
838
839
840
841# HOST FRESHNESS CHECK INTERVAL
842# This setting determines how often (in seconds) Naemon will
843# check the "freshness" of host check results. If you have
844# disabled host freshness checking, this option has no effect.
845
846host_freshness_check_interval=60
847
848
849
850
851# ADDITIONAL FRESHNESS THRESHOLD LATENCY
852# This setting determines the number of seconds that Naemon
853# will add to any host and service freshness thresholds that
854# it calculates (those not explicitly specified by the user).
855
856additional_freshness_latency=15
857
858
859
860
861# FLAP DETECTION OPTION
862# This option determines whether or not Naemon will try
863# and detect hosts and services that are "flapping".
864# Flapping occurs when a host or service changes between
865# states too frequently. When Naemon detects that a
866# host or service is flapping, it will temporarily suppress
867# notifications for that host/service until it stops
868# flapping. Flap detection is very experimental, so read
869# the HTML documentation before enabling this feature!
870# Values: 1 = enable flap detection
871# 0 = disable flap detection (default)
872
873enable_flap_detection=1
874
875
876
877# FLAP DETECTION THRESHOLDS FOR HOSTS AND SERVICES
878# Read the HTML documentation on flap detection for
879# an explanation of what this option does. This option
880# has no effect if flap detection is disabled.
881
882low_service_flap_threshold=5.0
883high_service_flap_threshold=20.0
884low_host_flap_threshold=5.0
885high_host_flap_threshold=20.0
886
887
888
889# DATE FORMAT OPTION
890# This option determines how short dates are displayed. Valid options
891# include:
892# us (MM-DD-YYYY HH:MM:SS)
893# euro (DD-MM-YYYY HH:MM:SS)
894# iso8601 (YYYY-MM-DD HH:MM:SS)
895# strict-iso8601 (YYYY-MM-DDTHH:MM:SS)
896#
897
898date_format=us
899
900
901
902
903# TIMEZONE OFFSET
904# This option is used to override the default timezone that this
905# instance of Naemon runs in. If not specified, Naemon will use
906# the system configured timezone.
907
908#use_timezone=US/Mountain
909#use_timezone=Australia/Brisbane
910
911
912
913# ILLEGAL OBJECT NAME CHARACTERS
914# This option allows you to specify illegal characters that cannot
915# be used in host names, service descriptions, or names of other
916# object types.
917
918illegal_object_name_chars=`~!$%^&*|'"<>?,()=
919
920
921
922# ILLEGAL MACRO OUTPUT CHARACTERS
923# This option allows you to specify illegal characters that are
924# stripped from macros before being used in notifications, event
925# handlers, etc. This DOES NOT affect macros used in service or
926# host check commands.
927# The following macros are stripped of the characters you specify:
928# $HOSTOUTPUT$
929# $HOSTPERFDATA$
930# $HOSTACKAUTHOR$
931# $HOSTACKCOMMENT$
932# $SERVICEOUTPUT$
933# $SERVICEPERFDATA$
934# $SERVICEACKAUTHOR$
935# $SERVICEACKCOMMENT$
936
937illegal_macro_output_chars=`~$&|'"<>
938
939
940
941# REGULAR EXPRESSION MATCHING
942# This option controls whether or not regular expression matching
943# takes place in the object config files. Regular expression
944# matching is used to match host, hostgroup, service, and service
945# group names/descriptions in some fields of various object types.
946# Values: 1 = enable regexp matching, 0 = disable regexp matching
947
948use_regexp_matching=0
949
950
951
952# "TRUE" REGULAR EXPRESSION MATCHING
953# This option controls whether or not "true" regular expression
954# matching takes place in the object config files. This option
955# only has an effect if regular expression matching is enabled
956# (see above). If this option is DISABLED, regular expression
957# matching only occurs if a string contains wildcard characters
958# (* and ?). If the option is ENABLED, regexp matching occurs
959# all the time (which can be annoying).
960# Values: 1 = enable true matching, 0 = disable true matching
961
962use_true_regexp_matching=0
963
964
965
966# ADMINISTRATOR EMAIL/PAGER ADDRESSES
967# The email and pager address of a global administrator (likely you).
968# Naemon never uses these values itself, but you can access them by
969# using the $ADMINEMAIL$ and $ADMINPAGER$ macros in your notification
970# commands.
971
972admin_email=naemon@localhost
973admin_pager=pagenaemon@localhost
974
975
976
977# DEBUG LEVEL
978# This option determines how much (if any) debugging information will
979# be written to the debug file. OR values together to log multiple
980# types of information.
981# Values:
982# -1 = Everything
983# 0 = Nothing
984# 1 = Functions
985# 2 = Configuration
986# 4 = Process information
987# 8 = Scheduled events
988# 16 = Host/service checks
989# 32 = Notifications
990# 64 = Event broker
991# 128 = External commands
992# 256 = Commands
993# 512 = Scheduled downtime
994# 1024 = Comments
995# 2048 = Macros
996
997debug_level=0
998
999
1000
1001# DEBUG VERBOSITY
1002# This option determines how verbose the debug log out will be.
1003# Values: 0 = Brief output
1004# 1 = More detailed
1005# 2 = Very detailed
1006
1007debug_verbosity=1
1008
1009
1010
1011# DEBUG FILE
1012# This option determines where Naemon should write debugging information.
1013
1014debug_file=@cacheDir@/naemon.debug
1015
1016
1017
1018# MAX DEBUG FILE SIZE
1019# This option determines the maximum size (in bytes) of the debug file. If
1020# the file grows larger than this size, it will be renamed with a .old
1021# extension. If a file already exists with a .old extension it will
1022# automatically be deleted. This helps ensure your disk space usage doesn't
1023# get out of control when debugging Naemon.
1024
1025max_debug_file_size=1000000
1026
1027
1028
1029# Should we allow hostgroups to have no hosts, we default this to off since
1030# that was the old behavior
1031
1032allow_empty_hostgroup_assignment=0
1033
1034
1035
1036# Normally worker count is dynamically allocated based on 1.5 * number of cpu's
1037# with a minimum of 4 workers. This value will override the defaults
1038
1039#check_workers=3
1040
1041
1042# DISABLE SERVICE CHECKS WHEN HOST DOWN
1043# This option will disable all service checks if the host is not in an UP state
1044#
1045# While desirable in some environments, enabling this value can distort report
1046# values as the expected quantity of checks will not have been performed
1047
1048#host_down_disable_service_checks=0
1049
1050
1051# CIRCULAR DEPENDENCIES (EXPERIMENTAL)
1052# Allow for circular dependencies in naemon's host graph.
1053# Enabaling this will cause propagation the following to stop working:
1054# * scheduling downtime
1055# * enabling notification
1056# * disabling notification
1057# This feature is experimental and bugs might occur.
1058
1059allow_circular_dependencies=0
diff --git a/pkgs/default.nix b/pkgs/default.nix
index ff9d477b..49495730 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -42,6 +42,10 @@ rec {
42 composerEnv = callPackage ./composer-env {}; 42 composerEnv = callPackage ./composer-env {};
43 webapps = callPackage ./webapps { inherit mylibs composerEnv private; }; 43 webapps = callPackage ./webapps { inherit mylibs composerEnv private; };
44 44
45 monitoring-plugins = callPackage ./monitoring-plugins {};
46 naemon = callPackage ./naemon { inherit mylibs monitoring-plugins; };
47 naemon-livestatus = callPackage ./naemon-livestatus { inherit mylibs naemon; };
48
45 private = if builtins.pathExists (./. + "/private") 49 private = if builtins.pathExists (./. + "/private")
46 then import ./private { inherit pkgs; } 50 then import ./private { inherit pkgs; }
47 else { webapps = {}; }; 51 else { webapps = {}; };
diff --git a/pkgs/monitoring-plugins/default.nix b/pkgs/monitoring-plugins/default.nix
new file mode 100644
index 00000000..852d29bf
--- /dev/null
+++ b/pkgs/monitoring-plugins/default.nix
@@ -0,0 +1,33 @@
1{ stdenv, iputils, fetchpatch, fetchurl, file, hostname, perl, openssl,
2 bind, openldap, procps-ng, postfix,
3 wrapperDir ? "/run/wrappers/bin"
4}:
5stdenv.mkDerivation rec {
6 pname = "monitoring-plugins";
7 version = "2.2";
8 name = "${pname}-${version}";
9
10 src = fetchurl {
11 url = "https://www.monitoring-plugins.org/download/${name}.tar.gz";
12 sha256 = "0r9nvnk64nv7k8w352n99lw4p92pycxd9wlga9zyzjx9027m6si9";
13 };
14
15 patches = [
16 (fetchpatch {
17 name = "mariadb.patch";
18 url = "https://git.archlinux.org/svntogit/community.git/plain/trunk/0001-mariadb.patch?h=packages/monitoring-plugins";
19 sha256 = "0jf6fqkyzag66rid92m7asnr2dp8rr8kn4zjvhqg0mqvf8imppky";
20 })
21 ];
22
23 # ping needs CAP_NET_RAW capability which is set only in the wrappers namespace
24 configurePhase = ''
25 ./configure --disable-static --disable-dependency-tracking \
26 --prefix=$out \
27 --with-ping-command="${wrapperDir}/ping -4 -n -U -w %d -c %d %s" \
28 --with-ping6-command="${wrapperDir}/ping -6 -n -U -w %d -c %d %s" \
29 --with-sudo-command="${wrapperDir}/sudo"
30 '';
31
32 buildInputs = [ perl file hostname iputils openssl openldap procps-ng bind.dnsutils postfix ];
33}
diff --git a/pkgs/naemon-livestatus/default.nix b/pkgs/naemon-livestatus/default.nix
new file mode 100644
index 00000000..46ef51ac
--- /dev/null
+++ b/pkgs/naemon-livestatus/default.nix
@@ -0,0 +1,23 @@
1{ stdenv, mylibs, autoconf, automake,
2 libtool, pkg-config, naemon,
3 varDir ? "/var/lib/naemon",
4 etcDir ? "/etc/naemon"
5}:
6stdenv.mkDerivation (mylibs.fetchedGithub ./naemon-livestatus.json // {
7 preConfigure = ''
8 ./autogen.sh || true
9 '';
10
11 configureFlags = [
12 "--localstatedir=${varDir}"
13 "--sysconfdir=${etcDir}"
14 ];
15
16 preInstall = ''
17 substituteInPlace Makefile --replace \
18 '@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am' \
19 '@$(MAKE) $(AM_MAKEFLAGS) install-exec-am'
20 '';
21
22 buildInputs = [ autoconf automake libtool pkg-config naemon ];
23})
diff --git a/pkgs/naemon-livestatus/naemon-livestatus.json b/pkgs/naemon-livestatus/naemon-livestatus.json
new file mode 100644
index 00000000..c648d2bb
--- /dev/null
+++ b/pkgs/naemon-livestatus/naemon-livestatus.json
@@ -0,0 +1,15 @@
1{
2 "tag": "33dbcfe-master",
3 "meta": {
4 "name": "naemon-livestatus",
5 "url": "https://github.com/naemon/naemon-livestatus",
6 "branch": "master"
7 },
8 "github": {
9 "owner": "naemon",
10 "repo": "naemon-livestatus",
11 "rev": "33dbcfe18e42158f25c27cff95a1e07b73be53b0",
12 "sha256": "16jk0c6pwr7ck0g6s12hj6czbhgdr7c7f74zzsp5279af86y8fd6",
13 "fetchSubmodules": true
14 }
15}
diff --git a/pkgs/naemon/default.nix b/pkgs/naemon/default.nix
new file mode 100644
index 00000000..080a226d
--- /dev/null
+++ b/pkgs/naemon/default.nix
@@ -0,0 +1,34 @@
1{ stdenv, mylibs, help2man, monitoring-plugins, autoconf, automake,
2 libtool, glib, pkg-config, gperf,
3 varDir ? "/var/lib/naemon",
4 etcDir ? "/etc/naemon",
5 cacheDir ? "/var/cache/naemon",
6 logDir ? "/var/log/naemon",
7 runDir ? "/run/naemon",
8 user ? "naemon",
9 group ? "naemon"
10}:
11stdenv.mkDerivation (mylibs.fetchedGithub ./naemon.json // {
12 preConfigure = ''
13 ./autogen.sh || true
14 '';
15
16 configureFlags = [
17 "--localstatedir=${varDir}"
18 "--sysconfdir=${etcDir}"
19 "--with-pkgconfdir=${etcDir}"
20 "--with-pluginsdir=${monitoring-plugins}/libexec"
21 "--with-tempdir=${cacheDir}"
22 "--with-checkresultdir=${cacheDir}/checkresults"
23 "--with-logdir=${logDir}"
24 "--with-naemon-user=${user}"
25 "--with-naemon-group=${group}"
26 "--with-lockfile=${runDir}/naemon.pid"
27 ];
28
29 preInstall = ''
30 substituteInPlace Makefile --replace '$(MAKE) $(AM_MAKEFLAGS) install-exec-hook' ""
31 '';
32
33 buildInputs = [ autoconf automake help2man libtool glib pkg-config gperf ];
34})
diff --git a/pkgs/naemon/naemon.json b/pkgs/naemon/naemon.json
new file mode 100644
index 00000000..c68647f6
--- /dev/null
+++ b/pkgs/naemon/naemon.json
@@ -0,0 +1,15 @@
1{
2 "tag": "ba6fd20-master",
3 "meta": {
4 "name": "naemon",
5 "url": "https://github.com/naemon/naemon-core",
6 "branch": "master"
7 },
8 "github": {
9 "owner": "naemon",
10 "repo": "naemon-core",
11 "rev": "ba6fd20221fbdd5c99b4eb5dcf4ee5681c5a9495",
12 "sha256": "15rvqg985nn05rsgkch4ix8y2wg7a6pb70d63ckzy1inwqjp8z46",
13 "fetchSubmodules": true
14 }
15}