KopfKrieg Logo
„Reality is a construct of the mind“

Menü

2017-12-28

Sia – Dezentrale Cloud

Ich probiere ja immer wieder gerne neue Sachen aus, und seit ein paar Wochen auch Sia. Sia ist, kurz gesagt, eine dezentrale Cloud. D.h. anstelle einem Anbieter wie Google, Amazon oder Dropbox vertrauen zu müssen, werden die Daten mehrfach redundant bei externen Anbietern gespeichert. Die Daten sind dabei komplett verschlüsselt. Abgesichert wird das ganze durch Verträge, welche über die Sia Blockchain abgewickelt werden. Gezahlt wird mittels Siacoin, kurz SC. Den verfügbaren Speicherplatz stellen dabei sogenannte Hosts zur Verfügung.

Und ich betreibe nun ebenfalls solch einen Host.

Warum überhaupt?

Die grundlegende Idee hinter Sia ist ganz einfach: Ungenutzten Speicherplatz, der auf so vielen Geräten, welche 24/7 mit dem Internet verbunden sind, als Backend für eine wirklich dezentrale Cloud verwenden. Und das ganze kommt dabei auch noch deutlich günstiger als Speicherplatz bei etablierten Unternehmen zu mieten. Zudem kann die Cloud im Prinzip nicht ausfallen.

Die ganze Technologie dahinter ist recht jung, und dementsprechend hakt es auch noch an der ein oder anderen Stelle. Zur Zeit muss noch die komplette Blockchain synchronisiert werden bevor man loslegen kann, was beim ersten Start ein paar Stunden dauern kann. Es gibt noch keine App fürs Smartphone, und Dateien oder auch Ordner können (noch) nicht via Klick freigegeben werden. Zumindest nicht, wenn man direkt auf Sia setzt. Es gibt allerdings erste Ansätze die Cloud in andere Anwendungen, etwa Nextcloud oder auch Duplicati, zu integrieren.

Wie man einen Host aufsetzt

Da es im Moment keine wirkliche Anleitung gibt wie man mit der aktuellen Software (Sia Version 1.3.1) einen Host aufsetzt, fasse ich das hier zusammen. Als Betriebssystem setze ich dabei auf Archlinux. Vieles ist dabei an diesen Artikel angelehnt.

Neuen Nutzer anlegen

# useradd -m -s /bin/bash sia

Sia-daemon aus dem AUR installieren

$ pacaur -S sia-daemon

Siad starten, Wallet erzeugen

Leider ist die Konfiguration im Moment noch etwas, sagen wir umständlich gelöst. Zuerst muss der Sia Daemon (siad) gestartet werden, erst dann kann man an der Konfiguration herumspielen. Das Problem dabei ist, dass man das ganze nicht direkt mit einem Systemd Service erschlagen kann, weil wir dazu bereits eine funktionierende Wallet bräuchten. Und das geht wiederum erst, wenn der Daemon schon läuft…

Kurz gesagt: Man braucht im Moment mindestens zwei Fenster: Eines, in welchem der Daemon läuft, ein anderes, in welchem man die Konfiguration vornimmt. Und dann, sofern man will, noch ein paar in welchen man den Daemon überwacht. Daher empfehle ich an dieser Stelle jetzt tmux. Alternativ kann man auch entsprechend viele Terminals öffnen, aber das zu erläutern ist nicht Sinn dieses Artikels.

Zuerst loggt man sich als Nutzer sia auf dem zukünftigen Host ein, und springt ins gewünschte Verzeichnis, in welchem alle Daten von Sia liegen sollen (leider hält sich die Software zur Zeit noch nicht an gängige Konventionen und nutzt daher auch nicht ~/.config/sia als Verzeichnis, sondern das, in welchem man sich gerade befindet). Das Verzeichnis in welchem man Sia startet sollte dabei auf einer SSD liegen, das beschleunigt diverse Vorgänge enorm. Das Verzeichnis in welchem der Host später seine Daten ablegt kann hingegen beliebig gewählt werden (das kommt allerdings später erst):
$ su sia
cd /home/sia
siad -M gctwh
Mit dem letzten Befehl wird der Sia Daemon gestartet, mittels -M werden dabei die Module übergeben welche wir für unser Vorhaben brauchen:
  • g → Gateway, handhabt die Verbindung zum Netzwerk
  • c → Consensus Set, kümmert sich um die Blockchain und diverse andere Sachen
  • t → Transaction pool, kümmert sich um laufende Transaktionen
  • w → Wallet, verwaltet unsere Siacoins
  • h → Host, um den eigenen Server als Host im Netzwerk anbieten zu können
Man kann im Übrigen an nahezu jeden Befehl -h anhängen um mehr zu erfahren. Mehr Informationen zu den verfügbaren Modulen gibt es mittels siad modules.

Den aktuellen Status des Blockchain-Downloads kann man sich einfach ausgeben lassen, und sieht kurz nach dem Start beispielsweise so aus:
$ siac
Synced: No
Height: 220
Progress (estimated): 0.2%
Die aktuelle Blockhöhe lässt sich über den Sia Explorer ermitteln. Und ja, der Sync nimmt, selbst auf einer SSD, gerne mal ein paar Stunden in Anspruch. Wie gesagt, die Software ist noch nicht vollkommen ausgereift, in Zukunft sollte der Download allerdings schneller erfolgen.

Nachdem der Synchronisationsvorgang nun läuft lässt sich auch eine Wallet erzeugen. Der ausgegebene Seed (welchen man zwingend sichern muss, denn damit lässt sich die Wallet wiederherstellen!), dient dabei zugleich auch noch als Passwort für die Wallet. Das Passwort sollte man dementsprechend auch ändern, da wir dieses nachher für den Autounlock brauchen und in der Service-Datei nicht unbedingt der Seed stehen sollte:
$ siac wallet init
[…]
$ siac wallet unlock
[…]
$ siac wallet change-password
[…]
Zudem braucht man noch eine Wallet-Adresse, welche man folgendermaßen erhält:
$ siac wallet address
Created new address: 9b8a3dd1f861cbc7f462a400fe0c94c2f563c7ad66ed293cb68a2cfbe8ea3f83273d031b84c8

Sicherheit ("Kollateral") hinterlegen

Ich habe es im Artikel bisher noch nicht erwähnt, aber man kann nicht "einfach so" einen Host betreiben, sondern muss dazu auch etwas investieren. Und zwar ist es so, dass man als Host gewisse Preise festlegt, und ein "Renter" kann diese dann akzeptieren und so Speicherplatz bei einem Host mieten. Als Sicherheit hinterlegt der Host dafür ein sogenanntes "Kollateral" in Siacoins. Wenn der Host nicht ausfällt, die Daten zuverlässig speichert und es keine Probleme gibt erhält man nach Ablauf der Vertragslaufzeit (in der Regel maximal 25 Wochen) die hinterlegten Coins zurück. Scheitert der Host dagegen daran die Daten zuverlässig zu speichern bekommt der Renter als Schadensausgleich die Sicherheit überwiesen. Das bringt zwar nicht die Daten zurück, soll aber dafür sorgen, dass sich Hosts nicht einfach Verträge unter die Nägel reißen die sie nicht halten können. Kurzum: So soll Betrug verhindert werden.

Bleibt natürlich die Frage, wie man denn jetzt an Siacoins herankommt. Vorzugsweise geschieht dies über eine Börse, welche direkt Siacoins zum Kauf anbietet. Ich selbst hatte aber noch ein paar Bitcoins übrig und habe mir meine Siacoins mittels ShapeShift geholt. Der Dienst erlaubt es unterschiedliche Kryptowährungen ganz ohne Registrierung einfach zu tauschen. Für größere Beträge nicht unbedingt der Weg den man gehen will, aber für Coins im Wert von ein paar hundert Euro kann man das schon einmal so machen. Um einen Host zu betreiben reichen ein paar tausend Siacoins aus.

Und diese müssen dann an die vorher generierte Wallet-Adresse überwiesen werden, damit der Host auch damit arbeiten kann. Da der ganze Vorgang gerne mal etwas dauert, sollte man das machen bevor man mit der Konfiguration des Hosts fertig ist und die Blockchain synchronisiert wurde.

Ordner hinzufügen

Das Verzeichnis bzw. der Ordner, der vom Host verwendet werden soll, kann wie bereits erwähnt frei gewählt werden und kann im Gegensatz zu den Daten des Sia Daemons auch problemlos auf einer herkömmlichen Festplatte liegen. Der Befehl dafür lautet siac host folder add [folder] [size] und sieht angewandt etwa so aus:
$ siac host folder add /media/sia/storage 800GB
Die Größe des verfügbaren Speicherplatzes beinflusst zudem auch den Host Score, dazu weiter unten aber mehr. Es ist zudem nicht nötig das Verzeichnis für die Daten redundant aufzubauen, da Daten innerhalb der Cloud sowieso schon mehrfach gespeichert werden. Allerdings: Sind die Daten weg, zahlt man als Host dafür in Form von Siacoins.

Und ganz wichtig: Darauf achten, dass der Daemon auch wirklich Schreibrechte in dem Verzeichnis hat.

Preise festlegen

Und jetzt zum kniffligeren Teil: Das festlegen der Preise. Ziel ist, dass der Host so gut wie möglich genutzt wird, und dabei möglichst viele Siacoins abwirft. Die Berechnung des Host Scores folgt dabei einem festen Schema. Folgende Faktoren wirken sich dabei auf den Score aus:
  • Sicherheit bzw. "Kollateral"
  • Vertrags, Down- und Uploadpreis
  • Verfügbarer Speicherplatz
  • Laufzeit bzw. "Alter" des Hosts
  • Uptime des Hosts
  • Verwendete Softwareversion
  • "Host interaction weight"
Lediglich die ersten beiden Punkte lassen sich direkt festlegen, der verfügbare Speicherplatz ergibt sich aus dem was man bereit ist anzubieten (>4TB wäre optimal), und die Laufzeit des Hosts aus der Zeit die verstrichen ist seit der Host das erste mal im Netzwerk gesehen wurde. Die Uptime hingegen aus dem Verhältnis zwischen der Zeit die er online und der Zeit die er offline war. Optimalerweise beträgt die Uptime mindestens 98%, was bereits ein sehr großzügiger Wert ist. Zudem sollte man eine möglichst aktuelle Version des Sia Daemons verwenden. Wer das ganze genauer erklärt haben will und die oben verlinkte, eher technische Dokumentation etwas zu trocken war, dem sei auch noch dieser Beitrag zu empfehlen.

Bleibt noch die Frage wie man jetzt die zwei oben genannten bzw. letztlich sieben Einstellungen am besten festlegen soll. Eine Übersicht über die aktuellen Durchschnittspreise bietet diese Webseite hier. Alternativ kann man sich auch die Einstellungen anderer Hosts im Netzwerk ansehen. Ziel ist es, die durchschnittlichen Preise knapp zu über- bzw. unterbieten, um einen möglichst hohen Score zu erreichen.

Da man die Preise sowieso regelmäßig anpassen sollte und man anfangs aufgrund der geringen Laufzeit mit einem hohen Score anfängt, sollten neue Hosts in den ersten paar Wochen die Preise massiv unterbieten und sich über den Verlauf von ca. 41 Tagen etwa dem Durchschnitt anpassen.

Hat man sich dann für entsprechende Preise entschieden kann man diese wie folgt festlegen (1SC = 1 Siacoin, 1KS = 1000 Siacoin):
$ siac host config collateral 500SC
$ siac host config collateralbudget 25KS
$ siac host config maxcollateral 3KS
$ siac host config mincontractprice 5SC
$ siac host config mindownloadbandwidthprice 25SC
$ siac host config minstorageprice 50SC
$ siac host config minuploadbandwidthprice 5SC
Die komplette Hostkonfiguration kann man sich anschließend via siac host -v ausgeben lassen.

Systemd Service schreiben

Da der ganze Spaß später vollautomatisch laufen soll empfiehlt es sich, einen Systemd Service zu schreiben. Mithilfe eines Redditnutzers kam dabei folgendes heraus:
[Unit]
Description=Sia Hosting
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/siad -M gctwh
ExecStop=/usr/bin/siac stop
WorkingDirectory=/home/sia
Restart=always
RestartSec=10
User=sia
Environment=SIA_WALLET_PASSWORD="HierDasWalletPasswortEinfügen"

[Install]
WantedBy=multi-user.target
Das ganze unter /etc/systemd/system/siad.service speichern und fertig. Gestartet wird der Service allerdings erst später, dazu weiter unten mehr.

Ports freigeben

Da man einen Host auch von zu Hause betreiben kann oder man eine Firewall einsetzt, die bestimmte Ports blockiert, noch als Hinweis: Die Ports 9981 und 9982 müssen von außen erreichbar sein! Wer also hinter einem Router sitzt sollte ganz schnell ins Webinterface gehen und die Ports freigeben.

Los geht's

Nachdem nun alles eingerichtet ist, und bereits ein paar tausend Siacoins in der neu erstellten Wallet liegen, gibt es nur noch ein paar Dinge zu tun. Zuerst sollte man warten, bis die Blockchain zu 100% synchronisiert wurde. Danach stoppt man den Sia Daemon:
$ siac stop
Um ihn anschließend als den vorher angelegten Systemd-Service neu zu starten:
# systemctl daemon-reload
# systemctl start siad.service
Ob der Service nun auch tatsächlich läuft lässt sich via journalctl ermitteln. Dabei sollte die Ausgabe ähnlich wie bei mir aussehen, und ganz wichtig: Der Wallet auto-unlock muss funktionieren! Ansonsten ist das Hosting nicht möglich.
# journalctl -u siad.service
siad[30300]: Loading...
siad[30300]: (0/5) Loading siad...
siad[30300]: (1/5) Loading gateway...
siad[30300]: (2/5) Loading consensus...
siad[30300]: (3/5) Loading transaction pool...
siad[30300]: (4/5) Loading wallet...
siad[30300]: (5/5) Loading host...
siad[30300]: Sia Wallet Password found, attempting to auto-unlock wallet
siad[30300]: Auto-unlock successful.
siad[30300]: Finished loading in 2.12344371 seconds
Hat alles geklappt aktiviert man den Service noch:
# systemctl enable siad.service
Letztlich muss man den Host nur noch im Netzwerk bekannt machen:
$ siac host announce
Voilà, der Host ist online. Bis erste Verträge abgeschlossen werden dauert es allerdings ein paar Tage bis – maximal – wenige Wochen.

Host überwachen

Da die Software wie bereits geschrieben noch nicht wirklich ausgereift ist, sollte man den Daemon regelmäßig auf Funktionsfähigkeit prüfen. Dabei gibt es mehrere Möglichkeiten:
  • siac
    Zeigt an, ob der Daemon mit dem Netzwerk synchronisiert ist, inklusive dem letzten Block und der aktuelle Blockhöhe
  • siac wallet
    Zeigt Daten über die Wallet an. Wichtig ist, dass die Wallet unlocked ist!
  • siac host -v
    Zeigt Daten über den Host an
Des Weiteren kann man zur Fehlersuche, sollten welche auftreten, auch die Logdateien (welche sich unterhalb des Homeverzeichnisses befinden) einsehen. Insbesondere der host.log ist hierbei interessant.

Was, wenn man den Host nicht mehr betreiben will?

Sollte man den Host nicht mehr betreiben wollen gibt es mehrere Möglichkeiten. Richtig wäre es, weitere Verträge zu unterbinden und die noch laufenden Verträge auslaufen zu lassen:
$ siac host config acceptingcontracts false
Danach ~25 Wochen warten und alle noch laufenden Verträge sollten ausgelaufen sein.

Die andere Möglichkeit ist, den Host einfach stillzulegen, und die Daten zu löschen. Theoretisch sollte das für die Renter kein Problem darstellen, weil Daten mehrfach redundant gesichert sind. Als Host verliert man dabei das Locked Collateral, welches als Sicherheit hinterlegt wurde.

Fazit

Wie gesagt ist das ganze noch in einem relativ frühem Stadium. Die Technik dahinter ist absolut genial, die Umsetzung zur Zeit noch etwas rudimentär. Als Backend für die eigene Cloud kann man das ganze schon ganz gut verwenden, und das zu einem Bruchteil der Kosten die man für andere Anbieter hinlegt. Für alles andere muss man wohl noch etwas abwarten. Es gibt allerdings eine öffentlich einsehbare Roadmap.

Und für alle die sich fragen ob sich das aus finanzieller Sicht lohnt: Nein, tut es nicht. Der Verdienst sind aktuell etwa 1,80€/TB im Monat. Aber es geht ja auch nicht darum Geld zu schöpfen, sondern ein dezentrales Cloud Backend aufzubauen. Und dafür ist das wie gesagt schon ein ziemlich geniales Stück Software.