De:Netzdefinition

Aus YaCyWiki
Wechseln zu: Navigation, Suche

Das YaCy Peer-to-Peer Netz ist vollständig dezentral organisiert und benötigt auch keinen einzelnen zentralen Server um das Netz aufzuspannen.

Network-Bootstrapping

Natürlich muss ein 'neuer' Peer wissen wie er mit den anderen Peers in Kontakt kommt, und dazu gibt es die sogenannte Seed-List. Diese wird für das Network-Bootstrapping von einem Peer im Netz erzeugt, das kann aber jeder Teilnehmer im Netz machen. Ein Peer der so eine Datei erzeugt darf sich 'Principal' Peer nennen und davon kann es meherere geben. Das Netz wird daher tatsächlich von ganz bestimmten Peers definiert, diese kann man aber nicht als 'zentral' betrachten weil das ja jeder Peer prinzipiell machen kann.

Nun muss man sich immer noch fragen wohher ein neuer Peer die Principals des Netzes kennt: diese werden über die Netzdefinitionsdatei des Netzes, das man beitreten will festgelegt. Ein neuer YaCy Peer kann sich prinzipiell verschiedenen Netzen anschliessen, aber damit es nicht zu kompliziert wird liegt jeder Distribution eine Netzdefinitionsdatei des 'freeworld' Netzes bei. Diese befindet sich in defaults/yacy.network.freeword.unit und wird durch das Attribut network.unit.definition in defaults/yacy.init festgelegt. Man muss hierzu nichts an den Konfigurationsdateien anpassen oder ändern damit das funktioniert, ist alles für das freeworld Netz voreingestellt.

Jeder YaCy-User kann aber sein eigenes Netz definieren, wie das geht zeigt dieser Artikel hier im Detail.

Die Vorgänge die beim Bootstraping ablaufen sind:

  • in defaults/yacy.init nach dem Attribut network.unit.definition schauen. Der Wert diese Attributs ist entweder ein Pfad zu einer Datei mit der Netzdefinition oder die URL einer Netzdefinitionsdatei. Beim Freeworld steht hier der Wert defaults/yacy.network.freeworld.unit
  • die defaults/yacy.network.freeworld.unit lesen; darin gibt es das Attribut network.unit.bootstrap.seedlist0, network.unit.bootstrap.seedlist1 u.s.w., welche die URLs von seedlisten bezeichnen
  • die Files aus den Werten von network.unit.bootstrap.seedlist0 (..) werden gelesen. Dort drin stehen sogenannte Peer-Seeds. Dieses sind Kurzinfos über die Peers, darin steht welche IP diese haben und einiges mehr wie Name, Indexgröße und sogenannte Peer-News
  • einige der so akkumulierten Seeds werden genutzt um den betreffenden Peers einen sogenannten 'Peer-Ping' zu schicken. In diesem Ping propagiert der eigene Peer seine eigene Seed-Information, und diese wird von dem angepingten Peer wiederum gespeichert und an weitere Peers weitergegeben.
  • als Antwort auf den Ping schickt der angepingte Peer die neuesten Infos von anderen Peers indem deren Seeds versendet werden. Auf gleichem Weg erfahren dann andere Peers von dem eigenen Peer wenn die so angepingten Peers mit dem neuen Seed Infos weitergeben.

Nachdem also einmal Seed-Listen geladen wurden kann ein Peer sogar ganz ohne das Laden von solchen Peerlisten wieder ins Netz zurückfinden.

Definition des YaCy-Netzes mit yacy.network.unit

YaCy erzeugt im Peer-to-Peer Modus ein Netz von YaCy-Peers die ein Cluster für eine bestimmte Web-Index Domäne definiert. In der Default-Einstellung ist dieses Suchnetz das öffentliche YaCy-Netz, dessen Domäne das öffentliche Internet ist. Das Netz wird durch das Bootstraping definiert, und alle Peers innerhalb des Netzes müssen die gleiche Bootstraping-Information über die Eigenschaften des Netzes haben. Diese Information steht in yacy.network.unit

Die yacy.network.unit - Datei befindet sich in jedem YaCy-Release, wird aus den Settings (yacy.init) mit der Property "network.unit.definition" referenziert und definiert u.a. folgende Properties

network.unit.name = freeworld
network.unit.description = Public YaCy Community
network.unit.domain = global
network.unit.dhtredundancy.junior = 1
network.unit.dhtredundancy.senior = 3
network.unit.bootstrap.seedlist0 = http://www.yacy.net/yacy/seed.txt
network.unit.update.location0 = http://yacy.net/yacy/Download.html

Beim Startup von YaCy wird das Netz wie folgt aufgespannt:

  1. die yacy.init wird geladen: die Property "network.unit.definition" in yacy.init bezeichnet "yacy.network.unit" als Netzdefinition.
  2. yacy.network.unit wird geladen: die Property "network.unit.bootstrap.seedlist0" in yacy.network.unit bezeichnet "http://www.yacy.net/yacy/seed.txt" als Liste von Seeds des Netzes
  3. http://www.yacy.net/yacy/seed.txt wird geladen und die Seeds darin werden in die Seed-DB geladen.
  4. Die Seeds beinhalten Informationen über die letzten bekannten Adressen der Peers

Die Peers dieses Netzes nutzen alle den in yacy.network.unit genannten Namen (network.unit.name) um sich als Teilnehmer des gleichen Netzes zu identifizieren. Die Property network.unit.description ist nur ein frei definierbarer Text der beispielsweise in der Netzgrafik angezeigt wird.

Eine sehr wichtige Information ist die Web-Domäne, die von dem Netz indexiert wird. Die zugehörige Property "network.unit.domain" bezeichnet diese Domäne und kann folgende Werte annehmen:

  • global: nur URLs, die frei zugreifbar sind werden im Index akzeptiert.
  • local: nur URLs, die in einem Intranet zugreifbar sind werden akzeptiert. Dies ist beispielsweise sinnvoll beim Indexieren eines Intranets.
  • any: sowohl lokale als auch globale Adressen werden akzeptiert.

Eine weitere Netz-bezügliche Einstellung ist der Redundanzfaktor, der die Anzahl der Doppelverteilungen eines Indexes innerhalb der DHT angibt. In einem öffentlichen Netz kann die Verfügbarkeit eines Peers nicht sicher gestellt werden und daher ist der Redundanzfaktor 3 (network.unit.dhtredundancy.senior). Bei einem Netz mit hoher Verfügbarkeit kann dieser Faktor auf 1 gesetzt werden.

Wenn alle Peers eines Netzes von einer einzigen Person administriert werden, kann es gewünscht sein das ein automatisches Update aller Peers statt findet. Hierzu muss eine Lokation für den Download definiert sein, und ein Netzbetreiber kann selber eine Lokation angeben, um den Versionsstand bei einem automatischen Update kontrollieren zu können. Hierzu kann die Property "network.unit.update.location0" auf die URL einer Seite, die Links zu Releases beinhaltet gesetzt werden.

Sowohl zu network.unit.bootstrap.seedlist0 als auch zu network.unit.update.location0 können weitere Alternative Adressen angegeben werden; dazu können einfach weitere Properties mit erhöhter Folgenummer im Namen angelegt werden.

Anlage eines eigenen YaCy-Netzes

Die Netzdefinition muss bei allen Teilnehmern eines Netzes gleich sein, und das wird im Standardfall dadurch erreicht, dass sie im Release beiliegt. Ein YaCy-Netzbetreiber kann daran interessiert sein, dass die Netzdefinition nach Aufbau des Netzes nachträglich für alle Peers geändert wird, beipielsweise für erweiterte Sicherheitseinstellungen innerhalb dieser Datei für das Netz. Daher ist die Bezeichnung network.unit.definition der Netzdefinition in yacy.init über eine URL möglich, was wir im folgenden Beispiel nutzen. Der Aufbau eines neuen Netzes besteht aus zwei großen Schritten, zunächst in der Definition des ersten Peers des neuen Netzes und dann im Deploy der weiteren Peers die dem ersten Peer zugeordnet sind.

Konfiguration des ersten Peers eines neuen Netzes

Die Schritte sind:

  • Editieren der yacy.network.unit, beispielsweise um lokale und globale Webseiten indexieren zu können, aber mit der Update-Adresse für neue Releases des globalen Netzes:
network.unit.name = mynet
network.unit.description = Mein erstes eigenes YaCy-Netz
network.unit.domain = any
network.unit.dhtredundancy.junior = 1
network.unit.dhtredundancy.senior = 1
network.unit.bootstrap.seedlist0 = http://www.meindomain.invalid/yacy.myseedlist
network.unit.update.location0 = http://yacy.net/yacy/Download.html
  • Upload dieser Datei, beispielsweise unter http://www.meindomain.invalid/yacy.mynetdef
  • Konfigurieren dieser Definition für jeden Peer vor dem initialen Start-Up indem die Datei yacy.init geöffnet wird, und der Wert
network.unit.definition = http://www.meindomain.invalid/yacy.mynetdef
gesetzt wird. Dies ist nur für die Erstinstallation notwendig, nach weitere Updates der Peers wird dieser Wert konstant bleiben und muss nicht wieder neu gesetzt werden.
  • Nun kann der erste Peer des Netzes gestartet werden. Damit ein zweiter Peer ihn finden kann, muss er seine eigene IP kennen. YaCy nutzt normalerweise den Peer-Ping, um sich von einem anderen Peer seine öffentliche IP nennen zu lassen. Bei dem ersten Peer eines neuen Netzes geht das nicht, da ja noch kein anderer Peer da ist der auf einen Peer-Ping antworten könnte. Statt dessen muss die öffentliche IP über den Menüpunkt http://<addresse_erster_peer>/Settings_p.html?page=ServerAccess die eigene IP zugewiesen bekommen. Über StaticIP kann man diese IP konfigurieren.
  • Der erste Peer muss als Principal Peer operieren, d.h. er muss in der Lage sein eine Seedlist zu erzeugen damit die nachfolgend gestarteten Peers den ersten Peer finden können
    • Unter http://<addresse_erster_peer>/Settings_p.html?page=seed kann die Upload-Adresse für die Seedlist definiert werden. Diese wurde ja nun schon zuvor in yacy.mynetdef eingetragen und lautete http://www.meindomain.invalid/yacy.myseedlist
    • kontrollieren das der Peer den Principal-Status erreicht, d.h. er konnte eine Seedlist erzeugen und den Upload vollziehen.

Konfiguration der teilnehmenden Peers eines neuen Netzes

Sobald der erste Peer läuft, können weitere Peers hinzugefügt werden. Diese laden die seedlist und kontaktieren den Principal, welcher die neue Information wieder durch einen seedlist-upload den nächsten Peers bekannt macht. Damit neue Peers auch automatisch auf das neue Netz zugreift, muss ein besonderes Release mit Einstellungen zu diesem neuen Netz generiert werden. Wurde ein neuer Peer erst mal so korrekt konfiguriert, das er beim neuen Netz teilnimmt, kann er auch mit einem normalen, unveränderten Release aktualisiert werden, ohne das die Netzzugehörigkeit verloren geht. Die Schritte zur Definition des Spezial-Releases sind:

  • Konfigurieren der Netzdefinition in yacy.init:
network.unit.definition = http://www.meindomain.invalid/yacy.mynetdef
  • Weiterhin ist es sinnvoll, die Peers gleich auf automatische Updates zu konfigurieren:
update.process = auto
  • Damit bei Masseninstallationen nicht über das Setup-Menü Passwörter vergeben werden müssen, empfiehlt es sich ein Default-Passwort in der yacy-init einzustellen, ggf. entsprechend folgendem Beispiel:
adminAccount=admin:myS3cr3tPa55w0rd
  • Ist die yacy.init fertig konfiguriert, kann ein eigenes Bootstrap-Release für das eigene Netz einfach durch einpacken des yacy-Verzeichnisses geschehen:
tar cf yacy_mynet.tar yacy

Für ein Massen-Deploy muss dann nur noch die yacy_mynet.tar auf die Rechner des Netzes verteilt und ausgepackt werden. Damit eine permanente Verfügbarkeit der YaCy-Installation sicher gestellt wird, empfiehlt es sich einen Cron-Job zu definieren, der regelmäßig den installierten Peer neu startet. Die /etc/crontab-Datei könnte beispielsweise folgenden Eintrag haben:

0 0 * * * yacyuser /home/yacyuser/yacy/stopYACY.sh
2 0 * * * yacyuser /home/yacyuser/yacy/killYACY.sh
4 0 * * * yacyuser /home/yacyuser/yacy/startYACY.sh -l

vorausgesetzt, YaCy läuft unter dem User 'yacyuser' und das YaCy-Verzeichnis befindet sich im Home-Verzeichnis des yacyuser.