Table des matières

Seedbox et streaming avec rtorrent+rutorrent sous Debian Wheezy

Le rêve, c'est d'avoir un youtube-en-mieux-et-rien-que-pour-soi mais avec les films en HD, lisibles dans VLC, on est d'accord. C'est ce dont on va parler.

Note: Ce guide est destiné à des personnes qui disposent d'un serveur, et ont des connaissances sous Linux. Les indications données ne sont faites pour être suivies pas à pas (il s'agit plus de prises de notes que d'un tutoriel :D) mais normalement il ne manque rien, donc faites à votre sauce et courage !

Présentation Terminologique

Qu'est-ce qu'une seedbox ?

C'est un serveur que vous aurez loué ou autre, et qui dispose d'une bonne bande passante (meilleure que votre connexion personnelle). Ce serveur peut être utilisé pour mettre en partage des fichiers torrent, et ainsi seeder (d'où le nom), ce qui peut avoir l'avantage de booster votre ratio de partage. Certains sites de torrent (dont T411 ou frenchtorrentdb) sont en effet des trackers privés qui comptabilisent le ratio réception/émission et qui interrompent vos téléchargements si vous avez trop reçu mais pas assez donné.

Streaming ?

Une fois les fichiers complétés sur votre serveur, vous aurez envie de les récupérer à pleine vitesse, ou bien les visionner directement depuis le serveur (streaming). Supra-easy si votre poste utilisateur est sous Linux.

rtorrent

… est le client bittorrent, à la base dépouillé d'interface graphique, communément utilisé sur les serveurs car consomme moins de ressources que ses congénères.

rutorrent

… est le nom d'une interface web (la seule qui tienne à peu près la route en mars 2013) qui vous permet d'interagir avec rtorrent.

Debian Wheezy

… est le nom du système d'exploitation, plus précisément une distribution Linux, que l'on retrouve sur la plupart des serveurs, mais aussi sur ma machine perso :D (et celle de nombreuses personnes de bon goût).

Indications

Installation de rtorrent

  1. Note1: Changez la valeur de la variable USER !
  2. Note2: N'oubliez pas de rendre executable ce script (chmod +x /etc/init.d/rtorrent)
  3. Note3: Utilisez sysv-rc-conf pour ajouter ce script aux niveaux d'init (pas certain que ça fonctionne)
/etc/init.d/rtorrent
#! /bin/sh
 
### BEGIN INIT INFO
# Provides: rtorrent
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: rtorrent
# Description: start rtorrent
### END INIT INFO
 
USER="rtorrentuser"
 
case "$1" in
  start)
    echo "Starting rtorrent..."
    su $USER -c 'screen -d -m -S rtorrent rtorrent'
    ;;
  stop)
    echo "Stopping rtorrent..."
    #killall -s 2 rtorrent
    su $USER -c 'screen -X -S rtorrent quit'
    ;;
  *)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
esac
 
exit 0

Voir aussi:

Vous pourrez ensuite invoquer ce script en étant root:

/etc/init.d/rtorrent start

Configurez rtorrent

Note: N'utilisez pas les clauses “watch” ou les déplacements de fichiers dans le fichier de config de rtorrent, car cette fonction sera assurée dans notre cas par le plugin autotools de rutorrent. Si vous les mettez, rtorrent et rutorrent risquent de se tirer un peu dans les pattes car la glue entre ces 2 entités n'est pas parfaite.

Mon fichier rtorrent.rc ressemble à ça:

.rtorrent.rc
# Fichier de configuration de rtorrent.
 
download_rate = 0
upload_rate = 0
 
directory = /home/rtorrentuser/.rtorrent/current
session = /home/rtorrentuser/.rtorrent/session
 
port_range = 10010-10090
port_random = no
 
# check_hack sur 'yes' peut faire ramer le serveur
check_hash = yes
#check_hash = no
 
# Note: j'avais des "schedule" à la base mais ça foutait la merde avec rutorrent, qui gère cela avec le plugin auto_tools, donc à retirer ou laisser commenté !
#schedule = watch_directory,10,10,"load_start=/home/rtorrentuser/.rtorrent/watch/*.torrent,d.set_custom1=/home/rtorrentuser/downloads"
#system.method.set_key=event.download.finished,move_complete,"d.set_directory=$d.get_custom1=;execute=mv,-u,$d.get_base_path=,$d.get_custom1="
 
dht = auto
dht_port = 10080
peer_exchange = yes
 
#encryption = allow_incoming,require,require_rc4
encryption = allow_incoming,enable_retry,prefer_plaintext
 
# Ca, c'est nécessaire pour que rutorrent fonctionne
scgi_port = localhost:5000
 
log.open_file = "rtorrent", "~/.rtorrent/rtorrent.log"
log.add_output = "critical", "rtorrent"
#log.add_output = "error", "rtorrent"

Configurez votre serveur web (ici: Apache)

Nécessaire: Installez libapache2-mod-scgi ! Et dites à Apache qu'il faut activer ce mod:

# en étant root
a2enmod scgi

Virtualhost

Dans la configuration du site (virtualhost), on définira 2 choses:

Note: AllowOverride All vous permettra de spécifier des restrictions d'accès dans un .htaccess

/etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
 
        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
 
        Alias /downloads /home/rtorrentuser/downloads
        <Directory /home/rtorrentuser/downloads>
               Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
 
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
 
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Installer rutorrent

Vous pourrez télécharger rutorrent et ses plugins (très recommandé) par ici: https://code.google.com/p/rutorrent/downloads/list?q=label:Featured

Mise à jour novembre 2015 : le code de rutorrent est désormais disponible sur GitHub : https://github.com/Novik/ruTorrent

  1. Note1: je ne sais pas à quoi correspond “1” en dessous de Theme, mais ça y était sur le fichier que j'ai repompé
  2. Note2: Vous pouvez (dés)activer les plugins comme vous le souhaitez, j'ai pour ma part gardé les plus essentiels
/var/www/rutorrent/conf/plugins.ini
;; Plugins' permissions.
;; If flag is not found in plugin section, corresponding flag from "default" section is used.
;; If flag is not found in "default" section, it is assumed to be "yes".
;;
;; For setting individual plugin permissions you must write something like that:
;;
;; [ratio]
;; enabled = yes			;; also may be "user-defined", in this case user can control plugin's state from UI
;; canChangeToolbar = yes
;; canChangeMenu = yes
;; canChangeOptions = no
;; canChangeTabs = yes
;; canChangeColumns = yes
;; canChangeStatusBar = yes
;; canChangeCategory = yes
;; canBeShutdowned = yes
 
[default]
enabled = user-defined
canChangeToolbar = yes
canChangeMenu = yes
canChangeOptions = yes
canChangeTabs = yes
canChangeColumns = yes
canChangeStatusBar = yes
canChangeCategory = yes
canBeShutdowned = yes
 
 
 
[_getdir]
enabled = yes
[show_peers_like_wtorrent]
enabled = no
[erasedata]
enabled = yes
[diskspace]
enabled = yes
[datadir]
enabled = no
[data]
enabled = no
[create]
enabled = no
[cpuload]
enabled = no
[tracklabels]
enabled = no
[trafic]
enabled = no
 
[theme]
enabled = yes
1
enabled = yes
[seedingtime]
enabled = no
[rss]
enabled = no
[extsearch]
enabled = no
[edit]
enabled = no
[cookies]
enabled = no
[autotools]
enabled = yes
[unpack]
enabled = no
[ratio]
enabled = no
[chunks]
enabled = no
[feeds]
enabled = no
[loginmgr]
enabled = no
[rssurlrewrite]
enabled = no
[niouz]
enabled = no
[pausewebui]
enabled = no
[lbll-suite]
enabled = no
[mediainfo]
enabled = no
[chat]
enabled = no
[logoff]
enabled = no
[filemanager]
enabled = no
[screenshots]
enabled = no
[rutracker_check]
enabled = no
[extratio]
enabled = no

Création de répertoires et permissions

chgrp www-data /home/rtorrentuser/downloads

Si vous voulez trier/organiser vos torrents dans des répertoires, créez des sous-répertoires de current:

mkdir /home/rtorrentuser/.rtorrent/current/films
mkdir /home/rtorrentuser/.rtorrent/current/series
mkdir /home/rtorrentuser/.rtorrent/current/musique
mkdir /home/rtorrentuser/.rtorrent/current/robert

Configurez les plugins

Tester ...

Faites vos tests avec rtorrent seul (sans le lancer dans un screen) dans un premiers temps, puis allez voir la page web rutorrent de votre serveur.

N'indiquez pas “l'étiquette” vous-même lors de l'ajout du .torrent si vous souhaitez que vos fichiers soient triés par autotools. Indiquez juste le répertoire de destination (qui est un sous-répertoire de current)

A ce stade, vous devriez avoir vos téléchargements qui fonctionnent, ainsi que l'interface de rutorrent qui marche. Vous devriez pouvoir accéder à vos fichiers par http://ip.de.votre.serveur/downloads (selon l'Alias que vous avez mis)

Sécurisez tout ça avec des .htaccess

/var/www/rutorrent/.htaccess
AuthName "Identifie-toi sinon pas de chocolat"
AuthType Basic
AuthUserFile /var/www/rutorrent/.htpasswd
Require Valid-User

Commande pour créer un .htpasswd:

htpasswd -c .htpasswd Jdownloadgrave

Protégez également l'accès au répertoire /home/rtorrentuser/downloads de la même façon. Le léger hic, c'est que si vous faites du streaming directement depuis ce répertoire avec vos logiciels de lecture, ils ne pourront pas accéder au contenu à moins de s'authentifier, et tous n'en sont pas capables.

Si vous mettez vos fichiers à disposition du public, donc sans mot de passe, vous risquerez d'attirer l'attention, et votre hébergeur auquel vous louez le serveur vous dira que c'est pas bien. Mettez plutôt un compte+mot de passe bidon si vous voulez que l'accès à vos fichiers soit aisé pour tout le monde.

Streaming avec VLC

Vous pourrez faire du streaming dans VLC, en copie-collant l'URL du fichier (ouvrir un flux réseau avec CTRL+N, ou faites directement CTRL+V dans l'interface de VLC) (À confirmer, car le .htaccess risque de poser problème. Il vaut mieux dans ce cas utiliser sshfs indiqué plus bas)

Mise à jour: depuis la version 2.1.x, VLC est capable d'accepter les certificats SSL, ainsi que d'effectuer l'authentification par HTTP. Problème: retaper les identifiants + mot de passe est nécessaire à chaque changement de fichier…

sshfs

Et ça c'est du bonheur, plutôt que de passer par le serveur web, vous pouvez utiliser sshfs pour faire un point de montage de votre répertoire distant.

Installez (depuis votre propre poste Linux et non depuis la seedbox bien sûr) le paquet sshfs, et ajoutez votre utilisateur au groupe fuse.

addgroup monblaze fuse

Puis pour faire le montage:

sshfs rtorrentuser@ip.de.mon.serveur:/home/rtorrentuser/downloads ./seedbox

Vous pouvez aussi utiliser autofs, ce que je n'ai pas encore mis en place.

Fin

Tadaaaaaaaa !

Documentation externe

rtorrent & rutorrent

apache & co

D'autres guides

Annexe 1: autotools perd sa configuration au redémarrage

Car c'est jamais la fin … et que ceci n'est pas vraiment une annexe, mais un problème rencontré est le suivant:

Il faut donc penser à le reconfigurer si vous relancez rtorrent et rutorrent.

Correction: ce problème s'est résolu tout seul, vraisemblable que vous ne le recontriez pas.

Annexe 2: Cakebox, un script pour automatiser l'installation

Sinon, il paraît qu'un script qui s'appelle Cakebox permet de mettre en place à peu près la même chose de façon automatisée que ce qui est décrit dans ce guide.

Je n'ai fait qu'un essai sans y mettre beaucoup de bonne volonté, mais le script a quelques imperfections qui ne m'ont pas fait m'y risquer très loin.

Pour commencer, je l'ai essayé bêtement, sous un compte de simple utilisateur. Après tout, c'est ce que le symbole “$” de la doc me demande de faire. Le résultat est qu'il télécharge les sources .tar.gz de rtorrent et d'autres choses, et les a dispersé dans le /home de mon compte utilisateur. Il installe en outre une tâche cron qu'il a fallu que je vire (avec crontab -e).

Aussi, il installe des outils de développement et compile rtorrent ainsi que xmlrpc, ce qui n'est pas nécessaire. Et ajoute les dépots non-free dans votre sources.list (j'ai pas compris pourquoi…)

Il se peut que le script fonctionne sous certaines conditions/réadaptations, ne serait-ce qu'en jouant le jeu et en passant root pour l'exécuter. Il est conseillé de visualiser le script avant d'en envisager l'emploi.

Annexe 3: Accès au streaming par Apache en https

Comme mis dans les liens de documentation, il est tout à fait possible de faire passer le streaming par https plutôt que http. Vous pouvez vous référer à cet article (en anglais).

Plus simple, éditer le fichier /etc/sites-available/default-ssl, puis:

a2ensite default-ssl

(sans nécessairement utiliser de certificat SSL)