Ubuntu 10.10 : Installer un serveur BitTorrent

BitTorrent… Protocole d’échange Peer-to-Peer

Vous avez une idée ? Trouvez gratuitement des développeurs sur Codeur.com !

Recevez des devis (gratuit)

Vous en avez évidemment entendu parler, surtout ce dernière semaine avec Hadopi qui va tout contrôler, etc (enfin… c’est ce qu’ils espèrent…)

Alors, c’est pas interdit le BitTorrent ?

Non évidemment ! Ce n’est qu’un protocole d’échange de fichiers, particulièrement performant.

Tant que vous ne vous en servez pas pour échanger des fichiers illégaux ou dont vous ne possédez pas les droits, ça ne pose pas de problème. Ne mettez à disposition QUE des fichiers libres ou dont vous disposez des droits !

En résumé, les mp3 et autres DivX, ce n’est en général pas le cas et donc ne les partager pas… Voilà, vous êtes prévenu 😉

On est le 10/10/10 …

Aujourd’hui Ubuntu 10.10 est sorti.

copie d’écran site Ubuntu.com

Mon idée est de partager ces fichiers Ubuntu en BitTorrent pour faciliter la distribution d’Ubuntu.

Ok, j’ai déjà démarré le partage sur mon propre PC, mais derrière une ligne ADSL / VDSL, l’upload sera probablement entre 300 Kbps et 1 Mbps, maximum 2 ou 3 Mbps pour les VDSL. Personnellement, j’ai une vitesse d’upload PC d’environ 1,5 Mbps.

Bien, mais on peut faire mieux !

J’ai un serveur dédié. Là, c’est 100 Mbps en pointe.

Je vais y installer un client BitTorrent en console (en « cli » : command line interface) 🙂

ATTENTION : un échange BitTorrent peut consommer de la mémoire, et surtout beaucoup de bande passante. Si votre serveur héberge des sites Web ou des services ouverts au public, vous risquez des ralentissements importants de votre serveur. Pensez à limiter la vitesse BitTorrent. Attention également si vous avez un quota en data, par exemple derrière une ligne ADSL en Belgique…

Je fais cette installation depuis un serveur miniCloud chez OVH, où une Debian 5.0 64 bits est installée, mais ces explications devraient être utilisables avec presque toutes les distributions Linux, sous réserve d’avoir le client Bittorrent dans votre distribution.

Je fais une recherche pour trouver les clients BitTorrent disponibles en Debian :

[bash]

root@mc-188-165-47-126:~# aptitude update

root@mc-188-165-47-126:~# aptitude search torrent

...

p   rtorrent - ncurses BitTorrent client based on LibTorrent
[/bash]

D’autres clients sont disponibles, mais il me faut un client en ligne de commande.

C’est un serveur que j’ai. Il n’y a pas d’interface graphique.

J’ai déjà essayé le client Bittorrent (original) avant, et je n’avais pas réussi à le faire fonctionner simplement…

Je choisi rtorrent … comme ça… Pourquoi pas rtorrent ? 😉

L’installation est classique sous Debian en root (en Ubuntu, ajouter « sudo … ») :

[bash]
root@mc-188-165-47-126:~# aptitude install rtorrent

Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
libcurl3{a} libssh2-1{a} libtorrent10{a} libxmlrpc-c3{a} rtorrent

0 packages upgraded, 5 newly installed, 0 to remove and 0 not upgraded.

Need to get 232kB/1177kB of archives. After unpacking 3162kB will be used.
Do you want to continue? [Y/n/?] Y
[/bash]

Voilà, rtorrent est installé.

Je quitte le user root et je reviens dans mon user personnel.

J’essaye de démarrer rtorrent, simplement avec la commande « rtorrent« .

J’obtiens un écran (toujours en mode texte) avec ce message :

[bash] (15:11:39) Using ‘epoll’ based polling.

(15:11:39) Could not read resource file: ~/.rtorrent.rc

[Throttle off/off KB] [Rate 0.0/ 0.0 KB] [Port: 6886] [/bash]

Pour sortir, utiliser <ctrl-q>.

Il faut donc créer un fichier « .rtorrent.rc » qui contiendra la configuration.

Un fichier exemple se trouve dans /usr/share/doc/rtorrent/examples. Recopions le dans notre dossier personnel.

[bash] $ cp /usr/share/doc/rtorrent/examples/rtorrent.rc ~/.rtorrent.rc
[/bash]

Je l’édite (avec Vi ou votre éditeur habituel) :

[bash] didier@mc-188-165-47-126:~$ vi .rtorrent.rc

# This is an example resource file for rTorrent. Copy to

# ~/.rtorrent.rc and enable/modify the options as needed. Remember to

# uncomment the options you wish to enable.

# Maximum and minimum number of peers to connect to per torrent.

#min_peers = 40

#max_peers = 100

# Same as above but for seeding completed torrents (-1 = same as downloading)

#min_peers_seed = 10

#max_peers_seed = 50

# Maximum number of simultanious uploads per torrent.

#max_uploads = 15

# Global upload and download rate in KiB. "0" for unlimited.

download_rate = 25000

upload_rate = 25000

# Default directory to save the downloaded torrents.

#directory = ./

directory = ~/rtorrent/download

# Default session directory. Make sure you don’t run multiple instance

# of rtorrent using the same session directory. Perhaps using a

# relative path?

#session = ./session

session = ~/rtorrent/session

# Watch a directory for new torrents, and stop those that have been

# deleted.

#schedule = watch_directory,5,5,load_start=./watch/*.torrent

#schedule = untied_directory,5,5,stop_untied=

schedule = watch_directory,15,15,load_start=~/rtorrent/torrent_active/*.torrent

schedule = untied_directory,5,5,stop_untied=

# Close torrents when diskspace is low.

#schedule = low_diskspace,5,60,close_low_diskspace=100M

# Stop torrents when reaching upload ratio in percent,

# when also reaching total upload in bytes, or when

# reaching final upload ratio in percent.

# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0

#schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"

# The ip address reported to the tracker.

#ip = 127.0.0.1

#ip = rakshasa.no

# The ip address the listening socket and outgoing connections is

# bound to.

#bind = 127.0.0.1

#bind = rakshasa.no

# Port range to use for listening.

#port_range = 6890-6999

# Start opening ports at a random position within the port range.

#port_random = no

# Check hash for finished torrents. Might be usefull until the bug is

# fixed that causes lack of diskspace not to be properly reported.

#check_hash = no

check_hash = yes

# Set whetever the client should try to connect to UDP trackers.

#use_udp_trackers = yes

# Alternative calls to bind and ip that should handle dynamic ip’s.

#schedule = ip_tick,0,1800,ip=rakshasa

#schedule = bind_tick,0,1800,bind=rakshasa

# Encryption options, set to none (default) or any combination of the following:

# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext

#

# The example value allows incoming encrypted connections, starts unencrypted

# outgoing connections but retries with encryption if they fail, preferring

# plaintext to RC4 encryption after the encrypted handshake

#

# encryption = allow_incoming,enable_retry,prefer_plaintext

# Enable peer exchange (for torrents not marked private)

#

# peer_exchange = yes

#

# Do not modify the following parameters unless you know what you’re doing.

#

# Hash read-ahead controls how many MB to request the kernel to read

# ahead. If the value is too low the disk may not be fully utilized,

# while if too high the kernel might not be able to keep the read

# pages in memory thus end up trashing.

#hash_read_ahead = 10

# Interval between attempts to check the hash, in milliseconds.

#hash_interval = 100

# Number of attempts to check the hash while using the mincore status,

# before forcing. Overworked systems might need lower values to get a

# decent hash checking rate.

#hash_max_tries = 10[/bash]

Je dois créer les sous-dossiers pour rtorrent dans mon dossier /home/didier :

[bash] didier@mc-188-165-47-126:~$ mkdir rtorrent

didier@mc-188-165-47-126:~$ cd rtorrent

didier@mc-188-165-47-126:~/rtorrent$ mkdir session

didier@mc-188-165-47-126:~/rtorrent$ mkdir download

didier@mc-188-165-47-126:~/rtorrent$ mkdir torrent_active[/bash]

Une fois lancé, rtorrent va monitorer le dossier « /home/didier/rtorrent/torrent_active » et démarrer automatiquement le download s’il trouve un fichier « .torrent ».

je redémarre « rtorrent » :

[bash]didier@mc-188-165-47-126:~$ rtorrent[/bash]

Cette fois, plus de message d’erreur 😉

Pour le moment, aucun partage de fichiers ne se fait. Il faut pour cela que j’ajoute un fichier .torrent dans le dossier « torrent_active ».

Pour Ubuntu 10.10, je trouve ces torrents dans la page Alternative download.

Je choisi de participer au partage de la version Desktop i386.

Depuis mon pc de travail et d’un navigateur (Firefox ou Chrome par exemple), je sélectionne « Copier l’adresse du lien » avec un click droit de la souris.

Je retourne sur mon serveur, en mode texte. Je vais dans le dossier « torrent_active » et je télécharge le .torrent.

J’ouvre une 2ème session sur ce serveur, pour ne pas interrompre rtorrent.

Ce n’est peut-être pas idéal, mais l’idée ici est partager les ISO d’Ubuntu pendant 1 ou 2 jours, le temps que la pointe de téléchargement soit passée, pas de faire un serveur BitTorrent définitif.

Une possibilité est de démarrer « screen » avant de lancer rtorrent. Si votre session SSH est interrompue, vous ne couperez pas rtorrent.

[bash] didier@mc-188-165-47-126:~$ cd ~/rtorrent/torrent_active

$ wget http://releases.ubuntu.com/maverick/ubuntu-10.10-desktop-i386.iso.torrent

–2010-10-10 15:59:13–

http://releases.ubuntu.com/maverick/ubuntu-10.10-desktop-i386.iso.torrent

Resolving releases.ubuntu.com… 91.189.88.32,

Connecting to releases.ubuntu.com|91.189.88.32|:80… connected.

HTTP request sent, awaiting response… 200 OK

Length: 28076 (27K) [application/x-bittorrent]

Saving to: `ubuntu-10.10-desktop-i386.iso.torrent’100%

[======================>] 28,076 –.-K/s in 0.01s

2010-10-10 15:59:14 (1.86 MB/s) – `ubuntu-10.10-desktop-i386.iso.torrent’

saved [28076/28076]

J’ajoute un autre lien .torrent pour la version Amd64.

[/bash]

J’ajoute un autre lien .torrent pour la version Amd64.

Je vais dans mon autre session SSH. Le téléchargement a bien commencé.

[bash][View: main]ubuntu-10.10-desktop-i386.iso

done 693.2 MB Rate: 406.4 / 0.0 KB Uploaded: 1019.3 MB [T R: 1.47]

ubuntu-10.10-desktop-amd64.iso

404.3 / 695.0 MB Rate: 80.2 / 345.3 KB Uploaded: 170.5 MB [56%] 0d 0:14 [T R: 0.42][/bash] Lorsqu’un téléchargement se termine, rtorrent contrôle le fichier :

[bash]* ubuntu-10.10-desktop-amd64.iso

* [OPEN] 177.5 / 695.0 MB Rate: 31.5 / 0.0 KB Uploaded: 229.3 MB [T R: 0.00]

* Hashing: Checking hash [27%][/bash] Mais la vitesse est loin d’être aussi géniale que prévue … 🙁

J’arrive seulement à 400 KBytes/sec, càd environ 3,2 à 3,5 Mbits/sec…

J’ai fait cet essais sur un serveur miniCloud d’ OVH.

Cela ne veut pas dire que les miniCloud ne soient pas performant, mais j’ai pris pour mes essais le miniCloud le plus petit, avec 256 MB de mémoire. Il me coût € 0,01 par heure de fonctionnement, ce qui ferait € 7,20 par mois si je le laissais tourner 24h/24.

Il est clair que je n’ai pas le maximum de performance pour ce prix. Les 256 MB de mémoire sont probablement limitatifs car lors du partage d’un fichier de 700 MB, rtorrent peut aller chercher des morceaux partout dans les 700 MB, d’où accès disque multiples et ralentissement..

Je réessaye sur un Kimsufi :

Sur ce Kimsufi, j’ai 4 GB de mémoire, ce qui devrait lever le problème de pagination (je suppose, je n’ai pas analyser en détail)

Je refais l’installation de rtorrent, et je réessaye les mêmes partages d’ ISO Ubuntu 10.10.

[bash]*** rTorrent 0.7.9/0.11.9 – ks321321.kimsufi.com:8218 ***

[View: main]

ubuntu-10.10-desktop-i386.iSO

657.3 / 693.2 MB Rate: 179.5 / 7202.1 KB Uploaded: 25.4 MB [90%] 0d 0:00 [T R: 0.04][/bash] La vitesse de download est très largement supérieure !

7,2 MBytes/sec, soit environ 72 à 80 Mbits/sec sur l’interface réseau. C’est une interface FastEthernet à 100 Mbps. Elle est donc ici très proche de son maximum. Une interface Ethernet n’est jamais utilisable à 100%.

J’ai vu des messages de ce genre :

[bash]Tracker[0:0]: Connecting to http://torrent.ubuntu.com:6969/announce[/bash]

Et parfois ce message :

[bash]Tracker: [Couldn’t resolve host name][/bash]

rtorrent se connecte à plusieurs serveurs pour publier ses trackers pour permettre aux utilisateurs de télécharger ses fichiers. C’est normal. Il semble juste qu’un des serveurs essayé n’existe plus.

Voici ce que cela donne avec le partage de 7 fichiers ISO Ubuntu, après un certain temps :

[bash]*** rTorrent 0.7.9/0.11.9 – ks308166.kimsufi.com:8218 ***

[View: main]

ubuntu-10.10-desktop-i386.iso

done 693.2 MB Rate: 1014.5 / 0.0 KB Uploaded: 4639.3 MB [T R: 6.69]

ubuntu-10.10-desktop-amd64.iso

done 695.0 MB Rate: 483.6 / 0.0 KB Uploaded: 5572.6 MB [T R: 8.02]

ubuntu-10.10-server-amd64.iso

done 41.5 MB Rate: 94.0 / 0.0 KB Uploaded: 2124.0 MB [T R: 3.31]

Tracker: [Couldn’t resolve host name]

ubuntu-10.10-server-i386.iso

done 627.3 MB Rate: 199.5 / 0.0 KB Uploaded: 1946.2 MB [T R: 3.10]

Tracker: [Couldn’t resolve host name]

* ubuntu-10.10-alternate-amd64.iso

* done 694.0 MB Rate: 1561.7 / 0.0 KB Uploaded: 3782.0 MB [T R: 5.45]

*

ubuntu-10.10-alternate-i386.iso

done 692.6 MB Rate: 1989.1 / 0.0 KB Uploaded: 4397.3 MB [T R: 6.35]

ubuntu-10.10-netbook-i386.iso

done 695.9 MB Rate: 184.9 / 0.0 KB Uploaded: 1325.4 MB [T R: 1.90] [Throttle off/off KB] [Rate 5532.4/ 8.5 KB] [Port: 6954] [U 112/0] [D 0/0] [H 0/32] [S 5/351/768] [F 7/128][/bash] La vitesse est nettement supérieure, puisque j’atteins ici sur les 7 fichiers, un total de 5,5 Mbytes/sec, soit une utilisation de l’interface réseau de près de 50 Mbits/sec.

La limitation de vitesse dans le fichier paramètre n’était pas active à ce moment là.

charge réseau : en haut l’upload vers les utilisateurs
en bas le téléchargement initial de mes ISO Ubuntu 10.10

C’est très correct pour un serveur tel qu’un Kimsufi et pour une interface 100 Mbps, qui n’est de toute façon jamais utilisable à 100%.

Sur mon serveur, je vais réduire la vitesse pour ne pas trop ralentir les sites Web hébergés.

Dans l’interface texte de rtorrent, plusieurs commandes sont intéressantes :

  • a / s / d : Augmente le taux en envoi de 1 / 5 / 50 Ko
  • A / S / D : Augmente le taux en réception de 1 / 5 / 50 Ko
  • z / x / c : Diminue le taux en envoi de 1 / 5 / 50 Ko
  • Z / X / C : Diminute le taux en récption de 1 / 5 / 50 Ko
  • ctrl-q pour quitter rtorrent. Dans la configuration actuelle, cela arrête donc le partage de fichiers

Le choix de ces raccourcis se comprend mieux sur un clavier Qwerty, mais ça fonctionne de toute façon 😉

Pour une documentation plus complète et une utilisation en daemon, je vous conseille la lecture des « man pages » (man rtorrent) et la très bonne documentation d’ Ubuntu-fr.org. 😉

L’équipe de WebActus.net vous propose tous les jours des articles sur l’univers des startups, du e-commerce et du growth hacking.

  • imad

    J’ai bien peur qu’il soit just une client torrent , ce n’est en aucun cas un serveur torrent 🙂

    • J »ai pris ce que j’ai trouvé rapidement, disponible dans les dépôts Ubuntu, et que j’ai pu faire fonctionner facilement.

      C’est un client en ligne de commande, mais ça fonctionne.
      Le but était de distribuer en Bittorrent les ISO d’ Ubuntu le soir de la sortie, pas de laisser tourner pendant des semaines.

      ça m’a quand même permis de servir des dizaines de Gigabytes d’ ISO Ubuntu, donc pour moi, rTorrent a rempli son rôle 😉

      Tu proposerais quoi comme « vrai » serveur Bittorrent ?

  • imad

    oui je comprends , merci pour ce tuto. ce que je peut proposer par contre comme traker et qui open source c’est PHPBTTracker+ ou bien BtiTracker . je dois choisir un des deux et le metre en place prochainement . mais j’ai bien peur que ce soit délicat donc si vous pouvez devlopper un autre tuto ici prochainement je serai preneur 😉

    merci pour votre travail et bonne continuation

  • Ranouf

    Bonjour, merci pour ton tuto, par contre une fois le telechargement terminé, mon upload reste à 0 ….
    Je pense que ça viendrait de iptables, j’ai pourtant ajouté:

    iptables -A INPUT -p tcp –dport 6890:6999 -j ACCEPT

    iptables -A OUTPUT -p tcp –dport 6890:6999 -j ACCEPT

    iptables -A INPUT -p udp –dport 6890:6999 -j ACCEPT

    iptables -A OUTPUT -p udp –dport 6890:6999 -j ACCEPT

    Mais rien n’y fait, aurais-tu une idée?

    • Pour vérifier que c’est bien iptables, il suffit de les ouvrir et voir si cela fonctionne.

      Après je regarderais plus du coté du NAT et du port forwarding pour voir si rien n’est bloqué.

Rejoignez la communauté Webactus

Recevez régulièrement les meilleures actus et ressources

Pas de spam, vous pouvez vous désabonner à tous moment.