vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / epmd.nix
blob90876a67f74dab0feae3ea33808168eb56e0ff88
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.epmd;
4 in
6   ###### interface
7   options.services.epmd = {
8     enable = lib.mkOption {
9       type = lib.types.bool;
10       default = false;
11       description = ''
12         Whether to enable socket activation for Erlang Port Mapper Daemon (epmd),
13         which acts as a name server on all hosts involved in distributed
14         Erlang computations.
15       '';
16     };
17     package = lib.mkPackageOption pkgs "erlang" { };
18     listenStream = lib.mkOption
19       {
20         type = lib.types.str;
21         default = "[::]:4369";
22         description = ''
23           the listenStream used by the systemd socket.
24           see https://www.freedesktop.org/software/systemd/man/systemd.socket.html#ListenStream= for more information.
25           use this to change the port epmd will run on.
26           if not defined, epmd will use "[::]:4369"
27         '';
28       };
29   };
31   ###### implementation
32   config = lib.mkIf cfg.enable {
33     assertions = [{
34       assertion = cfg.listenStream == "[::]:4369" -> config.networking.enableIPv6;
35       message = "epmd listens by default on ipv6, enable ipv6 or change config.services.epmd.listenStream";
36     }];
37     systemd.sockets.epmd = rec {
38       description = "Erlang Port Mapper Daemon Activation Socket";
39       wantedBy = [ "sockets.target" ];
40       before = wantedBy;
41       socketConfig = {
42         ListenStream = cfg.listenStream;
43         Accept = "false";
44       };
45     };
47     systemd.services.epmd = {
48       description = "Erlang Port Mapper Daemon";
49       after = [ "network.target" ];
50       requires = [ "epmd.socket" ];
52       serviceConfig = {
53         DynamicUser = true;
54         ExecStart = "${cfg.package}/bin/epmd -systemd";
55         Type = "notify";
56       };
57     };
58   };
60   meta.maintainers = lib.teams.beam.members;