Veuillez rapporter les bugs dans ce topic merci.
TODOLIST :
CHANGELOG :
- Adaptation pour ruTorrent 3.9 le 11/04/2019
- PHP 7.3 le 12/02/19
- rTorrent 0.9.7 & libTorrent 0.13.7 le 18/07/18
Introduction
Fonctionne pour Debian 9.x version 64bits.
Afin de vous assurez que vous êtes sous Debian 9, 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 9.x 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 :
- Les mots de passe n’apparaissent pas à l’écran quand on les tape (pas de * non plus)
- 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
Il ne nous reste plus qu’à cliquer sur Open pour ouvrir la session.
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 :
apt-get install -y apt-transport-https
echo "#Depot sury-php
deb https://packages.sury.org/php/ stretch main" >> /etc/apt/sources.list.d/sury-php.list
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
echo "#Depot multimedia
deb http://www.deb-multimedia.org stretch main non-free" >> /etc/apt/sources.list.d/multimedia.list
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
echo "#Depot mediainfo
deb http://mediaarea.net/repo/deb/debian/ stretch main" >> /etc/apt/sources.list.d/mediainfo.list
Ajout de la clé du deb-multimedia, nginx et mediainfo (l'erreur affiché pendant l'update est normal, pas de panique)
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
apt-get install -y --allow-unauthenticated deb-multimedia-keyring
Puis on remet à jour le système :
apt-get update
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-geoip \
php7.3-xml \
php7.3-mbstring \
php-geoip \
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
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.7
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 v0.13.7
git cherry-pick 7b29b6b
./autogen.sh
./configure --disable-debug
make
make install
Installation de rTorrent 0.9.7
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
Actualisation des liens symboliques pour rtorrent :
ldconfig
Installation de rutorrent
mkdir /var/www
cd /var/www
git clone https://github.com/Novik/ruTorrent.git rutorrent
Installation cloudscraper pour plugin _cloudflare
pip install cloudscraper
Installation du plugin rutorrent Chat (inutile si tout seul sur la box)
cd /var/www/rutorrent/plugins/
git clone https://github.com/Micdu70/plugin-chat-ruTorrent.git chat
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
rm 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
rm -R __MACOSX pausewebui.1.2.zip
Installation du plugin rutorrent 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
# 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
nano /var/www/rutorrent/plugins/create/conf.php
et replacer les valeurs ci-dessous :
$useExternal = 'mktorrent';
$pathToCreatetorrent = '/usr/bin/mktorrent';
Configuration du plugin filemanager
nano /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 de php 7.3
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
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.3-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
nano /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
Création du vhost pour rutorrent dans le fichier seedbox.conf
mkdir /etc/nginx/sites-enabled
nano /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.3-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 :
nano /etc/ssh/sshd_config
commenter les lignes suivantes (placer un # devant comme ceci) :
#Subsystem sftp /usr/lib/openssh/sftp-server
#UsePAM yes
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 :
nano /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 :
nano /home/<username>/.rtorrent.rc
Copier/coller ceci :
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/<username>/torrents
session.path.set = /home/<username>/.session
protocol.encryption.set = allow_incoming, try_outgoing, enable_retry
schedule2 = watch_directory,1,1,load.start=/home/<username>/watch/*.torrent
schedule2 = untied_directory,5,5,stop_untied=/home/<username>/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 <username> &}
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 :
nano /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
nano /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 = 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/<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
nano /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
[geoip]
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
nano /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
Reboot du serveur obligatoire à ce niveau avant de pouvoir vous connecter sur la box
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.
Pour aller plus loin
Les commandes à savoir pour mettre à jour sa seedbox
Pour redémarrer rTorrent :
service <username>-rtorrent restart
Pour mettre à jour rutorrent via le dépôt github : Attention des conflits peuvent apparaître
cd /var/www/rutorrent/
git pull origin master
Pour mettre à jour les paquets (à faire de temps en temps)
apt-get update
apt-get upgrade
Sources : Tutoriel inspiré par celui de nicobubulle, complété par différentes informations des documentations officielles.
Discussion/Support : https://mondedie.fr/d/9656-discussion-beta-installer-rutorrent-sur-debian-9-nginx-php-fpm