cbd9e9e01f
In cases where you boot up really quickly (like in the VM test on a non-busy host), tinydns might want to bind before the loopback interface is fully up. Order tinydns after network.target to fix that.
55 lines
1.3 KiB
Nix
55 lines
1.3 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
{
|
|
###### interface
|
|
|
|
options = {
|
|
services.tinydns = {
|
|
enable = mkOption {
|
|
default = false;
|
|
type = types.bool;
|
|
description = "Whether to run the tinydns dns server";
|
|
};
|
|
|
|
data = mkOption {
|
|
type = types.lines;
|
|
default = "";
|
|
description = "The DNS data to serve, in the format described by tinydns-data(8)";
|
|
};
|
|
|
|
ip = mkOption {
|
|
default = "0.0.0.0";
|
|
type = types.str;
|
|
description = "IP address on which to listen for connections";
|
|
};
|
|
};
|
|
};
|
|
|
|
###### implementation
|
|
|
|
config = mkIf config.services.tinydns.enable {
|
|
environment.systemPackages = [ pkgs.djbdns ];
|
|
|
|
users.users.tinydns.isSystemUser = true;
|
|
|
|
systemd.services.tinydns = {
|
|
description = "djbdns tinydns server";
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network.target" ];
|
|
path = with pkgs; [ daemontools djbdns ];
|
|
preStart = ''
|
|
rm -rf /var/lib/tinydns
|
|
tinydns-conf tinydns tinydns /var/lib/tinydns ${config.services.tinydns.ip}
|
|
cd /var/lib/tinydns/root/
|
|
ln -sf ${pkgs.writeText "tinydns-data" config.services.tinydns.data} data
|
|
tinydns-data
|
|
'';
|
|
script = ''
|
|
cd /var/lib/tinydns
|
|
exec ./run
|
|
'';
|
|
};
|
|
};
|
|
}
|