Temat: [HOWTO] rTorrent + (GUI) ruTorrent (na nginx albo lighttpd)
Po zabawach z transmission przyszedł czas na trochę lżejszego klienta. Jako że sam w sobie nie posiada GUI to dorzucimy takowe dzięki ruTorrent'owi. Od razu mówie że bez extroota nie da rady, chyba że masz naprawdę duży flash. Mi aktualnie /overlay zajmuje 23MB więc miej to na uwadze, żeby nie zabrakło miejsca.
Od razu z góry mówię, na TP-LINKu 1043ND na pewno jako systemu plików do zapisu nie używać ntfs. Prawie osiwiałem przez to badziewie głowiąc się czemu klienty się wysypują, a dysk wypina, otóż ten system plików pożera zasoby w zastraszającym tempie... po przejściu na ext4 nie ma już żadnych problemów.
Ale wracając do sedna, przeszukując internet natrafiłem na artykuł który już pewnie każdy widział tzn. http://openrouter.info/forum/viewtopic. … &t=471 i na nim będę się wzorował, jednak sam w sobie nie przyniósł spodziewanych efektów i nie do końca wszystko działało więc postanowiłem go trochę zaktualizować.
Więc tak, standardowo zaczynamy od instalacji rtorrenta i screena, żeby to mogło sobie chodzić w tle cały czas (emulacja demona).
Instalacja rTorrenta
opkg update
opkg install rtorrent screen
I już, szybko, łatwo i przyjemnie. Szkoda że wersja to 0.8.6 gdzie najnowsza stabilna to 0.9.2, ale jeszcze za mało umiem żeby to skompilować pod openWRT, więc bawimy się tym czym mamy.
Konfiguracja rTorrenta
Przykład pliku jest pod adresem http://libtorrent.rakshasa.no/browser/t … .rc#latest
Natomiast ja dam swój, zawsze to jakaś baza do zabawy
Na początek tworzymy plik konfiguracyjny
touch /root/.rtorrent.rc
A potem uzupełniamy go:
min_peers = 40
max_peers = 100
min_peers_seed = 10
max_peers_seed = 50
max_uploads = 3
download_rate = 0
upload_rate = 0
directory = /mnt/torrent
session = /mnt/torrent/session
port_range = 50800-50801
port_random = yes
check_hash = no
use_udp_trackers = yes
encryption = allow_incoming, try_outgoing
dht = on
dht_port = 6881
peer_exchange = yes
encoding_list = UTF-8
scgi_local = /tmp/rtorrent.socket
schedule = chmod,0,0,"execute=chmod,777,/tmp/rtorrent.socket"
xmlrpc_dialect = i8
W pliku, /mnt/torrent zmieniamy na katalog gdzie będziemy ściągać I oba katalogi oczywiście muszą istnieć, więc tworzymy je przed uruchomieniem rtorrenta.
teraz w konsoli wydajemy polecenie
rtorrent
Jeśli się uruchomił to znaczy że wszystko poszło ok. Wychodzimy przez Ctrl+Q (^Q)
Teraz tworzymy plik startowy który zrobi nam z rtorrenta demona działającego w tle.
touch /etc/init.d/rtorrent
I uzupełniamy go:
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2012 OpenWrt.org
START=99
start() {
rm -f /tmp/rtorrent.socket || true
rm -f /mnt/torrent/session/rtorrent.lock || true
HOME=/root screen -dmS torrenty rtorrent
}
stop() {
killall -2 rtorrent
}
W tym przypadku /mnt/torrent również zamieniamy na katalog który podaliśmy wyżej.
Troche skrypt startowy zmodyfikowałem, ponieważ nie podobało mi się że torrent był zabijany na siłe, teraz dostaje sygnał żeby się zamknąć i przed tym informuje trackery że idzie spać, a po ponownym włączeniu nie zaczyna sprawdzania plików, co u mnie trwa wieki. Usuwanie plikow na starcie, to na wypadek jakby rtorrent zginął śmiercią marną zanim po sobie posprzątał, inaczej by nie wystartował.
Wypadałoby jeszcze naszego klienta odblokować na firewallu, wiec na końcu /etc/config/firewall dodajemy:
config rule
option name 'rtorrent_tcp'
option src 'wan'
option target 'ACCEPT'
option proto 'tcpudp'
option dest_port '50800:50801'
config rule
option name 'rtorrent_dht'
option src 'wan'
option target 'ACCEPT'
option proto 'udp'
option dest_port '6881'
Wiem że mógłbym podać komendy UCI, ale używając nano jakoś lepiej mi się pisze bezpośrednio w configu
Aby zmiany weszły w życie, restartujemy firewall komendą:
/etc/init.d/firewall restart
A na koniec ustawiamy rtorrenta na autostart i uruchamiamy.
chmod 755 /etc/init.d/rtorrent
/etc/init.d/rtorrent enable
/etc/init.d/rtorrent start
Instalacja PHP
Jako że o wyborze serwera napisze później, to zaczniemy od rzeczy niezbędnej czyli PHP.
opkg install php5-fastcgi
Potem: (ustawiamy katalog z którego będzie czytało php na /www/rutorrent, żeby nie kolidowało np z opcjami routera) oraz kilku zmiennych niezbędnych do działania
sed -i -e 's/doc_root = \"\/www\"/doc_root = \"\/www\/rutorrent\"/g' /etc/php.ini
sed -i -e 's/;cgi.force_redirect/cgi_force_redirect/' /etc/php.ini
sed -i -e 's/;cgi.redirect_status_env = ;/cgi.redirect_status_env = \"yes\"/' /etc/php.ini
Na koniec
/etc/init.d/php5-fastcgi enable
/etc/init.d/php5-fastcgi start
I już php chodzi w tle i jest gotowe na dodanie serwera który z tego skorzysta.
Instalacja ruTorrenta
Wykonujemy:
cd /www
wget http://rutorrent.googlecode.com/files/rutorrent-3.5.tar.gz
tar zxvf rutorrent-3.5.tar.gz
rm rutorrent-3.5.tar.gz
Co pobrało nam ruTorrenta, teraz należy tylko dokonać jednej zmiany w pliku konfiguracyjnym.
W /www/rutorrent/config/config.php zamieniamy
$scgi_port = 5000;
$scgi_host = "127.0.0.1";
na
$scgi_port = 0;
$scgi_host = "unix:///tmp/rtorrent.socket";
Wybór serwera WWW
Na openWRT z lekkich rozwiązań mamy do wyboru lighttpd i nginx. Pokażę metodę jak postawić oba i jeśli taka Twoja wola, to mogą działać równocześnie jak u mnie, na różnych portach. Który wybierzesz to już zależy od Ciebie. Ja patrząc po wynikach z top zauważyłem że nginx leży trochę niżej niż lighttpd ale różnica jest niewielka, wiec narazie testuję oba.
Nginx
Zaczniemy od nginx'a.
Więc szybka instalacja:
opkg install nginx
Następnie podmieniamy /etc/nginx.conf na
user nobody nogroup;
worker_processes 1;
error_log /var/log/nginx/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
index index.php index.html index.htm;
default_type text/html;
sendfile on;
keepalive_timeout 65;
#gzip on;
server {
listen 9093;
server_name localhost;
charset utf-8;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 60; # 60 sec should be enough, if experiencing alof of timeouts, increase this.
output_buffers 1 32k;
postpone_output 1460;
root /www/rutorrent;
auth_basic "rutorrent";
auth_basic_user_file htpasswd;
location /RPC2 {
include scgi_params;
scgi_pass unix:/tmp/rtorrent.socket;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
if (-f $request_filename) {
# Only throw it at PHP-FPM if the file exists (prevents some PHP exploits)
fastcgi_pass 127.0.0.1:1026; # The upstream determined above
}
}
}
}
tworzymy plik scgi_params
touch /etc/nginx/scgi_params
i zupełniamy o
scgi_param REQUEST_METHOD $request_method;
scgi_param REQUEST_URI $request_uri;
scgi_param QUERY_STRING $query_string;
scgi_param CONTENT_TYPE $content_type;
scgi_param DOCUMENT_URI $document_uri;
scgi_param DOCUMENT_ROOT $document_root;
scgi_param SCGI 1;
scgi_param SERVER_PROTOCOL $server_protocol;
scgi_param HTTPS $https if_not_empty;
scgi_param REMOTE_ADDR $remote_addr;
scgi_param REMOTE_PORT $remote_port;
scgi_param SERVER_PORT $server_port;
scgi_param SERVER_NAME $server_name;
Na koniec dodajemy użytkownika, z racji że jest włączona prośba o hasło przed wejściem na stronę. Jeśli ktoś chce to wyłączyć to wystarczy za komentować poprzez # auth_basic "Restricted"; i auth_basic_user_file htpasswd; oraz pominąć poniższy krok
W konsoli uruchamiamy poniższy kod zmieniając <<login>> i <<haslo>> (nawiasy ostre są tylko do wyróżnienia miejsca w kodzie) na swój login i halo jakiego chcesz używać.
printf "<<login>>:$(openssl passwd -apr1 <<haslo>>)\n" >> /etc/nginx/htpasswd
po czym wykonujemy
/etc/init.d/nginx enable
/etc/init.d/nginx start
I już nginx chodzi na http://192.168.1.1:9093
Lighttpd
Więc na start
opkg install lighttpd libsqlite3 lighttpd-mod-access lighttpd-mod-auth lighttpd-mod-scgi lighttpd-mod-fastcgi
potem plik /etc/lighttpd/lighttpd.conf podmieniamy na
server.modules = (
"mod_access",
"mod_auth",
"mod_fastcgi",
"mod_scgi"
)
server.network-backend = "write"
server.document-root = "/www/rutorrent/"
index-file.names = ( "index.php", "index.html", "default.html", "index.htm", "default.htm" )
mimetype.assign = (
".pdf" => "application/pdf",
".class" => "application/octet-stream",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml"
)
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
server.port = 9092
server.pid-file = "/var/run/lighttpd.pid"
fastcgi.server = (
".php" => ((
"host" => "127.0.0.1",
"port" => 1026,
))
)
auth.debug = 2
auth.backend = "plain"
auth.backend.plain.userfile = "/etc/lighttpd/lighttpd.user"
auth.require = (
"/" =>
(
"method" => "basic",
"realm" => "rutorrent",
"require" => "user=admin"
)
)
scgi.server = (
"/RPC2" =>
( "127.0.0.1" =>
(
"socket" => "/tmp/rtorrent.socket",
"check-local" => "disable",
"disable-time" => 0,
)
)
)
server.event-handler = "poll"
Po czym dodajemy usera, bo ten serwer też jest zabezpieczony hasłem, robimy to poprzesz (login i pass admin, jeśli wpiszesz coś innego to w "require"=> "user=admin" admina też zmień na wybraną nazwę użytkownika) wykonanie kodu
echo "admin:admin" >> /etc/lighttpd/lighttpd.user
No i na koniec standardowo ustawienie autostartu i włączenie serwera
/etc/init.d/lighttpd enable
/etc/init.d/lighttpd start
I teraz możemy korzystać z lighttpd pod adresem http://192.168.1.1:9092
Zeby dostać się do interfejsu rTorrenta na routerze wpisujemy screen -r, żeby z tego wyjść nie zabijając klienta wciskamy CTRL+A+D, a żeby go zamknąć to CTRL+A CTRL+F CTRL+Q
Mam nadzieję że komuś się to przyda