Folge dem weißen Kanninchen::/, BitCoin - Trading & Mining & andere Cryptos, Elektronik/Projekte/Basteln, Nützliches, Tipps, Anleitungen, Hilfe, Kalkulatoren, Generatoren, Listen & Warnungen/Anleitung/Howto: Eigene Bitcoin Full Node auf einem kleinen Server (dediziert oder VM, Ubuntu 14.10) selbst einrichten und betreiben

Anleitung/Howto: Eigene Bitcoin Full Node auf einem kleinen Server (dediziert oder VM, Ubuntu 14.10) selbst einrichten und betreiben

Motivation

In China habe ich angefangen, Bitcoin zu minen, weil es ein interessantes Hobby ist. Ein großer Hardwarehersteller (Bitmain) vertreibt hier seine Geräte, der Strom ist staatlich gefördert und relativ billig und zum Basteln brauche ich ja auch immer etwas. Ich habe meine Hardware auf verschiedene Pools zeigen lassen und bin irgendwie bei Diskus hängengeblieben, weil dort PPS (Payout per Share) ausbezahlt wird. Mittlerweile bin ich auch ins Cloud-Mining eingestiegen, wobei dort keine Wolken, sondern immer noch Bitcoins gemint werden. 🙂

Darüber hinaus handele ich auf verschiedenen Plattformen, wie CEX.IO, Bitcoin.de, OKcoin.com und BTCChina.com. Reich wird man mit Bitcoin  nicht, aber mir fehlt auch die Zeit und die notwenidige Muße, um mich voll in Handel, Mining und Arbitrage-Handel reinzuknien. Trotzdem kann man sich hier und da mal ein neues Gadget leisten (nur der sauteure Kindergarten für unsere Tochter hier in Shanghai wird sich wohl nicht davon bezahlen lassen!)

Doch zur Unterhaltung des ganzen Bitcoin-Netzwerkes sind nicht Miner und Wallet-Besitzer mit aktiven Wallets nötig, sondern auch seógenannte Full Nodes. Das sind Knotenpunkte, die eine volle Bitcoin-Installation dauerhaft betreiben, und so die Blockchain kopieren, bereitsstellen und validieren, sowie neue Blöcke weiterereichen und verbreiten. Dieser Service wird von relativ wenigen dauerhaft installieren Nodes bereitgestellt, von denen noch weniger über einen längeren Zeitraum aktiv sind.

Unbenannt-2

Die Bitcoin-Galaxie mit allen erreichbaren ca. 5600 Full Nodes wie sie sich auf https://getaddr.bitnodes.io/nodes/network-map/ darstellt.

Eine Full Node kostet Geld, muss gepflegt werden, bringt einem persönlich eigentlich gar nix außer der Genugtuung, die Hürden der technischen Umsetzung überwunden zu haben und einen ungewöhnlichen Service der Allgemeinheit zugänglich zu machen, unterstützt so das Bitcoin Netzwerk und die Community.Leider gibt’s auch dafür niemanden, der einem die Hand schüttelt oder mal freundschaftlich auf die Schulter klopft.

Vorbedenken

Wer also noch einen Rechner rumstehen hat, der nicht sonstwie genutzt wird, und eine schnelle und unlimitierte Internetverbindung hat, kann eine Full Node betreiben. Ich wollte sichergehen, dass meine FN physikalisch von anderen Projekten abgeschottet ist und habe mir bei euserv.de einen kleinen Server gemietet. Dort gibt es eine erfeulich große Auswahl an Linux-Distibutionen für das Betriebsystem. Ich entschied mich für Ubuntu 14.10, minimal, 64 Bit. Aus Sicherheitsbedenken läuft auf dem Server wirklich nur die Full Node, weder Mail, mySQL, noch Apache (Webserver). Auch PHP und FTP-Server wurden nicht installiert. Ich kann nur emfpehlen, eine Full Node von einem Produktivsystem abzuschotten, weil es zum einen doch recht resourcenhungrig ist und zum anderen ein Ziel von Hackern und Scriptkiddies sein könnte. Ich möchte nicht, dass ein schöner Webserver nicht erreichbar ist, weil die Full Node die Internetleitung blockiert, das RAM an sich gerissen hat oder irgendwelche Scriptkiddies nach dem Kapern der Full Node meinen Server in eine willenlose Zombie-Bot-Drone verwandeln, die sich folgsam in deren Kollektiv einreiht. Nebenbei bewerkt sollte man sowieso möglichst viele Dienste auf verschiedene Server auslagern. Das erleichtert die Pflege und hilft der Sicherheit. Wenn man schon viele Dienste auf einem Rechner laufen hat, kann man sie wenigstens in VMs einsperren und so gegeneinander abschotten.

Jetzt geht’s los…

Nach obigen Vorüberlegungen sollte die Full Node nicht auf einem Produktivsystem aufgesetzt werden, sondern auf einem dedizierten Rechner als separater Dienst laufen. Natürlich im Userspace. Weitere Dienste wie mySQL, Maildienste (Postfix), Webserver wie Apache oder lighttpd sind weder sinnvoll noch erwünscht. Es macht daher keinen Sinn ein LAMP-System anzulegen, sondern startet besser mit einem Minimal-System. Da weder Debian noch OpenSuse gute Paketquellen für die Installation des Bitcoin-Daemons mitbringen, ist das System der ersten Wahl Ubuntu 14.10 oder Mint (letzteres hier nicht getestet).

Wer Zugriff auf den Ubuntu Desktop hat, kann zwischen Terminal, UXTerm oder XTerm wählen. Ich gehe aber von einem einfachen Fernzugriff per SSH mit Putty aus.

Mit der nachfolgenden Zeile fügt man die Repositories des Bitcoin Clients zur Ubuntu hinzu.

sudo apt-add-repository ppa:bitcoin/bitcoin

Auf manchen Minimal-System mag das nicht von Anfang an funktionieren. Es macht immer Sinn, erweiterte Python-Software zu installieren:

Das geht mit:

sudo apt-get install software-properties-common

und/oder

sudo apt-get install python3-software-properties

und/oder

sudo apt-get install python-software-properties

Man wird nach dem Passwort für sudo gefragt und erhält nach eingabe folgende Ausgabe:

 Stable Channel of bitcoin-qt and bitcoind for Ubuntu, and their dependencies
 More info: https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin
Press

[ENTER] to continue or ctrl-c to cancel adding it

Weiter mit . Ein ähnlicher Text wie dieser sollte nach kurzer Zeit angezeigt werden:

gpg: keyring `/tmp/tmpixuqu73x/secring.gpg' created
gpg: keyring `/tmp/tmpixuqu73x/pubring.gpg' created
gpg: requesting key 8842CE5E from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpixuqu73x/trustdb.gpg: trustdb created
gpg: key 8842CE5E: public key "Launchpad PPA for Bitcoin" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK

Paketupdate anstoßen:

sudo apt-get update

in Anhängigkeit mit der Internetverbindung kann das Update ein paar Minuten dauern.

Drei Möglichkeiten stehen nun offen. Ich beschränke mich auf den core daemon bitcoind (2.).

  1. Bitcoin Core Graphical User Interface (GUI)
  2. Bitcoin Core daemon (bitcoind)
     sudo apt-get install bitcoind
    
  3. Beide GUI and the daemon

nach Abschluss der obigen Eingabe fragt das System nochmal nach und ist nach einer Bestätigung aber schnell fertig.

Bitcoin Core Daemon im Userspace häuslich einrichten und starten

Wer hier noch als Admin oder root eingeloggt ist, sollte sich ausloggen und als der Benutzer einloggen, unter dem später der Bitcoin Core Daemon laufen soll. Es wird dringend davon abgeraten, den Daemon als root (bzw, mit root-Rechten) laufen zu lassen!

Aber zuerst muss man den Bitcoin Core daemon, bitcoind, selbst konfigurieren und mit einem Benutzer und Passwort ausstatten. Dafür erstellen wir ein Arbeitsverzeichnis .bitcoin, darin (mit touch eine config-Datei) und wir setzen die Benutzerrechte auf Nur-Lesen.

mkdir ~/.bitcoin
touch ~/.bitcoin/bitcoin.conf
chmod 600 ~/.bitcoin/bitcoin.conf

jetzt starten wir im Userspace Bitcoin mit bitcoind. Wie erhalten eine Ausgabe ähnlich wie diese:

bitcoind
Error: To use the "-server" option, you must set a rpcpassword in the configuration file:
/home/bitcoinorg/.bitcoin/bitcoin.conf
It is recommended you use the following random password:
rpcuser=bitcoinrpc
rpcpassword=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
(you do not need to remember this password)
The username and password MUST NOT be the same.
If the file does not exist, create it with owner-readable-only file permissions.
It is also recommended to set alertnotify so you are notified of problems;
for example: alertnotify=echo %s 

mail -s „Bitcoin Alert“ admin@foo.com

Die Variable “rpcpassword”, die angezeigt wird, ist einmalig für jedes System.Wir kopieren den Benutzernamen und das passwort direkt per echo in die conf-Datei.  Alternative darf man auch tippen. 🙂

echo rpcuser=bitcoinrpc >> ~/.bitcoin/bitcoin.conf
echo rpcpassword=XXXXXX >> ~/.bitcoin/bitcoin.conf

(Achtung: Natürlich nicht XXXXXX als Password angeben! mit ssh/putty kann man das angezeigte passwort markieren und per Rechtsklick an die richtige Stelle kopieren)

Jetzt starten wir den Bitcoin Core daemon richtig:

bitcoind -daemon

Man erhält eine kurze Info, dass der daemon läuft. Um mit dem Prozess zu interagieren, benutzt man das Kommande bitcoin-cli (Bitcoin command line interface). Beitte beachten: Es bracht ein paar minuten, um den Bitcoin Core zu starten, wird wann immer man bitcoin-cli: eintippert

error: {"code":-28,"message":"Verifying blocks..."}

angezeigt. Beim ersten Start wird auch zuerst mal die komplette Blockchain runtergeladen und komplett mit wechselnder Difficulty durchgerechnet und geprüft, um die Konsistenz zu gewährleisten. Je nach System und Anbindung gehen dabei schon mal 24-36 Stunden drauf (Stand heute). Aber zumindestens wird nach dem Hochfahren der Daemon nach Eingabe von

bitcoin-cli getinfo

schon mal der aktuelle Fortschritt dieses Prozesses angezeigt.

Desweiteren reagiert die full Node nach den start auch auf die folgenden Anfragen, die man einfach nur mit „-“ hinter bitcoin-cli hängen muss: getblockchaininfo, getnetworkinfo, getnettotals, getwalletinfo, stop, und help. So kann kann man zum Beispiel durch Eingabe von:

bitcoin-cli stop

den Daemon kontrolliert stoppen. Einekomplette Befehls- und Optionsliste findet sich bei Bitcoin.org developer reference.

Insbesondere während des downloads und des Validierens der Blockchain braucht der Daemon eine Menge Netzwerbandbreite, Prozessorressourcen und vor allem RAM, das er sich großzügig zuteilt.

Optional: Die Full Node beim Systemstart im Userspace starten

Wer seine Node bei jedem Systemstart mitlaufen lässt, unterstützt aktiv das Bitcoin-Netzwerk. Da wir hier aber sowieso eine dedizierte Full Node starten wollen, nutzen wir einen Cronjob im Userspace, um die Full Node beim Systemstart wiederzubeleben. Der einfachste Weg auf Ubuntu ist das Editieren der benutzereigenen Crontab mit

crontab -e

Dort einfach am Ende die folgende Zeile einfügen (Zeilenumbruch am Ende nicht vergessen!):

@reboot bitcoind -daemon

Speichern und fertig, den Rest erledigt die Contab.

Als Ubuntu Experte kann man natürlich auch ein init-Script wie Upstart script nutzen.

Eventuell ist es notwendig eingehende Verbindungen durch eine Firewall zu erlauben, wenn der Computer zu Hause steht und/oder hinter einem Router steht. Mehr Detail dazu im Network Configuration Bereich.

 

Mindestandforderungen and die Hardware, Sicherheitshinweise und was man sonst so beachten sollte, wenn man eine Full Node betreiben möchte

Das Betreiben einer Full Node benötigt keine beonderen Anforderungen, dennoch sollte man sie nicht auf einem Produktivsystem oder gar einem Webserver o.ä. betreiben. Es ist davon abzusehen, seine Wallet darauf zu installieren, außer man weiß genau, was man tut und welche Risiken damit verbunden sind!

Mindestanforderungen (Stand heute)

Die Blockchain ist bereits heute mehr als 30GB groß. Sollten übergroße oder 1-Minuten-Blöcke Wirklichkeit werden, wird diese Größe sprunghaft ansteigen. 80-100 GB Festplattenplatz geben für die Zukunft etwas Spielraum nach oben. Mehrkernsystem ist immer der Vorzug zu geben, um das System bedienbar zu halten – ob Intel, Atom, ARM, Celeron oder AMD (hier wurden bewußt Marken und Produktlinien gemischt) ist egal. Was „mehr Hubraum“ für Motoren, ist „mehr RAM“ für Computersystem. 2 GB sind schon wenig, 4 GB RAM sind okay – mehr ist eigentlich nur notwendig, wenn der Rechner noch andere Aufgaben haben sollte. Grundlage sollte Ubuntu 14.10 (Utopic Unicorn) mit 64Bit sein. Wer sich auskennt sollte eine Minimal-Installation wählen, um unnütze Dienste und potentielle Einfallstore erst gar nicht zu installieren. Ob dedizierter root-server oder Virtuelle Maschine tut sicht praktisch nichts.Wichtig ist eher, dass die Internetanbindung in Form einer Flatrate angeboten wird, die auch nicht in der Bandbreite begrenzt wird, wenn ein bistimmtes Volumen überschritten wird. Man achte auf Zusagen wie

Aller Traffic ist inklusive (Flatrate). Es erfolgt keine Drosselung der Bandbreite. (unlimitierte/unmetered Flatrate)

und Anbindungen von mindestens 100 Mbit/s. „Best Effort“ anstelle von „garantiert“ sollte reichen.Empfehlung

Wer noch einen alten Rechner unnütz herumstehen hat, kann den nutzen, doch um die Stromrechnung und die Internetleitung zu schonen, kann ich zur Zeit nur www.euserv.de empfehlen.Die haben praktisch immer sehr gute Angebote  – insbesondere in der Sparte „Sonderangebote“.  Das wissen auch viele Webmaster und Admins zu schätzen, daher muss man sich gelegentlich auf lange Wartezeiten einstellen, wenn man „richtige“ Server haben will und keine virtuellen Maschinen. Dafür kostet ein Misurfi LC5 auch nur 5.95 EUR im Monat bei einmalig 11,90 EUR Einrichtungsgebühr. Falls die entsprechende Hardware nicht verfügbar ist, wird upgeradet – kostenlos (kann ich nicht versprechen, habe ich aber schon 2x erlebt). Die Angebote von www.euserv.de sind somit auch für einfache Webserver für 4-5 Kunden interessant  oder einfach als Server für Experimente.

Sicherheit geht vor

Ich würde immer mit einem Minimal-System starten und einen Server nur mit ssh/putty an der Konsole bedienen. So beliben Resourcen frei, die sonst durch einen überflüssigen Desktop belegt werden. Der Port für den SSH-Server legt man am besten auf eine nicht-standard -Portnummer über 10.000. Das macht man durch editieren der /etc/sshd_config mit

Port xyz
und anschließendem Neustart des SSH-daemon mit

sudo /etc/init.d/ssh restart
oder
sudo service ssh restart

Manche Leute mögen eine Konfigurationsoberfläche zum Administrieren einer Servers. Wer das zum Anlegen eines Users, Updates und Upgrades oder für diese oder jene Bequemlichkeit braucht, sollte solche Oberflächen nur bei Bedarf starten, d.h. sie gehören nicht beim Systemstart als Dienst gestartet und  ordentlich beendet, wenn man sich (per SSH) ausloggt. Beispiel hier ist Webmin: Start mit

/etc/webmin/start

und beendet mit

/etc/webmin/stop

Ein User für unsere Full Node.

Für unsere Full Node brauchen wir einen User, der den Prozess startet als als den man sich einloggen kann. Da wir nur einen davon brauchen, ist das schnell mit

sudo adduser BENUTZERNAME --home /home --shell /bin/bash

erledigt. Als Passwort kann ich nur 12 Zeichen mit einer wirren Mischung aus Ziffern, Groß- und Kleinbuchstaben sowie mehreren Sonderzeichen empfehlen!