rtorrent + rutorrent + nginx = GUI/WebUI dla konsolowego klienta sieci BitTorrent
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
cd libtorrent-0.12.6
./configure
make
checkinstall
dpkg -i libtorrent_0.12.6-1_i386.deb ##instalacja gotowego pakietu (Debian/Ubuntu)
./configure --with-xmlrpc-c
make
checkinstall
dpkg -i rtorrent_0.8.6-1_i386.deb
/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'.
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
$scgi_port = 5000;
$scgi_host = "127.0.0.1";
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.
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.
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 »