diff options
author | Emery Hemingway <emery@vfemail.net> | 2014-04-11 07:35:06 -0400 |
---|---|---|
committer | Emery Hemingway <emery@vfemail.net> | 2014-04-13 23:25:28 -0400 |
commit | 93e91548050cb97f31fdeeb029498d616a6243b3 (patch) | |
tree | 5d58642ede5a3e769147ddef7f58b587d17ecc84 /nixos/modules/services/network-filesystems/rsyncd.nix | |
parent | 129637268166dd7e63674658c8fb866d9abfe91b (diff) | |
download | nixpkgs-93e91548050cb97f31fdeeb029498d616a6243b3.tar nixpkgs-93e91548050cb97f31fdeeb029498d616a6243b3.tar.gz nixpkgs-93e91548050cb97f31fdeeb029498d616a6243b3.tar.bz2 nixpkgs-93e91548050cb97f31fdeeb029498d616a6243b3.tar.lz nixpkgs-93e91548050cb97f31fdeeb029498d616a6243b3.tar.xz nixpkgs-93e91548050cb97f31fdeeb029498d616a6243b3.tar.zst nixpkgs-93e91548050cb97f31fdeeb029498d616a6243b3.zip |
rsync updated 3.0.9 to 3.1.0, rsyncd service module
Diffstat (limited to 'nixos/modules/services/network-filesystems/rsyncd.nix')
-rw-r--r-- | nixos/modules/services/network-filesystems/rsyncd.nix | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/nixos/modules/services/network-filesystems/rsyncd.nix b/nixos/modules/services/network-filesystems/rsyncd.nix new file mode 100644 index 00000000000..bc17add809b --- /dev/null +++ b/nixos/modules/services/network-filesystems/rsyncd.nix @@ -0,0 +1,139 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + cfg = config.services.rsyncd; + + motdFile = pkgs.writeText "rsyncd-motd" cfg.motd; + + rsyncdCfg = "" + + optionalString (cfg.motd != "") "motd file = ${motdFile}\n" + + optionalString (cfg.address != "") "address = ${cfg.address}\n" + + optionalString (cfg.port != 873) "port = ${toString cfg.port}\n" + + cfg.extraConfig + + "\n" + + flip concatMapStrings cfg.modules (m: "[${m.name}]\n\tpath = ${m.path}\n" + + optionalString (m.comment != "") "\tcomment = ${m.comment}\n" + + m.extraConfig + + "\n" + ); + + rsyncdCfgFile = pkgs.writeText "rsyncd.conf" rsyncdCfg; + +in + +{ + options = { + + services.rsyncd = { + + enable = mkOption { + default = false; + description = "Whether to enable the rsync daemon."; + }; + + motd = mkOption { + type = types.string; + default = ""; + description = '' + Message of the day to display to clients on each connect. + This usually contains site information and any legal notices. + ''; + }; + + port = mkOption { + default = 873; + type = types.int; + description = "TCP port the daemon will listen on."; + }; + + address = mkOption { + default = ""; + example = "192.168.1.2"; + description = '' + IP address the daemon will listen on; rsyncd will listen on + all addresses if this is not specified. + ''; + }; + + extraConfig = mkOption { + type = types.lines; + default = ""; + description = '' + Lines of configuration to add to rsyncd globally. + See <literal>man rsyncd.conf</literal> for more options. + ''; + }; + + modules = mkOption { + default = [ ]; + example = [ + { name = "ftp"; + path = "/home/ftp"; + comment = "ftp export area"; + extraConfig = '' + secrets file = /etc/rsyncd.secrets + ''; + } + ]; + description = "The list of file paths to export."; + type = types.listOf types.optionSet; + + options = { + + name = mkOption { + example = "ftp"; + type = types.string; + description = "Name of export module."; + }; + + comment = mkOption { + default = ""; + description = '' + Description string that is displayed next to the module name + when clients obtain a list of available modules. + ''; + }; + + path = mkOption { + example = "/home/ftp"; + type = types.string; + description = "Directory to make available in this module."; + }; + + extraConfig = mkOption { + type = types.lines; + default = ""; + description = '' + Lines of configuration to add to this module. + See <literal>man rsyncd.conf</literal> for more options. + ''; + }; + }; + }; + }; + }; + + ###### implementation + + config = mkIf cfg.enable { + + environment.etc = singleton + { source = rsyncdCfgFile; + target = "rsyncd.conf"; + }; + + systemd.services.rsyncd = { + description = "Rsync daemon"; + wantedBy = [ "multi-user.target" ]; + + path = [ pkgs.rsync ]; + + serviceConfig.ExecStart = "${pkgs.rsync}/bin/rsync --daemon --no-detach"; + }; + + networking.firewall.allowedTCPPorts = [ cfg.port ]; + }; +} \ No newline at end of file |