rtorrent + rutorrent + nginx = GUI/WebUI dla konsolowego klienta sieci BitTorrent

  • Data: 2014

rTorrent - jest tekstowym klientem sieci BitTorrent wykorzystującą własną bibliotekę libTorrent. Napisany został w języku C++ a interfejs użytkownika wykorzystuje bibliotekę ncurses. Śmiało można stwierdzić, iż jest to jeden z najlepszych klientów torrent niezależnie od architektury z uwagi na małą zasobożerność systemu jak i na wydajny mechanizm ściągania plików. Dzięki interfejsowi tekstowemu można używać go w programach typu screen i dtach w celu zawieszenia sesji i wylogowania się z systemu. Gotowe paczki dostępne są na różne dystrybucje Linuksa więc instalacja jest banlnie prosta. Dla rTorrent-a powstało wiele nakładek graficznych wykorzystujących protokół xml-rpc do sterowania naszym klientem. Możemy je podzielić na aplikacje napisane w języku Java wymagające tylko JRE na przykład:

i na aplikacje napisane w AJAX/PHP wymagające serwera www np:

Moim zdaniem najlepszym z nich jest paradoksalnie ten ostatni. Działa szybko i stabilnie, ma wszystkie funkcje jakich wymagamy od tego typu programów a przy tym subiektywnie jest chyba najładniejszy. Niżej przedstawiony opis zrobiony jest na przykładzie dystrybucji Debian 6 co wiąże się z koniecznością kompilacji kilku pakietów. Powodem takiego stanu jest ostra polityka twórców Debiana dotyczącej wydawania stabilnych pakietów. Najlepszym przykładem może być nginx w wersji 0.7.67 jeszcze bez wsparcia SCGI, który jest nam niezbędny. Sama konfiguracja rTorrent-a zostanie zmarginalizowana, główny nacisk zostanie położony na skonfigurowanie dla niego GUI.

  • Czynności wstępne

  • na początek aktualizujemy nasze repozytoria: aptitude update
  • Pobieramy potrzebne nam pakiety z repozytoriów Debiana:
  • aptitude install libpcre3-dev subversion build-essential automake libtool libcppunit-dev libcurl4-dev libsigc++-2.0-dev checkinstall pkg-config libcurl4-openssl-dev libncurses5-dev
  • pobieramy libTorrent: wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.12.6.tar.gz
  • pobieramy rTorrent: wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.8.6.tar.gz
  • pobieramy XMLRPC-C: svn co http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable xmlrpc-c
  • pobieramy nginx: wget http://nginx.org/download/nginx-1.0.4.tar.gz
  • pobieramy rutorrent: wget http://rutorrent.googlecode.com/files/rutorrent-3.2.tar.gz
  • rozpakowywujemy archiwa: tar zxvf libtorrent-0.12.6.tar.gz, tar zxvf rtorrent-0.8.6.tar.gz, tar zxvf rutorrent-3.2.tar.gz
  • Kompilacja

  • Kompilacja i późniejsza instalacja aplikacji ze źródeł może spowodować nam mały nieład w systemie spowodowany trudnością z późniejszą deinstalacją. Dobrą praktyką jest tworzenie własnych paczek za pomocą np. Checkinstall, które później możemy łatwo usuwać.
  • XMLRPC-C:
  • ./configure
    make
    checkinstall
    dpkg -i xmlrpc_c-1_i386.deb
    	
  • libTorrent:
  • cd libtorrent-0.12.6
    ./configure
    make
    checkinstall
    dpkg -i libtorrent_0.12.6-1_i386.deb ##instalacja gotowego pakietu (Debian/Ubuntu)
    	
  • rTorrent
  • 
    ./configure --with-xmlrpc-c
    make
    checkinstall
    dpkg -i rtorrent_0.8.6-1_i386.deb
    	
  • nginx
  • /configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf \
    --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock \
    --user=www-data --group=www-data \
    --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log \
    --http-client-body-temp-path=/var/lib/nginx/body \
    --http-proxy-temp-path=/var/lib/nginx/proxy \
    --http-fastcgi-temp-path=/var/lib/nginx/proxy --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
    --http-scgi-temp-path=/var/lib/nginx/scgi \
    --with-http_ssl_module --with-http_stub_status_module \
    --with-debug
    
    make
    checkinstall
    dpkg -i nginx_1.0.4-1_i386.deb 
    	

  • Konfiguracja

  • rTorrent

  • Po udanej instalacji rtorenta należy go skonfigurować. Plik konfiguracyjny znajduje się w domowym katalogu użytkownika. Przykładowy plik:.rtorrent.rc. Nas w szczególności interesuje linia: scgi_port = 127.0.0.1:5000, jeśli jej nie mammy dopisujemy. Po uruchomieniu rtorenta powinniśmy ujrzeć:
    (17:40:43) Using 'epoll' based polling.
    (17:40:43) XMLRPC initialized with 519 functions.
    (17:40:43) The SCGI socket is bound to a specific network device yet may still pose a security risk, consider using 'scgi_local'.
    
  • rutorrent

  • Kopiujemy zawartość rozpakowanego katalogu rutorrent-3.2 do np. katalogu /var/www/rtg:
    # mkdir /var/www/rtg
    # cd rutorrent-3.2
    # cp * /var/www/rtg
    # chown -R www-data:www-data /var/www/rtg
    	
  • edytujemy plik: /var/www/rtg/conf/config.php i ustawiamy odpowiednie wartości:
  • $scgi_port = 5000;
    $scgi_host = "127.0.0.1";
    	
  • nginx

  • Do działania rutorrent musimy posiadać skonfigurowanego nginx-a z obsługą php. Jeśli jeszcze w/w konfiguracji nie mamy, można zajrzeć tu:ngixn + php cześć I i nginx + php część II lub do innych poradników. Przy konfiguracji przyjmuję, że nasz interfejs WebUI będzie dostępny spod virtual hosta: rtg a katalogiem do którego ma dostęp nasz serwer www: /var/www/. Połączenie będzie szyfrowane, dostęp zabezpieczony hasłem.
  • Tworzymy plik naszego wirtualnego hosta: touch /etc/nginx/sites-available/rtg i dokonujemy edycji naszym ulubionym edytorem
  • server {
                listen  80;
                server_name  rtg.nasz_domena.pl;
    
                if ($host = 'rtg.nasz_domena.pl' ) {
                    rewrite ^/(.*)$ https://rtg.nasz_domena.pl/$1 permanent;
                }
    
                access_log  /var/log/nginx/rtg.nasz_domena.pl.access.log;
                error_log  /var/log/nginx/rtg.nasz_domena.pl.error.log;
            }
    
    server{
                listen 443;
                ssl on;
                server_name rtg.nasz_domena.pl;
                ssl_certificate /etc/nginx/ssl/rtg.nasz_domena.pl/ssl.crt;
                ssl_certificate_key /etc/nginx/ssl/rtg.nasz_domena.pl/ssl.key;
                access_log /var/log/nginx/rtg.nasz_domena.pl.access_log;
                error_log /var/log/nginx/rtg.nasz_domena.pl.error_log;
    
    
                location /RPC2 {
                    include scgi_params;
                    scgi_pass localhost:5000;
                }
    
    
                    location  / {
                        satisfy  any;                               # opcja ta pozwala na dostep bez hasla komputerom zadeklarowanym w dyrektywie allow
                        root   /var/www/rtg;
                        allow ip.ip.ip.ip;
                        deny all;
                        auth_basic "Restricted";
                        auth_basic_user_file /etc/nginx/.htpasswd;
    
    
                }
    
    
    
    
                location ~ \.php$ {
    
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_param  SCRIPT_FILENAME /var/www/rtg$fastcgi_script_name;
                    include fastcgi_params;
                }
    
            }
    		
    Założenie powyższej kompilacji jest proste: spoza zadeklarowanego adresu IP w dyrektywie allow ip.ip.ip.ip dostęp do naszego WebUI jest możliwy przez podanie loginu i hasła.
  • wygenerujemy hasło za pomocą programu htpasswd: htpasswd -c scieżka_do_pliku nazwa_użytkownika
  • oczywiście musimy wygenerować certyfikat ssl, jeśli nie chcemy się użerać z komunikatami o niepodpisanych certyfikatach polecam stronę www.startssl.com
  • tworzymy link symboliczny: ln -s /etc/nginx/sites-available/rtg /etc/nginx/sites-enabled/rtg i restartujemy Nginx-a: /etc/init.d/nginx restart
  • Zostaje tylko uruchomić rtorrenta i wejść przez przeglądarkę http://rtg.nasz_domena. Opis ten nie jest do końca kompletny, brakuje m.in. pełnej konfiguracji rtorrenta lub generowania certyfikatów dla nginx, na szczęście istnieje wiele poradników dotyczących w/w tematów.

    Powrót »