rtorrent mit rutorrent Frontend

Posted on Sun 22 March 2015 in how-to

Vor Kurzem wechselte ich von einem vServer auf einen dedizierten Server. Nach Evaluierung der Angebote entschied ich mich für einen SYS-IP-1 bei OVH.

Was tun mit 2 TB HDD und der Gbit/s Anbindung? Na klar, Linux ISOs seeden! Nachfolgend kurz notiert, wie man rtorrent mit rutorrent als Frontend mit nginx und php5-fpm unter Ubuntu 14.04 einrichtet.

Vorbereitung

Zuerst benötigen wir einige Pakete, um die Voraussetzungen für rutorrent zu erfüllen.

Aus den Paketquellen stehen lediglich nginx, php5-fpm und die benötigten PHP Module zur Verfügung. rutorrent erwartet für das Screenshot Plugin beispielsweise ffmpeg. Mediainfo benötigt natürlich mediainfo.

Für ffmpegfügen wir das PPA von Jon Severinsson hinzu:

add-apt-repository ppa:jon-severinsson/ffmpeg

Die benötigten Pakete installieren:

aptitude update &&  aptitude install screen php5-fpm php5-curl php5-geoip php5-intl php5-json php5-readline php5-xmlrpc php-pear nginx-full mediainfo ffmpeg unzip unrar-free curl

rtorrent bauen

rtorrentbaut auf die Library libtorrentauf. Beide stehen in den Repos von Ubuntu 14.04 zur Verfügung. Aktuelle in Version 0.9.2/0.13.2. Aktuell verfügbar sind 0.9.4/0.13.4. Um ein stabiles Setup zu erreichen sollten beide selbst gebaut werden. Hinzu kommt xmlrpc-cals Dependency für rtorrent.

Benötigte Pakete installieren

aptitude install subversion build-essential automake libtool libcppunit-dev libcurl3-dev libsigc++-2.0-dev libncurses-dev

XML RPC

cd /tmp
svn checkout http://svn.code.sf.net/p/xmlrpc-c/code/stable xmlrpc-c
cd xmlrpc-c
./configure --disable-cplusplus
make
make install

libtorrent

cd /tmp
wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.4.tar.gz
tar xvf libtorrent-0.13.4.tar.gz
cd libtorrent-0.13.4
./autogen.sh
./configure
make
make install

rtorrent

cd /tmp
wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.4.tar.gz
tar xvf rtorrent-0.9.4.tar.gz
cd rtorrent-0.9.4
./autogen.sh
./configure --with-xmlrpc-c
make
make install
ldconfig

rtorrent Konfiguration

Zum Starten von rtorrent sollte ein dedizierter Nutzer (nachfolgend rtorrent) verwendet werden. Alternativ kann es auch unter dem eigenen Nutzer laufen.

Das Init Script kann unter /etc/init.d/rtorrent abgelegt, angepasst und ausführbar gemacht sowie beim booten durch update-rc.d rtorrent defaults gestartet werden.

Im Heimverzeichnis des rtorrent-Nutzers muss die Datei .rtorrent.rcerstellt und angepasst werden. Die Konfiguration sollte nahezu selbsterklärend sein. Ansonsten ist das ArchLinux Wiki eine gute Unterstützung.

directory = /home/rtorrent/download
session = /home/rtorrent/.rtorrent/session
schedule = low_diskspace,5,60,close_low_diskspace=50000M
port_range = 11111-11999
port_random = no
use_udp_trackers = no
encryption = allow_incoming,try_outgoing
dht = on
dht_port = 6881
peer_exchange = yes
encoding_list = UTF-8
schedule = chmod,0,0,"execute=chmod,777,/tmp/rpc3.socket"
max_memory_usage = 2205306368
execute.nothrow = rm,/home/rtorrent/.rtorrent.sock
network.scgi.open_local = /home/rtorrent/.rtorrent.sock
schedule = socket_chmod,0,0,"execute=chmod,0660,/home/rtorrent/.rtorrent.sock"
schedule = socket_chgrp,0,0,"execute=chgrp,www-data,/home/rtorrent/.rtorrent.sock"
schedule = watch_directory_1,10,10,"load_start=/home/rtorrent/blackhole/*.torrent,d.set_custom1=blackhole"
check_hash = no

Nach dem Start von rtorrent folgt die Konfiguration PHP-FPM und des nginx.

nginx Konfiguration

In diesem Artikel wird nicht beschrieben, wie man nginx mit FastCGI Unterstützung konfiguriert. Nachfolgend wird die rtorrent spezifische Konfiguration beschrieben.

Im ersten Schritt legen wir eine Konfiguration z.B. /etc/nginx/conf.d/rutorrent.conf an. Wir verweisen lediglich auf die Unix Sockets von rutorrent und rtorrent, um diese später in der vHost Konfiguration zu verwenden.

upstream backendrutorrent {
        server unix:/var/run/php-fpm-rutorrent.sock;
}
upstream backendrtorrent {
        server unix:/home/rtorrent/.rtorrent.sock;

In der vHost Konfiguration verweisen wir auf die o.g. Sockets und geben ein AuthFile für den Zugriff auf rutorrent an:

    location /rutorrent {
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
        access_log /var/log/nginx/logs/rutorrent-access.log;
        error_log /var/log/nginx/logs/rutorrent-error.log;
        location ~ .php$ {
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_pass    backendrutorrent;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME $document_root/$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_intercept_errors        on;
            fastcgi_ignore_client_abort     off;
            fastcgi_connect_timeout         60;
            fastcgi_send_timeout            180;
            fastcgi_read_timeout            180;
            fastcgi_buffer_size             128k;
            fastcgi_buffers                 4       256k;
            fastcgi_busy_buffers_size       256k;
            fastcgi_temp_file_write_size    256k;
        }
    }

    location /RPC2 {
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
        access_log /var/log/nginx/logs/rtorrent.rpc2.access.log;
        error_log /var/log/nginx/logs/rtorrent.rpc2.error.log;
        include /etc/nginx/scgi_params;
        scgi_pass backendrtorrent;
    }

php5-fpm Konfiguration

nginx weiß, wie die Requests weitergeleitet werden sollen und rtorrent läuft im Hintergrund. Fehlt nur noch php5-fpm, um rutorrent bereitzustellen.

In /etc/php5/fpm/ müssen wir zuerst die php.inianpassen, um die Zeitzone zu setzen und eine Option zu aktivieren:

cgi.fix_pathinfo=1
date.timezone = Europe/Berlin

Zusätzlich benötigen wir eine weitere Poolkonfiguration, welche z.B. unter /etc/php5/fpm/pool.d/rutorrent.confabgelegt werden kann. Auch hier muss wieder eine Anpassung an die individuelle Umgebung erfolgen.

[rutorrent]
user = rtorrent
group = www-data

listen = /var/run/php-fpm-rutorrent.sock
listen.owner = rtorrent
listen.group = www-data
listen.mode = 0660

pm = static
pm.max_children = 2
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

chdir = /

rutorrent

rutorrent klont man abschließend in das nginx-root-Verzeichnis und passt die Rechte auf rtorrent:www-dataan.

Nach einem Neustart von php5-fpm und nginx steht rutorrent zur Verfügung und man kann die Einstellungen von rtorrent durchstöbern und den ersten Torrent hinzufügen. Wie wäre es denn mit dem .torrent-Download von Ubuntu 14.04 Server?

Oder gleich ein paar mehr Derivate?

rutorrent linux uploads