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