Entropy Logo

Anwendungen

[Home]
[Einführung]
[Schnappschüsse]
[Downloads]
[CVS]
[Kompilieren]
[HOWTO]
[Anwendungen]
[P2P]
[Mc Eliece]
[Entropy]

[en][English]

Hier will ich einige Freenet Clients vorstellen, also Anwendungsprogramme, die auf das Freenet Client Protocol aufsetzen. Da Entropy ebenfalls das Freenet Client Protocol implementiert, funktionieren diese Programme auch mit Entropy - lediglich die FCP Portnummer muss vom Freenet Defaultwert 8481 auf den Entropy Defaultwert 8482 angepasst werden. Alternativ, wenn man Freenet nicht (gleichzeitig) nutzt, kann man natürlich auch in entropy.conf den fcpport=8481 eintragen.

Samizdat

Samizdat ist ein NNTP über Entropy (und Freenet) Daemon. Das bedeutet, man kann seinen News-Reader auch mit Entropy (oder Freenet) nutzen. Dazu trägt man im News-Reader einfach als News-Server localhost ein, als Port (oder Service) die Nummer 1119 (normalerweise ist es 119, das ist aber eine privilegierter Port) und denkt sich eine Phatasie-E-Mail Adresse und/oder Namen aus. Danach kann man, wenn die Daemons samizdat und samizdat-nntp laufen, dann mit seinem News-Reader die konfigurierten Gruppen abonnieren, neue Messages abrufen und eigene schreiben oder antworten. Samizdat übernimmt im Hintergrund die Aktivitäten des Abholens von neuen Messages und des Einfügens von geposteten Beiträgen.

Samizdat findet sich, wie Entropy, auf unserem CVS Server unter dem Modulnamen samizdat. Wer nicht mit CVS auf den neuesten Stand kommen will, findet hier auch einen tarball und für die Windows-Nutzer, die keine Compiler-Umgebung mit CYGWIN installiert haben, gibt es ein vorkompiliertes Binary der letzten Version:
samizdat-0.95.tar.gz, 108.3K Bytes, Datum 2003-09-06 20:18:53.
Windows: samizdat-0.95.zip, 162.7K Bytes, Datum 2003-11-01 21:16:32.

Frost

Frost ist ein Java Programm, das eine Mischung aus Messageboard (vergleichbar mit Diskussionsforen) und Datei Up- und Download bereitstellt. Es gibt auch eine Suchfunktion. Anders als bei P2P Programmen wie Gnutella, E-Donkey, Morpheus/Kaazaa läuft diese Suche allerdings nur auf dem eigenen Rechner, nicht über das Netz.

Daher muss der eigene Node zunächst die Dateilisten (sog. Index Dateien) empfangen haben, bevor eine Suche Erfolg bringen kann. Kurz gesagt, nach dem Start von Frost sollte man zunächst eine Zeit warten und die Log-Ausgaben im Textfenster beobachten. Auch die Texte auf den Boards werden sozusagen reihum empfangen und es dauert, je nach Anzahl der eingetragenen Boards, eine ganze Weile, bis Frost einmal durch die Liste hindurch ist.

Frost ist verfügbar auf http://jtcfrost.sourceforge.net/. Eine ältere ZIP Datei, die (nur) JDK1.3.1 voraussetzt, ist auch hier verfügbar:
frost.zip, 291.7K Bytes, 2002-11-12 22:03:52

Der Aufruf erfolgt, bei installiertem Java (J2RE oder J2SDK) einfach mit:

java -jar frost.jar

Die Java 2 Runtime oder das Development Kit findet man z.B. bei Sun: http://java.sun.com/j2se/downloads.html. Die J2SE 1.2.x sollte genügen, man kann aber auch 1.3.1 oder 1.4.x probieren. Soweit ich weiss ist JRE/JDK 1.1.8 nicht ausreichend, weil Frost einige Dinge aus der Swing Bibliothek von Java 2 verwendet.

Danach sollte man zunächst im Optionsmenü die Portnummer für FCP auf 8482 ändern. Nach einigen Minuten (u.U. auch erst nach längerer Zeit, je nach Netzwetterlage) sollten dann die ersten Nachrichten gefunden werden und dann auch Dateien.

Ein abschliessender Tip: Bei der Suchfunktion funktioniert neben Wildcards (* als Platzhalter für irgendwas) auch die Sonderfunktion *age1, *age2 usw. für Dateien, die in den letzten 1, 2 usw. Tagen hochgeladen wurden.

goFrost (Good Old Frost)

goFrost ist ein "fork" basierend auf einer älteren Version von Frost. Er ist geschrieben von einem gewissen Anonymous und wurde im Entropy-Netz bereitgestellt. Die Quellen sind mit im Archiv, man kann (und sollte) sich also ansehen, was man da startet:
gofrost_beta_1.0w.zip, 603.4K Bytes, 2005-06-23 17:47:36
MD5: 15ff50bfc275655b54a256056aafeda2
SHA1: dedccca4ad72c5817b6193aae70018ee158cd88c

Hier ist das Original-Posting vom "test" Board:

board=test
from=Anonymous
subject=Re: gofrost_beta_1.0i.zip and rar
date=2003.12.27
time=16:33:17GMT
--- message ---
----- Anonymous ----- 2003.12.27 - 16:26:36GMT -----

Hello,
we've testing the goFrost-Application on the Entropy Net and it seems to work
well. 
So we offering it now. The gofrost.jar include all sources!
we are hopefull that we haven't include much bugs inside our first announce.
Please give us a try and some responds if it works for you.

**************************************************************************
install the goFrost beta 1.0i:
put the goFrost.jar and the run_goFrost.bat in old your goFrost directory
or just use the extracted folder of the goFrost beta 1.0i, it included all
nessesarys

Linux:

#--------------linux start script for goFrost.jar-----------------
#!/bin/sh
	
java -cp .;gofrost.jar org.freenet.gofrost.frost "$@"
or
java -cp .;gofrost.jar org.freenet.gofrost.frost logoff "$@"
#------------------------------

the gofrost.jar include all sources
thx and bye
==================================================
board gofrost-announce 
publicKey SSK@XGfp0S0JsuxE4YFCwp8KMrNkqotPAgM
board gofrost  (unkeyed!)
===============================================================
****************************************************
gofrost_beta_1.0i.zip	
486420	
2003.12.27	
CHK@_lo2ip1p_~o_yRO12DGazIu6oiDAakP,zQId24ckYYImxfnYI34FjC	
gofrost-announce

md5: a532c9192c7fe16456571aa2ea7f4afa
****************************************************
gofrost_beta_1.0i.rar	
477584	
2003.12.27	
CHK@x0LVAKOApKTtbtFJ14BJVsD1QxKAakP,c6JA0lI1Z5XmSe8iJ7FM3D	
gofrost-announce

md5: 40bdff35a03aecc401b763b595421945
****************************************************

btw:
please, if you knowing how to compile a java-app than extract the
jarfile, remove *.class and *.nbattrs (Netbeans) and compile the
source by your self.
sorry, there is no buildscript at the moment!

<attached>gofrost_beta_1.0i.rar *
CHK@x0LVAKOApKTtbtFJ14BJVsD1QxKAakP,c6JA0lI1Z5XmSe8iJ7FM3D</attached>
<attached>gofrost_beta_1.0i.zip *
CHK@_lo2ip1p_~o_yRO12DGazIu6oiDAakP,zQId24ckYYImxfnYI34FjC</attached>

Freenet Tools

Die wichtigsten Werkzeuge für denjenigen, der eigene Inhalte in Form von Webseiten ins Netz einfügen will, sind die Freenet Tools. Es gibt für das Freenet Projekt solche Programme (zu finden auf http://freenetproject.org), die aber in letzter Zeit sehr instabil waren und sich zuletzt nicht einmal mehr kompilieren ließen (auf meinem FreeBSD). Daher habe ich eigene Tools geschrieben, die im Wesentlichen dasselbe machen, allerdings deutlich einfacher und kürzer sind -- und: ich verstehe sie und kann sie pflegen :-)

Die aktuelle Version dieser Tools ist auf meinem CVS Server zu finden. Für das erste checkout der Freenet Tools müsst Ihr zunächst einmal eingeloggt sein:

cvs -d :pserver:anonymous@stop1984.com:/home/cvs login

Das Kennwort ist leer, also einfach Enter drücken und danach mit

cvs -z2 -d :pserver:anonymous@stop1984.com:/home/cvs co ft

das Verzeichnis ./ft empfangen. Künftige Updates funktionieren dann, genau wie bei Entropy selbst auch, mit einem Wechsel in dieses Verzeichnis (ft) und dem simplen CVS Kommando:

cvs -z2 up -dAP

und einem anschliessenden:

make

Nach der Übersetzung des einzigen Binaries ft legt der Makefile auch einige symbolische Links auf dieses an:

  • fcphello (oder auch ft hello)

    Dieses Kommando schickt einfach ein ClientHello an den Entropy (oder Freenet) Node und zeigt dessen Antwort an. Bei Entropy nicht vergessen, dass in der Defaulteinstellung der FCP-Port 8482 ist, also das Kommando

    ./fcphello -p 8482
    
    
    lauten muss. Wer nicht Freenet gleichzeitig benutzt sollte sich aber überlegen, ob er die fcpport= Zeile in entropy.conf nicht auf 8481 umstellt (oder alternativ ganz oben in ftmain.c den Default Port auf 8482 ändert).

  • fcpkey (oder auch ft key)

    Es wird ein Schlüsselpaar erzeugt, das aus einem privaten und einem öffentlichen Schlüssel besteht. Ein solches Schlüsselpaar wird benötigt, wenn man Daten verteilen will, die niemand manipulieren können soll oder wenn man Namenskollisionen vermeiden will.

    Auch für das Einspielen einer ganzen Entropy Site mit mehreren Dateien wird ein solches Schlüsselpaar, bzw. eigentlich nur der private Schlüssel, gebraucht.

    Wer mit Entropy experimentieren will, sollte sich einmal ein solches Schlüsselpaar erzeugen und dann z.B. die zwei Schlüssel in zwei Dateien speichern (nur den Schlüssel, ohne den Text davor), die z.B. mykey.sec (für secret) und mykey.pub (für public) heissen könnten.

  • fcpchk (oder auch ft chk)

    Dieses Kommando errechnet den Key einer lokalen Datei. Da dies immer der Content Hash Key ist (der Schlüssel über den Inhalt der Datei) beginnt der Schlüssel immer mit CHK@. Wer z.B. den CHK@ Key eines Textes test.txt wissen will, gibt folgendes ein:

    ./fcpchk -p 8482 test.txt
    
    
    Die Ausgabe ist in der Form SUCCESS: freenet:CHK@xxxxxxxxxxxxxxxx,yyyyyy, wenn der Node aktiv und erreichbar ist. Wenn hier eine Fehlermeldung erscheint, gibt es ein grundlegendes Problem und man sollte den Entropy logfile zu Rate ziehen. Weitere mögliche Aufrufparameter erfährt man durch Eingabe von ft ohne weitere Parameter.

  • fcpput (oder auch ft put)

    Mit diesem Befehl kann man nun eine einzelne Datei tatsächlich in das Netz einspeisen. Dazu muss man sich entscheiden, unter welcher Art von Schlüsselformat das geschehen soll. Zunächst der Standardtyp: CHK (content hash key):

    ./fcpput -p 8482 CHK@ test.txt
    
    

    Damit wird der Inhalt der Datei test.txt ins Entropy-Netz (oder Freenet ;) eingefügt und danach der sich ergebende CHK@ Schlüssel in der Form SUCCESS: freenet:CHK@xxxxxxxxxxxxxx,yyyyyyy angezeigt. Möglich ist auch eine Meldung in der Form KEYCOLLISION: freenet:CHK@xxxxxxxxxxxxxx,yyyyyyy die besagt, dass der Inhalt der Datei bereits im data store vorhanden war. Das kann von einem früheren Versuch sein oder auch deswegen, weil jemand anders exakt diese Daten ins Netz gestellt hat (unwahrscheinlich, aber bei einem Text wie z.B. gpl.txt immerhin möglich). Nun sind CHK@ Schlüssel unhandlich und lang und man wird sie nur selten zur direkten Weitergabe von Links auf Daten (etwa per Mail oder auf Messageboards) weitergeben. Es sei denn, es geht gleichzeitig darum, die Authentizität der Datei sicherzustellen: ein CHK@ ist nicht manipulierbar. Zur Erleicheterung im Alltagsgebrauch gibt es die Namesschlüssel oder key signed keys, die sowohl bei Freenet als auch bei Entropy an einem vorangestellten freenet:KSK@ zu erkennen sind. Bei fcpput kann man diesen Teil auch weglassen und nur einen Namen angeben, wie z.B.

    ./fcpput -p 8482 pullmoll_test.txt test.txt
    
    

    Nun wird ebenfalls ein CHK@ Key für den Inhalt der Datei erzeugt, aber es wird gleichzeitig eine Weiterleitung von dem Schlüssel, der sich aus dem Namen pullmoll_test.txt ergibt auf diesen CHK@ ins Netz eingefügt. Die Ausgabe bei Erfolg lautet hier SUCCESS: freenet:KSK@pullmoll_test.txt. Es genügt für den Abruf, wenn man wieder nach pullmoll_test.txt fragt, weil die Weiterleitung auf den eigentlichen CHK@ Schlüssel vom Node automatisch erkannt und ausgeführt wird. Die Sache hat, wie einfache Dinge so oft, natürlich Nachteile:
    1.) Kann es zu Kollisionen der Namen kommen. Wenn 100 Leute eine Datei mit dem Namen test.txt hochladen, welche wird man dann erhalten, wenn man test.txt abruft? Es ist Glückssache. Je nachdem welche Daten man auf dem eigenen Node und seinen Nachbarn zuerst erwischt bekommt man eine der Dateien (oder auch keine, bei mieser Netzwetterlage).
    2.) Kann es zu absichtlichen Fälschungen kommen. Wenn jemand mich ärgern will, bzw. alle Entropy Nutzer, dann versucht er bekannte KSK@ z.B. mit unsinnigen Daten zu überschreiben. Das funktioniert zwar nur dann, wenn er über genügend Verbreitungsmöglichkeiten verfügt, aber es ist ein Schwachpunkt.

    Aus diesen Gründen gibt es die dritte Möglichkeit, eine Datei unterhalb eines sogenannten sub space keys oder kurz SSK@ ins Netz zu stellen. Ein solcher SSK@ besteht beim Einspielen ins Netz aus den Zeichen SSK@ gefolgt von einem privaten Key, der mit fcpkey erzeugt wurde. Ein Beispiel:

    ./fcpput -p 8482 SSK@aqV2~Ew1jOrazVHb1vm7DfsAhtI/test.txt test.txt
    
    

    Die Ausgabe in diesem Fall würde lauten SUCCESS: freenet:SSK@iTV3kdFS6RsaNzL~UEmWhFrk0PqBCMA/test.txt. Wieso dieser abweichende Schlüssel in der Ausgabe des Ergebnisses? Nun, das ist der zum angegebenen private oder secret key gehörende public key. Niemand, der nicht den private key kennt kann unter demselben sub space (also demselben Unterbereich) etwas veröffentlichen. Es ist sozusagen ein privater Bereich in Entropy, der nur mit dem privaten Schlüssel für das Schreiben zugänglich ist, den aber jeder andere über den public key abrufen kann.

  • fcpget (oder auch ft get)

    Mit fcpget oder ft get lassen sich, ähnlich wie über den HTTP Gateway auf http://127.0.0.1:9999/ Dateien aus dem Netzwerk herunterladen. Dabei werden die verschiedenen Schlüsseltypen wie bei fcpput unterstüzt. Ein Beispielaufruf wäre also:

    ./fcpget -p 8482 SSK@iTV3kdFS6RsaNzL~UEmWhFrk0PqBCMA/test.txt abc.txt
    
    

    Dabei würde also die Datei, die wir vorhin mit einem private key ins Netz eingefügt haben nun unter ihrem public key gesucht, geladen und dann in die lokale Datei abc.txt abgespeichert. Man muss durchaus nicht denselben Namen verwenden, den die Datei im Entropy Netz hat. Bei einem CHK@ Schlüssel wäre der Dateiname auch sehr unhandlich.

    Es ist auch möglich, eine einzelne Datei aus einem sogenannten map space (siehe auch fcpputsite) heraus zu laden. Dabei gibt man die Adresse des map space bis zum Doppelslash an (also z.B. SSK@MQiiCeXamQ0Jbe7Qs1yGoidbOfgPAgM/pullmoll//) und danach dann den relativen Dateinamen, eventuell auch mit einem Unterverzeichnis. So könnte man z.B. den ersten Screenshot aus dem angegebenen map space so laden:

    ./fcpget -p 8482 SSK@zTUhBCd1OFBS~058O6Wrh39BUJvBCMA/pullmoll//screenshot_1.png s1.png
    
    

    Will man sich den map space selbst einmal ansehen, ruft man fcpget mit dem Parameter -r oder --raw auf. Dadurch wird die interne Weiterleitung der Keys unterbrochen und die Rohdaten (Metadaten) werden stattdessen angezeigt. Beispiel:

    ./fcpget -p 8482 -r SSK@zTUhBCd1OFBS~058O6Wrh39BUJvBCMA/pullmoll//
    
    

    Wenn man also, wie hier, keinen Dateinamen angibt, wird die Ausgabe an stdout (also auf den Bildschirm) gesendet.

  • fcpputsite (oder auch ft putsite)

    Das Kommando fcpputsite ist das bei weitem aufwendigste in dieser Liste. Es dient dazu, einen ganzen Verzeichnisbaum als Entropy Site (oder Freesite - also entsprechend einer Website) ins Netz zu stellen. Man gibt dazu zwei Dinge an:
    1.) Die Basis-URL der Seiten, also einen private key mit vorangestelltem SSK@ sowie einen Site Namen.
    2.) Das lokale Quellverzeichnis, in dem die Dateien liegen. Dort muss wenigstens eine index.html Datei sein, es können aber auch wesentlich mehr Dateien sein, auch in Unterverzechnissen, die von dieser index.html aus angesprochen werden.
    Ein Beispiel:

    
    ./fcpputsite -p8482 SSK@aqV2~Ew1jOrazVHb1vm7DfsAhtI/mysite ~/entropy/mysite
    
    

    Nun würde das lokale Verzeichnis ~/entropy/mysite abgesucht und jede dort vorhandene Datei als CHK@ Schlüssel eingefügt. Die Liste der Dateien wird dann in einem map space zusammengefasst und in der hier angegebenen Form dann unter einem private key der Form freenet:SSK@aqV2~Ew1jOrazVHb1vm7DfsAhtI/XXXXXXXX-mysite gespeichert. Daraus ergäbe sich dann der öffentliche Schlüssel freenet:SSK@iTV3kdFS6RsaNzL~UEmWhFrk0PqBCMA/XXXXXXXX-mysite.

    Der Teil XXXXXXXX- steht dabei für ein Datum, das als 8-stellige Hexadezimalzahl dargestellt wird. Dieses Datum wird dabei in Sekunden seit dem 1.1.1970 00:00:00 Uhr GMT angegeben. Dieses Zeitformat ist auch bekannt als Unix Datum. Es wird in der Grundeinstellung die Anzahl Sekunden Modulo 86400 davon abgezogen.

    Wieso das Ganze? Kurz gesagt handelt es sich bei diesem Vorgang um das sogenannte date based redirect System von Freenet, das auch bei Entropy verwandt wird. Unter dem eigentlichen Schlüssel SSK@iTV3kdFS6RsaNzL~UEmWhFrk0PqBCMA/mysite wird in den Metadaten eine Information gespeichert, dass es sich bei diesem Schlüssel um eine datumsbasierte Umleitung handelt, dass der Offset Wert 0 ist und dass der Increment Wert 86400 ist. Diese 86400 sind übrigens die Sekunden eines Tages :-)

    Der Erfolg der ganzen Aktion besteht nun darin, dass man obwohl ein Schlüssel in Entropy nicht überschreibbar ist (er ist wie eine CD-R nur einmal beschreibbar), unter einer URL jeden Tag eine neue, geänderte Seite finden kann. Zu diesem Zweck verfolgt der interne HTTP Proxy in Entropy diese Art von Weiterleitungen. Er stellt z.B. fest, dass unter dem Schlüssel freenet:SSK@zTUhBCd1OFBS~058O6Wrh39BUJvBCMA/pullmoll ein date based redirect eingetragen ist. Dann konstruiert er für das aktuelle Datum die neue URI, z.B. freenet:SSK@zTUhBCd1OFBS~058O6Wrh39BUJvBCMA/3d51b480-pullmoll und erfährt, dass unter diesem Schlüssel nun ein map space gespeichert ist. In diesem map space ist nun unter anderem der CHK@ Schlüssel der Datei index.html (in der Version für das gegebene Datum) vermerkt. Also lädt der Proxy diesen CHK@ Schlüssel lässt ihn schliesslich vom Webbrowser anzeigen.

    All diese Dinge geschehen für den Anwender in transparenter Weise: er bekommt davon nichts mit. Als Ersteller von Seiten ist es aber wichtig, dieses Prinzip zu kennen. Daraus ergibt sich, dass man eine Seite nur einmal am Tag einspielen kann -- und auch muss, weil sonst für diesen Tag kein Inhalt gefunden wird! Man kann allerdings mit fcpputsite auch schon für die zukünftigen Tage die Daten einfügen, dazu dient der -f oder --future Parameter. Man sollte, zumindest solange man herumprobiert, eine Seite zunächst unter einem Testnamen einspielen und dann auf dem eigenen Node wieder abrufen. Erst wenn das erfolgreich war, sollte man seinen richtigen Sitenamen verwenden - sonst ist zumindest für einen Tag die Seite im Eimer ;-)

    Eine andere Art von Entropy Sites (oder eben Freesites) sind die sogenanntion edition based sites, also Editionen. Zu diesem Zweck verwendet man einfach an einer Stelle der URI, unter der die Site publiziert werden soll, eine Zahl als Versionsnummer. Diese kann man dann bei der nächsten Edition hochzählen und so neuen, geändert Inhalt bereitstellen. Dazu ist es günstig, wenn man vorausschauend in die index.html Datei der Version 1 schon Links zu den zu erwartenden Editionen 2, 3 und vielleicht noch 4 einbaut. Warum? Weil man so dem Nutzer die Möglichkeit gibt, durch einen Mausklick nachzuprüfen ob ein Update vorliegt und z.B. seine Bookmarks anzupassen. Man sollte die nächsten 2 oder 3 Versionen verlinken, weil ja immer etwas schief laufen kann beim Einfügen der neuen Edition und die Kette dann unterbrochen wäre. Die Links auf die Editionen 2, 3 und 4 einer Site edition/1 unter dem oben verwendeten Schlüsselpaar würde also lauten:

    
    

  • fcpdel (oder auch ft del)

    Derzeit noch nicht funktionsfähig ist dieses Kommando, das einen Key aus dem lokalen Datastore löschen soll. Das Freenet Client Protocol definierte den Befehl in einem Updaten vor einiger Zeit, ich konnte ihn aber noch nicht testen und debuggen.

    Bei Entropy gibt es derzeit keine Möglichkeit, einen Key aus dem eigenen Datastore zu löschen.

Der aktuelle Sourcecode der Freenet Tools ist ft-0.2.25.tgz, in diesem 41'201 Bytes gzippten tar-ball vom 2005-07-19 13:57:06. Das Archiv in ein leeres Verzeichnis auspacken und mit make oder gmake übersetzen. Danach eventuell das Binary (ft) und die symbolischen Links in ein Verzeichnis auf dem Suchpfad kopieren.

Zum Schluss hier noch die Windows Binaries, für diejenigen, die die Installation von CYGWIN scheuen: ft-0.2.25.zip ZIP Archiv, 54'478 Bytes vom 2005-07-19 13:45:02. Das Archiv enthält auch eine Kopie der cygwin1.dll.


Entropy Forum - Entropy Chat - Entropy Homepage (WWW)