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 chcemy się łączyć przez XMLRPC należy skomentować lub usunąć wiersz

#SCGIMount /RPC2 127.0.0.1:5000

A odkomentować lub dodać

ProxyPass /RPC2 scgi://127.0.0.1:5000

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.

9 komentarzy do “Instalacja rTorrent + ruTorrent na ubuntu 20.04

  • 01/09/2022 o 11:48
    Permalink

    Hi there, I want to subscribe for this web site to get most recent updates,
    thus where can i do it please help out.

    Odpowiedz
  • 09/09/2022 o 09:55
    Permalink

    Hi there terrific blog! Does running a blog like this require
    a massive amount work? I have virtually no expertise
    in computer programming however I was hoping to start my own blog in the near future.
    Anyhow, should you have any recommendations or techniques for new blog owners please share.
    I know this is off subject but I simply needed to ask.

    Kudos!

    Odpowiedz
  • 09/09/2022 o 09:57
    Permalink

    Hi! I could have sworn I’ve been to this website before but after
    browsing through many of the articles I realized it’s new to me.
    Anyhow, I’m definitely happy I came across it and I’ll be bookmarking
    it and checking back frequently!

    Odpowiedz
  • 09/09/2022 o 10:41
    Permalink

    It’s a shame you don’t have a donate button! I’d most
    certainly donate to this brilliant blog! I guess
    for now i’ll settle for book-marking and adding your RSS feed to my Google account.
    I look forward to fresh updates and will share this website with my
    Facebook group. Talk soon!

    Odpowiedz
  • 13/09/2022 o 13:10
    Permalink

    With havin so much content and articles do you ever run into
    any problems of plagorism or copyright violation? My site has
    a lot of completely unique content I’ve either written myself or outsourced but
    it seems a lot of it is popping it up all over the web without my permission. Do you know any ways to help stop content from being ripped off?
    I’d definitely appreciate it.

    Odpowiedz
  • 13/09/2022 o 13:10
    Permalink

    You really make it seem so easy along with your presentation however I find this matter to be
    actually one thing that I feel I might never understand.

    It seems too complicated and very large for me. I am having a look forward in your next put up, I will attempt to get the grasp of it!

    Odpowiedz

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.