Partie IV : Ajout d'un utilisateur (mode multi-user)
Pour uniformiser votre installation, on va convenir d'un format d'écrire des utilisateurs :
- nom d'utilisateur (dois faire plus de 3 caractères) => exemple
nico. Il sera symbolisé dans le tuto par
<user> ;
- l'acronyme du nom d'utilisateur (les 3 premiers caractères) => pour mon exemple cela fait
nic. Il sera symbolisé dans le tuto par
<u> et
<UU> losrqu'il doit être mis en majuscule (donc dans mon exemple :
NIC)
Il va sans dire que l'acronyme doit être différent pour chaque utilisateur.
!!! ATTENTION !!! Ne pas mettre de caractères en MAJUSCULE dans le nom d'utilisateur, tout mettre en minuscules.
#On crée le premier utilisateur de rtorrent
Code:
useradd
<user>
passwd
<user>
#De la même façon, on crée un compte pour chaque utilisateur
Code:
useradd
<user1>
passwd
<user1>
On créé les répertoires de base :
Code:
mkdir /home/
<user>
mkdir /home/
<user>/watch
mkdir /home/
<user>/torrents
mkdir /home/
<user>/.session
On créé les répertoires de base pour chaque autre utilisateur créés sur le système :
Code:
mkdir /home/
<user1>
mkdir /home/
<user1>/watch
mkdir /home/
<user1>/torrents
mkdir /home/
<user1>/.session
On créé le fichier de configuration de rTorrent pour chaque utilisateur :
Code:
nano /home/<user>/.rtorrent.rc
Copier/Coller :
Code:
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établit les permissions (pour chaque utilisateur) :
Code:
chown -R
<user>:
<user> /home/
<user>
puis
chown -R
<user1>:
<user1> /home/
<user1>
etc...
#On configure le serveur web
Code: [Sélectionner]
nano /etc/lighttpd/lighttpd.conf
(attention: lighttpd n'accepte qu'une seule déclaration « server.module » donc on doit enchainer chaque utilisateur par une virgule, le dernier utilisateur étant clos par une dernière parenthèse à la place de la virgule):
Ajouter à la fin
Code:
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
)
)
,
"/
<UU3>0" =>
( "127.0.0.1" =>
(
"socket" => "/home/
<user3>/.session/
<u3>.socket",
"check-local" => "disable",
"disable-time" => 0, # don't disable scgi if connection fails
)
)
)
On spécifie le mot de passe pour le serveur web (pour le premier utilisateur) :
Code:
htdigest -c /etc/lighttpd/.auth 'ruTorrent Seedbox'
<user>
Pour les utilisateurs suivants, on enlève le commutateur "-c" :
Code:
htdigest /etc/lighttpd/.auth 'ruTorrent Seedbox'
<user>
Redémarrer le serveur web à chaque modification de ce fichier
Code:
/etc/init.d/lighttpd restart
#On créé le répertoire de configuration de rutorrent pour chaque utlisateur :
Code:
mkdir /var/www/rutorrent/conf/users/
<user>
mkdir /var/www/rutorrent/conf/users/
<user1>
mkdir /var/www/rutorrent/conf/users/
<user2>
etc...
On édite le fichier de configuration (pour chaque utilisateur!) en remplaçant les variables <UU>, <u>, et <user> de manière adaptée:
Code:
nano /var/www/rutorrent/conf/users/
<user>/config.php
Et on colle les valeurs :
Code:
<?php
$topDirectory = '/home/
<user>';
$scgi_port = 0;
$scgi_host = "unix:///home/
<user>/.session/
<u>.socket";
$XMLRPCMountPoint = "/
<UU>0";
?>
puis idem pour les utilisateurs suivant:
nano /var/www/rutorrent/conf/users/
<user1>/config.php
Et on colle les valeurs :
Code:
<?php
$topDirectory = '/home/
<user1>';
$scgi_port = 0;
$scgi_host = "unix:///home/<user1>/.session/
<u1>.socket";
$XMLRPCMountPoint = "/
<UU1>0";
?>
#Création d'un script de démarrage de rTorrent (pour chaque utilisateur) :
Code:
nano /etc/init.d/rtorrent-user.
<user>
puis un second avec
<user2>, etc...
Copier/Coller : (
adapter la variable « provides » pour éviter que insserv ne fasse une crise et refuse d'ajouter le script)
Code:
#!/bin/bash
#
# /etc/init.d/rtorrent-user.<username>
#
# This script is designed to start/stop rtorrent embebbed into a screen
# session (detached) for any user known by the system (/etc/passwd).
# This script is user-dependent and should be duplicated (ln or ln -s
# recommanded) for each user (i.e. named rtorrent-user.joe for user joe).
#
# Correctly named, each instance of this script will start rtorrent into
# a screen session named rtorrent.<username>. Users will re-attach their
# rtorrent screen sessions using the following command:
# screen -r rtorrent.<username>
#
# Note that concerned users should have well configured their client
# (~/.rtorrent.rc configuration file) before this script is added to System V
# init files (use update-rc.d for this). This is important because rtorrent
# will be automatically started when entering runlevels 2345, and user's
# misconfigured rtorrent clients could involve an huge network traffic.
#
# By Nicolas Bercher, last update: 2010-07-18T13:13:08+02:00
#
nbercher@yahooo.fr
#
# This script is distributed under the terms of the GPL v2 license.
#
### BEGIN INIT INFO
# Provides: rtorrent.
<user>
# Required-Start:
# Required-Stop:
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop screen embedded rtorrent client for user rickitto
# Description: Start and stop screen embedded rtorrent client for user rickitto.
### END INIT INFO
#
# Script rootname:
SCRIPTROOTNAME='rtorrent-user'
# found in /etc/init.d/mysql (@Debian/Lenny):
SELF=$(cd $(dirname $0); pwd -P)/$(basename $0)
# Get the invoking username:
if [ $(dirname $SELF) == "/etc/init.d" ]; then
USERNAME=$(echo $(basename ${SELF}) | sed "s/\(${SCRIPTROOTNAME}.\)//g")
else
USERNAME=$(basename $(readlink ${SELF}) | sed "s/\(${SCRIPTROOTNAME}.\)//g")
fi
# Check if the script is not called as is:
if [ ${USERNAME} == "username" ]; then
echo 'Do not call this script directly, this script is user-dependent (not machine-dependent):'
echo 'you must create a symbolic link /etc/init.d/${SCRIPTROOTNAME}.<username> for the user <username> that points to this script.'
exit 1
fi
## Defines:
# found in /etc/init.d/mysql (@Debian/Lenny):
SERVICE_ID="${SCRIPTROOTNAME}.${USERNAME}"
LOCK_FILE="/var/lock/${SERVICE_ID}"
SERVICE_NAME="rtorrent"
START_COMMAND="screen -d -m -S ${SERVICE_NAME}.${USERNAME} -s ${SERVICE_NAME}"
# Check if the user exists:
if [ $(grep "^${USERNAME}\:" /etc/passwd | wc -l) != 1 ]; then
echo "Username <${USERNAME}> not found in /etc/password: unable to launch ${SERVICE_NAME}."
exit 1
fi
## Tests/Debug:
# echo "LOCK_FILE=${LOCK_FILE}"
# echo "USERNAME=${USERNAME}"
# echo "START_COMMAND=${START_COMMAND}"
## Carry out specific functions when asked to by the system
case "$1" in
start)
echo -n "Starting ${SERVICE_ID} service: "
if [ -f ${LOCK_FILE} ]; then
echo "${SERVICE_ID} is already running ! (lock file ${LOCK_FILE} exists)."
exit 1
else
touch ${LOCK_FILE}
su - ${USERNAME} -c "${START_COMMAND}"
echo "done !"
fi
;;
stop)
echo -n "Stopping ${SERVICE_ID} service: "
if [ ! -f ${LOCK_FILE} ]; then
echo "${SERVICE_ID} is not running ! (lock file ${LOCK_FILE} doesn't exists)."
else
rm -f ${LOCK_FILE}
pkill -U ${USERNAME} ${SERVICE_NAME}
echo "done !"
fi
;;
# Note: restart option disabled:
# Restart is buggy with screen/rtorrent and might need to wait a few seconds
# between stop & start (?).
# Inspired from /etc/init.d/mysql (@Debian/Lenny):
# restart)
# $SELF stop
# $SELF start
# ;;
status)
if [ -f ${LOCK_FILE} ]; then
echo "${SERVICE_ID} is running."
else
echo "${SERVICE_ID} is NOT running !"
fi
;;
*)
echo "Usage: ${0} {start|stop|status}"
exit 1
;;
esac
exit 0
On rend chaque script utilisateur exécutable :
Code:
chmod +x /etc/init.d/rtorrent-user.
<user>
(puis chmod +x /etc/init.d/rtorrent-user.
<user1> 2, 3, bidule... pour chaque utilisateur)
On ajoute chacun des scripts au démarrage du serveur :
Code:
update-rc.d /etc/init.d/rtorrent-user.
<user> defaults
On ajoute une tache cron par script utilisateur (attention, chaque crontab de chaque user est stockée séparément, donc comme les démons rtorrent tournent sous une identité user, ils doivent être monitorés par la crontab de l'utilisateur !:
Code:
crontab -u
<user> -e
On colle ça :
Code:
*/1 * * * * if ! ( ps -U
<user> | grep rtorrent > /dev/null ); then /etc/init.d/rtorrent-user.
<user> start; fi
idem pour
<user1>,
<user2>, etc...
Vous devriez pouvoir maintenant vous connecter à rutorrent. Si l'un de vous utilisateurs ruTorrent ne parvient pas à se connecter, c'est que l'instance rTorrent correspondant à son nom d'utilisateur n'est pas lancée ou est mal configurée. Dans tous les cas, avant de fouiller, vérifiez simplement pour chaque user que rtorrent se lance correctement, en ouvrant un shell sous le nom de chaque user ou via la commande SU
ex:
root@downloadboxdelamortkitue:/root#su
<user>
$rtorrent
au lancement de rtorrent, celui ci doit afficher la liste des downloads, et aucun message d'erreur en bas de page. Pour quitter, faites <CTRL>+Q.
Dans le cas contraire (message d'erreur ou autres), vérifier les fichiers /home/<user>/.rtorrent.rc (et/ou éventuellement la section correspondant à la déclaration de <user> dans /etc/lighttpd/lighttpd.conf)
celui/ceux ci doi(t)vent contenir des erreurs.
Conclusion
Les accès =
ruTorrent Webui
URL :
https://XXX.XXX.XXX.XXX/rutorrent
Explorateur de fichiers en ligne
URL :
https://XXX.XXX.XXX.XXX/ajaxplorer
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.
Pour redémarrer rTorrent :
Code:
/etc/init.d/rtorrent-user.
<user> restart
Pour mettre à jour rutorrent avec les derniers SVN :
Code:
svn up /var/www/rutorrent