Torrent

Mai 30, 2011·
Julio Batista Silva
Julio Batista Silva
· 9 Min Lesezeit

Beitrag im August 2012 aktualisiert

Hinweis
Dieser Artikel ist inzwischen ziemlich veraltet. Meine aktuelle Empfehlung ist, Docker zu verwenden.

Ohne Zweifel ist Torrent eines der besten Protokolle zum Teilen von Dateien.

Für einen Archivfreund (Data Hoarder) ist es wichtig, einen leistungsfähigen und gut konfigurierten Client zu haben, der Tausende von Torrents verarbeiten kann, ohne viel Speicher zu benötigen.

Meine Lieblings‑Clients für Linux sind Deluge, Transmission und rTorrent. Mit dem ersten hatte ich Probleme, da er mit vielen Dateien (damals etwa 600) nicht gut zurechtkam und oft hängen blieb. Der zweite ist einfacher, aber sehr gut, leicht zu konfigurieren und hat Oberflächen für Gnome und KDE. In diesem Beitrag geht es um den dritten, rTorrent, den Client, den ich derzeit benutze und der am leichtesten, leistungsfähigsten und mit den meisten Konfigurationsmöglichkeiten zu sein scheint.

rTorrent

Hinweis
ACHTUNG: Wenn du Pyroscope verwenden möchtest, überspringe die Installation von xmlrpc, libtorrent und rtorrent. Das Installationsskript von libtorrent installiert diese Pakete automatisch in passenden Versionen.

Installation über den Paketmanager

  1. Installiere rTorrent wie in der Wiki beschrieben:

    sudo pacman -S rtorrent
    

    Das reicht aus, um die neueste stabile Version von rTorrent zum Laufen zu bringen. Für viele ist das genug, aber ich ziehe es vor, die Entwicklerversion zu verwenden.

    Ein weiterer Grund, rTorrent zu kompilieren, ist das Hinzufügen von Patches. Ich benötige ihn als Build mit der Flag --with-xmlrpc-c.

Installation der Abhängigkeiten

  1. Lege ein Verzeichnis für svn an:

      sudo mkdir /srv/svn
    
  2. Setze deinen Benutzer als Eigentümer dieses Verzeichnisses:

      sudo chown -R julio.users /srv/svn
    
  3. Entferne Programme, die per svn installiert werden:

      sudo pacman -R xmlrpc-c rtorrent
    
  4. Installiere CPPUNIT und libsigc++:

      sudo pacman -S cppunit libsigc++
    
  5. Exportiere die Variable PKG_CONFIG_PATH:

      PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
      export PKG_CONFIG_PATH
    
  6. Installiere xmlrpc-c:

      cd /srv/svn
      svn co http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/advanced xmlrpc-c
      cd xmlrpc-c
      ./configure
      make
      sudo make install
    

Installation über Git

AUR

Zum Zeitpunkt der ersten Fassung dieses Beitrags gab es das Paket rtorrent-git im AUR noch nicht. Tatsächlich wurde rTorrent damals im SVN gepflegt. Inzwischen pflegt ein großzügiges Community‑ Mitglied ein Paket unter diesem Link: https://aur.archlinux.org/packages.php?ID=53151. Einfach herunterladen und bauen; der PKGBUILD enthält bereits die Flags, die ich verwende.

Manuell

  1. Lege ein Verzeichnis an, um Programme zu halten, die per git geladen werden:

    [root@julio-acer ~]# mkdir /srv/git/
    julio@julio-acer ~> cd /srv/git
    
  2. Klone das offizielle libtorrent‑Repository

    julio@julio-acer /srv/git> git clone https://github.com/rakshasa/libtorrent
    
  3. Wechsle in das Verzeichnis und kompiliere libtorrent

    julio@julio-acer /srv/git> cd libtorrent
    julio@julio-acer /srv/git/libtorrent> ./autogen.sh
    julio@julio-acer /srv/git/libtorrent> ./configure
    julio@julio-acer /srv/git/libtorrent> make
    julio@julio-acer /srv/git/libtorrent> make check
    
  4. Installiere libtorrent

    julio@julio-acer /srv/git/libtorrent> sudo make install
    
  5. Exportiere die Variable PKG_CONFIG_PATH

    julio@julio-acer ~> export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    
  6. Klone das rTorrent‑Repository

    julio@julio-acer /srv/git> git clone https://github.com/rakshasa/rtorrent
    
  7. Kompiliere rTorrent mit der Option xmlrpc (wird von einigen Oberflächen benötigt)

    julio@julio-acer /srv/git/rtorrent> ./autogen.sh
    julio@julio-acer /srv/git/rtorrent> ./configure --with-xmlrpc-c
    julio@julio-acer /srv/git/rtorrent> make
    
  8. Installiere rTorrent

    julio@julio-acer /srv/git/rtorrent> sudo make install
    

Installation per SVN

UPDATE: Die Entwicklung von rTorrent wurde auf git umgestellt und svn ist nur noch ein Mirror – verwende daher nach Möglichkeit die oben beschriebene Git‑Installation.

  1. Installiere libtorrent:

    cd /srv/svn
    svn co svn://rakshasa.no/libtorrent/trunk rtorrent
    cd rtorrent/libtorrent
    ./autogen.sh
    ./configure
    make
    sudo make install
    sudo ldconfig
    
  2. Installiere rTorrent:

    cd ../rtorrent
    ./autogen.sh
    ./configure - -with-xmlrpc-c (beachte die zwei Bindestriche vor with)
    make
    sudo make install
    

Konfiguration von rTorrent

Die Konfiguration erfolgt über die Datei “~/.rtorrent.rc”. Damit lässt sich rTorrent z. B. so einstellen, dass er

  • einen bestimmten Port‑Bereich verwendet,
  • Download/Upload‑Geschwindigkeiten begrenzt,
  • ein Verzeichnis überwacht und alle dort abgelegten .torrent‑Dateien lädt,
  • nach Abschluss eines Downloads ein Skript ausführt,
  • und vieles mehr …

Auf meinem Notebook funktioniert es so:

  • Alles wird auf einer externen Festplatte gespeichert, die immer angeschlossen ist.

  • Unter /media/externo/Downloads/Torrents/rtorrent/watch gibt es weitere Verzeichnisse:

    • Ebooks » Enthält .torrent von E‑Books
    • Filmes » Enthält .torrent von Filmen
    • Musicas » Enthält .torrent von Alben
    • Seriados » Enthält .torrent von Serien
    • Misc » Enthält .torrent aus allen anderen Kategorien

Diese Ordner werden von rTorrent ständig überwacht. Wenn ich dort eine .torrent‑Datei ablege, beginnt er automatisch mit dem Download in das Verzeichnis /media/externo/Downloads/Torrents/leeching/{Ebooks,Filmes,Misc,Musicas,Seriados}/

Nach Abschluss werden die Dateien verschoben nach /media/externo/Downloads/Torrents/seeding/{Ebooks,Filmes,Misc,Musicas,Seriados}/

  • Lege die Verzeichnisse an:

    mkdir \
      /media/externo/Downloads/Torrents/leeching/{Ebooks,Filmes,Misc,Musicas,Seriados,Programas} \
      /media/externo/Downloads/Torrents/seeding/{Ebooks,Filmes,Misc,Musicas,Seriados,Programas} \
      /media/externo/Downloads/Torrents/rtorrent/sessions \
      /media/externo/Downloads/Torrents/rtorrent/watch/{Ebooks,Filmes,Misc,Musicas,Seriados,Programas}
    

Ich habe sessions und watch ebenfalls auf der externen Festplatte belassen, damit ich sie an einen anderen Rechner mit installiertem rTorrent anstecken und die Transfers fortsetzen kann. Wenn ich etwas ohne die externe Platte herunterladen möchte, brauche ich eine angepasste .rtorrent.rc, da er sonst das sessions‑Verzeichnis nicht findet und nicht startet.

Meine .rtorrent.rc findest du auf GitHub. Ein Großteil stammt von hier.

Magnet URI

rTorrent 0.8.9

Du musst DHT aktivieren.

Speichere das folgende Skript irgendwo (ich nutze hier ~/Scripts/magnet_torrent.sh):

#!/bin/bash

cd /media/externo/Downloads/Torrents/rtorrent/watch/Misc
[[ "$1" =~ xt=urn:btih:([^&/]+) ]] || exit;
echo "d10:magnet-uri${#1}:${1}e" > "meta-${BASH_REMATCH[1]}.torrent"
julio@julio-acer ~> ~/Scripts/magnet_torrent.sh \
   "magnet:?xt=urn:btih:1234567890&dn=Meu+Torrent&tr=udp%3A%2F%2Ftracker.com%3A80&tr=udp%3A%2F%2Ftracker2.com%3A80"

Dieser Befehl erstellt die Datei meta-1234567890.torrent in deinem Ordner.

RuTorrent

rTorrent ausschließlich mit der ncurses‑Oberfläche zu benutzen, ist etwas mühsam. Eine gute Lösung ist eine Web‑GUI zu installieren.

Hier verwende ich ruTorrent, ähnlich der Oberfläche des µtorrent, womit ich Torrents im Web verwalten kann. Dafür müssen Apache und PHP konfiguriert sein.

Teile der Schritte stammen aus dem ArchLinux‑Forum und der ruTorrent‑Wiki.

RuTorrent: Installation über den Paketmanager

  1. Lade das im AUR verfügbare ruTorrent herunter

  2. Lade mod_scgi

  3. Lade ruTorrent-plugins

  4. Installiere geoip

    sudo pacman -S php-geoip
    
  5. Ändere die Berechtigungen des Verzeichnisses

    sudo chmod 777 -R /srv/http/rutorrent/
    
  6. Bearbeite die Apache‑Konfiguration (/etc/httpd/conf/httpd.conf):

    Listen 80
    Adicione ao final da sessão LoadModule:
    LoadModule scgi_module modules/mod_scgi.so
    LoadModule php5_module modules/libphp5.so
    

    Nach # Various default settings füge einen neuen Abschnitt hinzu:

    # php5
    Include conf/extra/php5_module.conf
    Adicione ao final do arquivo:
    SCGIMount /RPC2 127.0.0.1:5000:
    
  7. Schütze das ruTorrent‑Verzeichnis mit einem Passwort

    1. Erzeuge ein Passwort mit htpasswd:

      julio@julio-acer ~> htpasswd -c /home/julio/rtorrent/.htpasswd julio
      New password:
      Re-type new password:
      Adding password for user julio
      
    2. Im Apache:

      <directory /srv/http/rutorrent/>
      AuthName "Log In"
      AuthType Basic
      AuthUserFile /home/julio/rtorrent/.htpasswd
      AuthGroupFile /dev/null
      require user julio
      </directory>
      
  8. In /etc/php/php.ini:

    1. In html_errors auskommentierte Optionen aktivieren:

      • log_errors
      • Default Value: On
    2. Unter Dynamic Extensions aktivieren:

      • extension=curl.so
      • extension=pdo_sqlite.so
      • extension=sockets.so
      • extension=sqlite3.so
      • extension=sqlite.so
      • extension=xmlrpc.so
      • extension=xsl.so
    3. open_basedir ähnlich setzen wie:

      open_basedir = /usr/bin/:/usr/local/bin/:/srv/http/:/home/:/tmp/:/usr/share/pear/:/media/externo/Downloads/Torrents
      
  9. In /etc/php/conf.d/geoip.ini auskommentierte Zeile aktivieren:

    extension=geoip.so
    
  10. Server neu starten

    # /etc/rc.d/httpd restart
    
  11. Installation testen unter http://localhost/rutorrent/

Installation per SVN

  1. Einfach das Repository auschecken

    cd /srv/svn
    svn co http://rutorrent.googlecode.com/svn/trunk/rutorrent/ rutorrent
    
  2. Normal konfigurieren

Plugins

ruTorrent hat einige sehr nützliche Plugins. Ich empfehle:

Throttle

Erlaubt, Download‑ und/oder Upload‑Geschwindigkeit pro Torrent‑Gruppe zu begrenzen.

julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/throttle

Ratio

Erlaubt, das Seeding eines Torrents nach Erreichen eines bestimmten Ratios zu stoppen.

julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/ratio

Track Labels

Fügt jedem Torrent ein Label mit dem Namen des Trackers hinzu.

julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/tracklabel

Pyroscope

PyroScope enthält diverse CLI‑Tools und einige Patches, die die Nutzung von rTorrent deutlich verbessern. Du musst rTorrent nicht wie oben beschrieben installieren, denn das PyroScope‑Skript installiert eine spezielle rTorrent‑Version, rTorrent-extended.

Pyrocore

Am einfachsten über https://aur.archlinux.org/packages/rtorrent-pyro-git/.

Eine andere einfache Variante wäre pyrocore mit pip zu installieren (sudo pip2 install pyrocore), allerdings ist die dortige Version sehr veraltet.

Das gilt auch für die im AUR verfügbare Version.

Es gibt eine weitere Version, die aktueller wirkt, ich habe sie aber nicht getestet.

Auf der Projektseite gibt es ein Tutorial, wie man alles aus dem Quellcode installiert. Hier erkläre ich nur kurz die Schritte; für vollständige und aktuelle Infos siehe die offizielle Seite.

  1. Abhängigkeiten installieren

    julio@acer ~> sudo pacman -S tmux python-virtualenv
    
  2. rTorrent-extended installieren

    julio@julio-acer ~> mkdir ~/src; cd ~/src
    julio@julio-acer ~/src> svn co http://pyroscope.googlecode.com/svn/trunk/pyrocore/docs/rtorrent-extended
    julio@julio-acer ~/src> cd rtorrent-extended
    julio@julio-acer ~/src/rtorrent-extended> ./build.sh all
    julio@julio-acer ~/src/rtorrent-extended> ./build.sh extend
    
  3. Pyroscope installieren

    julio@julio-acer ~> svn checkout http://pyroscope.googlecode.com/svn/trunk/ ~/lib/pyroscope
    

    Falls du Arch Linux verwendest, passe den Pfad zu python2 in ~/lib/pyroscope/update-to-head.sh an:

    PYTHON=${1:-/usr/bin/python2}
    

    Skript ausführen:

    julio@julio-acer ~> ~/lib/pyroscope/update-to-head.sh
    

    ~/bin zum $PATH hinzufügen. Füge folgende Zeile zu .zshrc und .bashrc hinzu:

    export PATH="$HOME/bin:$PATH"
    

    Skript ausführen, um deine .rtorrent.rc auf die neue Syntax umzustellen:

    julio@julio-acer ~> ~/lib/pyroscope/pyrocore/docs/rtorrent-extended/migrate_rtorrent_rc.sh ~/.rtorrent.rc
    

    Ergänze in ~/.rtorrent.rc:

    #################################
    ## PyroScope SETTINGS
    #################################
    method.insert = pyro.extended, value|const, 1
    method.insert = pyro.bin_dir, string|const,
    method.insert = pyro.rc_dialect, string|const|simple, "execute.capture=bash,-c,\"test $1 = 0.8.6 && echo -n 0.8.6 || echo -n 0.8.9\",dialect,$system.client_version="
    method.insert = pyro.rtorrent_rc, string|const|private, "$cat=~/.pyroscope/rtorrent-,\"$pyro.rc_dialect=\",.rc.default"
    import = $pyro.rtorrent_rc=
    schedule = pyro_watchdog,30,300,"pyro.watchdog=~/.pyroscope,"
    
    # Show traffic of the last hour
    network.history.depth.set = 112
    schedule = network_history_sampling,1,32, network.history.sample=
    method.insert = network.history.auto_scale.toggle, simple|private, "branch=network.history.auto_scale=,\"network.history.auto_scale.set=0\",\"network.history.auto_scale.set=1\""
    method.insert = network.history.auto_scale.ui_toggle, simple|private, "network.history.auto_scale.toggle= ;network.history.refresh="
    branch=pyro.extended=,"schedule = bind_auto_scale,0,0,\"ui.bind_key=download_list,=,network.history.auto_scale.ui_toggle=\""
    

    Skript ausführen, um eine Konfiguration zu erzeugen:

    julio@julio-acer ~> pyroadmin --create-config
    
  4. Installation testen

    julio@julio-acer ~> which rtorrent
    /home/julio/bin/rtorrent
    
    julio@julio-acer ~> rtorrent
    

    Der Bildschirm sollte farbig sein. Drücke *, um zwischen collapsed view und expanded view umzuschalten.

    Weitere Tipps findest du hier

Hinweis: Wenn du rTorrent innerhalb von GNU Screen öffnest und er sich über die Farbanzahl deines Terminals beschwert, füge in ~/.screenrc folgende Zeile hinzu: term screen-256color.

Ich hatte bereits Probleme mit dem Installationsskript aufgrund von Versionsinkompatibilitäten. In diesem Fall müsstest du mehrere Pakete downgraden und das Skript erneut ausführen.

.torrent mit mktorrent erzeugen

Neben dem Herunterladen ist es auch wichtig, eigene Dateien zu teilen. In der Unix‑Philosophie der Einfachheit hat rTorrent keine eingebaute Funktion zum Erstellen von Torrents.

Für diese Aufgabe verwende ich mktorrent.

  1. mktorrent installieren

    julio@julio-acer ~ $ sudo pacman -S mktorrent
    
  2. Verschiebe alle zu sendenden Dateien in ein eigenes Verzeichnis.

  3. Führe den Befehl mit den passenden Parametern/Optionen aus

    mktorrent -v -p -a="ANNOUNCE" -c="COMMENT" -n="NAME" -o="OUTPUT.torrent"
    

    Wobei

    • -v für verbose steht
    • -p den Torrent privat macht
    • ANNOUNCE die vom Tracker bereitgestellte URL ist
    • COMMENT ein Kommentar zum Torrent ist
    • NAME der Paketname im Metainfo ist; besser leer lassen, um Ordnerwechsel zu vermeiden
    • OUTPUT der Name der .torrent‑Datei ist

    Beispiel:

    $ mktorrent -v -p -a "http://tracker.url/announce.php?passkey=123456xxxx&uid=xxxxx" -n "Artista - Ano - Album" -c "Original Release" -o album.torrent "Pasta_Ano - Disco"
    mktorrent 1.0 (c) 2007, 2009 Emil Renner Berthing
    
    Options:
    Announce URLs:
    1 : http://tracker.url/announce.php?passkey=123456xxxx&uid=xxxxx
    Torrent name: Artista - Ano - Album
    Metafile: /media/externo/Musicas/album.torrent
    Piece length: 262144
    Be verbose: yes
    Write date: yes
    Web Seed URL: none
    Comment: "Original Release"
    
    Adding cover.jpg
    Adding 01 - Track01.flac
    Adding 02 - Track02.flac
    Adding 03 - Track03.flac
    Adding 04 - Track04.flac
    Adding 05 - Track05.flac
    Adding Artist - Album.log
    Adding Album.cue
    
    236381529 bytes in all.
    That's 902 pieces of 262144 bytes each.
    
    Hashed 902 of 902 pieces.
    Writing metainfo file… done.
    

Wenn wir denselben Befehl zum Cross‑Seeding verwenden, also um dieselben Dateien auf verschiedenen Trackern zu teilen, gibt rTorrent den Fehler “Info hash already used by another torrent” aus. Um das Problem zu lösen und unterschiedliche Hashes zu erzeugen, kann man Folgendes tun:

  1. Beim Erstellen der zweiten .torrent eine Datei hinzufügen oder ändern

  2. Mit -l eine andere Stückgröße festlegen. Beispiel:

    mktorrent -v -p -a "http://tracker.url/announce.php?passkey=123456xxxx&uid=xxxxx" -l 19 -o album_tracker2.torrent "Pasta_Ano - Disco"
    

Das verwendet 512 KB pro Stück.


ruTorrent erlaubt auch eine Multi‑User‑Konfiguration, wobei die Dateien jedes Nutzers in spezifischen Verzeichnissen liegen (rutorrent/share/users/USERNAME/settings/).


iPhone:


Julio Batista Silva
Autoren
Senior Cloud-Entwickler
comments powered by Disqus