[deutsch]IPFS - Interplanetary Filesystem - Einrichten eines IPFS Gateways mit schreibrechten und CORS unter Debian / Rasperian

in deutsch •  7 years ago 

IPFS ist ein Planeten weites Dateisystem das als neue Ebene des Internets dienen soll. Ganz ähnlich dem World Wide Web. Allerdings wurde IPFS auf Basis eines Peer to Peer Modells entwickelt mit dem Gedanken ein modernes und dezentrales "Internet" zu schaffen. IPFS läuft auf jedem Computer. Selbst auf einem Raspberry Pi.

Zur Zeit unterstützt IPFS ausschließlich statische Inhalte. So lange eine Webseite nur Client seitiges  Javascript benutzt ist es kein Problem. Server seitiges Javascript funktioniert im Moment aber noch nicht. Es gibt ein  dynamisches Benennungs System, das IPNS. Damit lassen sich die eigenen Online Inhalte aktualisieren ohne alte links zu ändern oder einen neuen erstellen zu müssen.

IPFS ist aber nicht nur für Webseiten sondern für jede Art von Datei gedacht und ist kostenlos.

Man muss jedoch beachten das alles was man auf einen schreibgeschützten IPFS-Gateway hochlädt, von dem uploader fixiert werden muss. Anderenfalls werden die hochgeladenen Daten möglicherweise bei der nächsten Säuberungs Aktion mit gelöscht. Solche Aktionen werden regelmäßig durchgeführt. 

Darüber hinaus lebt das IPFS von freiwillig bereitgestelltem Speicherplatz. Die in den Settings standardmäßig eingestellten 10 Gb die maximal verwendet werden dürfen, sollten eigentlich niemandem wehtun. 


Auf einem frisch installiertem Debian oder Ubuntu Server führt man nun folgende Kommandos also root aus:

Zuerst müssen die Packetlisten aktualisiert werden:

 apt-get update 

Nun werden alle Programme installiert die benötigt werden:

 apt-get install tar wget nano screen 

Anschließend muss die aktuelle Version von IPFS herunter geladen werden.

Dazu einfach diesem Link folgen: IPFS Download. Dort mit der rechten Maustaste den Link für die passende Architektur kopieren und mit dem Befehl wget in das Terminal Fenster eingeben.

Bei der aktuellen Version (v0.4.13 für amd64) sieht das dann z.B. so aus:

 wget https://dist.ipfs.io/go-ipfs/v0.4.13/go-ipfs_v0.4.13_linux-amd64.tar.gz

 Nun muss IPFS entpackt und installiert werden. Der Dateiname muss gegebenenfalls angepasst werden:

 tar xfv go-ipfs_v0.4.13_linux-amd64.tar.gz 
 cd go-ipfs 
 ./install.sh  

Da man aus Sicherheitsgründen ein Programm nicht als root Benutzer laufen lassen sollte, muss jetzt noch ein neuer Benutzer angelegt werden.:

 adduser ipfs 

Anschließend wechselt man zu dem neuen Benutzer:

 su ipfs 

Zur besseren Kontrolle der Dateien empfehle ich einen eigenen Ordner für IPFS zu benutzen.

mkdir ~/ipfs

Anschließend muss man IPFS noch mitteilen das es den neuen Pfad benutzen soll. Dazu öffnet man mit

nano ~/.profile   

die .profile Datei und fügt am Ende

export IPFS_PATH=/home/ipfs/ipfs

hinzu.

Damit der Pfad sofort wirksam wird, führt man das Kommando export IPFS_PATH=/home/ipfs/ipfs noch einmal in der Kommandozeile aus.

 

Jetzt starten wir das erste mal IPFS:

 ipfs init --emty-repo || true 

Ist der Startvorgang abgeschlossen, kann man mit STRG+C den Prozess erst mal wieder beenden. 

Den erzeugten Hash speichert man sich irgendwo sicher in einer Datei ab.


Zunächst schalten wir MulticastDNS ab:

 ipfs config --json Discovery.MDNS.Enabled false 

Anschließend erzeugen wir noch einen Adressfilter (alles muss in eine Zeile):

 ipfs config --json Swarm.AddrFilters '[    "/ip4/10.0.0.0/ipcidr/8",   "/ip4/100.64.0.0/ipcidr/10",    "/ip4/169.254.0.0/ipcidr/16",   "/ip4/172.16.0.0/ipcidr/12",    "/ip4/192.0.0.0/ipcidr/24",   "/ip4/192.0.0.0/ipcidr/29",    "/ip4/192.0.0.8/ipcidr/32",   "/ip4/192.0.0.170/ipcidr/32",    "/ip4/192.0.0.171/ipcidr/32",   "/ip4/192.0.2.0/ipcidr/24",    "/ip4/192.168.0.0/ipcidr/16",   "/ip4/198.18.0.0/ipcidr/15",    "/ip4/198.51.100.0/ipcidr/24",   "/ip4/203.0.113.0/ipcidr/24",    "/ip4/240.0.0.0/ipcidr/4" ]' 

Damit der Gateway beschreibbar wird, muss jetzt noch die Konfigurationsdatei editiert werden. Dazu stellt man sicher das man als user ipfs angemeldet ist. Dazu einfach whoami in die Konsole eingeben. Steht danach was anders als ipfs wechselt man den Benutzer mit su ipfs.

Nun wird die Konfigurationsdatei geöffnet:

 nano ~/.ipfs/config  

Als erstes ändert man die folgende Zeile:

 "Gateway": "/ip4/127.0.0.1/tcp/8080", 

in

 "Gateway": "/ip4/0.0.0.0/tcp/8080", 

Jetzt muss man bis zur Gateway Sektion scrollen. Diese muss man ändern das sie wie folgt aussieht: 

  "Gateway": {
    "HTTPHeaders": {
      "Access-Control-Allow-Headers": [
        "X-Requested-With",
        "Access-Control-Expose-Headers",
        "Range"
      ],
      "Access-Control-Allow-Methods": [
        "GET",
        "POST"
      ],
      "Access-Control-Allow-Origin": [
        "*"
      ],
      "Access-Control-Expose-Headers": [
        "Location",
        "Ipfs-Hash"
      ],
      "X-Special-Header": [
        "Access-Control-Expose-Headers: Ipfs-Hash"
      ]
    },
    "PathPrefixes": [],
    "RootRedirect": "",
    "Writable": true
  },

Jetzt startet der Gateway mit schreib rechten und erlaubt CORS für cross-Domain Anfragen. So kann man eine Datei aus dem eigenen Gateway direkt weitergeben. 

z.B. so:

http://eigeneip-oder-dynDNS-Adresse:8080/ipfs/[hashwert der datei]


Die TCP Ports 8080 und 4001 müssen in der Firewall und/oder dem Router noch geöffnet/weitergeleitet werden.


Es gibt nun 2 Wege IPFS laufen zu lassen.

1. Man startet mit diesem Befehl IPFS bei jedem Systemstart automatisch:

 sed -i -e '$i /bin/su ipfs -c "/usr/local/bin/ipfs daemon --migrate --enable-gc --enable-pubsub-experiment &"\n' /etc/rc.local 


2. Man Erstellt eine Batchdatei die man bei jedem Systemstart manuell startet:

nano start_ipfs.sh

Diese muss dann so aussehen:

#/bin/bash
screenName="ipfs-daemon"
screen -d -m -S $screenName
screenCommand="ipfs daemon --migrate --enable-gc --enable-pubsub-experiment"
screen -S $screenName -X screen $screenCommand
echo Der IPFS Daemon ist in der screen Sitzung "ipfs-daemon" gestartet. Um die screen Sitzung zu betreten bitte "screen -r ipfs-daemon" ausführen. Zum verlassen der Sitzung die Tastenkombination "STRG + A + D" benutzen.

Die Datei muss noch ausführbar gemacht werden:

chmod +x start_ipfs.sh

Jetzt kann man den IPFS Daemon starten:

./start_ipfs.sh

Anschließend kann man mit:

screen -r ipfs-daemon

in die Screen Sitzung wechseln. Mit STRG+ A + D kommt man wieder raus ohne die Screen Sitzung zu beenden. IPFS läuft auch weiterhin.

Die Methode mir Screen hat zwar den Vorteil das der IPFS Daemon weiter läuft wenn man die SSH Verbindung trennt, der Nachteil daran ist aber das man die Screensizung erst wieder beenden muss bevor man den IPFS Daemon wieder über den obigen Befehl starten kann.

Alternativ kann man auch mit screen -r ipfs-daemon wieder in die Sitzung switchen (wenn man noch nicht drin ist) und den Daemon manuell mit dem Befehl ipfs daemon --migrate --enable-gc --enable-pubsub-experiment starten.

Wer das ganze mit Screen etwas Komfortabler gestalten möchte, dem empfehle ich den Wiki Artikel von ubuntuusers.de.

Gratulation, damit hast du deinen ganz eigenen IPFS Gateway! 

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @depritv! You received a personal award!

1 Year on Steemit

Click here to view your Board

Do not miss the last post from @steemitboard:

SteemWhales has officially moved to SteemitBoard Ranking
SteemitBoard - Witness Update

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @depritv! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!