ATTENTION TUTO OBSOLETE
merci de suivre ce tuto http://mondedie.fr/d/5302







ChangeLog
- Intégration du diagramme de résolution d'erreur (Nicobubulle / ex_rat) le 8/02/14
Introduction

Fonctionne pour Debian 7.0 version 64bits (pour 32bits remplacer les occurrences de amd64 en i386).

Ce tuto sera basé sur lighttpd plus léger que sont confrère apache2. Il montrera aussi comment bien protéger son interface avec authentification et https. Il est optimisé pour les novices, il suffit de copier/coller, mais comprends aussi les explications des manipulations afin d’apprendre en même temps.
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 fait.
Partie I : Se connecter au serveur

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

Télécharger KITTY

Il y a 2 choses à 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. C’est simple non?

Bon, maintenant on se connecte:
- Host Name (or IP adress) : Adresse IP du serveur (sans blague!)
- Port : On laisse à 22 et Connexion type 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: mabox) 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.

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

Et voila vous êtes loggé dans votre serveur via SSH.

Partie II : Installation des essentielles

Pour sélectionner l’ensemble des commandes, double-cliquez n’importe où sur le code.

On ajoute les repos non-free pour rar/zip :
nano /etc/apt/sources.list
puis coller à la fin :
deb http://ftp2.fr.debian.org/debian/ wheezy main non-free
deb-src http://ftp2.fr.debian.org/debian/ wheezy main non-free
On mets à jour le système :
aptitude update
aptitude safe-upgrade -y
On installe maintenant les paquets nécessaires :
aptitude install -y vsftpd htop rar zip build-essential pkg-config libcurl4-openssl-dev libsigc++-2.0-dev libncurses5-dev lighttpd nano screen subversion libterm-readline-gnu-perl php5-cgi apache2-utils libcurl3 curl php5-curl php5-cli php5-geoip git unzip unrar ffmpeg
On passe à l’installation de rutorrent :
Avant d’installer rtorrent/libtorrent, vérifier le numéro de la dernière version stable ici. Attention à ne pas utiliser les version « unstable », elles ne sont pas acceptées partout !
Installation de libtorrent 0.13.2 :
cd /tmp
wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.2.tar.gz
tar zxfv libtorrent-0.13.2.tar.gz
cd libtorrent-0.13.2
./configure
make
make install
Installation de XML RPC par le SVN :
cd /tmp
svn checkout http://svn.code.sf.net/p/xmlrpc-c/code/stable xmlrpc-c
cd xmlrpc-c/
./configure
make
make install
Installation de rTorrent 0.9.2 :
cd /tmp
wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.2.tar.gz
tar zxfv rtorrent-0.9.2.tar.gz
cd rtorrent-0.9.2
./configure --with-xmlrpc-c
make
make install
Installation de rutorrent :
cd /var/www/
svn checkout http://rutorrent.googlecode.com/svn/trunk/rutorrent/
Installation des plugins :
cd rutorrent
rm -R plugins
svn checkout http://rutorrent.googlecode.com/svn/trunk/plugins/
Installation de Chat (inutile si tout seul sur la box) :
cd /var/www/rutorrent/plugins/
svn co http://rutorrent-chat.googlecode.com/svn/trunk/ chat
Installation de Logoff :
cd /var/www/rutorrent/plugins/
svn co http://rutorrent-logoff.googlecode.com/svn/trunk/ logoff
Installation de tadd-labels :
cd /var/www/rutorrent/plugins/
wget http://rutorrent-tadd-labels.googlecode.com/files/lbll-suite_0.8.1.tar.gz
tar zxfv lbll-suite_0.8.1.tar.gz
rm lbll-suite_0.8.1.tar.gz
Installation de filemanager (gestionnaire de fichiers en ligne) :
cd /var/www/rutorrent/plugins/
svn co http://svn.rutorrent.org/svn/filemanager/trunk/filemanager
Installation de buildtorrent :
cd /tmp/
wget http://ftp.de.debian.org/debian/pool/main/b/buildtorrent/buildtorrent_0.8-4_amd64.deb
dpkg -i buildtorrent*.deb
rm buildtorrent*.deb
Installation de mediainfo :
cd /tmp
wget http://mediaarea.net/download/binary/libzen0/0.4.29/libzen0_0.4.29-1_amd64.Debian_7.0.deb
dpkg -i libzen0_0.4.29-1_amd64.Debian_7.0.deb
wget http://mediaarea.net/download/binary/libmediainfo0/0.7.65/libmediainfo0_0.7.65-1_amd64.Debian_7.0.deb
dpkg -i libmediainfo0_0.7.65-1_amd64.Debian_7.0.deb
wget http://mediaarea.net/download/binary/mediainfo/0.7.65/mediainfo_0.7.65-1_amd64.Debian_7.0.deb
dpkg -i mediainfo_0.7.65-1_amd64.Debian_7.0.deb
Et on met à jour les liens symboliques et les permissions :
ldconfig
chown -R www-data:www-data /var/www/rutorrent
Partie III : Configuration générale

Pour sélectionner l’ensemble des commandes, double-cliquez n’importe où sur le code.

Configuration du plugin create
nano /var/www/rutorrent/plugins/create/conf.php
et replacer les valeurs ci-dessous :
$useExternal = "buildtorrent";
$pathToCreatetorrent = '/usr/bin/buildtorrent';
Configuration du serveur web

On modifie le fichier /etc/lighttpd/lighttpd.conf :
nano /etc/lighttpd/lighttpd.conf
Insérer à la fin :
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php5-cgi",
"socket" => "/tmp/php.socket"
)))
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/certs/lighttpd.pem"
}
server.modules += ( "mod_auth" )
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.auth"
auth.require = ( "/rutorrent/" =>
(
"method" => "digest",
"realm" => "ruTorrent Seedbox",
"require" => "valid-user"
),
)
On active le module fastcgi :
/usr/sbin/lighty-enable-mod fastcgi
On créé le certificat SSL :
mkdir /etc/lighttpd/certs
cd /etc/lighttpd/certs
openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout lighttpd.pem -out lighttpd.pem
Appuyez sur entrée à chaque question.
Et on redémarre le serveur pour activer les changements :
service lighttpd force-reload
Configuration du serveur FTP
nano /etc/vsftpd.conf
Et modifier les valeurs si dessous :
Si elle sont absentes ou commentées (# devant) les ajouter à la fin.
anonymous_enable=NO
dirlist_enable=YES
download_enable=YES
guest_enable=NO
listen=YES
listen_ipv6=NO
local_enable=YES
local_umask=022
max_per_ip=0
pasv_enable=YES
port_enable=YES
pasv_promiscuous=NO
port_promiscuous=NO
pasv_min_port=0
pasv_max_port=0
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
On crée un fichier vide pour vsftpd.chroot_list :
touch /etc/vsftpd.chroot_list
Et enfin on redémarre le serveur FTP pour appliquer les changement :
service vsftpd reload
Configuration de SSH

Editer le fichier de config ssh :
nano /etc/ssh/sshd_config
commenter les ligne suivantes (placer un # devant ) :
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
Puis mettre 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 => <user>
2 – Les 3 premiers caractères du nom d’utilisateur en minuscule => <u>
3 - Les 3 premiers caractères du nom d’utilisateur en majuscule => <UU>
Par exemple, pour l’utilisateur nico : <user> = nico, <u> = nic et <UU> = NIC
!!! ATTENTION !!! Pour être valide, le nom d’utilisateur doit être entièrement en minuscules, faire plus de 3 caractères et les 3 premiers caractères doivent être différents entre tous les utilisateurs (pas de user1, user2, etc.).
On créé l’utilisateur de rTorrent :
useradd <user>
passwd <user>
On créé les répertoires de base :
mkdir /home/<user>
mkdir /home/<user>/watch
mkdir /home/<user>/torrents
mkdir /home/<user>/.session
On bloque l’utilisateur dans son home en SFTP :
nano /etc/ssh/sshd_config
Et coller :
Match user <user>
ChrootDirectory /home/%u
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 root pour la connexion SSH.
On créé le fichier de configuration de rTorrent :
nano /home/<user>/.rtorrent.rc
Copier/Coller :
9 <user> et 4 <u> à remplacer
schedule = chmod,0,0,"execute=chmod,777,/home/<user>/.session/<u>.socket"
execute = {sh,-c,rm -f /home/<user>/.session/<u>.socket}
scgi_local = /home/<user>/.session/<u>.socket
execute = {sh,-c,chmod 0666 /home/<user>/.session/<u>.socket}
encoding_list = UTF-8
port_range = 45000-65000
port_random = no
check_hash = no
directory = /home/<user>/torrents
session = /home/<user>/.session
encryption = allow_incoming, try_outgoing, enable_retry
schedule = watch_directory,1,1,"load_start=/home/<user>/watch/*.torrent"
schedule = untied_directory,5,5,"stop_untied=/home/<user>/watch/*.torrent"
use_udp_trackers = yes
dht = off
peer_exchange = no
execute = {sh,-c,/usr/bin/php /var/www/rutorrent/php/initplugins.php <user> &}
Rendez-vous sur le site de l’auteur pour personnaliser votre .rtorrent.rc
On rétablie les permissions :
chown -R <user>:<user> /home/<user>
chown root:<user> /home/<user>
chmod 755 /home/<user>
On configure le serveur web :
nano /etc/lighttpd/lighttpd.conf
Ajouter à la fin :
1 <user>, 1 <u> et 1 <UU> à remplacer
server.modules += ( "mod_scgi" )
scgi.server = (
"/<UU>0" =>
( "127.0.0.1" =>
(
"socket" => "/home/<user>/.session/<u>.socket",
"check-local" => "disable",
"disable-time" => 0, # don't disable scgi if connection fails
)
),
)
Pour les utilisateurs suivant, on procédera ainsi :
server.modules += ( « mod_scgi » )
scgi.server = (
« /<UU1>0″ =>
( « 127.0.0.1″ =>
(
« socket » => « /home/<user1>/.session/<u1>.socket »,
« check-local » => « disable »,
« disable-time » => 0, # don’t disable scgi if connection fails
)
),
« /<UU2>0″ =>
( « 127.0.0.1″ =>
(
« socket » => « /home/<user2>/.session/<u2>.socket »,
« check-local » => « disable »,
« disable-time » => 0, # don’t disable scgi if connection fails
)
),
)
Trouver ces lignes :
server.modules += ( "mod_auth" )
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.auth"
auth.require = ( "/rutorrent/" =>
(
"method" => "digest",
"realm" => "ruTorrent Seedbox",
"require" => "valid-user"
),
)
Ensuite insérer ce qui suit avant la dernière parenthèse :
"/<UU>0" => (
"method" => "digest",
"realm" => "ruTorrent Seedbox",
"require" => "user=<user>",
),
On spécifie le mot de passe pour le serveur web :
touch /etc/lighttpd/.auth
htdigest /etc/lighttpd/.auth 'ruTorrent Seedbox' <user>
Redémarrer le serveur web à chaque modification de ce fichier :
service lighttpd restart
On créé le répertoire de configuration de ruTorrent :
mkdir /var/www/rutorrent/conf/users/<user>
On édite le fichier de configuration :
nano /var/www/rutorrent/conf/users/<user>/config.php
Et on colle les valeurs :
2 <user>, 1 <u> et 1 <UU> à remplacer
<?php
$topDirectory = '/home/<user>';
$scgi_port = 0;
$scgi_host = 'unix:///home/<user>/.session/<u>.socket';
$XMLRPCMountPoint = '/<UU>0';
Création d’un script de démarrage de rTorrent :
nano /etc/init.d/<u>.rtord
Copier/Coller :
3 <user> à remplacer
#!/bin/bash
 
### BEGIN INIT INFO
# Provides:                rtorrent
# Required-Start:       
# Required-Stop:       
# 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="<user>"
 
# the full path to the filename where you store your rtorrent configuration
config="/home/<user>/.rtorrent.rc"
 
# set of options to run with
options=""
 
# default directory for screen, needs to be an absolute path
base="/home/<user>"
 
# name of screen session
srnname="rtorrent"
 
# file to log to (makes for easier debugging if something goes wrong)
logfile="/var/log/rtorrentInit.log"
#######################
###END CONFIGURATION###
#######################
PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
DESC="rtorrent"
NAME=rtorrent
DAEMON=$NAME
SCRIPTNAME=/etc/init.d/$NAME
 
checkcnfg() {
    exists=0
    for i in `echo "$PATH" | tr ':' '\n'` ; do
        if [ -f $i/$NAME ] ; then
            exists=1
            break
        fi
    done
    if [ $exists -eq 0 ] ; then
        echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2
        exit 3
    fi
    if ! [ -r "${config}" ] ; then
        echo "cannot find readable config ${config}. check that it is there and permissions are appropriate" | tee -a "$logfile" >&2
        exit 3
    fi
    session=`getsession "$config"`
    if ! [ -d "${session}" ] ; then
        echo "cannot find readable session directory ${session} from config ${config}. check permissions" | tee -a "$logfile" >&2
        exit 3
 
        fi
 
}
 
d_start() {
 
  [ -d "${base}" ] && cd "${base}"
 
  stty stop undef && stty start undef
  su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
  su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
}
 
d_stop() {
    session=`getsession "$config"`
    if ! [ -s ${session}/rtorrent.lock ] ; then
        return
    fi
    pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
    if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process
        kill -s INT ${pid}
    fi
}
 
getsession() {
    session=`cat "$1" | grep "^[[:space:]]*session[[:space:]]*=" | sed "s/^[[:space:]]*session[[:space:]]*=[[:space:]]*//" `
    echo $session
}
 
checkcnfg
 
case "$1" in
  start)
    echo -n "Starting $DESC: $NAME"
    d_start
    echo "."
    ;;
  stop)
    echo -n "Stopping $DESC: $NAME"
    d_stop
    echo "."
    ;;
  restart|force-reload)
    echo -n "Restarting $DESC: $NAME"
    d_stop
    sleep 1
    d_start
    echo "."
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    exit 1
    ;;
esac
 
exit 0
On rend le script exécutable :
chmod +x /etc/init.d/<u>.rtord
On ajoute une tache cron :
crontab -e
On colle ça :
*/1 * * * * if ! ( ps -U <user> | grep rtorrent > /dev/null ); then /etc/init.d/<u>.rtord start; fi
Vous devriez pouvoir maintenant vous connecter à rutorrent.

Conclusion

Les accès :

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

FTP
IP : XXX.XXX.XXX.XXX
Port : 21

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

Détails des dossiers :

/watch = y mettre un .torrent pour l’ajouter à rutorrent sans se connecter au site.
/torrents = dossier des torrents terminés.
/.session = dossier enregistrant les sessions rtorrent.

Possibilité de créer une arborescence de répertoire pour ranger ses torrents. Exemple :

Dans /torrents :
/torrents/Films
/torrents/Films/HD
/torrents/Films/SD
/torrents/Films/DVDR
/torrents/Musique
/torrents/eBooks
/torrents/Progs

Ainsi, un torrent ajouté dans /torrents/Films/SD, aura une étiquette « Films/SD » et ainsi de suite (il faut activer l’option dans le menu Engrenage > Autotools > Autolabel).

Pour redémarrer rTorrent :
service <u>.rtord restart
Pour mettre à jour rutorrent avec les derniers SVN :
svn up /var/www/rutorrent
Schéma de résolution d'erreur
En cas de soucis au démarrage de ruTorrent, suivre le schéma de résolution d'erreur pour déterminer la cause du problème :
5 ans plus tard
Répondre…