Nous allons voir comment Installer une Seedbox sous Debian 10 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.

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 gnupg2
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/ buster main non-free
deb-src http://ftp2.fr.debian.org/debian/ buster main non-free" >> /etc/apt/sources.list.d/non-free.list
– Dépôts alternatifs
echo "#Depot multimedia
deb http://www.deb-multimedia.org buster 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/ buster nginx
deb-src http://nginx.org/packages/debian/ buster 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/ buster 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/ buster 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 update -oAcquire::AllowInsecureRepositories=true
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.3 php7.3-cli php7.3-fpm php7.3-cli php7.3-curl php7.3-xml php7.3-mbstring php7.3-readline php7.3-opcache php7.3-json php7.3-common php-geoip git unzip unrar rar zip ffmpeg mktorrent mediainfo zlib1g-dev sox libsox-fmt-mp3 libsox-fmt-all gawk psmisc python-pip
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
– cloudscraper pour le bon fonctionnement du plugin _cloudflare.
pip install cloudscraper
– GeoIP2 : Ce plugin permet d’afficher le pays d’origine de l’IP du peer.
cd /var/www/rutorrent/plugins/
rm -R geoip
git clone https://github.com/Micdu70/geoip2-rutorrent.git geoip2
cd /tmp
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
tar xzfv GeoLite2-City.tar.gz
cd /tmp/GeoLite2-City_*
mv GeoLite2-City.mmdb /var/www/rutorrent/plugins/geoip2/database/GeoLite2-City.mmdb
– 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
– ruTorrent ratiocolor
cd /var/www/rutorrent/plugins/
git clone https://github.com/Micdu70/rutorrent-ratiocolor.git ratiocolor
– 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 /tmp
git clone https://github.com/Micdu70/rutorrent-thirdparty-plugins.git
cd rutorrent-thirdparty-plugins
mv filemanager /var/www/rutorrent/plugins/filemanager
chown -R www-data:www-data /var/www/rutorrent
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.3
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.3/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.3-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 = /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.3-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éer 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/isos
mkdir /home/userseedbox/torrents/ebooks
mkdir /home/userseedbox/torrents/logiciels
mkdir /home/userseedbox/torrents/autres
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/*
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é) :
$pathToExternals = array(
"curl" => '/usr/bin/curl',
"stat" => '/usr/bin/stat',
"php" => '/usr/bin/php7.3',
"pgrep" => '/usr/bin/pgrep',
"python" => '/usr/bin/python2.7'
);
$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 10 avec ruTorrent.
Si besoin, voici le lien pour l’installer sous Debian 9 : https://sqx-bki.fr/installer-une-seedbox-sous-debian-9-avec-rutorrent/
Si le thème de base vous ennuie, je vous invite à suivre ce lien pour ajouter un thème material design : https://github.com/themightykitten/ruTorrent-MaterialDesign