IPFS TUTORIAL #0 - Über dezentrales Internet und Vong

in #deutsch6 years ago

Header Image

Moinsen,
in meinen folgenden Posts dreht sich alles um das Thema IPFS. Wir werden uns gemeinsam mit der Theorie und dem Aufsetzen eines IPFS-Nodes auseinandersetzen (dieser Post), um dann in den folgenden Parts mehr über die einzelnen Funktionen und das richtige Nutzen von IPFS zu erfahren.
Es ist notwendig, die Eingabeaufforderung/das Terminal zu nutzen, jedoch setze ich keine besonderen IT-Kenntnisse vorraus. IPFS ist nicht nur für Sys-Admins 😉
Alle IPFS-Befehle sind betriebssystemunabhängig; ich zeige den Betrieb von IPFS als Beispiel auf einem Windowscomputer.
Nichts­des­to­trotz gibt es natürlich auch graphische Lösungen, welche aber aktuell (Feb 2018) meiner Meinung nach nicht ordentlich funktionieren. Trotzdem werde ich auch darauf hinweisen.
Zum Abschluss des Vorwortes möchte ich dazu ermutigen, unter diesem Post gerne Feedback, Fragen und Stoff zum Diskutieren dazulassen. Ich wünsche viel Vergnügen und vor allem viel neues Wissen über das InterPlanetary File System.

Das interplanetare Dateisystem

... oder auch InterPlanetary File System, kurz IPFS, ist zum einen ein Protokoll, zum anderen ein dezentrales Netzwerk zum Dateiaustausch zwischen Computern.
Computer können verschiedene Wege nutzen, um Dateien über das Internet zu senden und zu empfangen, bspw. FTP oder HTTP. Besonders letzteres ist für unseren täglichen Gebrauch essenziell. Du liest diesen Satz dank HTTP. Doch das Hypertext Transfer Protocol ist ineffizient. Laut den IPFS-Entwicklern besteht eine normale Website durchschnittlich nur 100 Tage. Danach wird sie entweder gelöscht oder so bearbeitet, dass sie nicht mehr dem Originalen gleicht. Gleichzeitig ist eine andere Komponente äußerst wichtig: DNS-Server sorgen dafür, dass unser Computer immer weiß, welche Domain (bspw. steemit.com) welcher IP zugeordnet ist (bspw. 34.239.36.39). Sollten diese ausfallen, ist es nicht mehr möglich, Steemit aufzurufen, da der Computer die IP-Adresse nicht kennt.
Keine Sorge, praktisch müsste schon echt viel schiefgehen, damit Steemit nicht mehr erreichbar ist, jedoch ist es keine Unmöglichkeit.
Die Lösung nennt sich IPFS. Dieses Netzwerk setzt komplett auf das sogenannte dezentrale Peer-to-peer System. Auf Deutsch bedeutet dies, dass nicht jeder Rechner immer auf den selben Server zugreift (siehe die IP von vorhin), sondern sich die Daten untereinander austauschen (wie z.B. ein Kettenbrief).

Grafik - Unterschied zwischen HTTP und P2P
Quelle: ipfs.io | Links ein Server, welcher HTTP-Anfragen erhält und ausliefert, rechts IPFS mit Peer-to-peer.

So wird auch bis zu 60% an Datentraffic (und indirekt auch an Strom) gespart.

Von Nodes, Gateways und Daemons

Eine zentrale Rolle im IPFS übernehmen die sog. Nodes. Diese bilden das Grundgerüst, verbinden sich untereinander und tauschen Daten aus. Ohne diese würde das IPFS gar nicht existieren. Ein Node kann von jedem betrieben werden; darum wird sich auch diese Tutorialstrecke zum Großteil drehen.

Indem du ein Node betreibst, hilfst du dem IPFS-Netzwerk zu bestehen.

Und wenn du dich jetzt vielleicht fragst, wer denn bitteschön überhaupt IPFS nutzt, schau dir mal D.Tube oder auch DSound an. Ohne IPFS wäre deren Infrastruktur hoffnungslos überfordert. Durch das Verbreiten der Videos über Nodes werden die Server von D.Tube, DSound u.ä. entlastet und können zuverlässig laufen.
Große Nodes können als globale Gateways fungieren. Das wohl bekannteste Beispiel ist die IPFS-Website (ipfs.io/ipfs bzw. gateway.ipfs.io/ipfs). Diese Gateways sind für die Nutzer gedacht, die selbst keinen Node betreiben, um einen Zugang zum IPFS zu erhalten. Solche Gateways nutzt du normalerweise, wenn du z.B. ein Video über D.Tube schaust. Dein Computer fragt das Gateway, ob es diese Datei ausliefern kann und bekommt es über normales HTTP zur Verfügung gestellt.

Um eine Datei ohne HTTP-Request zu erhalten, muss auf deinem Computer der sog. Daemon laufen. Dieser sucht zum einen für dich nach Dateien im IPFS-Netzwerk, zum anderen stellt er auch die Dateien, die auf deinem Computer liegen, zur Verfügung.
Alle Dateien müssen im Netzwerk erkennbar bleiben. Dafür nutzt IPFS die Hashes. Hashes sind inhaltsabhängige Indikatoren für eine Datei, die von einem IPFS-Node angeboten wird. "Inhaltsabhängig" bedeutet, dass die Datei, egal welchen Dateinamen sie besitzt, immer den selben Hash hat, sofern der Inhalt gleich ist. Wenn du über ein Gateway den Hash QmTfmNRXLvq5eirEDSt5U3ttmpzKiFfJoYseRyD1qhyF8L aufrufst, wirst du immer das selbe Ergebnis vorfinden. Im Originalen heißt die Datei ibims.txt. Im Endeffekt kannst du aber eine steemistbeschte.txt mit dem selben Inhalt erstellen, der Hash bleibt gleich. Dies beugt auch Plagiaten vor 👍

Das IPFS-1x1 - Wie funktioniert eine Abfrage?

Wie nun aber kommt das Gateway zu meiner ibims.txt? Ich habe dem Gateway nie gesagt: "Huhu, guck mal, da liegt eine tolle Datei auf meinem Rechner mit dieser und jener IP-Adresse". Deshalb möchte ich dir hier fix offenlegen, wie so ein Abruf bei dir lokal abläuft.

  1. Nachdem du über Kommandozeile oder lokalem Gateway ein Hash angefordert hast, sucht der Daemon zunächst lokal nach dem Hash.
  2. Hat er diesen nicht gefunden, beginnt er die nächstgelegenen Nodes, mit denen er verbunden ist, via Peer-to-peer anzufragen, ob sie den Hash kennen.
  3. Sollte dies nicht der Fall sein, fragt der Daemon in einem größerem Umkreis nochmal.
  4. Das macht er so lange, bis ein Node entweder durch Meta-Daten weiß, welcher Node diesen Hash resolven (lösen=kennen) kann oder diesen selbst gespeichert hat.
  5. Der Node schickt deinem Node den Inhalt des Hashes.

Weiterhin können auch noch mehrere Teile zu einem Hash gehören, das ist aber ein Thema für später.
Dein Node speichert nun den Inhalt und stellt diesen ebenfalls zur Verfügung. Sollte also ein andere Node deinen Node fragen, ob er die Datei hat, kann dein Node sie ausliefern (genaueres ebenfalls später).

Puh, ganz schön viel Theorie, nicht? Keine Sorge, in den folgenden Parts werden wir alles an Beispielen praktizieren. Damit du aber in Zukunft gleich mitprobieren kannst, will ich dir im letzten Abschnitt erklären, wie du deinen eigenen Node einrichten kannst (und du kannst gleich mitmachen).

DIY-Blog | Heute: IPFS-Node einrichten

  1. Erstelle dir auf deiner Festplatte einen Ordner deiner Wahl (für die komplette Tutorialreihe nutze ich den Ordner IPFS/go-ipfs auf der J: Partition (nur, damit du die Screenshots auch richtig verstehst). Der Ordner sollte am besten auf der obersten Ebene (also direkt J: o.ä.) liegen, damit wir später einfacher mit der Konsole zum Ordner navigieren können.
  2. Öffne in deinem Webbrowser ipfs.io/docs/install
  3. Klicke auf den Downloadbutton.
    enter image description here
  4. Der Webserver sollte dein System automatisch erkennen. Wenn nicht, wähle dein System in der Tabelle unten aus.
    dsit.ipfs.io
  5. Downloade dir das Archiv und entpacke es in den IPFS-Ordner aus Schritt 1.
  6. Öffne nun deine Kommandozeile
  • Windows: Windowstaste drücken -> cmd eingeben
  • Linux: Strg+Alt+T drücken
  • Mac: Command + Leertaste -> Terminal eingeben.
  1. Zum Ordner navigieren. Dies ist je nach Betriebssystem unterschiedlich. In Windows machst du dies mit dem cd DER/PFAD/ZU/IPFS Befehl. Wenn du ein anderes OS und Probleme hast, frag einfach in den Kommentaren.
  2. Nun zum Test erstmal nur ipfs eingeben und mit Enter abschicken. Wenn du nun eine Auflistung von Befehlen siehst, bist du schonmal richtig.
  3. Nun mit ipfs init den Node initialisieren (u.U. ist das vorherige Ausführen der install.sh nötig, bei Windows nicht).
  4. Et voilà. In fast 10 Schritten bist du nun stolzer Besitzer eines Nodes mit der entsprechenden ID.

CLI Init Screenshot

Ich empfehle dir, eine Datei (ganz normale Textdatei) anzulegen, in welcher du wichtige Hashes und Node-IDs abspeicherst. So läufst du nie Gefahr, dass etwas verloren geht.

Um nun den Daemon zu starten und somit das Netzwerk "zu betreten" nutzt du einfach den Befehl ipfs daemon. Der Daemon startet nun und steht dir zur Verfügung. Da wir ihn aber aktuell nicht benötigen, kannst du ihn mit Strg/Control+C vorerst wieder beenden.

Damit in den folgenden Teilen auch alle Demonstrationen so klappen, wie sie sollen, lege ich dir nahe, das IPFS-Companion-Plugin für Chrome und Firefox zu installieren. Dies leitet z.B. alle IPFS-Anfragen von deinem Browser auf deinen lokalen Node um.


Alles klar, damit hast du die Grundlage für die IPFS-Tutorialreihe geschaffen.
Ich versuche, mit den Tutorials Menschen (nicht nur Steemians), auch wenn es "nur" die passive Nutzung ist, an IPFS heranzuführen, da dies in meinen Augen ein guter Weg zum nachhaltigen Web ist. Deshalb ist diese Tutorialreihe unter der CC BY 4.0 veröffentlicht. Du darfst diesen Beitrag gerne weiterverbreiten, auch außerhalb Steems und diesen in gewissen Maßen verändern. Wichtig ist, dass immer mein Name und dieser Post als Quelle angegeben ist.

Im nächsten Tutorial schauen wir uns an, wie wir Dateien lokal abrufen können und unsere eigenen ins IPFS bringen können.
Vielen Dank an @lovelyphotograph für das Korrekturlesen 👍

Bis dahin!

BB,
JanSe

Funfact: Wusstest du, dass der komplette Mediabestand des Chaos Computer Club schon seit Januar 2016 unter dem Hash QmW84mqTYnCkRTy6VeRJebPWuuk8b27PJ4bWm2bL4nrEWbim IPFS zu finden ist? Soviel zum Thema, dass IPFS kaum genutzt wird 😱

CC 4.0 By Badge

Sort:  

Zu erst mal: cooler post, hat viele Fragen die ich hatte geklärt (@sempervideo hat da ja noch einige Fragen offen gelassen).
Ich hab aber dennoch ein paar fragen:

  1. Welchen Protokoll nutzten die Nodes denn um mit ein ander zu kommunizieren? Anscheinend ja nicht HTTP?! FTP?
  2. Und wenn ich so einen Node installiere, hast du oben geschrieben fragt er die nächstgelegenen Nodes. Aber wie genau bekommt mein RaspberryPi eigentlich Zugang zum Netztwerk? Also wie findet er den ersten anderen Node? Und was genau meintest du mit nächstegelegenen, also geht er da nach IP und schaut welche Geographisch nah sind? oder geht er nach ping, nimmt die mit dem niedrigsten Ping? Aber dafür müsste er ja erst mal alle anderen Nodes einmal anpingen, das ist doch auch quatsch oder?
  3. Welche Daten werden genau auf meinem Lokalem IPFS Node gespeichert? Werden da nur daten gespeichert die ich angefrag habe oder auch Dateien die das Netztwerk für wichtig hält? Wenn ja, wie entscheidet das Netztwerk was wichtig ist? Das netztwerk ist ja nich einfach ein anderer Computer, also wer entscheidet dass dann konkret?
  4. Wenn man sich den FunFact vom CCC mal ansieht, scheint es eine Art Orderstructur zu geben im IPFS? Ist ein Teil vom Protokoll oder nur ein Feature vom ipfs.io ?

Ok ich hoffe ich habe mich verständlich genug ausgedrückt und erschlage dich nicht mit all meinen Fragen. Es würde mich also freuen wenn ich zu mindest zu ein paar dieser Themen Erleuchtung fände.

Danke im Vorraus

Moinsen,

vielen Dank für den Kommentar. Deine Fragen versuche ich mal zu beantworten.

  1. IPFS nutzt das Bitswap-Protokoll. Da die technische Erklärung etwas länger benötigt, empfehle ich dir, den IPFS-Post von @heutegelernt durchzulesen. Dort wird auch das Protokoll näher beschrieben.
  2. Dein RasPi nutzt zum ersten Start als Einstiegspunkt bekannte, öffentliche Gateways (bspw. gateway.ipfs.io). Diese teilen dir einige Node-IDs mit IP-Adresse mit, auf welche dein Node dann zugreift. Die nun verbundenen Nodes teilen dir weitere IDs mit und so weiter. Später nutzt dein Node einfach ihm bekannte IDs mit denen er sich verbindet. Btw kannst du das gut mit dem IPFS-Companion-Plugin sehen (dort steigt die Zahl der verbundenen Nodes exponentiel an). Anhand der Geolokalisierung, die jeder Node hat (und evtl. auch ein seltener Ping, bin mir grad nicht sicher) ermittelt Bitswap die bestmögliche Route zu den Objects, die du anfragst.
  3. Neben den "normalen" Objects (also die Hashes) werden noch einige Metadaten, wie die Distributed Hash Table (siehe ebenfalls den Post von heutegelernt) und z.B. Infos über andere Nodes gespeichert. Das Speichermanagement ist ebenfalls für einen Teil meiner Tutorialreihe geplant. Stay tuned! 😉
  4. Man kann mit IPFS auch Ordnern einen Hash geben. Dabei erhalten erst alle Dateien im Ordner (und auch in evtl. Unterordnern) einen Hash. Das ganze Sammelsorium an Hashes wird dann als "Quasidatei" zum finalen Hash für den Ordner umgewandelt. Die Anzeige ist Standart (das kann jeder so ohne weitere Vorkehrungen mit seinem Daemon aufrufen und veröffentlichen). Vorteil ist, dass alle Dateien innerhalb des Ordners mit ihrem normalen Dateinamen erreichbar sind. Auch das kommt in dem Teil, um welchen es sich um das Betreiben einer Website im IPFS dreht.

Ich hoffe, ich konnte deine Fragen beantworten.
BB,
JanSe

ja vielen dank ... hat sehr geholfen und ich freu mich auf die nächsten Teile

Hallo @janse, herzlich willkommen auf Steemit.

Wenn Du Fragen zu Steemit hast, oder Dich mit anderen deutschen „Steemians“ austauschen magst, schau einfach mal auf unserem Discord-Server https://discord.gg/g6ktN45 vorbei.

Unter dem folgenden Link findest Du einige Anleitungen, die Dir den Einstieg in das Steem-Universum deutlich erleichtern werden: Deutschsprachige Tutorials für Steemit-Neulinge: Ein Überblick

Ich stelle mir dann die Frage, wenn die Daten auf "ewig" gespeichert bleiben sollen, warum dann einige Videos auf d.tube nach einigen Tagen nicht mehr abrufbar sind.

Moinsen,

Es gibt aktuell anscheinend einige Probleme mit D.Tube und eigenen Videohashes. Inwieweit das mit D.Tube direkt zusammenhängt, kann ich nicht abschätzen.
Eine Möglichkeit wäre, dass der Node, welcher das Video anbietet, nicht mehr online ist und das Video auf keinem anderem liegt. Somit gäbe es keine Möglichkeit, zu resolven. Das IPFS.IO-Gateway führt von Zeit zu Zeit den sog. Garbage Collector aus, um Speicherplatz freizugeben. Dabei kann auch das Video gelöscht werden. Das ist für Teil 3 geplant.
BB,
JanSe

Hi @janse

Danke für die Anleitung, hat bei mir soweit geklappt.

Allerdings, wenn ich den daemon starten möchte (ich nutze Windows 10), erhalte ich die Meldung;
initializing daemon
Error: file missing [file=MANIFEST-000000]

in cmd.

Google suche konnte mir nicht weiterhelfen, ich hoffe du kannst es.

Was kann ich in dem Fall tun?

Vielen Dank im voraus

Moinsen,

schau mal im IPFS-Repopfad unter datastore nach, ob dort eine MANIFEST-XXX liegt. Der Pfad ist der, welcher beim Initialisieren angezeigt wurde. Je nachdem, mit welchem OS du unterwegs bist, findest du den Pfad bei ~\.ipfs (also in Windows z.B. C:\Benutzer\BENAUTZERNAME\.ipfs).
Sollte dort eine Datei sein, die nicht so benannt ist, wie in der Fehlermeldung kannst du (auf eigene Gefahr) probieren, sie umzubennen. Da mir der Fehler bis eben nicht bekannt ist, weiß ich nicht, ob das hilft.
Wenn nicht, einfach den Ordner ./ipfs löschen und neu initialisieren.

BB,
JanSe