diff --git a/nixos/machines/frumar/default.nix b/nixos/machines/frumar/default.nix index 63f41f6..35a31d0 100644 --- a/nixos/machines/frumar/default.nix +++ b/nixos/machines/frumar/default.nix @@ -4,6 +4,7 @@ ../../roles/server.nix ../../roles/homeserver.nix ./paperless.nix + ./torrent.nix ]; system.stateVersion = "15.09"; diff --git a/nixos/machines/frumar/fractal.nix b/nixos/machines/frumar/fractal.nix index ba82916..d3126b4 100644 --- a/nixos/machines/frumar/fractal.nix +++ b/nixos/machines/frumar/fractal.nix @@ -54,7 +54,7 @@ fsType = "zfs"; }; - fileSystems."/home/yorick/rtorrent" = { + fileSystems."/torrent" = { device = "ssdpool/torrent"; fsType = "zfs"; }; diff --git a/nixos/machines/frumar/rtorrent.rc b/nixos/machines/frumar/rtorrent.rc new file mode 100644 index 0000000..133dd33 --- /dev/null +++ b/nixos/machines/frumar/rtorrent.rc @@ -0,0 +1,91 @@ +############################################################################# +# A minimal rTorrent configuration that provides the basic features +# you want to have in addition to the built-in defaults. +# +# See https://github.com/rakshasa/rtorrent/wiki/CONFIG-Template +# for an up-to-date version. +############################################################################# + +# Instance layout (base paths) +method.insert = cfg.basedir, private|const|string, "/torrent/" +method.insert = cfg.download, private|const|string, (cat,(cfg.basedir),"work/") +method.insert = cfg.logs, private|const|string, (cat,(cfg.basedir),"log/") +method.insert = cfg.logfile, private|const|string, (cat,(cfg.logs),"rtorrent-",(system.time),".log") +method.insert = cfg.session, private|const|string, (cat,(cfg.basedir),"session/") +# method.insert = cfg.watch, private|const|string, (cat,(cfg.basedir),"watch/") + +# Create instance directories +execute.throw = sh, -c, (cat,\ + "mkdir -p \"",(cfg.download),"\" ",\ + "\"",(cfg.logs),"\" ",\ + "\"",(cfg.session),"\" ") + +# Listening port for incoming peer traffic (fixed; you can also randomize it) +network.port_range.set = 58572-58572 +network.port_random.set = no + +# Tracker-less torrent and UDP tracker support +# (conservative settings for 'private' trackers, change for 'public') +dht.mode.set = auto +protocol.pex.set = yes +trackers.use_udp.set = yes + +# Peer settings +throttle.max_uploads.set = 100 +throttle.max_uploads.global.set = 250 + +throttle.min_peers.normal.set = 20 +throttle.max_peers.normal.set = 60 +throttle.min_peers.seed.set = 30 +throttle.max_peers.seed.set = 80 +trackers.numwant.set = 80 + +protocol.encryption.set = allow_incoming,try_outgoing,enable_retry + +# Limits for file handle resources, this is optimized for +# an `ulimit` of 1024 (a common default). You MUST leave +# a ceiling of handles reserved for rTorrent's internal needs! +network.http.max_open.set = 50 +network.max_open_files.set = 600 +network.max_open_sockets.set = 300 + +# Memory resource usage (increase if you have a large number of items loaded, +# and/or the available resources to spend) +pieces.memory.max.set = 3600M +network.xmlrpc.size_limit.set = 4M + +# Basic operational settings (no need to change these) +session.path.set = (cat, (cfg.session)) +directory.default.set = (cat, (cfg.download)) +log.execute = (cat, (cfg.logs), "execute.log") +##log.xmlrpc = (cat, (cfg.logs), "xmlrpc.log") +execute.nothrow = sh, -c, (cat, "echo >",\ + (session.path), "rtorrent.pid", " ", (system.pid)) + +# Other operational settings (check & adapt) +encoding.add = utf8 +system.umask.set = 0007 +system.cwd.set = (directory.default) +network.http.dns_cache_timeout.set = 25 +schedule2 = monitor_diskspace, 15, 60, ((close_low_diskspace, 1000M)) + +dht.port.set = 10523 +system.file.allocate.set = yes + +# Run the rTorrent process as a daemon in the background +# (and control via XMLRPC sockets) +#system.daemon.set = true +network.scgi.open_local = (cat,(session.path),".rtorrent.sock") +execute.nothrow = chmod,770,(cat,(session.path),".rtorrent.sock") + +# Logging: +# Levels = critical error warn notice info debug +# Groups = connection_* dht_* peer_* rpc_* storage_* thread_* tracker_* torrent_* +print = (cat, "Logging to ", (cfg.logfile)) +log.open_file = "log", (cfg.logfile) +log.add_output = "info", "log" + +method.insert = get_public_ip_address, simple|private, "execute.capture=curl,-f,ifconfig.me/ip" +# The IP address reported to the tracker. (ip) This handles dynamic IP's as well. +schedule2 = ip_tick, 0, 1800, "network.local_address.set=(get_public_ip_address)" + diff --git a/nixos/machines/frumar/torrent.nix b/nixos/machines/frumar/torrent.nix new file mode 100644 index 0000000..df4d80b --- /dev/null +++ b/nixos/machines/frumar/torrent.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: { + users.users.torrent = { + isSystemUser = true; + createHome = false; + group = "torrent"; + home = "/torrent"; + }; + users.groups.torrent = {}; + systemd.tmpfiles.rules = [ + "d /torrent 770 torrent torrent" + ]; + users.users.yorick.extraGroups = [ "torrent" ]; +}