summary refs log tree commit diff
path: root/nixos/modules/services/system
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-04-24 23:15:39 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-04-24 23:18:47 +0200
commit23297b0edde896f76ca1392d45e3c27b1422bafe (patch)
tree35ee1fa2c9b486222986417d40e47cf9cea25b91 /nixos/modules/services/system
parentd7a7f80aff92224351ded6e87897ba5286d9f819 (diff)
downloadnixlib-23297b0edde896f76ca1392d45e3c27b1422bafe.tar
nixlib-23297b0edde896f76ca1392d45e3c27b1422bafe.tar.gz
nixlib-23297b0edde896f76ca1392d45e3c27b1422bafe.tar.bz2
nixlib-23297b0edde896f76ca1392d45e3c27b1422bafe.tar.lz
nixlib-23297b0edde896f76ca1392d45e3c27b1422bafe.tar.xz
nixlib-23297b0edde896f76ca1392d45e3c27b1422bafe.tar.zst
nixlib-23297b0edde896f76ca1392d45e3c27b1422bafe.zip
Make nscd startup synchronous
Nscd forks into the background before it's ready to accept
connections. So explicitly wait until it's ready.

http://hydra.nixos.org/build/10661767
Diffstat (limited to 'nixos/modules/services/system')
-rw-r--r--nixos/modules/services/system/nscd.nix13
1 files changed, 12 insertions, 1 deletions
diff --git a/nixos/modules/services/system/nscd.nix b/nixos/modules/services/system/nscd.nix
index f357eb4e1fc8..1ac82064a1f7 100644
--- a/nixos/modules/services/system/nscd.nix
+++ b/nixos/modules/services/system/nscd.nix
@@ -9,6 +9,8 @@ let
 
   inherit (pkgs.lib) singleton;
 
+  cfgFile = pkgs.writeText "nscd.conf" cfg.config;
+
 in
 
 {
@@ -63,7 +65,7 @@ in
         restartTriggers = [ config.environment.etc.hosts.source ];
 
         serviceConfig =
-          { ExecStart = "@${pkgs.glibc}/sbin/nscd nscd -f ${pkgs.writeText "nscd.conf" cfg.config}";
+          { ExecStart = "@${pkgs.glibc}/sbin/nscd nscd -f ${cfgFile}";
             Type = "forking";
             PIDFile = "/run/nscd/nscd.pid";
             Restart = "always";
@@ -73,6 +75,15 @@ in
                 "${pkgs.glibc}/sbin/nscd --invalidate hosts"
               ];
           };
+
+        # Urgggggh... Nscd forks before opening its socket and writing
+        # its pid. So wait until it's ready.
+        postStart =
+          ''
+            while ! ${pkgs.glibc}/sbin/nscd -g -f ${cfgFile} > /dev/null; do
+              sleep 0.2
+            done
+          '';
       };
 
   };