* More declarative specification of the DHCPD config.
svn path=/nixos/trunk/; revision=9856
This commit is contained in:
parent
d2377fae72
commit
d987b16112
|
@ -543,9 +543,31 @@
|
||||||
";
|
";
|
||||||
};
|
};
|
||||||
|
|
||||||
configFile = mkOption {
|
extraConfig = mkOption {
|
||||||
|
default = "";
|
||||||
|
example = "
|
||||||
|
option subnet-mask 255.255.255.0;
|
||||||
|
option broadcast-address 192.168.1.255;
|
||||||
|
option routers 192.168.1.5;
|
||||||
|
option domain-name-servers 130.161.158.4, 130.161.33.17, 130.161.180.1;
|
||||||
|
option domain-name \"example.org\";
|
||||||
|
subnet 192.168.1.0 netmask 255.255.255.0 {
|
||||||
|
range 192.168.1.100 192.168.1.200;
|
||||||
|
}
|
||||||
|
";
|
||||||
description = "
|
description = "
|
||||||
The path of the DHCP server configuration file.
|
Extra text to be appended to the DHCP server configuration
|
||||||
|
file. Currently, you almost certainly need to specify
|
||||||
|
something here, such as the options specifying the subnet
|
||||||
|
mask, DNS servers, etc.
|
||||||
|
";
|
||||||
|
};
|
||||||
|
|
||||||
|
configFile = mkOption {
|
||||||
|
default = null;
|
||||||
|
description = "
|
||||||
|
The path of the DHCP server configuration file. If no file
|
||||||
|
is specified, a file is generated using the other options.
|
||||||
";
|
";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -556,6 +578,20 @@
|
||||||
";
|
";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
machines = mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [
|
||||||
|
{ hostName = "foo";
|
||||||
|
ethernetAddress = "00:16:76:9a:32:1d";
|
||||||
|
ipAddress = "192.168.1.10";
|
||||||
|
}
|
||||||
|
{ hostName = "bar";
|
||||||
|
ethernetAddress = "00:19:d1:1d:c4:9a";
|
||||||
|
ipAddress = "192.168.1.11";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -121,9 +121,7 @@ let
|
||||||
# DHCP server.
|
# DHCP server.
|
||||||
++ optional config.services.dhcpd.enable
|
++ optional config.services.dhcpd.enable
|
||||||
(import ../upstart-jobs/dhcpd.nix {
|
(import ../upstart-jobs/dhcpd.nix {
|
||||||
inherit (pkgs) dhcp;
|
inherit pkgs config;
|
||||||
configFile = config.services.dhcpd.configFile;
|
|
||||||
interfaces = config.services.dhcpd.interfaces;
|
|
||||||
})
|
})
|
||||||
|
|
||||||
# SSH daemon.
|
# SSH daemon.
|
||||||
|
|
|
@ -1,9 +1,27 @@
|
||||||
{dhcp, configFile, interfaces}:
|
{pkgs, config}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
|
cfg = config.services.dhcpd;
|
||||||
|
|
||||||
stateDir = "/var/lib/dhcp"; # Don't use /var/state/dhcp; not FHS-compliant.
|
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
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -21,9 +39,9 @@ script
|
||||||
|
|
||||||
touch ${stateDir}/dhcpd.leases
|
touch ${stateDir}/dhcpd.leases
|
||||||
|
|
||||||
exec ${dhcp}/sbin/dhcpd -f -cf ${configFile} \\
|
exec ${pkgs.dhcp}/sbin/dhcpd -f -cf ${configFile} \\
|
||||||
-lf ${stateDir}/dhcpd.leases \\
|
-lf ${stateDir}/dhcpd.leases \\
|
||||||
${toString interfaces}
|
${toString cfg.interfaces}
|
||||||
|
|
||||||
end script
|
end script
|
||||||
";
|
";
|
||||||
|
|
Loading…
Reference in a new issue