From 57a1938531d91d3b38bdef2aeaab5fc8a486fbfe Mon Sep 17 00:00:00 2001 From: FollieHiyuki Date: Thu, 25 Feb 2021 17:48:52 +0300 Subject: [PATCH] rtorrent: add config --- home/.local/bin/garbage/rtorrent-notify.sh | 3 + home/.rtorrent.rc | 201 +++++++++++++++++++++ 2 files changed, 204 insertions(+) create mode 100755 home/.local/bin/garbage/rtorrent-notify.sh create mode 100644 home/.rtorrent.rc diff --git a/home/.local/bin/garbage/rtorrent-notify.sh b/home/.local/bin/garbage/rtorrent-notify.sh new file mode 100755 index 0000000..c9a287c --- /dev/null +++ b/home/.local/bin/garbage/rtorrent-notify.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +notify-send -u low "$(date)" "Torrent completed: $1" diff --git a/home/.rtorrent.rc b/home/.rtorrent.rc new file mode 100644 index 0000000..09b721e --- /dev/null +++ b/home/.rtorrent.rc @@ -0,0 +1,201 @@ +############################################################################# +# 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, (cat,(system.env,HOME),"/Downloads/rtorrent/") +method.insert = cfg.download, private|const|string, (cat,(cfg.basedir),"download/") +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),"\" ",\ + "\"",(cfg.watch),"/load\" ",\ + "\"",(cfg.watch),"/start\" ") + +# Listening port for incoming peer traffic (fixed; you can also randomize it) +network.port_range.set = 62820-62820 +network.port_random.set = no + +# Enable DHT support for trackerless torrents or when all trackers are down. +# May be set to "disable" (completely disable DHT), "off" (do not start DHT), +# "auto" (start and stop DHT as needed), or "on" (start DHT immediately). +# The default is "off". +# For DHT to work, a session directory must be defined. +# See https://help.ubuntu.com/community/Dnsmasq#Local_DNS_Cache for enabling local DNS cache +# Open ports to the firewall as well +dht.mode.set = auto + +# UDP port to use for DHT +dht.port.set = 62882 + +# Enable/disable peer exchange for torrents that aren't marked private. Disabled by default. (peer_exchange) +protocol.pex.set = 1 + +# Set whether the client should try to connect to UDP trackers (It can cause various problems if it's enabled, if you experience any with this option enabled then disable it.) +trackers.use_udp.set = 1 + +# Adding public DHT servers for easy bootstrapping +# schedule2 = dht_node_1, 5, 0, "dht.add_node=router.utorrent.com:6881" +# schedule2 = dht_node_2, 5, 0, "dht.add_node=dht.transmissionbt.com:6881" +# schedule2 = dht_node_3, 5, 0, "dht.add_node=router.bitcomet.com:6881" +# schedule2 = dht_node_4, 5, 0, "dht.add_node=dht.aelitis.com:6881" + +# Global upload and download rate in KiB, `0` for unlimited (`download_rate`, `upload_rate`) +throttle.global_down.max_rate.set_kb = 8000 +throttle.global_up.max_rate.set_kb = 2000 + +# Maximum number of simultaneous downloads and uploads slots (global slots!) (`max_downloads_global`, `max_uploads_global`) +throttle.max_downloads.global.set = 300 +throttle.max_uploads.global.set = 300 + +# Maximum and minimum number of peers to connect to per torrent while downloading (`min_peers`, `max_peers`) Default: `100` and `200` respectively +throttle.min_peers.normal.set = 50 +throttle.max_peers.normal.set = 100 + +# Same as above but for seeding completed torrents (seeds per torrent), `-1` for same as downloading (`min_peers_seed`, `max_peers_seed`) Default: `-1` for both +throttle.min_peers.seed.set = -1 +throttle.max_peers.seed.set = -1 + +# Maximum number of simultaneous downloads and uploads slots per torrent (`max_uploads`) Default: `50` for both +throttle.max_downloads.set = 50 +throttle.max_uploads.set = 50 + +# Set the numwant field sent to the tracker, which indicates how many peers we want. +# A negative value disables this feature. Default: `-1` (`tracker_numwant`) +trackers.numwant.set = 100 + +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 + +# Send and receive buffer size for socket. Disabled by default (`0`), this means the default is used by OS +# (you have to modify the system wide settings!) (`send_buffer_size`, `receive_buffer_size`) +# Increasing buffer sizes may help reduce disk seeking, connection polling as more data is buffered each time +# the socket is written to. It will result higher memory usage (not visible in rtorrent process!). +network.receive_buffer.size.set = 4M +network.send_buffer.size.set = 12M + +# Preloading a piece of a file. Default: `0` Possible values: `0` (Off) , `1` (Madvise) , `2` (Direct paging). +pieces.preload.type.set = 2 +#pieces.preload.min_size.set = 262144 +#pieces.preload.min_rate.set = 5120 + +# TOS of peer connections. Default: `throughput`. If the option is set to `default` then the system default TOS +# is used. A hex value may be used for non-standard settings. (`tos`) +# Possible values: `[default|lowdelay|throughput|reliability|mincost]` or a hex value. +#network.tos.set = throughput + +# Memory resource usage (increase if you have a large number of items loaded, +# and/or the available resources to spend) +pieces.memory.max.set = 2048M +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 = 0027 +system.cwd.set = (directory.default) +network.http.dns_cache_timeout.set = 25 +schedule2 = monitor_diskspace, 15, 60, ((close_low_diskspace, 1000M)) +pieces.hash.on_completion.set = yes +##view.sort_current = seeding, greater=d.ratio= +##keys.layout.set = qwerty +##network.http.capath.set = "/etc/ssl/certs" + +# CURL options to add support for nonofficial SSL trackers and peers +network.http.ssl_verify_peer.set = 0 +network.http.ssl_verify_host.set = 0 + +# Some additional values and commands +method.insert = system.startup_time, value|const, (system.time) +method.insert = d.data_path, simple,\ + "if=(d.is_multi_file),\ + (cat, (d.directory), /),\ + (cat, (d.directory), /, (d.name))" +method.insert = d.session_file, simple, "cat=(session.path), (d.hash), .torrent" + +# Watch directories (add more as you like, but use unique schedule names) +schedule2 = watch_start, 10, 10, ((load.start_verbose, (cat, (cfg.watch), "start/*.torrent"))) +schedule2 = watch_load, 11, 10, ((load.verbose, (cat, (cfg.watch), "load/*.torrent"))) + +# 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" +##log.add_output = "tracker_debug", "log" + +############################################################################# +# Advanced configuration +# Check https://github.com/rakshasa/rtorrent/wiki for more details +# +############################################################################# + +# Notify when finishing a download +method.set_key = event.download.finished, notify_me, "execute=~/.local/bin/garbage/rtorrent-notify.sh,$d.name=" + +# Set scrape intervals for active (~10 mins) and idle items (~12 hours) +method.insert = cfg.scrape_interval.active, value, 580 +method.insert = cfg.scrape_interval.idle, value, 43180 + +# Regularly update scrape information for all torrents (even stopped ones), it won't affect the operation of rtorrent, but nice to have these values updated. +# This info is only updated when rtorrent starts or a torrent is added by default. +# Try to balance calls to not fire them up at the same time (since multiscraping isn't implemented in libtorrent). Check for update every 5 minutes and distinguish between 2 groups: +# - transferring (uploading and/or downloading) torrents: update in every 10 minutes +# - non-transferring torrents: update in every 12 hours +# helper method: sets current time in a custom field (tm_last_scrape) and saves session +method.insert = d.last_scrape.set, simple|private, "d.custom.set=tm_last_scrape,$cat=$system.time=; d.save_resume=" +# helper method: sends the scrape request and sets the tm_last_scrape timestamp and saves session +method.insert = d.last_scrape.send_set, simple, "d.tracker.send_scrape=0;d.last_scrape.set=" +# helper method: decides whether the required time interval (with the help of an argument) has passed and if so calls the above method +method.insert = d.last_scrape.check_elapsed, simple|private, "branch={(elapsed.greater,$d.custom=tm_last_scrape,$argument.0=),d.last_scrape.send_set=}" +# helper method: checks for non-existing/empty custom field to be able to test its validity later +method.insert = d.last_scrape.check, simple|private, "branch={d.custom=tm_last_scrape,d.last_scrape.check_elapsed=$argument.0=,d.last_scrape.send_set=}" +# sets custom field (tm_last_scrape) to current time only for torrents just has been added (skips setting time on purpose when rtorrent started) +method.set_key = event.download.inserted_new, ~last_scrape_i, "d.last_scrape.set=" +# check for update every 5 minutes (300 sec) and update scrape info for transferring torrents in every 10 minutes (600-20=580 sec) and for non-transferring ones in every 12 hours (43200-20=43180 sec) +schedule2 = last_scrape_t, 300, 300, "d.multicall2=default,\"branch=\\\"or={d.up.rate=,d.down.rate=}\\\",d.last_scrape.check=$cfg.scrape_interval.active=,d.last_scrape.check=$cfg.scrape_interval.idle=\"" + +# IP filtering (https://list.iblocklist.com) +# ip_tables.insert_table = +# ip_tables.load = , ~/.local/share/rtorrent/block_list.txt, unwanted + +# Save all the sessions in every 12 hours instead of the default 20 minutes. +schedule2 = session_save, 1200, 43200, ((session.save)) + +# Prune file status in every 24 hours, this is the default setting. +#schedule2 = prune_file_status, 3600, 86400, ((system.file_status_cache.prune)) + +# Whether to allocate disk space for a new torrent. Default: `0` +#system.file.allocate.set = 0 + +### END of rtorrent.rc ###