Tracker fahren

Hier soll erklärt werden, was gemacht werden muss um einenđ (performanten) [http://de.wikipedia.org/wiki/BitTorrent-Tracker#Tracker/ BitTorrentTracker] auf dem [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4102/ ngw100] laufen zu lassen.

Der Tracker spricht [http://de.wikipedia.org/wiki/HTTP/ HTTP] unvollständig, aber das verdammt schnell... Es werden nur announce-URLs und subscribe-URLs verarbeitet. Leider verstehen manche Clientschreiber nicht denn Sinn von HTTP, aus diesem Grund wird jeder Request mit einem korrekten 400 beantwortet, aber es steht halt entsprechend was sinnvolles drin oder nicht... Leider waren wir zu dieser Maßnahme "gezwungen", da manche Entwickler von Clients eine unvollständige HTTP-Bibliothek verwenden. Andernfalls wäre der Tracker nur damit beschäftigt gewesen immer wieder auf "fehlerhafte" Anfragen zu reagieren...

Die Spezifikation vom BitTorrent-Protokoll unter folgender URL zu finden: [http://www.bittorrent.org/beps/bep_0005.html]

Es wird die Eventbibliothek [http://www.fefe.de/libowfat/ libowfat] verwendet um performant Netzwerkevents zu verarbeitet. Ein Tracker ist eigentlich nichts anderes als ein [http://de.wikipedia.org/wiki/Webserver/ Webserver], da hat sich das angeboten :-D.

Benötige Bibliotheken:

Installation

Hier hab ich mir zwei verschiedene Möglichkeiten vorgestellt. Die eine Möglichkeit ist die einfache. Das bedeutet möglichst wenig Arbeit und einen laufenden Tracker ohne Stress. Das ist die sog. lazy Method.

Für die Anderen, die wissen wollen, was hier passiert und lieber alles selber in die Hand nehmen, denen empfehle ich die manual Method.

Lazy Method

TODO!!!

Manual Method

1. Ein Verzeichnis anlegen in dem entwickelt werden soll und dahin wechseln. In diesem Verzeichnis werden die einzelnen benötigten Softwarepakete downgeloadet und entsprechend angepasst.

CODE

$~: mkdir development
$~: cd development

2. [http://www.fefe.de/libowfat/ libowfat] downloaden und in das neu erstelle Verzeichnis wechseln libowfat ist eine schnelle Eventbibliothek von [http://www.fefe.de/ FeFe] (mein Dank hier an Dich). Homepage: [http://www.fefe.de/libowfat/]

CODE:

$~: cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfat
$~: cd libowfat

3. libowfat cross-compilieren [http://www.fefe.de/ FeFe] hat sehr guten Code geschrieben es muss nur im GNUmakefile der entsprechende Compiler eingestellt werden (hier: arv32-linux-gcc).

CODE:

$~: vim GNUmakefile
$~: #In Zeile 18 muss folgendes stehen (ohne Anführungszeichen): "CROSS=arv32-linux-"
$~: make

4. libz downloaden und in das neu erstelle Verzeichnis wechseln libz wird von dem Tracker verwendet um bei Bedarf die HTTP-Requests zu komprimieren. Alles andere was im exceptEndoding drin steht wird schlicht weg nicht gelesen. Es wird sofort beim ersten return gearbeitet und eine Antwort an den Client geschickt und nicht gewartet, bis der HTTP-HEADER zu ende ist. Homepage: [http://www.zlib.net/]

CODE:

$~: mkdir libz
$~: cd libz
$~: wget http://www.zlib.net/zlib123.zip
$~: unzip zlib123.zip

5. libz cross-compilieren libz wird in den Tracker statisch gelinkt. Dementsprechend muss nur das Makefile angepasst werden.

CODE:

$~: vim Makefile
$~: #In Zeile 19 muss folgendes stehen (ohne Anführungszeichen): "CC=arv32-linux-gcc"
$~: make

6. opentracker downloaden und in das neu erstelle Verzeichnis wechseln opentracker ist ein BitTorrentTracker der die beiden oben compilieren Bibliotheken verwendet. Meiner Meinung nach ist das der beste Tracker, den es im Moment gibt (Stand: November 2008). Die Software ist ausgereift und skaliert sehr gut. Homepage: http://erdgeist.org/arts/software/opentracker/ http://opentracker.blog.h3q.com/

CODE:

$~: cvs -d:pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co opentracker
$~: cd opentracker

7. opentracker cross-compilieren Leider hab ich es nicht geschafft das Standard-Makefile so anzupassen, das der passende Compiler verwendet wird. Aus diesem Grund hab ich auf die schnelle die paar Dateien per Hand compiliert und zusammengebaut...

CODE:

$~: avr32-linux-gcc -c -o opentracker.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE opentracker.c
$~: avr32-linux-gcc -c -o trackerlogic.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE trackerlogic.c
$~: avr32-linux-gcc -c -o scan_urlencoded_query.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE scan_urlencoded_query.c
$~: avr32-linux-gcc -c -o ot_mutex.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_mutex.c
$~: avr32-linux-gcc -c -o ot_stats.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_stats.c
$~: avr32-linux-gcc -c -o ot_sync.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_sync.c
$~: avr32-linux-gcc -c -o ot_vector.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_vector.c
$~: avr32-linux-gcc -c -o ot_clean.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_clean.c
$~: avr32-linux-gcc -c -o ot_udp.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_udp.c
$~: avr32-linux-gcc -c -o ot_iovec.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_iovec.c
$~: avr32-linux-gcc -c -o ot_fullscrape.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_fullscrape.c
$~: avr32-linux-gcc -c -o ot_accesslist.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_accesslist.c
$~: avr32-linux-gcc -c -o ot_http.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_http.c
$~: avr32-linux-gcc -c -o ot_livesync.o -I../libowfat -Wall -pipe -Wextra  -Os -DWANT_FULLSCRAPE ot_livesync.c
$~: avr32-linux-gcc -o opentracker opentracker.o trackerlogic.o scan_urlencoded_query.o ot_mutex.o ot_stats.o ot_sync.o ot_vector.o ot_clean.o ot_udp.o ot_iovec.o ot_fullscrape.o ot_accesslist.o ot_http.o ot_livesync.o -L../libowfat -L../libz -lowfat -pthread -lz

8. Das Zeug auf den Controller laden und starten Ich hab auf die schnelle alles via ftp auf den ngw100 geladen und per telnet den Tracker gestartet.

Wenn der Tracker gestartet wird (./opentracker) , dann lauscht er auf der IP 0.0.0.0 und Port 6969. Es wird auf TCP/IP und UPD gelauscht was damit bedeutet, dass auf alles reagiert wird :-D. In der Datei opentracker.conf kann der Tracker parametriert werden. Ein Beispiel für die Konfiguration liegt im opentracker Ordner auf dem Host-Rechner (opentracker.conf.sample)

BitTorrent (zuletzt geändert am 2008-11-26 23:53:25 durch agsb-5d87a5e7)