varnish: fix localstatedir for varnish* tools (#17508)

The varnish tools (varnishstat, varnishlog, ...) tried to load the VSM
file from a spurious var directory in the Nix store. Fix the default so
the tools "just work" when also keeping services.varnish.stateDir at the
default.

Notes:
- The tools use $localstatedir/$HOSTNAME so I've adapted the default for
stateDir as well to contain hostName.
- Added postStop action to remove the localstatedir. There is no point
in keeping it around when varnish does not run, as it regenerates it
on startup anyway.

Fixes #7495

Changed files
+6 -1
nixos
modules
services
web-servers
varnish
pkgs
servers
varnish
+4 -1
nixos/modules/services/web-servers/varnish/default.nix
···
};
stateDir = mkOption {
-
default = "/var/spool/varnish";
+
default = "/var/spool/varnish/${config.networking.hostName}";
description = "
Directory holding all state for Varnish to run.
";
···
preStart = ''
mkdir -p ${cfg.stateDir}
chown -R varnish:varnish ${cfg.stateDir}
+
'';
+
postStop = ''
+
rm -rf ${cfg.stateDir}
'';
path = [ pkgs.gcc ];
serviceConfig.ExecStart = "${pkgs.varnish}/sbin/varnishd -a ${cfg.http_address} -f ${pkgs.writeText "default.vcl" cfg.config} -n ${cfg.stateDir} -u varnish";
+2
pkgs/servers/varnish/default.nix
···
buildInputs = [ pcre libxslt groff ncurses pkgconfig readline python
pythonPackages.docutils];
+
buildFlags = "localstatedir=/var/spool";
+
meta = {
description = "Web application accelerator also known as a caching HTTP reverse proxy";
homepage = "https://www.varnish-cache.org";