nixpkgs/upstart-jobs/dhcpd.nix

50 lines
949 B
Nix
Raw Normal View History

{pkgs, config}:
let
cfg = config.services.dhcpd;
stateDir = "/var/lib/dhcp"; # Don't use /var/state/dhcp; not FHS-compliant.
machines = pkgs.lib.concatStrings (map (machine: "
host ${machine.hostName} {
hardware ethernet ${machine.ethernetAddress};
fixed-address ${machine.ipAddress};
}
") cfg.machines);
configFile = if cfg.configFile != null then cfg.configFile else pkgs.writeText "dhcpd.conf" "
default-lease-time 600;
max-lease-time 7200;
authoritative;
ddns-update-style ad-hoc;
${cfg.extraConfig}
${machines}
";
in
{
name = "dhcpd";
job = "
description \"DHCP server\"
start on network-interfaces/started
stop on network-interfaces/stop
script
mkdir -m 755 -p ${stateDir}
touch ${stateDir}/dhcpd.leases
exec ${pkgs.dhcp}/sbin/dhcpd -f -cf ${configFile} \\
-lf ${stateDir}/dhcpd.leases \\
${toString cfg.interfaces}
end script
";
}