about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Girol <symphorien+git@xlumurb.eu>2021-12-22 12:00:00 +0000
committerBjørn Forsman <bjorn.forsman@gmail.com>2021-12-23 00:08:43 +0100
commitd96a3994cc9b032778a3d3f3a29f660332ef91bc (patch)
tree93febaf7d9329ffba237b52231d66cd465ae5dc9
parentb55a253e154160d2fde0db1e05ea3a16b46bcb18 (diff)
downloadnixlib-d96a3994cc9b032778a3d3f3a29f660332ef91bc.tar
nixlib-d96a3994cc9b032778a3d3f3a29f660332ef91bc.tar.gz
nixlib-d96a3994cc9b032778a3d3f3a29f660332ef91bc.tar.bz2
nixlib-d96a3994cc9b032778a3d3f3a29f660332ef91bc.tar.lz
nixlib-d96a3994cc9b032778a3d3f3a29f660332ef91bc.tar.xz
nixlib-d96a3994cc9b032778a3d3f3a29f660332ef91bc.tar.zst
nixlib-d96a3994cc9b032778a3d3f3a29f660332ef91bc.zip
nixos/collectd: validate config file syntax at build time
-rw-r--r--nixos/modules/services/monitoring/collectd.nix21
-rw-r--r--pkgs/tools/system/collectd/default.nix9
2 files changed, 29 insertions, 1 deletions
diff --git a/nixos/modules/services/monitoring/collectd.nix b/nixos/modules/services/monitoring/collectd.nix
index 660d108587de..8d81737a3ef0 100644
--- a/nixos/modules/services/monitoring/collectd.nix
+++ b/nixos/modules/services/monitoring/collectd.nix
@@ -5,7 +5,7 @@ with lib;
 let
   cfg = config.services.collectd;
 
-  conf = pkgs.writeText "collectd.conf" ''
+  unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" ''
     BaseDir "${cfg.dataDir}"
     AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
     Hostname "${config.networking.hostName}"
@@ -30,6 +30,15 @@ let
     ${cfg.extraConfig}
   '';
 
+  conf = if cfg.validateConfig then
+    pkgs.runCommand "collectd.conf" {} ''
+      echo testing ${unvalidated_conf}
+      # collectd -t fails if BaseDir does not exist.
+      sed '1s/^BaseDir.*$/BaseDir "."/' ${unvalidated_conf} > collectd.conf
+      ${package}/bin/collectd -t -C collectd.conf
+      cp ${unvalidated_conf} $out
+    '' else unvalidated_conf;
+
   package =
     if cfg.buildMinimalPackage
     then minimalPackage
@@ -43,6 +52,16 @@ in {
   options.services.collectd = with types; {
     enable = mkEnableOption "collectd agent";
 
+    validateConfig = mkOption {
+      default = true;
+      description = ''
+        Validate the syntax of collectd configuration file at build time.
+        Disable this if you use the Include directive on files unavailable in
+        the build sandbox, or when cross-compiling.
+      '';
+      type = types.bool;
+    };
+
     package = mkOption {
       default = pkgs.collectd;
       defaultText = literalExpression "pkgs.collectd";
diff --git a/pkgs/tools/system/collectd/default.nix b/pkgs/tools/system/collectd/default.nix
index cdd51aa9fa3e..8d272b15acf1 100644
--- a/pkgs/tools/system/collectd/default.nix
+++ b/pkgs/tools/system/collectd/default.nix
@@ -17,6 +17,15 @@ stdenv.mkDerivation rec {
     sha256 = "1mh97afgq6qgmpvpr84zngh58m0sl1b4wimqgvvk376188q09bjv";
   };
 
+  patches = [
+    # fix -t never printing syntax errors
+    # should be included in next release
+    (fetchpatch {
+      url = "https://github.com/collectd/collectd/commit/3f575419e7ccb37a3b10ecc82adb2e83ff2826e1.patch";
+      sha256 = "0jwjdlfl0dp7mlbwygp6h0rsbaqfbgfm5z07lr5l26z6hhng2h2y";
+    })
+  ];
+
   nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs = [
     libtool