Installer ruTorrent sur Debian 8 {nginx & php-fpm}

Introduction


Fonctionne pour Debian 8.x version 64bits et 32bits.

Afin de vous assurez que vous êtes sous Debian 8, voici les étapes à suivre:

  • Tout d’abord, assurez-vous de la présence du fichier debian_version dans /etc/debian_version, s’il n’y est pas, vous n’êtes pas sous Debian.
  • Si vous avez ce fichier, faites cat /etc/debian_version. Si vous voyez affichez quelque chose comme 8.2 ou plus, vous êtes éligibles à ce tutoriel.

Ce tuto est basé sur le serveur web nginx, plus léger que son confrère apache2. Il vous expliquera également comment bien protéger son interface ruTorrent avec une authentification. Étant optimisé pour les novices, il vous suffira de copier/coller les commandes. Il est cependant recommander de prêter suffisamment d’attention, voire de se renseigner sur le fondement de ces commandes, pour vous permettre de gagner en autonomie en cas de problème futur ou pour le cas où vous souhaiteriez intervenir vous-même ultérieurement sur votre serveur.

Un générateur de mot de passe en ligne : Générateur

N’essayez pas d’accéder à ruTorrent avant d’arriver à la conclusion, ça ne marchera pas si tout n’est pas correctement fait.

Partie I : Premier contact avec SSH


Pour se connecter à un serveur dédié distant, le protocole SSH est le plus souvent utilisé. Les logiciels compatibles sont nombreux, mais le plus utilisé reste PuTTy avec sa variante portable : KiTTy.

Télécharger KITTY

2 choses importantes à savoir avec les terminaux SSH :

  1. Les mots de passe n’apparaissent pas à l’écran quand on les tape (pas de * non plus)
  2. Pas de CTRL+C/CTRL+V pour copier/coller, pour copier : on fait une sélection et cette dernière est automatiquement copier; pour coller : bouton droit. Simple comme bonjour non ?

Maintenant, connectons-nous:

  • Host Name (or IP adress) : Adresse IP du serveur
  • Port : On laisse à 22 et Connexion type SSH (Port 22 : port par défaut pour le protocole SSH)

Pour ne pas avoir à retaper ces informations, on peut enregistrer notre session. Pour cela, on clique sur ‘Saved Sessions’, puis on tape le nom de la session (ex: « Ma Seedbox ») et on clique sur Save.
Bien mettre le format de caractère en UTF-8 pour ne pas avoir des soucis de copier/coller

img

Il ne nous reste plus qu’à cliquer sur Open pour ouvrir la session.

login as: root
root@XX.XX.XX.XX’s password: (…)

Et voilà, vous êtes loggés dans votre serveur via SSH.

Sous mac et linux

Ouvrir un terminal puis lancer cette commande :

ssh root@XX.XX.XX.XX -p 22

Partie II : Installation des essentielles


On ajoute les dépôts dotdeb pour nginx :

echo "#Depot paquets proprietaires
deb http://ftp2.fr.debian.org/debian/ jessie main non-free
deb-src http://ftp2.fr.debian.org/debian/ jessie main non-free" >> /etc/apt/sources.list.d/non-free.list

echo "#Depot Dotdeb
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list.d/dotdeb.list

echo "#Depot Multimedia
deb http://www.deb-multimedia.org jessie main non-free" >> /etc/apt/sources.list.d/multimedia.list

Ajout de la clé du dépôt dotdeb (Afin « d’identifier » la source, et d’éviter l’erreur « NO_PUBKEY » sous apt )

apt-get install curl
cd /tmp
curl http://www.dotdeb.org/dotdeb.gpg | apt-key add -

Ajout de la clé du deb-multimedia (l’erreur affiché pendant l’update est normal, pas de panique)

apt-get update
apt-get install -y --force-yes deb-multimedia-keyring

Puis on remet à jour le système :

aptitude update
aptitude safe-upgrade --assume-yes

Note : si aptitude n’est pas installé sur votre serveur, vous devez le faire via apt-get

apt-get update
apt-get install aptitude

Installation des paquets nécessaires

aptitude install --assume-yes \
  htop \
  automake \
  libcppunit-dev \
  libtool \
  build-essential \
  pkg-config \
  libssl-dev \
  libcurl4-openssl-dev \
  libsigc++-2.0-dev \
  libncurses5-dev \
  nginx \
  vim \
  screen \
  subversion \
  apache2-utils \
  curl \
  php7.0 \
  php7.0-cli \
  php7.0-fpm \
  php7.0-curl \
  php7.0-geoip \
  php7.0-xml \
  php7.0-mbstring \
  git \
  unzip \
  unrar \
  rar \
  zip \
  ffmpeg \
  buildtorrent \
  mediainfo

Installation de xmlrpc via le dépôt svn (note : xmlrpc sera utilisé afin de commander rTorrent via sa WebUI, ruTorrent)

cd /tmp
git clone https://github.com/mirror/xmlrpc-c.git
cd xmlrpc-c/stable/
./configure
make
make install

Installation de libtorrent 0.13.6

Avant d’installer libtorrent/rtorrent, vérifiez le numéro de la dernière version stable ici.

cd /tmp
git clone https://github.com/rakshasa/libtorrent.git
cd libtorrent
git checkout 0.13.6
./autogen.sh
./configure
make
make install

Installation de rTorrent 0.9.6

cd /tmp
git clone https://github.com/rakshasa/rtorrent.git
cd rtorrent
git checkout 0.9.6
./autogen.sh
./configure --with-xmlrpc-c
make
make install

Actualisation des liens symboliques pour rtorrent :

ldconfig

Installation de rutorrent

cd /var/www
git clone https://github.com/Novik/ruTorrent.git rutorrent

Installation du plugin rutorrent Chat (inutile si tout seul sur la box)

cd /var/www/rutorrent/plugins/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rutorrent-chat/chat-2.0.tar.gz
tar xzfv chat-2.0.tar.gz

Installation du plugin rutorrent Logoff

cd /var/www/rutorrent/plugins/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rutorrent-logoff/logoff-1.3.tar.gz
tar xzfv  logoff-1.3.tar.gz

Installation du plugin rutorrent pausewebui

cd /var/www/rutorrent/plugins/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rutorrent-pausewebui/pausewebui.1.2.zip
unzip pausewebui.1.2.zip
# nettoyage
rm -R  __MACOSX logoff-1.3.tar.gz pausewebui.1.2.zip  chat-2.0.tar.gz

Installation du plugin rutorrent rutorrentMobile

cd /var/www/rutorrent/plugins/
git clone https://github.com/xombiemp/rutorrentMobile.git mobile

Installation du plugin rutorrent filemanager (gestionnaire de fichiers en ligne)

cd /var/www/rutorrent/plugins/
# svn checkout http://svn.rutorrent.org/svn/filemanager/trunk/filemanager
git clone https://github.com/exrat/filemanager
# Changement de propriétaire des fichiers web :
chown -R www-data:www-data /var/www/rutorrent

Partie III : Configuration générale


Configuration du plugin create

vim /var/www/rutorrent/plugins/create/conf.php

et replacer les valeurs ci-dessous :

$useExternal = 'buildtorrent';
$pathToCreatetorrent = '/usr/bin/buildtorrent';

Configuration du plugin filemanager

vim /var/www/rutorrent/plugins/filemanager/conf.php

et remplacer :

$pathToExternals['rar'] = '';
$pathToExternals['zip'] = '';
$pathToExternals['unzip'] = '';
$pathToExternals['tar'] = '';
$pathToExternals['gzip'] = '';
$pathToExternals['bzip2'] = '';

par :

$pathToExternals['rar'] = '/usr/bin/rar';
$pathToExternals['zip'] = '/usr/bin/zip';
$pathToExternals['unzip'] = '/usr/bin/unzip';
$pathToExternals['tar'] = '/bin/tar';
$pathToExternals['gzip'] = '/bin/gzip';
$pathToExternals['bzip2'] = '/bin/bzip2';

Configuration du plugin rutorrent mobile

vim /var/www/rutorrent/plugins/mobile/init.js

Vous pouvez modifier 4 variables :

plugin.enableAutodetect => pour détecter automatiquement les smartphones: true|false
plugin.tabletsDetect => pour détecter automatiquement les tablettes : true|false
plugin.eraseWithDataDefault => pour cocher l’option supprimer les données par défaut : true|false
plugin.sort => option d’ordre d’affichage des torrents:
=> name, size, uploaded, downloaded, done, eta, ul, dl, ratio, addtime, seedingtime

Note : il faut ajouter un – devant la valeur pour afficher les torrents dans l’ordre décroissant
Exemple : si je veux afficher mes torrents par date d’ajout du plus récent au moins récent

plugin.sort = '-addtime';

Configuration de php7

modification du php.ini ( correction de la date, et suppression de X-Powered-By dans l’entête http)

vim /etc/php/7.0/fpm/php.ini

Trouver les lignes suivante et remplacer par ces valeurs

upload_max_filesize = 8M
date.timezone = Europe/Paris

et on redémarre php-fpm

service php7.0-fpm restart

Configuration du serveur web nginx

mkdir /etc/nginx/passwd
mkdir /etc/nginx/ssl
touch /etc/nginx/passwd/rutorrent_passwd

Modification du fichier nginx.conf

rm /etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf

et copier/coller le nouveau fichier de configuration

user www-data;
worker_processes auto;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll; # gestionnaire d'évènements epoll (kernel 2.6+)
}

http {
    include /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log /var/log/nginx/access.log combined;
    error_log /var/log/nginx/error.log error;

    sendfile on;
    keepalive_timeout 15;
    keepalive_disable msie6;
    keepalive_requests 100;
    tcp_nopush on;
    tcp_nodelay off;
    server_tokens off;

    gzip on;
    gzip_comp_level 5;
    gzip_min_length 512;
    gzip_buffers 4 8k;
    gzip_proxied any;
    gzip_vary on;
    gzip_disable "msie6";
    gzip_types
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        application/vnd.ms-fontobject
        font/truetype
        font/opentype
        image/svg+xml;

    include /etc/nginx/sites-enabled/*.conf;
}

Configuration du vhost rutorrent

On supprime les éventuelles configuration existante

rm /etc/nginx/sites-enabled/*

Création du vhost pour rutorrent dans le fichier seedbox.conf

vim /etc/nginx/sites-enabled/seedbox.conf
server {
    listen 80 default_server;
    server_name _;

    charset utf-8;
    index index.html index.php;
    client_max_body_size 10M;

    access_log /var/log/nginx/rutorrent-access.log combined;
    error_log /var/log/nginx/rutorrent-error.log error;

    error_page 500 502 503 504 /50x.html;

    auth_basic "seedbox";
    auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd";

    root /var/www;

    location = /50x.html {
        root /usr/share/nginx/html;
    }
    
    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location /rutorrent {
        try_files $uri $uri/ /index.html;
    }

    location ~ ^/rutorrent/(conf|share)/(.+)$ {
        deny all;
    }

    location ~ \.php$ {
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~* \.(jpg|jpeg|gif|css|png|js|map|woff|woff2|ttf|svg|eot)$ {
        expires 30d;
        access_log off;
    }
}

on redémarre nginx

service nginx restart

Configuration de SSH

Editer le fichier de config ssh :

vim /etc/ssh/sshd_config

commenter les lignes suivantes (placer un # devant ) :

Subsystem sftp /usr/lib/openssh/sftp-server

Puis ajouter en dessous :

Subsystem sftp internal-sftp

Partie IV : Ajout d’un utilisateur

Pour uniformiser votre installation, on va convenir d’un format d’écrire des utilisateurs :

1 – Le nom d’utilisateur => <username>
2 – Le nom d’utilisateur en majuscule => <USERNAME>

Par exemple, pour l’utilisateur magicalex : <username> = magicalex et <USERNAME> = MAGICALEX

!!! ATTENTION !!! Pour être valide, le nom d’utilisateur doit être entièrement en minuscules et sans caractères accentués

On créé quelques répertoires pour votre utilisateur :

mkdir --parents /home/<username>/{torrents,watch,.session}

On créé l’utilisateur de rTorrent :

useradd --shell /bin/bash --home /home/<username> <username>
passwd <username>

On bloque l’utilisateur dans son home en SFTP :

vim /etc/ssh/sshd_config

Et coller vers la fin :

Match user <username>,<username2>,<username3> # etc... note : pas d'espace entre les virgules
ChrootDirectory %h

On redémarre le serveur SSH pour valider les modifications :

service ssh restart

A noter que cette manipulation aura pour effet de bloquer l’accès au SSH à cet utilisateur. Il convient donc d’ignorer ce paragraphe si ce dernier remplace l’utilisateur root pour la connexion SSH.

On créé le fichier de configuration de rTorrent :

vim /home/<username>/.rtorrent.rc

Copier/coller ceci :

scgi_port = 127.0.0.1:500x
encoding_list = UTF-8
port_range = 45000-65000
port_random = no
check_hash = no
directory = /home/<username>/torrents
session = /home/<username>/.session
encryption = allow_incoming, try_outgoing, enable_retry
schedule = watch_directory,1,1,"load_start=/home/<username>/watch/*.torrent"
schedule = untied_directory,5,5,"stop_untied=/home/<username>/watch/*.torrent"
use_udp_trackers = yes
dht = off
peer_exchange = no
min_peers = 40
max_peers = 100
min_peers_seed = 10
max_peers_seed = 50
max_uploads = 15
execute = {sh,-c,/usr/bin/php /var/www/rutorrent/php/initplugins.php <username> &amp;}
schedule = espace_disque_insuffisant,1,30,close_low_diskspace=500M

Attention !!! remplacez 500x par 5001 ou 5002 mais chaque utilisateur doit avoir un port différent

Exemple de commande pour remplacer par le port 5001

sed -i 's/127.0.0.1:500x/127.0.0.1:5001/g' /home/<username>/.rtorrent.rc

Exemple de commande pour remplacer <username> par le pseudo magicalex

sed -i 's/<username>/magicalex/g' /home/<username>/.rtorrent.rc

Rendez-vous sur le site de l’auteur pour personnaliser votre .rtorrent.rc

On applique les bonnes permissions :

chown --recursive <username>:<username> /home/<username>
chown root:root /home/<username>
chmod 755 /home/<username>

On configure le serveur web :

vim /etc/nginx/sites-enabled/seedbox.conf

et ajouter entre ceci : 1 <username> 1 <USERNAME> à remplacer et indiquer le bon port 500x

    location = /<USERNAME> {
        include scgi_params;
        scgi_pass 127.0.0.1:500x;
        auth_basic "seedbox";
        auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd_<username>";
    }

faire cette étape pour chaque utilisateur

On spécifie le mot de passe pour le serveur web et on indique le mot de passe pour cette utilisateur :
note : l’option -B utilise bcrypt pour chiffrer les mots de passe.
1 <username> à remplacer

htpasswd -s /etc/nginx/passwd/rutorrent_passwd <username>

Vous devez taper deux fois de suite le mot de passe pour le vérifier, ensuite :
2 <username> à remplacer

sed --regexp-extended --quiet '/<username>:/p' /etc/nginx/passwd/rutorrent_passwd > /etc/nginx/passwd/rutorrent_passwd_<username>

On applique les bonnes permissions aux fichiers mots de passe :

chmod 640 /etc/nginx/passwd/*
chown --changes www-data:www-data /etc/nginx/passwd/*

Redémarrer le serveur web à chaque modification de ce fichier :

service nginx restart

On créé le répertoire de configuration de ruTorrent : 1 <username> à remplacer

mkdir /var/www/rutorrent/conf/users/<username>

On édite le fichier de configuration : 1 <username> à remplacer

vim /var/www/rutorrent/conf/users/<username>/config.php

On colle les valeurs : 1 <username> 1 <USERNAME> à remplacer et indiquer le bon port 500x

<?php

$pathToExternals['curl'] = '/usr/bin/curl';
$topDirectory = '/home/<username>';
$scgi_port = 500x;
$scgi_host = '127.0.0.1';
$XMLRPCMountPoint = '/<USERNAME>';

Désactivation de certain plugin inutile :

touch /var/www/rutorrent/conf/users/<username>/plugins.ini
vim /var/www/rutorrent/conf/users/<username>/plugins.ini

Copier/coller ceci :

[default]
enabled = user-defined
canChangeToolbar = yes
canChangeMenu = yes
canChangeOptions = yes
canChangeTabs = yes
canChangeColumns = yes
canChangeStatusBar = yes
canChangeCategory = yes
canBeShutdowned = yes


[ipad]

enabled = no

[httprpc]

enabled = no

[retrackers]

enabled = no

[rpc]

enabled = no

[rutracker_check]

enabled = no

Vous pouvez désactiver les plugins de votre choix, il y a aussi le fichier acccess.ini qui permet de désactiver certaine option de rutorrent

Création d’un script de démarrage de rTorrent : 2 <username> à remplacer

cd /etc/init.d/
wget --output-document=<username>-rtorrent https://gist.githubusercontent.com/Magicalex/8850ac8539d89af2f21f/raw/923ee22f9300bd3a186704b17e3b88a7583756d9/gistfile1.sh
chmod +x <username>-rtorrent

2 <username> à remplacer

vim /etc/init.d/<username>-rtorrent

Vous pouvez proposer vos améliorations ici. Le script est très très light.

On rend le script exécutable : 1 <username> à remplacer

chmod +x /etc/init.d/<username>-rtorrent

On fait en sorte que le script s’exécute au démarrage du serveur.
A chaque redémarrage rtorrent sera exécuté automatiquement.
1 <username> à remplacer

update-rc.d <username>-rtorrent defaults

On exécute rtorrent pour chaque utilisateur : 1 <username> à remplacer

service <username>-rtorrent start

Vous devriez pouvoir maintenant vous connecter à rutorrent.

Conclusion : les accès

ruTorrent Webui
URL : XXX.XXX.XXX.XXX/rutorrent

SFTP
IP : XXX.XXX.XXX.XXX
Port : 22

Détails des dossiers :
– /watch = Dossier scanné régulièrement par rTorrent afin d’ajouter des torrents sans devoir se connecter via ruTorrent.
– /torrents = Dossier contenant nos torrents.
– /.session = Dossier enregistrant les sessions rtorrent.

source