Installer une Seedbox sous Debian 9 avec ruTorrent

Nous allons voir comment Installer une Seedbox sous Debian 9 avec ruTorrent.

ruTorrent est une interface web permettant d’utiliser rTorrent qui lui seul n’a pas d’interface graphique. Il est inspiré de l’interface de µTorrent. Nous allons utiliser ce combo pour installer une Seedbox.

Installer une Seedbox sous Debian 9 avec ruTorrent

https://framalibre.org/content/rutorrent

Ajout des dépôts nécessaire

On permettra l’utilisation de https pour « apt » avec la commande suivante :
apt-get install -y apt-transport-https
Ensuite, on ajoutera les différents dépôts :

– Les dépôts pour les paquets propriétaires

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

– Dépôts alternatifs

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

– Dépôts pour l’installation de nginx

echo "#Depot nginx
deb http://nginx.org/packages/debian/ stretch nginx
deb-src http://nginx.org/packages/debian/ stretch nginx" >> /etc/apt/sources.list.d/nginx.list

– Les dépôts pour l’installation du PHP

echo "#Depot sury-php
deb https://packages.sury.org/php/ stretch main" >> /etc/apt/sources.list.d/sury-php.list

– Dépôts pour l’installation de mediainfo

echo "#Depot mediainfo
deb http://mediaarea.net/repo/deb/debian/ stretch main" >> /etc/apt/sources.list.d/mediainfo.list

Enfin, on ajoutera les clés des différents dépôts (deb-multimedia, nginx et mediainfo )

cd /tmp
wget https://packages.sury.org/php/apt.gpg -O sury.gpg && apt-key add sury.gpg
wget http://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key
wget http://mediaarea.net/repo/deb/debian/pubkey.gpg -O mediainfo.gpg && apt-key add mediainfo.gpg
apt-get update

Puis on corrigera l’erreur pendant l’update avec la commande suivante et on remettra à jour  :

apt-get install -y --allow-unauthenticated deb-multimedia-keyring
apt-get update

Installation des différents paquets

On continuera avec l’installation des paquets nécessaires :

apt-get install -y 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.2 php7.2-cli php7.2-fpm php7.2-curl php7.2-geoip php7.2-xml php7.2-mbstring git unzip unrar rar zip ffmpeg mktorrent mediainfo zlib1g-dev sox libsox-fmt-mp3 libsox-fmt-all gawk

Puis, l’installation de libtorrent (implémentation open source du protocole BitTorrent) :

cd /tmp
git clone https://github.com/rakshasa/libtorrent.git
cd libtorrent
git checkout v0.13.7
git cherry-pick 7b29b6b
./autogen.sh
./configure --disable-debug
make
make install

Ensuite, l’installation de xmlrpc (Protocole d’échange de données) :

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

Après cela, on effectuera l’installation de rTorrent (Client BitTorrent très léger fonctionnant en lignes de commande) :

cd /tmp
git clone https://github.com/rakshasa/rtorrent.git
cd rtorrent
git checkout v0.9.7
./autogen.sh
./configure --with-xmlrpc-c --with-ncurses --disable-debug
make
make install

On actualisera alors les liens symboliques pour rTorrent :

ldconfig

Et on installera ruTorrent :

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

Installation des différents plugins

Logoff : Ce plugin vous permet de changer d’utilisateur ou de vous déconnecter sur des systèmes utilisant l’authentification.

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
rm logoff-1.3.tar.gz

Pausewebui : Plugin pour mettre en pause l’actualisation de la page et ajouter un bouton pour actualiser manuellement.

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
rm -R  __MACOSX pausewebui.1.2.zip

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
chmod 755 filemanage/scripts/*

On configurera ensuite le plugin create qui permet de créer un .torrent à partir d’un fichier ou d’un répertoire.

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

et il vous faudra mettre les valeurs ci-dessous :

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

Puis, on configurera le plugin filemanager

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

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 de PHP 7.2

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

nano /etc/php/7.2/fpm/php.ini

Il vous faudra alors trouver les lignes suivantes et les remplacer par ces valeurs

upload_max_filesize = 8M
date.timezone = Europe/Paris

Et on redémarre php-fpm

service php7.2-fpm restart

Configuration du serveur web nginx

Exécuter les commandes suivante :

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

Puis, modifier le fichier nginx.conf

rm /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf

et ensuite copier/coller le nouveau fichier de configuration :

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

events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
}

http {
    charset UTF-8;

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

    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;

    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

Nous allons créer le vhost pour ruTorrent dans le fichier seedbox.conf

mkdir /etc/nginx/sites-enabled
nano /etc/nginx/sites-enabled/seedbox.conf
#------------------------------------------------------------------------
# HTTP (Redirection vers HTTPS)
#------------------------------------------------------------------------
server {
    listen 80;

    return 301 https://$host$request_uri;

}

#------------------------------------------------------------------------
# HTTPS
#------------------------------------------------------------------------
server {
    listen 443 ssl;
    server_name seedbox;
    root /var/www;

    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";

    location = /TORRENT {
        include scgi_params;
        scgi_pass 127.0.0.1:5001;
        auth_basic "seedbox";
        auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd_torrent";
    }
    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.2-fpm.sock;
    }

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

#------------------------------------------------------------------------
# SSL
#------------------------------------------------------------------------
    ssl_certificate /etc/nginx/ssl/seedbox.crt;
    ssl_certificate_key /etc/nginx/ssl/seedbox.key;

    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES;
    ssl_ecdh_curve secp384r1;
    ssl_prefer_server_ciphers on;

    # ssl optimizations
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:20m;
    ssl_session_tickets on;
}

Configuration SSL

Commençons par créer un répertoire qui contiendra notre certificat auto-signé :

mkdir /etc/nginx/ssl

Dans ce répertoire, générons un certificat auto-signé :

cd /etc/nginx/ssl
openssl ecparam -genkey -name secp384r1 -out seedbox.key
openssl req -new -key seedbox.key -sha256 -out seedbox.csr
openssl req -x509 -days 3650 -sha256 -key seedbox.key -in seedbox.csr -out seedbox.crt

Puis modifions les droits des fichiers :

chmod 644 /etc/nginx/ssl/*.crt
chmod 640 /etc/nginx/ssl/*.key

Pour finir, on redémarre nginx :

service nginx restart

Configuration de SSH

Ici, il faudra éditer le fichier de config ssh :

nano /etc/ssh/sshd_config

Puis, commenter les lignes suivantes  :

#Subsystem sftp /usr/lib/openssh/sftp-server
#UsePAM yes

Et enfin, ajouter en dessous :

Subsystem sftp internal-sftp

Ajout d’un utilisateur

Pour la suite,  nous créerons l’utilisateur, ici userseedbox. Il faudra bien faire attention à la casse.

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

mkdir --parents /home/userseedbox/{torrents,watch,.session}

Puis, l’utilisateur de rTorrent :

useradd --shell /bin/bash --home /home/userseedbox userseedbox
passwd userseedbox

Si vous voulez trier/organiser vos torrents dans des répertoires, créez des sous-répertoires dans torrents :

mkdir /home/userseedbox/torrents/films
mkdir /home/userseedbox/torrents/series
mkdir /home/userseedbox/torrents/musiques
mkdir /home/userseedbox/torrents/logiciel

Ne pas oublier de rentre l’utilisateur propriétaire sur les différents répertoires créés précédemment :

chown userseedbox:userseedbox /home/userseedbox/torrents/films

Ensuite, on bloquera l’utilisateur dans son home en SFTP :

nano /etc/ssh/sshd_config

Et on collera vers la fin (Bloque l’accès SSH) :

Match user userseedbox,userseedbox2,userseedbox3 #Pas d'espace entre les différents user
ChrootDirectory %h

On redémarrera alors le serveur SSH pour valider les modifications :

service ssh restart

Enfin, on créera le fichier de configuration de rTorrent :

nano /home/userseedbox/.rtorrent.rc

Ensuite, copier/coller ceci (remplacez 500x par 5001, 5002, … pour chaque utilisateur) :

network.scgi.open_port = 127.0.0.1:500x
encoding.add = UTF-8
network.port_range.set = 45000-65000
network.port_random.set = no
pieces.hash.on_completion.set = no
directory.default.set = /home/userseedbox/torrents
session.path.set = /home/userseedbox/.session
protocol.encryption.set = allow_incoming, try_outgoing, enable_retry
schedule2 = watch_directory,1,1,load.start=/home/userseedbox/watch/*.torrent
schedule2 = untied_directory,5,5,stop_untied=/home/userseedbox/watch/*.torrent
schedule2 = espace_disque_insuffisant,1,30,close_low_diskspace=500M
trackers.use_udp.set = yes
dht.mode.set = off
protocol.pex.set = no
throttle.min_peers.normal.set = 40
throttle.max_peers.normal.set = 100
throttle.min_peers.seed.set = 10
throttle.max_peers.seed.set = 50
throttle.max_uploads.set = 15
execute2 = {sh,-c,/usr/bin/php /var/www/rutorrent/php/initplugins.php userseedbox &}

Et alors, on appliquera les bonnes permissions :

chown --recursive userseedbox:userseedbox /home/userseedbox
chown root:root /home/userseedbox
chmod 755 /home/userseedbox

On configurera ensuite le serveur web :

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

Pour cela, on changera les deux userseebox ainsi que le port correspondant (faire cette étape pour chaque utilisateur) :

location = /USERSEEDBOX {
        include scgi_params;
        scgi_pass 127.0.0.1:500x;
        auth_basic "seedbox";
        auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd_userseedbox";
    }

On spécifiera le mot de passe pour le serveur web et on indiquera le mot de passe pour cet utilisateur (le chiffrement du mot de passe peut se faire par l’option -B) :

htpasswd -s /etc/nginx/passwd/rutorrent_passwd userseedbox

Puis, il vous faudra taper cette commande :

sed --regexp-extended --quiet '/userseedbox:/p' /etc/nginx/passwd/rutorrent_passwd > /etc/nginx/passwd/rutorrent_passwd_userseedbox

Et on appliquera les bonnes permissions aux fichiers de mots de passe :

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

On redémarrera le serveur web :

service nginx restart

Ensuite, on créera le répertoire de configuration de ruTorrent :

mkdir /var/www/rutorrent/conf/users/userseedbox

Et on éditera le fichier de configuration :

nano /var/www/rutorrent/conf/users/userseedbox/config.php

On y ajoutera alors ce qui suit (toujours faire attention à la casse et au port utilisé) :

<?php

$pathToExternals['curl'] = '/usr/bin/curl';
$topDirectory = '/home/userseedbox';
$scgi_port = 500x;
$scgi_host = '127.0.0.1';
$XMLRPCMountPoint = '/USERSEEDBOX';

Finalement, on désactivera certains plugins inutiles :

touch /var/www/rutorrent/conf/users/userseedbox/plugins.ini
nano /var/www/rutorrent/conf/users/userseedbox/plugins.ini

Copier/coller ceci (Vous pouvez désactiver les plugins de votre choix) :

[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

Création d’un script de démarrage de rTorrent

cd /etc/init.d/
touch userseedbox-rtorrent
chmod +x userseedbox-rtorrent

On éditera le fichier précédemment créé :

nano /etc/init.d/userseedbox-rtorrent

Ensuite, il vous faudra coller ce qui suit :

!/usr/bin/env bash

# Dependance : screen, killall et rtorrent
### BEGIN INIT INFO
# Provides:          userseedbox-rtorrent
# Required-Start:    $syslog $network
# Required-Stop:     $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Start-Stop rtorrent user session
### END INIT INFO

user="userseedbox"

rt_start() {
    su --command="screen -dmS ${user}-rtorrent rtorrent" "${user}"
}

rt_stop() {
    killall --user "${user}" screen
}

case "$1" in
start) echo "Starting rtorrent..."; rt_start
    ;;
stop) echo "Stopping rtorrent..."; rt_stop
    ;;
restart) echo "Restart rtorrent..."; rt_stop; sleep 1; rt_start
    ;;
*) echo "Usage: $0 {start|stop|restart}"; exit 1
    ;;
esac
exit 0

On rendra le script exécutable :

chmod +x /etc/init.d/userseedbox-rtorrent

Et pour finir, on fera en sorte que le script s’exécute au démarrage du serveur :

update-rc.d userseedbox-rtorrent defaults

Maintenant, vous pouvez redémarrer le serveur et vous pourrez enfin accéder à votre seedbox.

L’interface graphique sera accessible via cette adresse : https://XXX.XXX.XXX.XXX/rutorrent

Et voilà, vous avez fini d’installer une Seedbox sous Debian 9 avec ruTorrent.

4 réponses sur “Installer une Seedbox sous Debian 9 avec ruTorrent”

  1. voila les erreur :

    [03.06.2019 23:40:53] WebUI started.
    [03.06.2019 23:40:53] Lien incorrect avec rTorrent. Vérifiez qu’il soit bien en cours d’exécution. Vérifiez la configuration de $scgi_port et de $scgi_host dans config.php et de scgi_port dans le fichier de configuration de rTorrent.
    [03.06.2019 23:40:53] _task: Le plug-in ne fonctionnera pas. Le serveur web ne peut pas accéder au(x) programme(s) externe(s). (php).

    [03.06.2019 23:40:53] _task: Le plug-in ne fonctionnera pas. Le serveur web ne peut pas accéder au(x) programme(s) externe(s). (pgrep).
    [03.06.2019 23:40:53] _cloudflare: Le plug-in ne fonctionnera pas. Le serveur web ne peut pas accéder au(x) programme(s) externe(s). (python).
    [03.06.2019 23:40:53] create: Le plugin ne fonctionnera pas. Il est dépendant d’autre(s) plugin(s). _task

    1. Bonjour,
      Dans un premier temps, avez-vous vérifié que rtorrent est en cours d’exécution ? ps -aux | grep rtorrent
      Avez-vous également bien vérifié les fichiers config.php et rtorrent.rc ?
      Peut-être que cela viendrait d’une version de ruTorrent, en quelle version êtes-vous ?

      SQX

  2. Bonjour,
    je me permet de vous demander un peux d’aide j’ai une erreur que je ne comprend pas vraiment au lancement de rtorrent

    « systemctl status seedbox-rtorrent.service
    ● seedbox-rtorrent.service – LSB: Start daemon at boot time
    Loaded: loaded (/etc/init.d/seedbox-rtorrent; generated; vendor preset: enabled)
    Active: failed (Result: exit-code) since Sun 2019-06-23 20:47:59 CEST; 8s ago
    Docs: man:systemd-sysv-generator(8)
    Process: 2496 ExecStart=/etc/init.d/seedbox-rtorrent start (code=exited, status=203/EXEC)

    Jun 23 20:47:59 F5h7w6-Network systemd[1]: Starting LSB: Start daemon at boot time…
    Jun 23 20:47:59 F5h7w6-Network systemd[1]: seedbox-rtorrent.service: Control process exited, code=exited status=203
    Jun 23 20:47:59 F5h7w6-Network systemd[1]: Failed to start LSB: Start daemon at boot time.
    Jun 23 20:47:59 F5h7w6-Network systemd[1]: seedbox-rtorrent.service: Unit entered failed state.
    Jun 23 20:47:59 F5h7w6-Network systemd[1]: seedbox-rtorrent.service: Failed with result ‘exit-code’.
     »
    si vous avez une quelconque idée d’où peut provenir mon problème je suis preneur

  3. Salut, j’ai suivi ton tuto à la lettre, au copier coller dans putty je devrais plutôt dire et voilà les erreurs qui remontent :

    [29.06.2019 23:07:25] WebUI started.
    [29.06.2019 23:07:25] Lien incorrect avec rTorrent. Vérifiez qu’il soit bien en cours d’exécution. Vérifiez la configuration de $scgi_port et de $scgi_host dans config.php et de scgi_port dans le fichier de configuration de rTorrent.
    [29.06.2019 23:07:25] _task: Le plug-in ne fonctionnera pas. Le serveur web ne peut pas accéder au(x) programme(s) externe(s). (php).
    [29.06.2019 23:07:25] _task: Le plug-in ne fonctionnera pas. Le serveur web ne peut pas accéder au(x) programme(s) externe(s). (pgrep).
    [29.06.2019 23:07:25] _cloudflare: Le plug-in ne fonctionnera pas. Le serveur web ne peut pas accéder au(x) programme(s) externe(s). (python).
    [29.06.2019 23:07:25] create: Le plugin ne fonctionnera pas. Il est dépendant d’autre(s) plugin(s). _task

    Est ce que tu aurais une solution? J’ai vérifier les fichiers et les ports (5001) correspondent pour mon utilisateur.

    D’avance merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *