rTorrent : client bitTorrent en mode texte sous linux

J’ai récemment découvert rTorrent, un client bitTorrent en mode texte (avec une interface ncurses) sous linux, parfait donc sur un serveur dédié ou sur l’un de vos vieux PC qui traînent.

Sur un serveur dédié, vous pourrez installer screen qui vous permet de lancer (par exemple) rTorrent, puis de fermer l’écran de rTorrent sans arrêter le programme. Je l’explique plus loin !

Installation de rTorrent

Comme la version sur les serveurs de Debian est ancienne, les fichiers de configuration ayant légèrement changé de syntaxe, je vous conseille de regarder sur le site pour compiler le programme depuis les sources.

Installez également screen si vous ne l’avez pas :

apt-get install screen

Et créez un dossier pour vos torrents et vos téléchargements (on l’utilisera dans la configuration) :

mkdir /var/torrents

Et créez un dossier dans ce dossier pour automatiser les téléchargements (rTorrent téléchargera directement les .torrent qu’on met dans ce dossier !)

mkdir /var/torrents/todo

Puis un dossier qui servira à rTorrent à stocker ses infos en fonctionnement :

mkdir /var/torrents/sessions

Puis le dossier qui contiendra vos downloads en cours (non-terminés) :

mkdir /var/torrents/working

Puis le dossier qui contiendra vos downloads terminés :

mkdir /var/torrents/complete

Et enfin un dossier pour mettre vos torrents en pause de façon simple (sans avoir à passer par rTorrent) :

mkdir /var/torrents/pause

Configuration de rTorrent :

La configuration de rTorrent se passe par un seul fichier de configuration qui va nous permettre d’automatiser son fonctionnement.

nano -w /root/.rtorrent.rc

Vous n’avez plus qu’à faire un copier/coller :

# download max à 10 Mbps, augmentez la valeur suivant votre bande passante
download_rate = 10240
# upload max à 200 kbps on est radins !
upload_rate = 200     

# ip de votre routeur/serveur
# si vous êtes derrière un routeur (freebox...)
# décommentez et indiquez ici votre IP publique (WhatIsMyIp.com)
# ip = xx.xx.xx.xx     

# répertoire pour stocker les fichiers
directory = /var/torrents/working
session = /var/torrents/sessions     

# ports de connexion sur votre machine, pensez à
# ouvrir ces ports dans votre firewall et à les rediriger vers cette machine !
port_range = 6881-6999     

# le reste je l'explique pas :
port_random = yes
check_hash = yes
max_memory_usage = 268435456    

# surveiller les répertoires
schedule = watch_directory,15,15,load_start=/var/torrents/todo/*.torrent
schedule = tied_directory,15,15,start_tied=
schedule = untied_directory,15,15,stop_untied=     

# arrêter de partager le fichier quand vous avez
# donné plus de 200 Mo ou plus de 20% du fichier
schedule = ratio,60,60,"stop_on_ratio=200,200M,2000" 

# déplacer les downloads terminés
on_finished = move_complete,"execute=mv,-u,$get_d_base_path=,/var/torrents/complete/ ;set_d_directory=/var/torrents/complete/"  

# pour ne pas épuiser le disque dur, on augmente la taille du buffer en mémoire :
send_buffer_size = 1048576
receive_buffer_size = 1048576

Enfin, deux scripts (inspirés de dns777) :

1) script pour lancer rTorrent dans un “screen” :

nano -w ~/rtorrent-start.sh

Copiez-collez ça et enregistrez :

cd /var/torrents
screen -dmS rTorrent nice -n 15 rtorrent

2) et l’autre pour retourner dans le “screen” pour voir rTorrent :

nano -w ~/rtorrent-view.sh
stty stop undef
stty start undef
screen -r rTorrent

Rendez ces scripts exécutables :

chmod 755 ~/rtorrent-*.sh

Utilisation de rTorrent :

C’est easy avec notre script :

~/rtorrent-start.sh

Voilà, rTorrent tourne. Maintenant pour lui faire démarrer un téléchargement, c’est easy, allez sur un site de torrents (légal bien évidemment, donc pas comme the Pirate Bay) et enregistrez votre torrent dans : /var/torrents/todo, par exemple en faisant :

wget http://cdimage.debian.org/debian-cd/4.0_r0/i386/bt-cd/debian-40r0-i386-CD-1.iso.torrent

Une fois le téléchargement terminé, vous trouverez votre fichier dans /var/torrents/complete.

Pour mettre en pause un téléchargement, déplacez le .torrent du répertoire /var/torrents/todo vers /var/torrents/pause.

Si vous avez besoin de passer dans rTorrent pour voir ce qu’il fait, tapez :

~/rtorrent-view.sh

Vous trouverez les commandes utiles en tapant :

man rtorrent

N’oubliez pas que une fois que vous êtes dans rTorrent il ne faut pas le fermer (CTRL + Q) sinon vous arrêtez vos téléchargements. Par contre, vous pouvez le laisser tourner en tâche de fond en tapant : CTRL + A et D pour “détacher l’écran” de rTorrent créé par screen.

Interface de rTorrent :

Lorsque vous êtes dans rTorrent, voici quelques touches utiles pour utiliser l’interface qui fait peur au début :

  • HAUT / BAS : choisir un torrent
  • DROITE / GAUCHE : avoir des infos sur un torrent ou revenir en arrière dans l’interface
  • CTRL + D : arrête un torrent (s’il tourne, sinon le supprime)
  • CTRL + S : démarre un torrent
  • CTRL + Q : quitter rTorrent

Pour en savoir plus :

Backup automatique des bases mysql et des répertoires d’un serveur web puis envoi sur un ftp

J’avais besoin d’un script sur mon serveur dédié pour effectuer une sauvegarde quotidienne des fichiers importants du serveur (les fichiers de sites web, et les fichiers de configuration des applications, dans /etc), ainsi que des bases de données, mysql en l’occurence. Le problème c’est que les fichiers sauvegardés en local ne servent pas à grand chose quand le disque crashe. Ce script doit donc envoyer les fichiers sauvegardés et compressés sur un serveur FTP. Sur le web j’ai trouvé des scripts qui ne marchaient pas… alors je m’en suis inspiré :-) pour en faire un qui marche.

Mieux : le script m’envoie un mail quand il n’arrive pas à sauvegarder sur le ftp (serveur plein ou indisponible)

Prérequis :

Un compte sur un serveur FTP :

  • Chez OVH il y a un service gratuit d’hébergement FTP (il suffit de le demander dans l’interface du “manager”.
  • Chez Free, vous avez 1 Go de FTP avec votre compte e-mail.
  • Sinon, demandez au Père Noël…

Comme l’espace sur votre FTP de backup ne sera pas infini, ce script écrase tous les jours la version précédente. Vous pouvez aussi avoir un fichier par date du jour. Regardez plus loin…

Quelques logiciels sur votre machine :

  • un client ftp digne de ce nom. Ce script utilise ncftp. Donc “apt-get install ncftp”.
  • savoir où se trouvent les binaires de mysql, mysqladmin et donc ncftp. Via un “whereis ncftp” par exemple.
  • les classiques : tar et gzip
  • la commande mail qui fonctionne, pour savoir quand l’upload sur le ftp a foiré !

Quoi faire comment où :

Copiez-collez ce code dans un fichier, par exemple :

/root/backup2ftp.sh

Le script :

#!/bin/sh
# Copyright (c) 2007 Julien Ricard
# This script is licensed under GNU GPL version 2.0 or above  

### Config  ###
# répertoires séparés par un espace
DIRS="/home/www /etc"
# le répertoire temporaire pour compresser... laissez ça !
BACKUP_DIR=/tmp/backup
# pour avoir un fichier de sauvegarde par jour effacez la ligne NOW=1
NOW=$(date +%d-%m-%Y)
NOW=1 

### Config MySQL ###
# le user qui se connecte à mysql pour faire le mysqldump et le mysql
# cet user doit avoir les droits "Select" et "Lock Tables" en global
# mettez root si vraiment vous le voulez
MYSQL_USER=user-de-backup
MYSQL_PASS=mot-de-passe
MYSQL_HOST=localhost
# les chemins des exécutables de mysql
MYSQL_BIN=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
# celui de gzip
GZIP=/bin/gzip  

### Config de votre compte FTP ###
# où uploader les fichiers sur le FTP
FTP_DIR=/backup
# votre login et votre mot de passe
FTP_USER=le-login
FTP_PASS=le-mot-de-passe
FTP_SERVER=ip-ou-nom-du-serveur
# chemin de ncftp
NCFTP_BIN=/usr/bin/ncftp  

### E-mail pour les alertes ###
EMAIL=vous@email.com  

### Après on ne touche à rien ###
[ ! -d $BACKUP_DIR ] && mkdir -p $BACKUP_DIR || :
FILE=fs-$NOW.tar.gz
tar -zcf $BACKUP_DIR/$FILE $DIRS  

DBS=$($MYSQL_BIN -u$MYSQL_USER -h$MYSQL_HOST -p$MYSQL_PASS -Bse 'show databases')
for db in $DBS
do
FILE=$BACKUP_DIR/mysql-$db-$NOW.sql.gz
$MYSQLDUMP -u $MYSQL_USER -h $MYSQL_HOST -p$MYSQL_PASS $db | $GZIP -9 > $FILE
done  

$NCFTP_BIN -u$FTP_USER -p$FTP_PASS $FTP_SERVER << EOF
mkdir $FTP_DIR
echo "$NCFTP_BIN -u$FTP_USER -p$FTP_PASS $FTP_SERVER< mkdir $FTP_DIR"
cd $FTP_DIR
lcd $BACKUP_DIR
del *
mput *
quit
EOF  

rm -f $BACKUP_DIR/*
if [ "$?" == "0" ]; then
OUT=/tmp/backup.fail
echo "Date : $(date)">$OUT
echo "Serveur : $(hostname)" >>$OUT
echo "Sauvegarde sur FTP échouée" >>$OUT
mail -s "Sauvegardé échouée" "$EMAIL" <$OUT
rm -f $OUT
fi

Lancez ce script tous les jours…

On rend ce script exécutable :

chmod 755 /root/backup2ftp.sh

Puis on l’ajoute au cron :

crontab -e

Copiez-collez :

0 1 * * * /root/backup2ftp.sh 2>/dev/null

A savoir :

Ce script sauvegarde chaque base séparément, donc vous pourrez récupérer vos données plus facilement en cas de pépin qu’avec un dump géant comprenant tout le serveur.