|
2 | 2 | config, |
3 | 3 | lib, |
4 | 4 | pkgs, |
| 5 | + utils, |
5 | 6 | ... |
6 | 7 | }: |
7 | 8 | let |
|
34 | 35 | DhcpDdns = cfg.dhcp-ddns.settings; |
35 | 36 | } |
36 | 37 | ); |
37 | | - |
38 | | - package = pkgs.kea; |
39 | 38 | in |
40 | 39 | { |
41 | 40 | options.services.kea = with lib.types; { |
| 41 | + package = lib.mkPackageOption pkgs "kea" { }; |
| 42 | + |
42 | 43 | ctrl-agent = lib.mkOption { |
43 | 44 | description = '' |
44 | 45 | Kea Control Agent configuration |
|
60 | 61 | type = nullOr path; |
61 | 62 | default = null; |
62 | 63 | description = '' |
63 | | - Kea Control Agent configuration as a path, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html>. |
| 64 | + Kea Control Agent configuration as a path, see <https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/agent.html>. |
64 | 65 |
|
65 | 66 | Takes preference over [settings](#opt-services.kea.ctrl-agent.settings). |
66 | 67 | Most users should prefer using [settings](#opt-services.kea.ctrl-agent.settings) instead. |
|
71 | 72 | type = format.type; |
72 | 73 | default = null; |
73 | 74 | description = '' |
74 | | - Kea Control Agent configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html>. |
| 75 | + Kea Control Agent configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/agent.html>. |
75 | 76 | ''; |
76 | 77 | }; |
77 | 78 | }; |
|
99 | 100 | type = nullOr path; |
100 | 101 | default = null; |
101 | 102 | description = '' |
102 | | - Kea DHCP4 configuration as a path, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html>. |
| 103 | + Kea DHCP4 configuration as a path, see <https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/dhcp4-srv.html>. |
103 | 104 |
|
104 | 105 | Takes preference over [settings](#opt-services.kea.dhcp4.settings). |
105 | 106 | Most users should prefer using [settings](#opt-services.kea.dhcp4.settings) instead. |
|
136 | 137 | ]; |
137 | 138 | }; |
138 | 139 | description = '' |
139 | | - Kea DHCP4 configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html>. |
| 140 | + Kea DHCP4 configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/dhcp4-srv.html>. |
140 | 141 | ''; |
141 | 142 | }; |
142 | 143 | }; |
|
164 | 165 | type = nullOr path; |
165 | 166 | default = null; |
166 | 167 | description = '' |
167 | | - Kea DHCP6 configuration as a path, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html>. |
| 168 | + Kea DHCP6 configuration as a path, see <https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/dhcp6-srv.html>. |
168 | 169 |
|
169 | 170 | Takes preference over [settings](#opt-services.kea.dhcp6.settings). |
170 | 171 | Most users should prefer using [settings](#opt-services.kea.dhcp6.settings) instead. |
|
202 | 203 | ]; |
203 | 204 | }; |
204 | 205 | description = '' |
205 | | - Kea DHCP6 configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html>. |
| 206 | + Kea DHCP6 configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/dhcp6-srv.html>. |
206 | 207 | ''; |
207 | 208 | }; |
208 | 209 | }; |
|
230 | 231 | type = nullOr path; |
231 | 232 | default = null; |
232 | 233 | description = '' |
233 | | - Kea DHCP-DDNS configuration as a path, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html>. |
| 234 | + Kea DHCP-DDNS configuration as a path, see <https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/ddns.html>. |
234 | 235 |
|
235 | 236 | Takes preference over [settings](#opt-services.kea.dhcp-ddns.settings). |
236 | 237 | Most users should prefer using [settings](#opt-services.kea.dhcp-ddns.settings) instead. |
|
255 | 256 | }; |
256 | 257 | }; |
257 | 258 | description = '' |
258 | | - Kea DHCP-DDNS configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html>. |
| 259 | + Kea DHCP-DDNS configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/ddns.html>. |
259 | 260 | ''; |
260 | 261 | }; |
261 | 262 | }; |
|
266 | 267 | config = |
267 | 268 | let |
268 | 269 | commonEnvironment = { |
269 | | - KEA_CONTROL_SOCKET_DIR = "/run/kea"; |
270 | | - KEA_LOCKFILE_DIR = "/run/kea"; |
271 | | - KEA_PIDFILE_DIR = "/run/kea"; |
| 270 | + # Allow hook scripts only when they originate from the system configuration |
| 271 | + KEA_HOOK_SCRIPTS_PATH = lib.mkDefault "/nix/store"; |
| 272 | + # Allow hooks to originate from the configured package |
| 273 | + KEA_HOOKS_PATH = lib.mkDefault "${cfg.package}/lib/kea/hooks"; |
272 | 274 | }; |
273 | 275 |
|
274 | 276 | commonServiceConfig = { |
|
291 | 293 | lib.mkIf (cfg.ctrl-agent.enable || cfg.dhcp4.enable || cfg.dhcp6.enable || cfg.dhcp-ddns.enable) ( |
292 | 294 | lib.mkMerge [ |
293 | 295 | { |
294 | | - environment.systemPackages = [ package ]; |
| 296 | + environment.systemPackages = [ cfg.package ]; |
295 | 297 |
|
296 | 298 | users.users.kea = { |
297 | 299 | isSystemUser = true; |
|
314 | 316 | description = "Kea Control Agent"; |
315 | 317 | documentation = [ |
316 | 318 | "man:kea-ctrl-agent(8)" |
317 | | - "https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html" |
| 319 | + "https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/agent.html" |
318 | 320 | ]; |
319 | 321 |
|
320 | 322 | wants = [ |
|
337 | 339 | ]; |
338 | 340 |
|
339 | 341 | serviceConfig = { |
340 | | - ExecStart = "${package}/bin/kea-ctrl-agent -c /etc/kea/ctrl-agent.conf ${lib.escapeShellArgs cfg.ctrl-agent.extraArgs}"; |
| 342 | + ExecStart = utils.escapeSystemdExecArgs ( |
| 343 | + [ |
| 344 | + (lib.getExe' cfg.package "kea-ctrl-agent") |
| 345 | + "-c" |
| 346 | + "/etc/kea/ctrl-agent.conf" |
| 347 | + ] |
| 348 | + ++ cfg.ctrl-agent.extraArgs |
| 349 | + ); |
341 | 350 | KillMode = "process"; |
342 | 351 | Restart = "on-failure"; |
343 | 352 | } |
|
359 | 368 | description = "Kea DHCP4 Server"; |
360 | 369 | documentation = [ |
361 | 370 | "man:kea-dhcp4(8)" |
362 | | - "https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html" |
| 371 | + "https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/dhcp4-srv.html" |
363 | 372 | ]; |
364 | 373 |
|
365 | 374 | after = [ |
|
380 | 389 | ]; |
381 | 390 |
|
382 | 391 | serviceConfig = { |
383 | | - ExecStart = "${package}/bin/kea-dhcp4 -c /etc/kea/dhcp4-server.conf ${lib.escapeShellArgs cfg.dhcp4.extraArgs}"; |
| 392 | + ExecStart = utils.escapeSystemdExecArgs ( |
| 393 | + [ |
| 394 | + (lib.getExe' cfg.package "kea-dhcp4") |
| 395 | + "-c" |
| 396 | + "etc/kea/dhcp4-server.conf" |
| 397 | + ] |
| 398 | + ++ cfg.dhcp4.extraArgs |
| 399 | + ); |
384 | 400 | # Kea does not request capabilities by itself |
385 | 401 | AmbientCapabilities = [ |
386 | 402 | "CAP_NET_BIND_SERVICE" |
|
409 | 425 | description = "Kea DHCP6 Server"; |
410 | 426 | documentation = [ |
411 | 427 | "man:kea-dhcp6(8)" |
412 | | - "https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html" |
| 428 | + "https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/dhcp6-srv.html" |
413 | 429 | ]; |
414 | 430 |
|
415 | 431 | after = [ |
|
430 | 446 | ]; |
431 | 447 |
|
432 | 448 | serviceConfig = { |
433 | | - ExecStart = "${package}/bin/kea-dhcp6 -c /etc/kea/dhcp6-server.conf ${lib.escapeShellArgs cfg.dhcp6.extraArgs}"; |
| 449 | + ExecStart = utils.escapeSystemdExecArgs ( |
| 450 | + [ |
| 451 | + (lib.getExe' cfg.package "kea-dhcp6") |
| 452 | + "-c" |
| 453 | + "/etc/kea/dhcp6-server.conf" |
| 454 | + ] |
| 455 | + ++ cfg.dhcp6.extraArgs |
| 456 | + ); |
434 | 457 | # Kea does not request capabilities by itself |
435 | 458 | AmbientCapabilities = [ |
436 | 459 | "CAP_NET_BIND_SERVICE" |
|
457 | 480 | description = "Kea DHCP-DDNS Server"; |
458 | 481 | documentation = [ |
459 | 482 | "man:kea-dhcp-ddns(8)" |
460 | | - "https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html" |
| 483 | + "https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/ddns.html" |
461 | 484 | ]; |
462 | 485 |
|
463 | 486 | wants = [ "network-online.target" ]; |
|
476 | 499 | ]; |
477 | 500 |
|
478 | 501 | serviceConfig = { |
479 | | - ExecStart = "${package}/bin/kea-dhcp-ddns -c /etc/kea/dhcp-ddns.conf ${lib.escapeShellArgs cfg.dhcp-ddns.extraArgs}"; |
| 502 | + ExecStart = utils.escapeSystemdExecArgs ( |
| 503 | + [ |
| 504 | + (lib.getExe' cfg.package "kea-dhcp-ddns") |
| 505 | + "-c" |
| 506 | + "/etc/kea/dhcp-ddns.conf" |
| 507 | + ] |
| 508 | + ++ cfg.dhcp-ddns.extraArgs |
| 509 | + ); |
480 | 510 | AmbientCapabilities = [ |
481 | 511 | "CAP_NET_BIND_SERVICE" |
482 | 512 | ]; |
|
0 commit comments