Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
FORUM LINUX FAQ LINUX TUTORIELS LINUX LIVRES LINUX LINUX TV UNIX GTK+ Qt APACHE

Monter un tracker BitTorrent sur Linux (Fedora Core 3)

Date de publication : 03/04/2005 , Date de mise a jour : 03/04/2005

Par Gaël DONAT (Site developpez.com)
 

Cet article va vous expliquer comment monter un tracker Php pour faire du BitTorrent, ainsi qu'un client BitTorrent en seeding perpétuel


I. Introduction
II. Pré-requis
II-A. Pré-requis du tracker
II-B. Pré-requis du client BitTorrent
III. Notions
IV. Tracker ("Serveur" BitTorrent)
IV-A. Installation
IV-B. Configuration
IV-C. Modification de l'installation
V. Client BitTorrent
V-A. Installation du client BitTorrent
V-B. Utilisation du client BitTorrent
VI. Mise en route du tracker
VI. Mise en route du client Bittorrent
VI-A. Seeder le fichier sur son ordinateur personnel
VI-B. Seeder sur le serveur
VI-C. Couplage de screen et du client bittorrent
VIII. Fin & remerciements


I. Introduction

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 = "gael"; $upload_password = "youpi";
$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)

mkdir admin mv deleter.php admin mv newtorrents.php admin
Il faut ensuite modifier ces deux fichiers pour les includes Php
Ouvrez d'abord le fichier deleter.php et les modifiez 3 lignes ci-dessous :

<link rel="stylesheet" type="text/css" href="style.css" /> require_once("config.php"); require_once("funcsv2.php");
En les remplaçant par :

<link rel="stylesheet" type="text/css" href="../style.css" /> require_once("../config.php"); require_once("../funcsv2.php");
Ouvrez ensuite le fichier newtorrents.php et recherchez les cinq lignes suivantes :

<link rel="stylesheet" type="text/css" href="style.css" /> require_once ("config.php"); require_once ("funcsv2.php"); require_once ("BDecode.php"); require_once ("BEncode.php");
Et remplacez les par :

<link rel="stylesheet" type="text/css" href="../style.css" /> require_once ("../config.php"); require_once ("../funcsv2.php"); require_once ("../BDecode.php"); require_once ("../BEncode.php");
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 :

./btlaunchmanycurses.py --save_in /home/user/iso/ --torrent_dir /www/torrents/ --max_upload 200
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 :

#!/bin/sh ./python /usr/local/bittorrent/btlaunchmanycurses.py --save_in /home/user/iso/ --torrent_dir /www/torrents/ --max_upload 200
et pour lancer le client en console virtuelle :

screen -dmS torrent /usr/local/bittorrent/client_bt.sh
Vous pouvez vérifier que le client est bien lancé, via la commande

screen -r torrent
Puis faites CTRL+A CTRL+D pour détacher l'écran.

Maintenant vous pouvez fermer votre accès SSH, le client continue à tourner en tâche de fond.


VIII. Fin & remerciements

Voila votre serveur bittorrent est prêt.
Je tiens à remercier Beuss et armatatuxa pour la relecture attentive et la correction orthographique.



Copyright © 03/04/2005 Gaël DONAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique Linux Professionnel : Olivier Van Hoof - Contacter par EMail :
Vos questions techniques : forum d'entraide Linux Professionnel - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.