summary refs log tree commit diff
diff options
context:
space:
mode:
authorJamey Sharp <jamey@minilop.net>2019-07-03 12:39:48 -0700
committerJamey Sharp <jamey@minilop.net>2019-07-03 12:39:48 -0700
commit597563d248470857470481681e3d187866c4a3b7 (patch)
tree76ad584285133f563ac60eb165b5a6481d7f9eea
parent93f185df6555de235e7d188682ea54767d8cfbc2 (diff)
downloadnixpkgs-597563d248470857470481681e3d187866c4a3b7.tar
nixpkgs-597563d248470857470481681e3d187866c4a3b7.tar.gz
nixpkgs-597563d248470857470481681e3d187866c4a3b7.tar.bz2
nixpkgs-597563d248470857470481681e3d187866c4a3b7.tar.lz
nixpkgs-597563d248470857470481681e3d187866c4a3b7.tar.xz
nixpkgs-597563d248470857470481681e3d187866c4a3b7.tar.zst
nixpkgs-597563d248470857470481681e3d187866c4a3b7.zip
nixos/nscd: let systemd manage directories
Previously this module created both /var/db/nscd and /run/nscd using
shell commands in a preStart script. Note that both of these paths are
hard-coded in the nscd source. (Well, the latter is actually
/var/run/nscd but /var/run is a symlink to /run so it works out the
same.)

/var/db/nscd is only used if the nscd.conf "persistent" option is turned
on for one or more databases, which it is not in our default config
file. I'm not even sure persistent mode can work under systemd, since
`nscd --shutdown` is not synchronous so systemd will always
unceremoniously kill nscd without reliably giving it time to mark the
databases as unused. Nonetheless, if someone wants to use that option,
they can ensure the directory exists using systemd.tmpfiles.rules.

systemd can create /run/nscd for us with the RuntimeDirectory directive,
with the added benefit of causing systemd to delete the directory on
service stop or restart. The default value of RuntimeDirectoryMode is
755, the same as the mode which this module was using before.

I don't think the `rm -f /run/nscd/nscd.pid` was necessary after NixOS
switched to systemd and used its PIDFile directive, because systemd
deletes the specified file after the service stops, and because the file
can't persist across reboots since /run is a tmpfs. Even if the file
still exists when nscd starts, it's only a problem if the pid it
contains has been reused by another process, which is unlikely. Anyway,
this change makes that deletion even less necessary, because now systemd
deletes the entire /run/nscd directory when the service stops.
-rw-r--r--nixos/modules/services/system/nscd.nix8
1 files changed, 1 insertions, 7 deletions
diff --git a/nixos/modules/services/system/nscd.nix b/nixos/modules/services/system/nscd.nix
index d9444a279ea..14644003539 100644
--- a/nixos/modules/services/system/nscd.nix
+++ b/nixos/modules/services/system/nscd.nix
@@ -51,13 +51,6 @@ in
 
         environment = { LD_LIBRARY_PATH = nssModulesPath; };
 
-        preStart =
-          ''
-            mkdir -m 0755 -p /run/nscd
-            rm -f /run/nscd/nscd.pid
-            mkdir -m 0755 -p /var/db/nscd
-          '';
-
         restartTriggers = [
           config.environment.etc.hosts.source
           config.environment.etc."nsswitch.conf".source
@@ -67,6 +60,7 @@ in
         serviceConfig =
           { ExecStart = "@${pkgs.glibc.bin}/sbin/nscd nscd";
             Type = "forking";
+            RuntimeDirectory = "nscd";
             PIDFile = "/run/nscd/nscd.pid";
             Restart = "always";
             ExecReload =