IPFS
InterPlanetary File System
The Distributed Web
Ein Überblick
2016-09-09
Wolfgang Silbermayr
Quelltext: https://gitlab.com/valug/ipfs-slides
Lizenz der Präsentation: CC-BY-SA 4.0
Presenter Notes
Inhalt
- Anlaufstellen
- Installation und Starten
- Was macht IPFS
- Verwendung
- Name-Service IPNS
- Technische Hintergründe
- Darauf Aufbauende Projekte / Ideen
- Webhosting mit IPFS
Presenter Notes
Anlaufstellen
- Webseite: https://ipfs.io/
- Download: https://dist.ipfs.io/
- Public Gateway: https://gateway.ipfs.io/
- Github: https://github.com/ipfs/
- IRC:
irc://irc.freenode.net/#ipfs
Presenter Notes
Installation und Starten I
- Install Guide: https://ipfs.io/docs/install/
- Download von: https://dist.ipfs.io/#go-ipfs
- In ein Verzeichnis (nachfolgend
$IPFSDIR
genannt) entpacken - Checken, ob es grundsätzlich läuft:
$IPFSDIR/ipfs --help
ausführen - Hilfreich:
- Die Binärdatei in
$PATH
kopieren oder verlinken - Alternativ: (temporär) die
$PATH
-Umgebungsvariable um das entpackte Verzeichnis erweitern - Danach kann einfach
ipfs
anstatt von$IPFSDIR/ipfs
verwendet werden
- Die Binärdatei in
Presenter Notes
Installation und Starten II
- IPFS-Repository initialisieren:
ipfs init
- Erstellt ein Repository in
~/.ipfs
- Erstellt ein Repository in
- IPFS-Daemon starten:
ipfs daemon
- Für mehr Gesprächigkeit:
IPFS_LOGGING=info ipfs daemon
- Der Daemon läuft standardmäßig im Vordergrund
- Für mehr Gesprächigkeit:
- Weboberfläche ist unter http://localhost:5001/webui/ erreichbar
- Gateway ist unter http://localhost:8080/ipfs/<identifier> erreichbar
- Public Gateway ohne Installation http://gateway.ipfs.io/ipfs/<identifier> erreichbar
Presenter Notes
Was macht IPFS
- File-Sharing ähnlich zu BitTorrent
- Identifiziert Dateien durch interplanetar ziemlich eindeutige Identifier
- Deduplikation auf Ebene von Blöcken, dadurch auch für Dateien
- Verzeichnishierarchien können rekursiv hinzugefügt werden
- Heruntergeladene Daten werden lokal im Cache behalten
- Cache wird vom Daemon je nach Bedarf geleert
- Keine Garantie für Verfügbarkeit ("austrocknen")
- Explizites "Pinning" erlaubt permanentes Behalten von Daten
- Vom restlichen Netz getrennte Inseln können die zwischengespeicherten Daten weiterhin austauschen
Presenter Notes
Verwendung (I)
Dateien oder Verzeichnisse herunterladen
ipfs get <identifier>
Dateien ins Repository laden
ipfs add <filename>
Verzeichnisse rekursiv ins Repository laden
ipfs add -r <dirname>
Dateien direkt anzeigen lassen
ipfs cat <identifier>
Presenter Notes
Verwendung (II)
Dateien "anpinnen"
ipfs pin add <identifier>
Dateien "entpinnen"
ipfs pin rm <identifier>
"Angepinnte" Dateien auflisten
ipfs pin ls [<identifier>]
Presenter Notes
Verwendung (III)
Und viele weitere Befehle
-
Datenstrukturen-Kommandos:
ipfs block
: Interaktionen mit rohen Blöckenipfs object
: Interaktionen mit rohen dag-Nodesipfs files
: Interaktionen mit Objekten ähnlich Unix-Dateisystemen
-
Netzwerk-Kommandos:
ipfs id
: Informationen über den eigenen oder andere Knotenipfs diag
: Diagnoseipfs swarm
: Informationen über den Netzwerkschwarm
Presenter Notes
Verwendung (IV)
- Fuse-Mount in ein Verzeichnis
ipfs mount -f <ipfs-path> -n <ipns-path>
- ACHTUNG
- Relative Pfade werden nicht in Bezug zum aktuellen Verzeichnis des Aufrufers, sondern zum Arbeitsverzeichnis des Daemons verwendet
- Funktioniert nur, wenn der Daemon mit einem Schwarm verbunden ist
Presenter Notes
Verwendung (V)
- Und viele weitere:
ipfs --help
: Hilfeipfs commands
: Komplette Auflistung aller Kommandos
Presenter Notes
Technische Hintergründe (I)
Hash-Kollisionen
Theoretisch möglich, allerdings sehr unwahrscheinlich. Die Entwickler versuchen, die Struktur so aufzubauen, dass in Zukunft eine Migration zu anderen Hashingalgorithmen möglich ist.
Bootstrapping
Aktuell wird eine Standard-Liste an vertrauten Bootstrapping-Nodes vorkonfiguriert, kann jedoch geändert werden.
Presenter Notes
Technische Hintergründe (II)
Referenzimplementierung in go, Spezifikation nicht sprachspezifisch
libp2p
Die P2P-Funktionalität ist in die Bibliothek libp2p ausgelagert
Datenrepräsentation in Hash-Bäumen (Merkle DAG Bäume)
- Gerichteter azyklischer Graph
- Kanten sind eindeutige Verweise auf Objekte, und beinhalten durch den Hash alle Informationen um die Objekte verifizieren
Presenter Notes
Technische Hintergründe (III)
Transportmethoden
- Die Transportschicht ist abstrahiert
- Verschiedene Transporte bereits implementiert:
- TCP über IPv4 und IPv6
- UDP über IPv4 und IPv6
- In libp2p implementiert, demnächst unterstützt:
- Websockets
- In Diskussion:
- tor
- Künftig können selbst welche implementiert werden:
Presenter Notes
Name-Service IPNS: Theorie
- Nachteil von Hashes: ändern sich mit jeder Datei, die in einem (Unter-)Verzeichnis geändert wird.
- IPNS ist ein PKI-Namensraum
- Der Name ist der Hash des öffentlichen Sclhüssels
- Mit dem privaten Schlüssel können neue signierte Werte veröffentlicht werden
- Der Name verweist auf einen IPFS-Datei-Identifier
- Dadurch lassen sich verändernde Inhalte unter einem stabilen Identifier veröffentlichen
Presenter Notes
Name-Service IPNS: Praxis
-
Veröffentlichen des Hashes:
ipfs name publish <ipfs-identifier>
-
Namensauflösung:
ipfs name resolve <ipns-identifier>
Presenter Notes
Statisches Webhosting mit IPFS
Namensauflösung mittels DNS:
-
DNS TXT-Record hinzufügen:
dnslink=/ipfs/<ipfs-identifier>
oderdnslink=/ipns/<ipns-identifier>
-
Die Seite ist nun über den Gateway aufrufbar:
-
Beispiel:
Presenter Notes
Kontroverses Thema
DMCA-Takedowns, illegales oder nicht erwünschtes Material
Optionales Blacklisting mit vom Entwicklerteam gepflegten Einträgen in Verwendung bei Gateways, die vom Entwicklerteam betrieben werden. Nicht jedoch bei selbst installierten Nodes.
Hier ist mir erstmalig in freier Wildbahn der HTTP-Errorcode 451 Unavailable For Legal Reasons untergekommen.
Presenter Notes
Ausblick / Ideen
- Ethereum
- The Internet Archive: Wired-Artikel
- Mediachain: Blockchain, die mittels IPFS-Hashes Medienobjekte (Videos, Fotos…) referenziert
- Bezahltes IPFS-Pinning gegen "Austrocknen"
- Diskussionen über Paketupdates per IPFS
- OpenBazaar: Dezentrale Online-Verkaufsplattform. Wird das Backend auf IPFS migrieren
- IPFS Pics: Bildanzeigedienst für Bilder in IPFS
- Publish/Subscribe-Mechanismus ist geplant
- IPFS-Gateway-Redirect: Firefox-Plugin für Adressen im Format
fs:/ipfs/*
- Meine Voraussage: Spielehersteller werden künftig Content über IPFS ausliefern
Presenter Notes
Table of Contents
Help
Table of Contents | t |
---|---|
Exposé | ESC |
Full screen slides | e |
Presenter View | p |
Source Files | s |
Slide Numbers | n |
Toggle screen blanking | b |
Show/hide slide context | c |
Notes | 2 |
Help | h |