Update install_rtorrent.py
This commit is contained in:
@@ -15,8 +15,8 @@ DEFAULT_USER = "rtorrent"
|
||||
DEFAULT_GROUP = "rtorrent"
|
||||
DEFAULT_HOME = "/home/rtorrent"
|
||||
DEFAULT_BASE_DIR = "/opt/rtorrent_build"
|
||||
DEFAULT_LIBTORRENT_REF = "v0.15.7"
|
||||
DEFAULT_RTORRENT_REF = "v0.15.7"
|
||||
DEFAULT_LIBTORRENT_REF = "v0.16.11"
|
||||
DEFAULT_RTORRENT_REF = "v0.16.11"
|
||||
DEFAULT_XMLRPC_REF = "latest-stable"
|
||||
DEFAULT_CARES_REF = "1.34.6"
|
||||
DEFAULT_CURL_REF = "8.19.0"
|
||||
@@ -507,22 +507,23 @@ WantedBy=multi-user.target
|
||||
run(["systemctl", "daemon-reload"])
|
||||
|
||||
|
||||
def write_rtorrent_config(user_home, username):
|
||||
config_path = Path(user_home) / ".rtorrent.rc"
|
||||
config_content = f"""
|
||||
def build_rtorrent_config_content(username, scgi_port, torrent_port):
|
||||
return f"""
|
||||
## https://git.linuxiarz.pl/gru/tools_scripts/_edit/master/install_rtorrent.py
|
||||
directory = /home/{username}/downloads
|
||||
session = /home/{username}/.session
|
||||
port_random = yes
|
||||
encoding_list = UTF-8
|
||||
# Generated by install_rtorrent.py
|
||||
|
||||
execute.nothrow = chmod,777,/home/rtorrent/downloads
|
||||
network.scgi.open_port = 127.0.0.1:5000
|
||||
network.port_range.set = 51300-51310
|
||||
directory.default.set = /home/{username}/downloads
|
||||
session.path.set = /home/{username}/.session
|
||||
encoding.add = UTF-8
|
||||
|
||||
network.scgi.open_port = 127.0.0.1:{scgi_port}
|
||||
network.port_range.set = {torrent_port}-{torrent_port}
|
||||
network.port_random.set = no
|
||||
network.bind_address.set = 0.0.0.0
|
||||
system.file.allocate.set = 1
|
||||
network.bind_address.ipv4.set = 0.0.0.0
|
||||
|
||||
system.file.allocate.set = 0
|
||||
system.umask.set = 0022
|
||||
|
||||
dht.mode.set = disable
|
||||
protocol.pex.set = no
|
||||
trackers.use_udp.set = no
|
||||
@@ -530,19 +531,36 @@ protocol.encryption.set = allow_incoming,enable_retry,prefer_plaintext
|
||||
|
||||
schedule2 = tied_directory,6,5,start_tied=
|
||||
schedule2 = untied_directory,7,5,stop_untied=
|
||||
schedule2 = session_save,600,1800,((session.save))
|
||||
schedule2 = session_save,300,300,((session.save))
|
||||
schedule2 = watch_directory,60,60,load.normal=/home/{username}/watch/*.torrent
|
||||
|
||||
ratio.max.set = -1
|
||||
network.xmlrpc.size_limit.set = 33554432
|
||||
network.http.max_open.set = 32
|
||||
network.max_open_sockets.set = 2048
|
||||
network.max_open_files.set = 4096
|
||||
network.http.dns_cache_timeout.set = 3600
|
||||
network.http.max_open.set = 64
|
||||
network.max_open_sockets.set = 8192
|
||||
network.max_open_files.set = 32768
|
||||
network.http.dns_cache_timeout.set = 0
|
||||
pieces.memory.max.set = 1800M
|
||||
""".lstrip()
|
||||
|
||||
|
||||
"""
|
||||
def write_rtorrent_config(user_home, username, scgi_port, torrent_port, *, force_config=False):
|
||||
config_path = Path(user_home) / ".rtorrent.rc"
|
||||
config_content = build_rtorrent_config_content(username, scgi_port, torrent_port)
|
||||
|
||||
if config_path.exists() and not force_config:
|
||||
print(f"Config already exists: {config_path}")
|
||||
print("Not overwriting existing config. Proposed generated config would be:")
|
||||
print("--- BEGIN PROPOSED .rtorrent.rc ---")
|
||||
print(config_content, end="")
|
||||
print("--- END PROPOSED .rtorrent.rc ---")
|
||||
print("Use --force-config to overwrite the existing config.")
|
||||
return False
|
||||
|
||||
config_path.write_text(config_content)
|
||||
shutil.chown(config_path, user=username, group=username)
|
||||
print(f"Wrote config: {config_path}")
|
||||
return True
|
||||
|
||||
|
||||
def prepare_user_dirs(user_home, username):
|
||||
@@ -650,6 +668,9 @@ def build_parser():
|
||||
parser.add_argument("--user", default=DEFAULT_USER, help=f"System user for the service (default: {DEFAULT_USER})")
|
||||
parser.add_argument("--group", default=DEFAULT_GROUP, help=f"System group for the service (default: {DEFAULT_GROUP})")
|
||||
parser.add_argument("--home", default=DEFAULT_HOME, help=f"Home directory for the service user (default: {DEFAULT_HOME})")
|
||||
parser.add_argument("--scgi-port", type=int, default=DEFAULT_SCGI_PORT, help=f"SCGI listen port for rTorrent XMLRPC/SCGI (default: {DEFAULT_SCGI_PORT})")
|
||||
parser.add_argument("--torrent-port", type=int, default=DEFAULT_TORRENT_PORT, help=f"Incoming BitTorrent listen port (default: {DEFAULT_TORRENT_PORT})")
|
||||
parser.add_argument("--force-config", action="store_true", help="Overwrite existing ~/.rtorrent.rc. By default, existing config is left unchanged and the proposed changes are printed.")
|
||||
parser.add_argument("--only-build", action="store_true", help="Only build and install libtorrent/rTorrent under /opt. Skip user, config and systemd.")
|
||||
parser.add_argument("--yes", action="store_true", help="Assume yes for interactive prompts.")
|
||||
parser.add_argument("--debug", action="store_true", help="Show full command output during build steps.")
|
||||
@@ -685,6 +706,7 @@ def main():
|
||||
print(" - skip service user, config and systemd setup")
|
||||
else:
|
||||
print(f" - configure systemd service for user '{args.user}'")
|
||||
print(f" - use SCGI port {args.scgi_port} and torrent port {args.torrent_port}")
|
||||
|
||||
if not prompt_yes_no("Continue?", default=True, assume_yes=args.yes):
|
||||
print("Aborted by user.")
|
||||
@@ -718,7 +740,7 @@ def main():
|
||||
if not args.only_build:
|
||||
create_system_user(args.user, args.group, args.home, assume_yes=args.yes, debug=args.debug)
|
||||
prepare_user_dirs(args.home, args.user)
|
||||
write_rtorrent_config(args.home, args.user)
|
||||
write_rtorrent_config(args.home, args.user, args.scgi_port, args.torrent_port, force_config=args.force_config)
|
||||
runtime_lib_dirs = [f"{libtorrent_install}/lib", f"{xmlrpc_install}/lib"]
|
||||
if curl_install:
|
||||
runtime_lib_dirs.append(f"{curl_install}/lib")
|
||||
|
||||
Reference in New Issue
Block a user