IPFS Tutorial #1 - Adden und cat(en)

in #deutsch7 years ago

IPFS-HowTo Header #1

Moinsen,

nachdem nun also unser Node friedlich auf der Festplatte schlummert, wollen wir ihn doch mal nutzen (und mich nebenbei züchtigen, da ich die alte Schriftart vom Header vergessen habe 😁).
Im letzten Post haben wir IPFS kennengelernt, uns mit dem System dahinter etwas vertraut gemacht und schlussendlich unseren eigenen Node lokal installiert. Nun will ich mit dir heute behandeln, wie man Dateien im IPFS abruft und eigene in ebendieses lädt.
Voraussetzung für diesen Part ist, dass du mit deiner Konsole im IPFS-Stammverzeichnis bist und das IPFS-Companion-Plugin für Firefox oder Chrome installiert hast.

Die Katze aus dem Sack lassen

Der universelle Befehl, um Hashes in halbwegs lesbaren Text aufzulösen, ist ipfs cat HASH. Dieser Befehl fetcht (=sucht) den Hash in der sog. Distributed Hash Table.
Wir testen das einfach mal anhand eines Beispiels. Rufe in deiner Konsole den Befehl ipfs cat QmZANHTxVXNvC7BcpW4DTQYxLWqp591tBQNRLUDhZoJLcS auf.

cat-Befehl Screenshot

IPFS hat in dieser kurzen Zeit über die DHT einen Node erhalten, über welchen die Datei auf dein lokales Repository (=der Speicher deines lokalen Nodes) gespeichert und anschließend ausgelesen wurde.
Das ist doch ganz cool. Probieren wir es mit einem anderen Hash. ipfs cat QmUedQokVV75iuZa7agKY1tDj65ntbHbMLHUt7ZDpyZi5h

cat-Befehl mit viel Schrott
*Öhm, what *🤔

Scheint irgendwie fehlerhaft auszusehen, oder? Nein, IPFS hat genau das gemacht, was du wolltest. Das Problem hierbei ist, dass dieser Hash zu einer Videodatei gehört. Was also tun?

Erste Möglichkeit
Für die meisten wahrscheinlich die einfachste: Rufe den Hash im Browser auf.
Das Aufrufen über das HTTP-Gateway ist das selbe, wie cat, nur, dass diesesmal dein Browser versucht, die Datei zu öffnen. Dazu muss in einer zweiten Konsole der Daemon mit ipfs daemon gestartet werden und folgende URL geöffnet werden: http://127.0.0.1:8080/ipfs/QmUedQokVV75iuZa7agKY1tDj65ntbHbMLHUt7ZDpyZi5h. Alternativ kannst du die URL auch über entsprechende Player, wie VLC oder MPV (<-für Konsolenjunkies) öffnen.

Zweite Möglichkeit
Du kannst mit einer einfachen Möglichkeit den Output vom cat-Befehl in eine Datei schreiben. Dies funktioniert mit einem >. Beispiel: ipfs cat QmUedQokVV75iuZa7agKY1tDj65ntbHbMLHUt7ZDpyZi5h > geheimnisvollesvideo.mp4. Dies erzeugt eine Videodatei, welchen den Output der Konsole beinhaltet. Die Datei wird dann stadartmäßig im IPFS-Pfad gespeichert. Voraussetzung ist, dass man weiß, welches Dateiformat der Output benötigt. Ein .mp4 ist ja nicht gleich ein .jpg.

Dritte Möglichkeit
Möchtest du die Datei speichern, kannst du ipfs get HASH nutzen.
Für unsere Datei könnte man also ipfs get QmUedQokVV75iuZa7agKY1tDj65ntbHbMLHUt7ZDpyZi5h nutzen. So wird die Datei direkt im IPFS-Verzeichnis gespeichert. Ebenso wie in der zweiten Möglichkeit muss man die Datei entsprechend umbenennen (normalerweise heißt sie wie der Hash).

Die beste Möglichkeit ist, einen Hash über den Browser aufzurufen. Dort kann man mit einem Rechtsklick auch die Datei im Originalen downloaden. Solltest du nun einen lustigen Hund von DMania sehen, weißt du nun, wie man Dateien im IPFS mit Hilfe von der Konsole und dem Daemon aufrufen und speichern kann.

Beam me up, Scotty!

Aber wie bekommen wir nun unseren eigenen lustigen Hund ins IPFS?
Wir fangen erstmal klein an. Erinnerst du dich an das > ? Erstellen wir uns eine einfachte Textdatei mit DEIN TEXT HIER > awesometext.txt (und denk daran, der Name der Datei ist unwichtig).

Screenshot Beispiel Textinput

Nun können wir mit ipfs add DATEI die Datei hinzufügen. Liegt die Datei nicht im IPFS-Verzeichnis, kannst du auch den Pfad eingeben (also \PFAD\ZUR\DATEI.wasauchimmer)

Screenshot Beispiel add-Befehl

Nun bekommen wir unseren Hash als Ausgabe (Bsp.: QmdcNGWQ45ADdavikh2HhDaPVGaD9W3R8C6TeJdS174ma3). Diesen können wir nun an unsere Freunde schicken oder online stellen. Ebenso können sie z.B. für D.Tube genutzt werden.

Beim Adden wird die Datei auch automatisch gepinnt, d.h. sie bleibt so lange in deinem lokalen Repository, bis du sie entpinnst. Was das genau ist, sehen wir uns in einem anderen Teil an.

Übrigens kann man auch komplette Ordner adden, indem man einfach statt DATEI den PFAD/ und ein -r eingibt. Man erhält dann den Hash des Ordners und kann z.B. über den Browser eine Datei ganz normale über ihren Namen abrufen. Um z.B. ein Bild aus diesem Ordner zu verlinken kannst du also den Pfad /ipfs/QmP1z4MCrWxKnjRKcEFVXcoFUAPXu3D1iyRfEvFyKsC8ib/howto_header.jpgnutzen (sehr sinnvoll beim Erstellen von Websiten, dazu komme ich aber in einem späteren Part).


Und das war es auch schon für diesen Part. Wie immer gebe ich den Hinweis, dass diese Tutorialreihe unter der CC BY 4.0 steht und du gerne den Beitrag auch auf anderen Netzwerken teilen kannst (bitte mit Namensnennung).
Wie immer ermuntere ich, Fragen, Disskussionen und Vorschläge für weitere Parts in den Kommentaren da zu lassen.

Bis zum nächsten Part!

BB,
JanSe

Unfunny Funfact: Eigentlich sollte jetzt hier stehen, dass du alle Bilder über IPFS siehst. Leider cachen Busy und Steemit die Bilder direkt, so dass ich nicht kontrollieren kann, von welcher Quelle sie kommen. Einerseits natürlich gut, andererseits kann man dann keine Bilder sehen, wenn die Cache-Server mal offline sein sollten (deswegen funzt auch der Selftest, der eigentlich am Anfang des Postes stehen sollte, nicht). Wie stehst du dazu? Auf deine Meinung freue ich mich 😁

CC 4.0 By Badge

Sort:  

.

Ich würde gerne Dateien die bereits in ipfs geladen wurden und deren Hash bekannt ist in einem Verzeichniss zusammenfassen. Nun das ginge ganz einfach die Dateien aus Ipfs laden im Verzeichnissbaum organisieren und dann per Ipfs add -r wieder hinzufügen. Wenn es sich aber um große Daten handelt ist das umständlich. Gibt es eine Möglichkeit aus vorhandenen Hashes einen Ordner zu erstellen ohne die Dateien erst laden zu müssen?

# add the individual pieces
$ ipfs add part1
QmPartOne
$ ipfs add part2
QmPartTwo
$ ipfs add part3
QmPartThree
# now patch them all together
$ ipfs object new unixfs-dir # get an empty directory
QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn
$ ipfs object patch QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn add-link part1 QmPartOne
QmStuff1
$ ipfs object patch QmStuff1 add-link part2 QmPartTwo
QmStuff2
$ ipfs object patch QmStuff2 add-link part3 QmPartThree
QmFinalDir

entnommen von hier, ist etwas umständlich, vielleicht könnte man ein Skript schreiben, um mehrere Links gleichzeitig hinzuzufügen.

Moinsen,

sorry für die späte Antwort. Bin erst jetzt zufällig über deine Frage gestoßen 😅
Leider ist mir nach aktuellem Stand keine Möglichkeit bekannt, mit der du einzelne Hashes beim Add-Befehl verwenden kannst (dieser greift ja nur auf die originalen Dateien zu). Sicherlich bietet IPFS mit den Objects, Blocks, und DAGs Möglichkeiten, dir diesen Ordner zusammenzuhaschen, jedoch habe ich mich selbst noch nicht mit dem genauen Aufbau und der Umwandlung von Merkle-DAGs befasst (Schule geht wieder los ;) ).
Für den normalen Gebrauch gibt es, fürchte ich, aktuell keine Möglichkeit für dein Vorhaben.

Trotzdem BB,
JanSe