Le BitTorrent fait aujourd'hui partie des technologies très en vogue sur Internet
pour transmettre des fichiers volumineux à un grand nombre d'individus.
Le BitTorrent est un système de P2P, de PC à PC, les clients sont mis directement en relation
entre eux sans intermédiaire, le serveur etant là uniquement pour dresser la liste des clients disponibles.
Je fais un aparté pour préciser que le P2P n'est pas illégal, le P2P sert aujourd'hui à partager de très nombreuses ressources mises à
disposition par des personnes n'ayant pas forcement les capacités financières pour supporter un hébergement avec beaucoup de bande passante.
On peut trouver notamment les différents releases de Linux, les musiques de certains auteurs qui veulent diffuser gratuitement leurs oeuvres, les versions d'évaluation des logiciels, etc...
Concernant le BitTorrent, le fonctionnement est assez simple, lorsque vous téléchargez un fichier .torrent ce dernier contient deux informations importantes : le HASH File et l'URL du tracker.
Votre client BitTorrent contacte le tracker indiqué dans le fichier .torrent et demande quelles sont les sources disponibles pour le fichier possédant ce HASH File, le tracker vous indique une
liste d'IP à contacter, dès lors votre client contacte directement ces adresses et commence le téléchargement.
La liste d'IP est constituée simplement avec les personnes qui téléchargent comme vous le fichier, vous téléchargez chez eux, et eux téléchargent chez vous.
II. Pré-requis
Dans cet article nous verrons l'installation du tracker BitTorrent ainsi que d'un client BitTorrent pour faire du seeding sur le serveur.
Les deux points abordés sont totalement indépendants l'un de l'autre.
II-A. Pré-requis du tracker
Le tracker que je vous propose d'installer est PhpTracker, c'est donc comme son nom l'indique un tracker developpé en PHP, il faut donc pour le faire tourner un serveur Web avec le support de Php et une base MySQL.
Je vous oriente vers l'excellent blog de c_chatelain pour l'installation de Apache/Php/Mysql.
Je n'aborderai pas non plus la théorie du BitTorrent ni du P2P, si le fonctionnement vous intéresse je vous dirige vers l'article de Fabrice Schuler : Etude et utilisation des technologies de Peer to Peer (P2P) Notez cependant que le BitTorrent fonctionne sur une architecture centralisée à serveurs multiples.
II-B. Pré-requis du client BitTorrent
Le client BitTorrent que je vous propose d'installer est le client officiel BitTorrent, ce dernier est developpé en Python et possède un mode graphique ou console, je n'aborderai que le mode console.
Pour pouvoir faire fonctionner le client il faut avoir Python (2.2.1 et supérieur) et éventuellement l'utilitaire Screen qui permet de faire tourner des processus en console dématérialisée.
III. Notions
Nous avons évoqué précédemment quelques notions comme tracker et hash file, je vais dresser ici un petit lexique des termes utilisés dans cet article.
Terme
Description
Hash
Donnée permettant d'identifier un fichier par un ID unique
Tracker
Serveur centralisant les demandes et offres pour un ou plusieurs fichiers
Seeder
Personne qui partage un ou plusieur(s) fichier(s) déclaré dans le tracker
Leecher
Personne qui télécharge un ou plusieur(s) fichier(s) déclaré dans le tracker
Seeding
Action de partager un fichier
Leeching
Action de télécharger un fichier
Bt
Diminutif de BitTorrent
Peer
Littéralement : Pair
P2P ou Peer To Peer
Définit la façon de se connecter, à opposer à une relation Client-Serveur pour lequel toutes les données passent par un serveur central, les données dans une connexion P2P transitent directement de client à client ayant le même statut (des pairs)
IV. Tracker ("Serveur" BitTorrent)
IV-A. Installation
Je vais utiliser le chemin /www/ comme racine pour mon site web, bien sûr vous devez adapter le chemin quand c'est nécessaire.
Téléchargez le fichier source du tracker Php sur le site officiel en tapant les commandes suivantes :
wget http://dehacked.2y.net:6969/PHPBTTracker--1.5e.zip ' Récupére le fichier sur le serveur
unzip PHPBTTracker--1.5e.zip ' Dézippe le fichier Zip
cd PHPBTTracker--1.5e
mkdir /www/tracker/ ' Créé le répertoire dans le document-root du serveur Web
cp * /www/tracker/ ' Copie les fichiers dans le nouveau répertoire
cd /www/tracker/
cp config-sample.php config.php ' Duplique le fichier de configuration
chmod 755 * ' Donne les droits sur les fichiers
IV-B. Configuration
A ce stade il vous faut une base MySQL ainsi qu'un compte utilisateur et un mot de passe (l'utilisateur doit avoir des droits de création/suppression de table)
Ouvrez votre navigateur et connectez vous à l'adresse : http://votredomaine/tracker/install.php
Cliquez sur l'option 1 car vous avez déjà une base en fonctionnement.
Cliquez sur "Finish" pour terminer la configuration.
A ce stade vous devez effacer le fichier install.php du serveur Web.
Ouvrez ensuite le fichier config.php et modifiez les sections suivantes :
$upload_username et $upload_password sont les informations de connexion pour l'utilisateur habilité à déclarer des fichiers Torrent sur le serveur, sans cela n'importe qui peut déclarer n'importe quoi et cela deviendrait rapidement ingérable.
$dbhost = "linux-srv"; ' nom du serveur ou adresse IP
$dbuser = "bt-user"; ' utilisateur
$dbpass = "bt-passwd"; ' mot de passe
$database = "bt-db"; ' nom de la base de données
Là vous retrouvez les informations de connexion à la base de données que vous voulez utiliser.
IV-C. Modification de l'installation
Par défaut Le tracker est installé dans un seul répertoire, pour des soucis de sécurité il peut-etre intéressant de scinder en deux l'installation pour réaliser une partie utilisateur et une partie administration protégé par un fichier .htaccess
Je vais mettre la partie admin dans /www/tracker/admin/ soit dans un sous-répertoire du tracker.
Pour cela il suffit de déplacer les fichiers newtorrents.php (qui permet d'ajouter des nouveaux Torrent) et deleter.php (qui permet d'effacer des torrents existants)
Je vous laisse le soin de mettre en place vous même votre protection par htaccess
Il nous reste encore une modification à faire, modifier le fichier mystats.php, ce fichier permet d'afficher les statistiques du tracker et peut être public.
Le plus simple est d'en faire le fichier index.php du repertoire :
mv mystats.php index.php
Voila l'installation du tracker est terminé.
Normalement en vous connectant sur http://votredomaine/tracker vous devez arrivez sur une page similaire à celle-ci :
V. Client BitTorrent
V-A. Installation du client BitTorrent
Je vais continuer à utiliser /www/ comme répertoire racine pour mes pages web.
Téléchargez BitTorrent sur le site officiel en tapant les commandes suivantes :
wget http://www.bittorrent.com/dl/BitTorrent-4.0.1.tar.gz ' Recupère le fichier sur le serveur
tar -zxvf BitTorrent-4.0.1.tar.gz ' Dézippe le fichier Zip
mv BitTorrent-4.0.1 /usr/local/bittorrent ' déplace le répertoire dans le usr/local
cd /usr/local/bittorrent
chmod 777 *.py ' Donne les droits sur les fichiers
Normalement le client est installé.
V-B. Utilisation du client BitTorrent
Maintenant que le client BitTorrent est installé, on va l'utiliser pour deux choses, la première utilisation est la génération de fichier .torrent à partir de fichier sources, et la seconde utilisation est le seeding des .torrent générés.
Pour cela nous devons nous familiariser avec les fichiers du client BitTorrent que nous utiliserons.
Il existe bien d'autres fichiers mais je ne rentrerai pas dans le détail de leur description étant donné que je ne m'en servirai pas.
Fichier
Fonction
btlaunchmanycurses.py
Permet de lancer plusieurs downloads en 1 seul process
btmaketorrent.py
Permet de générer des fichiers .torrent
Vous pouvez également télécharger la version Windows du client si vous souhaitez générer les fichiers .torrent sur votre ordinateur puis les uploader sur le serveur.
VI. Mise en route du tracker
Imaginons que sur votre serveur vous vouliez partager les quatres fichiers ISO de votre Linux Fedora Core 3, il faut tout d'abord générer les fichiers .torrent grace à la commande btmaketorrent.py, les arguments sont l'url du tracker (pour l'annonce), le nom du fichier et eventuellement un commentaire.
./btmaketorrent.py http://votresite/tracker/tracker.php FC3-i386-disc1.iso --comment "CD1 de la distribution Fedora Core 3"
Il suffit de faire la même chose pour chacun des 4 CDs et vous obtiendrez 4 fichiers nommés par défaut avec le nom du fichier.torrent
FC3-i386-disc1.iso.torrent dans notre exemple.
Le fichier .torrent doit etre mis à disposition sur un serveur ftp ou un serveur web pour que les utilisateurs puissent télécharger le fichier.
Téléchargez vous même le fichier .torrent sur votre PC, vous en aurez besoin pour le déclarer dans le tracker.
Passons maintenant à la phase de déclaration du fichier .torrent dans le tracker.
Aller à l'adresse hhttp://votresite/tracker/admin/newtorrents.php, vous obtenez l'image suivante :
Renseignez dans le premier champ le chemin vers le fichier torrent,
les autres informations sont facultatives, je vous laisse le soin de les renseigner ou non.
Cliquez maintenant sur Create.
à ce stade le fichier est déclaré dans le tracker et vous pouvez donc commencer à diffuser le fichier .torrent
Néanmoins il reste un dernier point à régler, le fichier n'a pas de source pour alimenter les téléchargements, il faut donc sourcer (seeder) le fichier, là deux solutions s'offrent à vous, soit vous le faites faire par le serveur, soit vous le faites depuis votre ordinateur personnel, le problème est que dans le dernier cas, votre bande passante en upload est assez limitée, n'espérez pas atteindre plus de 60ko/s maximum (cela va surtout dépendre de votre FAI), c'est assez peu face à la bande passante d'un hebergement dédié (généralement plusieurs mégas).
VI. Mise en route du client Bittorrent
VI-A. Seeder le fichier sur son ordinateur personnel
La manipulation pour faire seeder son ordinateur personnel est assez simple.
Ouvrez votre client bittorrent, désignez le fichier .torrent (FC3-i386-disc1.iso.torrent) et indiquez lui le fichier iso si vous l'avez déjà (FC3-i386-disc1.iso), le client bittorrent va s'apercevoir que le fichier est déjà complet, et va se mettre à seeder, vous pouvez vous connecter à votre tracker pour vérifier qu'un client est bien en seeding.
Voila c'est maintenant fini !
VI-B. Seeder sur le serveur
Pour faire seeder le serveur nous allons donc utiliser l'autre script python nommé btlaunchmanycurses.py, ce dernier prend de nombreux arguments, personnellement je n'en utilise que 3, save_dir, torrent_dir et max_upload, save_dir permet de spécifier dans quel répertoire sauvegarder les fichiers téléchargés, torrent_dir permet de préciser dans quel répertoire se trouvent les fichiers .torrent, et max_upload permet de définir la bande passante maximum en upload.
Imaginons que vos fichiers iso de la Fedora soient dans le répertoire /home/user/src_iso et que vos fichiers torrent soient dans /www/torrents/ alors la ligne de commande à exécuter sera :
Normalement vous devez avoir sur l'écran de la console ceci :
La capture sera mise à jour plus tard.
Le client va se rendre compte que les fichiers existent déjà et va donc se mettre directement à seeder les fichiers.
Vous pouvez vérifier sur le fichier de statistiques du tracker que vous avez bien un client en seeding.
Malheureusement cette technique pose un problème, si vous coupez votre accès telnet ou SSH, vous arrêterez automatiquement le client bittorrent.
Laisser l'accès SSH ouvert en permanence n'est pas vraiment le plus adapté non plus, la solution est d'utiliser un utilitaire nommé screen (Screen), cet utilitaire permet de gérer des consoles virtuelles indépendantes.
VI-C. Couplage de screen et du client bittorrent
L'utilisation de screen est assez simple, voici les commandes que nous allons utiliser :
screen -dmS nom_console script_a_lancer
screen -r nom_console
screen -dmS permet de créer une console virtuelle en mode détaché (d)...
screen -r permet de la réattacher
Pour redétacher la console, il suffit de faire CTRL+A CTRL+D
Créez un fichier client_bt.sh qui contient par exemple :