diff --git a/modules/module-list.nix b/modules/module-list.nix index 1bd91093402..27be032f3b7 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -141,6 +141,7 @@ ./services/networking/quassel.nix ./services/networking/radvd.nix ./services/networking/rdnssd.nix + ./services/networking/rpcbind.nix ./services/networking/sabnzbd.nix ./services/networking/ssh/lshd.nix ./services/networking/ssh/sshd.nix diff --git a/modules/services/network-filesystems/nfsd.nix b/modules/services/network-filesystems/nfsd.nix index d1c280cf000..dba2db22621 100644 --- a/modules/services/network-filesystems/nfsd.nix +++ b/modules/services/network-filesystems/nfsd.nix @@ -67,7 +67,7 @@ in config = mkIf cfg.enable { - services.portmap.enable = true; + services.rpcbind.enable = true; services.nfs.client.enable = true; # needed for statd and idmapd @@ -89,7 +89,7 @@ in preStart = '' - ensure portmap + ensure rpcbind ensure mountd # Create a state directory required by NFSv4. @@ -116,7 +116,7 @@ in preStart = '' - ensure portmap + ensure rpcbind mkdir -p /var/lib/nfs touch /var/lib/nfs/rmtab diff --git a/modules/services/networking/rpcbind.nix b/modules/services/networking/rpcbind.nix new file mode 100644 index 00000000000..5437d221c1e --- /dev/null +++ b/modules/services/networking/rpcbind.nix @@ -0,0 +1,80 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + netconfigFile = { + target = "netconfig"; + source = pkgs.writeText "netconfig" '' + # + # The network configuration file. This file is currently only used in + # conjunction with the TI-RPC code in the libtirpc library. + # + # Entries consist of: + # + # \ + # + # + # The and fields are always empty in this + # implementation. + # + udp tpi_clts v inet udp - - + tcp tpi_cots_ord v inet tcp - - + udp6 tpi_clts v inet6 udp - - + tcp6 tpi_cots_ord v inet6 tcp - - + rawip tpi_raw - inet - - - + local tpi_cots_ord - loopback - - - + unix tpi_cots_ord - loopback - - - + ''; + }; + + +in + +{ + + ###### interface + + options = { + + services.rpcbind = { + + enable = mkOption { + default = false; + description = '' + Whether to enable `rpcbind', an ONC RPC directory service + notably used by NFS and NIS, and which can be queried + using the rpcinfo(1) command. `rpcbind` is a replacement for + `portmap`. + ''; + }; + + }; + + }; + + + ###### implementation + + config = mkIf config.services.rpcbind.enable { + + environment.etc = [netconfigFile]; + + jobs.rpcbind = + { description = "ONC RPC rpcbind"; + + startOn = "started network-interfaces"; + stopOn = ""; + + daemonType = "fork"; + + exec = + '' + ${pkgs.rpcbind}/bin/rpcbind + ''; + }; + + }; + +} diff --git a/modules/tasks/filesystems/nfs.nix b/modules/tasks/filesystems/nfs.nix index ceb21c873ca..e54cb814f50 100644 --- a/modules/tasks/filesystems/nfs.nix +++ b/modules/tasks/filesystems/nfs.nix @@ -49,7 +49,7 @@ in config = mkIf config.services.nfs.client.enable { - services.portmap.enable = true; + services.rpcbind.enable = true; system.fsPackages = [ pkgs.nfsUtils ]; @@ -72,7 +72,7 @@ in preStart = '' - ensure portmap + ensure rpcbind mkdir -p ${nfsStateDir}/sm mkdir -p ${nfsStateDir}/sm.bak sm-notify -d @@ -92,7 +92,7 @@ in preStart = '' - ensure portmap + ensure rpcbind mkdir -p ${rpcMountpoint} mount -t rpc_pipefs rpc_pipefs ${rpcMountpoint} '';