Self-host your own digital island

bind copy zonefiles to runtime directory

this is useful when enabling bind's DNSSEC which will write to the zonefile path with .signed appended

Changed files
+14 -3
modules
services
dns
+14 -3
modules/services/dns/bind.nix
···
{ pkgs, config, lib, ... }:
-
let cfg = config.eilean.services.dns; in {
-
services.bind = lib.mkIf (cfg.enable && cfg.server == "bind") {
+
let cfg = config.eilean.services.dns; in
+
lib.mkIf (cfg.enable && cfg.server == "bind") {
+
services.bind = {
enable = true;
# recursive resolver
# cacheNetworks = [ "0.0.0.0/0" ];
···
let mapZones = zonename: zone:
{
master = true;
-
file = "${import ./zonefile.nix { inherit pkgs config lib zonename zone; }}/${zonename}";
+
file = "${config.services.bind.directory}/${zonename}";
+
#file = "${import ./zonefile.nix { inherit pkgs config lib zonename zone; }}/${zonename}";
# axfr zone transfer
slaves = [
"127.0.0.1"
···
};
in builtins.mapAttrs mapZones cfg.zones;
};
+
+
### bind prestart copy zonefiles
+
systemd.services.bind.preStart =
+
let ops =
+
let mapZones = zonename: zone:
+
"cp ${import ./zonefile.nix { inherit pkgs config lib zonename zone; }}/${zonename}" +
+
" ${config.services.bind.directory}/${zonename}";
+
in lib.attrsets.mapAttrsToList mapZones cfg.zones;
+
in builtins.concatStringsSep "\n" ops;
}