Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

echoping

Ève

Utiliser le client classique de BitTorrent avec screen

Première rédaction de cet article le 28 mai 2008


Les téléchargements de fichiers avec le protocole BitTorrent peuvent prendre des jours, voires des semaines. Laisser un logiciel ouvert pendant ce temps n'est pas possible pour une machine de maison ordinaire, qui est souvent éteinte. Même sur un serveur allumé en permanence, cela bloque un terminal par téléchargement, si on utilise le client traditionnel, btdownloadcurses. Il existe plusieurs solutions à ce problème, la mienne combine un des logiciels du client traditionnel, btlaunchmanycurses et le programme screen.

Une des solutions est évidemment d'utiliser un autre programme, puisqu'il existe beaucoup de clients BitTorrent, tous plus ou moins compatibles (en dépit de l'absence d'une norme écrite du protocole). Je n'ai jamais eu de succès avec Azureus (core dumped) qui, contrairement à ce que prétend le discours marketing, comme presque tous les programmes Java, ne fonctionne pas avec n'importe quel environnement Java mais uniquement avec celui de Sun (qui était non-libre jusqu'à une époque très récente). De même, bien que mlDonkey aie, en théorie, un support BitTorrent, les téléchargements ne démarrent jamais, dans mon cas (et ce logiciel semble en voie d'abandon, avec une communauté qui est devenue inactive). Quant à TorrentFlux, il nécessite un serveur Web, PHP, etc.

Retour au client BitTorrent original, écrit en Python. Il comprend de nombreux programmes différents dont un qui fait presque tout ce dont j'ai besoin : btlaunchmanycurses prend en argument un répertoire, ouvre tous les fichiers « torrent » de ce répertoire et lance simultanément les opérations. Ajouter un nouveau « torrent » à la liste est aussi simple qu'un wget dans ce répertoire (par exemple wget ftp://ftp.netbsd.org/pub/NetBSD/iso/4.0/i386cd-4.0.iso.torrent pour récupérer le CD de NetBSD).

Pour libérer le terminal et pour que btlaunchmanycurses s'exécute tranquillement en arrière plan, la meilleure solution est d'utiliser le programme screen qui permet de lancer le programme en arrière-plan, le reprendre à volonté (y compris depuis une autre machine), le détacher à nouveau, etc. Le script shell attaché fait exactement cela :


#!/bin/sh

NAME=BitTorrent
DIR=${HOME}/Downloads
BT=btlaunchmanycurses
BT_OPTIONS="--ipv6_enabled 1 --max_uploads 3 --max_upload_rate 8 --max_download_rate 85"

cd ${DIR}

# Starts "screen" detached, with a command to run
screen  -S ${NAME} -d -m ${BT} ${BT_OPTIONS} .

# The limit of this approach is that screen disappears when ${BT} is
# over. If ${BT} scrashes, you lose the error messages :-)

# The alternative would be to launch screen without a command (just -d
# -m) and then to issue a "screen -X -r ${NAME} exec ${BT} ...". But
# this is ignored, probably because a bug in screen (see
# <https://savannah.gnu.org/bugs/index.php?18882>

# Another solution (thanks to Thomas Montfort to bring it to me) is to
# use the 'zombie kr' command in ~/.screenrc.

Il ne reste plus qu'à faire en sorte que ce script, start-bittorrent, soit lancé automatiquement au démarrage de la machine. Le client BitTorrent sait reprendre les transferts interrompus. Encore faut-il le mettre en route. Pour éviter d'utiliser le compte root, on peut exploiter un service des crons modernes comme Vixie Cron qui permet de lancer une commande au moment de certains événements comme le démarrage. Ainsi, j'ai dans ma crontab :

@reboot  bin/start-bittorrent

Je dois des remerciements à Erwan Arzur pour m'avoir indiqué btlaunchmanycurses et à Erwan David pour son aide sur cron.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)