Linux Poradniki

Instalacja rTorrent + ruTorrent na ubuntu 20.04

Przedstawię dziś sposób instalacji uważanego za najlepszego linuksowego klienta torrent, mianowicie rTorrent z nakładką ruTorrent. Sam rTorrent jest klientem konsolowym i jego obsługa może być skomplikowana i niewygodna. Klient ma jednak duże możliwości i zużywa mało zasobów. Z pomocą przychodzi przeglądarkowa nakładka graficzna ruTorrent. RuTorrent jest bardzo rozbudowaną nakładką, której możliwości rozszerza się za pomocą pluginów. Obsługuje min. kanały RSS oraz IRC poprzez plugin autodl-irssi. RuTorrent do działania wymaga PHP i serwera www, np. Apache2 lub nginx.

Jako, że instalacja i konfiguracja rTorrent i ruTorren dla nowicjuszy może być dość skomplikowana powstało wiele skryptów instalacyjnych. Ich zaletąjest to, że instalujemy wszystko za pomocą jednego polecenia, wadą zaś, że tak naprawdę nie wiemy co robią i jeżeli instalacja się nie powiedzie, to często nie wiemy dlaczego.

Postanowiłem, że przedstawię dwa sposoby instalacji ruTorrenta, jeden za pomocą skryptu, który sam przetestowałem i uważam za najlepszy, roraz metodę manualną ze zrozumieniem następujących po sobie kroków.

Instalacja za pomocą skryptu

Wybrałem tutaj skrypt rt-auto-install, którego autorem jest Bercik1337. Przy okazji, podziękowania dla niego za napisanie tego skryptu, bo dzięki niemu zrozumiałem zasadę działania rtorrenta.

Skrypt dostępny jest pod adresem https://github.com/Bercik1337/rt-auto-install

Instalacja sprowadza się do wydania kilku poleceń z terminala:

git clone https://github.com/Bercik1337/rt-auto-install.git
cd rt-auto-install
sudo ./Rt-Install-minimal

lub

wget https://raw.githubusercontent.com/Bercik1337/rt-auto-install/master/Rt-Install-minimal
sudo ./Rt-Install-minimal

Skrypt sprawdzi czy nasz system jest kompatybilny i poprosi o podanie nazwy użytkownika systemowego. Potem należy podać nazwę użytkownika i hasło do interfejsu rutorrent. Na koniec wybieramy „0” i skrypt wykonuje instalację i konfigurację klienta rtorrent z nakładką rutorrent działającą na serwerze apache2.

Po zakończonej instalacji ruTorrent będzie dostępny pod adresem http://ip-adres/rutorrent

Instalacja manualna

Instalację manualną zaczynamy od instalacji pakietów niezbędnych do działania rutorrent

sudo apt-get update
sudo apt-get install openssl git apache2-utils rar unrar zip unzip curl mc nano php php-curl php-cli libapache2-mod-php tmux mediainfo sox ffmpeg

Instalacja serwera apache

sudo apt-get install apache2
sudo systemctl enable apache2

Jeżeli ktoś woli inny serwer to można zainstalować nginx albo lighttpd

sudo apt-get install nginx
lub
sudo apt-get install lighttpd

Instalacja rtorrent

sudo apt-get install libxmlrpc-core-c3
sudo apt-get install libtorrent21
sudo apt-get install rtorrent

Instalacja modu SCGI apache2. Dla ubuntu 20.04 musimy zrobić to ręcznie, ponieważ paczka libapache2-mod-scgi została usunięta z repozytoriów.

wget http://mirrors.kernel.org/ubuntu/pool/universe/s/scgi/libapache2-mod-scgi_1.13-1.1build1_amd64.deb
sudo dpkg -i libapache2*.deb

Dla dystrybucji, które zawierają paczkę w repozytoriach instalujemy ją prostym poleceniem

sudo apt-get install libapache2-mod-scgi 

Tworzymy katalog sesji rtorrent

sudo mkdir /home/rtorrent-user/.rtorrent-session
sudo chown -R rtorrent-user:rtorrent-user /home/rtorrent-user/.rtorrent-session

Tworzymy katalog dla pobranych danych

sudo mkdir /home/rtorrent-user/Downloads
sudo chown -R rtorrent-user:rtorrent-user /home/rtorrent-user/Downloads

Jeżeli chcemy korzystać z funkcji automatycznego dodawania torrentów z katalogu, należy utworzyć folder watch

sudo mkdir /home/rtorrent-user/watch
sudo chown -R rtorrent-user:rtorrent-user /home/rtorrent-user/.rtorrent-session

Tworzymy plik konfiguracyjny rtorrent

nano /home/user/.rtorrent.rc

I wklejamy zawartość

# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

# Maximum and minimum number of peers to connect to per torrent.
#min_peers = 40
#max_peers = 100

# Same as above but for seeding completed torrents (-1 = same as downloading)
#min_peers_seed = 10
#max_peers_seed = 50

# Maximum number of simultanious uploads per torrent.
#max_uploads = 15

# Global upload and download rate in KiB. "0" for unlimited.
#download_rate = 0
#upload_rate = 0

# Default directory to save the downloaded torrents.
directory = ~/Downloads

# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = ~/.rtorrent-session

# Watch a directory for new torrents, and stop those that have been
# deleted.
schedule = watch_directory, 5, 5, "load.start_verbose=~/watch/*.torrent"
#schedule = untied_directory,5,5,stop_untied=

# Close torrents when diskspace is low.
schedule = low_diskspace,5,60,close_low_diskspace=100M

# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no

# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no

# Port range to use for listening.
port_range = 45000-45022

# Start opening ports at a random position within the port range.
port_random = no

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
#check_hash = no

# Set whetever the client should try to connect to UDP trackers.
#use_udp_trackers = yes

# Alternative calls to bind and ip that should handle dynamic ip's.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa

# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
encryption = allow_incoming,enable_retry,try_outgoing

# 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.
# 
#dht.mode.set = on

# UDP port to use for DHT. 
# 
# dht_port = 6881

# Enable peer exchange (for torrents not marked private)
#
#protocol.pex.set = no
#trackers.use_udp.set = no

#
# Do not modify the following parameters unless you know what you're doing.
#

# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10

# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100

# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10

#SCGI
scgi_port = 127.0.0.1:5000

#XMLRPC
#network.scgi.open_port = 127.0.0.1:5000

####### Heavy I/O seedbox configuration
####### Uncomment lines below if you have 1Gbit+ Internet link
####### thanks Zebirek
####pieces.memory.max.set = 8048M
####network.max_open_sockets.set = 999
####network.max_open_files.set = 600
####network.http.max_open.set = 99
####network.receive_buffer.size.set = 32M
####network.send_buffer.size.set    = 64M
####pieces.preload.type.set = 2
#####pieces.preload.min_size.set = 262144
#####pieces.preload.min_rate.set = 5120

Za komunikację z rutorrentem odpowiada linia

#SCGI
#scgi_port = 127.0.0.1:5000

Jeżeli chcemy się łączyć przez XMLRPC należy skomentować lub usunąć powyższy wpis, a odkomentować lub dodać poniższy

#XMLRPC
network.scgi.open_port = 127.0.0.1:5000

Tworzymy usługę systemową aby rtorrent uruchamiał się wraz ze startem systemu

sudo nano /etc/systemd/system/rtorrent.service

I wklejamy tekst poniżej

[Unit]
Description=rtorrent (in tmux)
[Service]
Type=forking
RemainAfterExit=yes
User=rtorrent-user
ExecStart=/usr/bin/tmux -2 new-session -d -s rtorrent rtorrent
ExecStop=/usr/bin/tmux send-keys -t rtorrent:rtorrent C-q
RemainAfterExit=no
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=default.target

Usługę uruchamiamy poleceniem

sudo systemctl enable rtorrent.service

Instalacja ruTorrent

Aby zainstalować rutorrent przechodzimy do katalogu /var/www i klonujemy katalog rutorrent za pomocą polecenia git.

cd /var/www
sudo git clone https://github.com/Novik/ruTorrent.git
sudo mv ruTorrent rutorrent
sudo chown -R www-data:www-data /var/www/rutorrent
sudo chmod -R 775 /var/www/rutorrent

Jeżeli otrzymamy komunikat, że użytkownik serwera www nie ma dostępu do jakiegoś programu należy ustawić ścieżki w pliku /var/www/rutorrent/conf/config.php jak poniżej

$pathToExternals = array(
                "python"=> '/usr/bin/python3',  // Something like /usr/bin/python. If empty, will be found in PATH.
                "php"   => '/usr/bin/php',      // Something like /usr/bin/php. If empty, will be found in PATH.
                "curl"  => '/usr/bin/curl',     // Something like /usr/bin/curl. If empty, will be found in PATH.
                "gzip"  => '/usr/bin/gzip',     // Something like /usr/bin/gzip. If empty, will be found in PATH.
                "id"    => '/usr/bin/id',       // Something like /usr/bin/id. If empty, will be found in PATH.
                "stat"  => '/usr/bin/stat',     // Something like /usr/bin/stat. If empty, will be found in PATH.
        );

Konfiguracja serwera

Włączamy mod SCGI do komunikacji rtorrenta z rutorrent (powinien być domyślnie włączony)

sudo a2enmod scgi

Włączamy mod SCGI do komunikacji XMLRPC rtorrenta z rutorrent (powinien być domyślnie włączony)

sudo a2enmod proxy
sudo a2enmod proxy_scgi

Dodajemy ServerName localhost do pliku apache2.conf

sudo echo "ServerName localhost" /etc/apache2/apache2.conf;

Tworzymy plik konfiguracyjny apache2 do obsługi rtorrent

sudo nano /etc/apache2/sites-available/001-rutorrent.conf

I uzupełniamy go

<VirtualHost *:80>
    DocumentRoot /var/www
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    CustomLog /var/log/apache2/rutorrent.log vhost_combined
    ErrorLog /var/log/apache2/rutorrent_error.log

    SCGIMount /RPC2 127.0.0.1:5000

    #XMLRPC
    #ProxyPass /RPC2 scgi://127.0.0.1:5000
</VirtualHost>

Jeżeli zamierzamy łączyć się spoza sieci domowej należy dodać hasło do interfejsu rutorrent oraz do SCGI. Jeżeli łączymy się jedynie w sieci domowej, możemy nie dodawać hasła. Poniżej konfiguracja serwera apache2 zabezpieczonego hasłami.

<VirtualHost *:80>
    DocumentRoot /var/www
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    CustomLog /var/log/apache2/rutorrent.log vhost_combined
    ErrorLog /var/log/apache2/rutorrent_error.log

    SCGIMount /RPC2 127.0.0.1:5000

    #XMLRPC
    #ProxyPass /RPC2 scgi://127.0.0.1:5000

    <Directory "/var/www/rutorrent">
        AuthName "Tits or GTFO"
        AuthType Basic
        Require valid-user
        AuthUserFile /var/www/rutorrent/.htpasswd
    </Directory>
<location /RPC2>
AuthName "rTorrent secure access"
AuthType Basic
AuthBasicProvider file
AuthUserFile /home/rtorrent-user/Documents/rtorrent-htpasswd
Require user rtorrent-user
</location>
</VirtualHost>

Generujemy hasło do interfejscu ruTorrent

sudo htpasswd -c /var/www/rutorrent/.htpasswd rtorrent-user

Generujemy hasło do zabezpieczenia SCGI

sudo htpasswd -c /home/rtorrent-user/Documents/rtorrent-htpasswd rtorrent-user

Wyłączmy teraz domyślny plik konfiguracyjny apache2 i włączamy plik konfiguracyjny rutorrenta

sudo a2dissite 000-default.conf
sudo a2ensite 001-rutorrent.conf

Po wszystkim restartujemy apache2

sudo systemctl restart apache2

Na tym instalacja została zakończona, ruTorrent będzie dostępny pod adresem http://ip-adres/rutorrent.

Najprawdopodobniej pokaże się błąd pluginu _cloudflare. Należy wtedy albo wyłączyć wtyczkę, albo doinstalować brakujące elementy, w następujący sposób

sudo apt-get install python3-pip
sudo pip3 install cloudscraper

Po tym zabiegu rutorrent nie powinien już zgłaszać żadnych błedów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *