TUTO OBSOLETE
Veuillez rapporter les bugs dans ce topic merci.
TODOLIST :
- Supprimer la partie sftp/ftp (en faire un tuto)
- Utiliser la librairie bcrypt pour crypter les mots de passe.
- Mettre à jour le dépôt du plugin filemanager
CHANGELOG :
- suppression résidu config https et suppression de nano : le 5/12/16
- suppression de la configuration https le 18/11/16
- mise en ligne du tuto sur github + formatage markdown le 18/11/16
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 :
- 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 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> &}
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.
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)
aptitude update
aptitude safe-upgrade
Sources : Tutoriel inspiré par celui de nicobubulle, complété par différentes informations des documentations officielles.