[GER] IPFS als Service auf Ubuntu/Debian basierten Systemen

in #deutsch7 years ago (edited)

IPFF_systemd.gif


Über IPFS

IPFS steht für InterPlanetary File System, D.tube verwendet diese Technik zum Beispiel. IPFS ist ein P2P Netzwerk. Da es schon einige qualitative Beiträge in Text und Video Form gibt, werde ich das Rad an dieser Stelle nicht noch einmal neu Erfinden und verweise einfach auf diese:

Es gibt sicherlich noch einige weitere Beiträge zum Thema in der deutschsprachigen Community aber diese beiden hier wähle ich als Auszug.


Kommen wir also zum wesentlichen, ich werde kurz erklären wie man den IPFS daemon auf Ubuntu/Debian basierenden Systemen via systemd bei Systemstart ausführt, also als Service einrichtet. Es sollte aber auf ähnliche Weise auf allen System funktionieren die systemd verwenden.

Getestet unter:
  • Ubuntu Server 16.04 LTS
  • Ubuntu Budgie 17.10

jeweils auf dem aktuellsten Stand.


Vorbereitung

Was benötigen wir?

Eigentlich nur die IPFS Software, diese laden wir uns hier herunter. Einfach die benötigte Version, in meinem Fall linux Binary amd64 auswählen und herunterladen.


Kleiner Einschub: Download via wget für den Server

Auf der genannten Seite einfach einen Rechtsklick auf das gewünschte Paket machen und Adresse des Links kopieren wählen. Und dann in der Shell einfach wget [Adresse einfügen].
Beispiel:
wget https://dist.ipfs.io/go-ipfs/v0.4.13/go-ipfs_v0.4.13_linux-amd64.tar.gz


So nun haben wir die benötigte Software, als .tar.gz Archiv, dieses entpacken wir und wechseln dann in das Verzeichnis.
Dort führen wir nun das Installationsskrip aus mit folgenden Befehlen:
chmod +x install.sh
sudo ./install.sh

Nun haben wir den IPFS Dienst installiert, als nächstes führen wir einen !wichtigen! Schritt aus, wir initialisieren IPFS:
ipfs init

Vergessen wir dies lässt sich der Service später nicht starten!

Das Skript für den Service anlegen

Das Skript, also eigentlich die Service Unit wird mit Root-Rechten im Ordner /etc/systemd/system/ angelegt, es sollte ipfs.service heißen.

Beispiel, unter der Verwendung von nano:

sudo nano /etc/systemd/system/ipfs.service

[Unit]
Description=IPFS daemon # Beschreibung des Service
After=network.target # Der Service startet nach der dem Service für die Netzwerkverbindung
[Service]
User= #Benutzer unter dem der service laufen soll
Group=#Gruppe unter dem der service laufen soll
ExecStart=/usr/local/bin/ipfs daemon # Befehl der bei Service Start ausgeführt wird
Restart=on-failure # falls es Probleme beim Start gibt, versuche erneut zu starten
[Install]
WantedBy=multi-user.target # Ist für Mehrbenutzersysteme, also quasi bei allen Modernen Betriebssystemen

Abschließend wird die Service Unit noch via: sudo systemctl enable ipfs.service aktiviert.

Nun haben wir den ipfs daemon als Service und können diesen wie gewohnt via:
sudo service ipfs start|stop|status|restart|reload steuern.


Ausblick

Ich könnte mir vorstellen weitere Tutorials zum Thema IPFS zu schreiben und ich überlege derzeit auch ein Bash Skript zu schreiben, welches die Installation als Service übernimmt.

Linksammlung
Sort:  

Moin @burstfire,
danke für die Anleitung. Ich werde in den nächsten Tagen auch einige IPFS-Server aufziehen, um das Netzwerk zu unterstützen.
Und endlich mal jemand, der sich mit Systemd beschäftigt hat und nicht alles über BASH-Skripts oder Screen oder so regelt. 👍

Viel Erfolg beim Server aufsetzen, freut mich das dir Anleitung gefällt. Ja mich hatte das auch gestört das man nicht all zu viel zu systemd findet, da es sich ja anbietet, besonders wenn man das Netzwerk unterstützen möchte. Ich meine Hand aufs Herz wer denkt denn dann schon immer daran den daemon zu starten? Okay klar kann man das auch mit einem BASH-Skript machen, aber ich empfinde dies hier als schönere Lösung.

systemd ist einfach pflicht und danke dafür.

Danke für die Erwähnung. Habe deinen Beitrag erst heute gesehen und mir gestern auch mal eine IPFS Node auf einem meiner Server erstellt, um meine Videos zu pinnen.

Schöner Post, hatte selber auch schon vor darüber zu schreiben. Da warst du wohl schneller. ;)

Ich hätte nur zwei Anmerkungen eine Geschmacksache und eine wichtige Sache:
Geschmacksache: Der service command ist (zumindest in dem Fall) nur noch ein wrapper für den systemctl Befehl. Ich persönlich würde immer zum systemctl Befehl tendieren. Die Syntax hier wäre systemctl start|stop|reload|enable|disable service1 [service2...] um nur ein paar der Funktionen zu nennen.

Wichtig: IPFS is standardmäßig etwas übereifrig bei Verbindungen, was dazu führen kann dass der Server-Hoster den Service als bösartig einstuft (betrifft natürlich nur gehostete Server, nicht den RasPi zuhause). Ist mir auch passiert. Das lässt sich jedoch verhindern indem man beim init Befehl von ipfs einen Parameter mitgiebt: ipfs init --profile=server. Hier das Github Issue zu dem Thema.

Darüber hinaus sollte man auf Servern noch etwas die Logs im Auge behalten. IPFS ballert die Kernel Buffer ganz schön zu was das ganze System beeinträchtigen kann. Da hilft dann nur noch die Limits zu erhöhen. Das geht zum Beispiel so.

gut zu wissen. Kannst du mal sagen wie die Logs aussehen wenn die Limits erreicht werden? Hast du da was schon dran geändert?

Ich habe das vor allem gemerkt, dass der Postfix (email service) auf einmal regelmäßig "No buffer space available" über das journal reported hat. Aber so wie das wirkt hängt das ganz stark von der Software ab, die du verwendest ob die den Fehler überhaupt ausgeben oder quasi still und heimlich einfach weiter machen. Bisher hat sich halt nur der Postfix gemeldet, der aber andauernd.

Mit dem sysctl tuning was ich verlinkt habe hat es dann geklappt.

Ah ok hmm. Hab meinen Node jetzt erstmal auf meiner Test VM wo ansonsten nix drauf läuft.