Raspberry Pi & bitcoin full node

De raspberry Pi kan vele taken overnemen en dat bij gebruik van een kleine hoeveelheid energieverbruik. Zo heb ik momenteel op 1 Raspberry Pi 3b een applicatie draaien om add-ware te blokkeren in mijn internetverkeer (via de toepassing Pi-Hole), en nu draait er sinds kort een applicatie op om de Raspberry Pi in te zetten als ‘node’  in het netwerk voor de Bitcoin (niet om te ‘minen’ en geld te verdienen (hetgeen al onmogelijk is gezien de enorme mining farms buiten Europa), maar wel om betaalopdrachten te controleren & valideren). Ook draait er RPI-monitor op, waarmee ik in 1 oogopslag via een webpagina status-informatie kan uitlezen (zoals temperatuur van de CPU (per 1, 5, en 10 minuten), vrije ruimte op diverse partities en harde schijven).

Hoe ik e.e.a. heb opgezet, met de Raspberry Pi en een (externe) USB harde schijf, dat zal ik in dit artikel uiteenzetten. Dan heb ik tevens een notitie beschikbaar voor als ik eens een (her)installatie moet doen.

Ook waar ik informatie van gebruikt heb, zal ik de hyperlink in de post bijsluiten.

Wat doet een full node in het Bitcoin netwerk?

Zoals eerder gemeld, dit artikel helpt je om een Raspberry Pi als een node in te zetten in het Bitcoin netwerk, en niet om mee te minen (het ‘zoeken’ naar bitcoins, waar naast veel tijd, ook energie en een (beperkte) beloning tegenover staat. Een ‘node’ kan iedereen actief hebben om de communicatie van transacties te optimaliseren: hoe meer nodes, hoe minder gevoelig voor evt. uitval, en meer alternatieve routes er benut kunnen worden. Daarnaast, elke node helpt mee met het controleren van transacties door het bijhouden van een blockchain, een grootboek waarop alle transacties vanaf het verleden tot heden in zijn weggeschreven. Zodra meerdere nodes 1 transactie hebben gecontroleerd, wordt deze bij alle nodes bijgeschreven in de blockchain.

Benodigdheden

Om de Raspberry Pi in te zetten, zijn de volgende materialen noodzakelijk:

  • 1 Raspberry Pi (advies is de model 3b, met oog op quad-core processoren (1,2 GHz), 1Gb intern RAM geheugen);
  • 1 micro-SD kaart, met 8Gb capaciteit. Grotere mag, maar ik ga de SD-kaart alleen gebruiken voor initieel opstarten (‘booten’), waarna de harde schijf alles over neemt.
  • 1 bijbehorende voeding van minimaal 2,5 Ampere (ook met het oog op het voeden van de harde schijf)
  • 1 externe USB harde schijf (minimaal USB 2.0). Voor circa 50 EUR is een schijf van 500Gb vaak al (ergens) te vinden, of hergebruik een schijf die je mogelijk thuis hebt rondslingeren.
  • 1 behuizing voor de Raspberry Pi
  • Additioneel: een setje koellichamen, al is het meer uit voorzorg om ‘throttling’ van de CPU te voorkomen bij temperaturen > 70 graden Celsius.

Door de grote hoeveelheid data, raadpleeg je internet-abonnement. Het lijkt mij vandaag de dag niet langer meer actueel, maar mocht je een datalimiet bij je provider hebben, dan zou ik zeker niet het draaien van een bitcoin node adviseren

Plan de campagne

In het kort de stappen:

  1. installeer van NOOBS de software op de SD-kaart (geformatteerd als FAT) en plaats deze in de Raspberry.
  2. Na opstarten installeer NOOBS de Raspbian met PIXEL (grafische schil)
  3. De-installeer overbodige zaken (applicaties als LibreOffice en dergelijke);
  4. Update je Raspberry Pi naar recente Raspbian software
  5. Activeer SSH (om remote beheer mogelijk te maken)
  6. Maak voor de Raspberry Pi een vast ip-adres aan (in router, maar ook in Raspbian);
  7. Zet het videogeheugen van 64Mb naar 16Mb
  8. Partitioneer de USB hard disk.
  9. Verplaats alle informatie van de SD-kaart naar de hard-disk zodat opstarten daar verder verloopt;
  10. Installeer de Raspberry Pi Full node software en laat deze de initiele blockchain binnenhalen. Waarschuwing: dit duurt afhankelijk van je internetsnelheid enkele weken…
  11. Open poort 8333 voor het Bitcoin netwerk om de communicatie tot stand te brengen;
  12. optioneel: installeer Pi-Hole (software om reclame te filteren)
  13. optioneel: installeer RPI monitor (software om je Raspberry via een webpagina/smartphone snel te controleren)
Installeer NOOBS

NOOBS (New Out Of the Box Software) is te downloaden bij de Raspberry pi website

Formatteer de micro SD kaart als FAT file-system, en kopieer de (uitgepakte) bestanden van de NOOBS_archief in zijn geheel naar de SD-kaart.

Het kan ook mogelijk zijn om een kale of ‘lite’ versie Raspbian te gebruiken, echter… ik beschrijf hoe ik e.e.a. werkend heb gekregen 😉

Installeer Raspbian

Na het plaatsen van de micro SD kaart in de Raspberry Pi, het aansluiten van toetsenbord, muis, en beeldscherm, kan de voeding ingeschakeld worden voor de installatie.

Volg de instructies, kies je taal en keyboard-layout (ik koos voor engelstalig en US keyboard layout). Voor installatie van het soort pakket, koos ik voor Raspbian met Pixel (grafische schil a la Windows/OSX).

Nadat deze geinstalleerd is, zal Raspbian standaard opstarten vanaf SD-kaart, en Pixel openen.

In tussentijd kun je eventueel zelf eens rondkijken, en bijvoorbeeld je tijdzone naar wens selecteren.

De-installeer overbodige applicaties

Er kunnen vele honderden Megabytes gewonnen worden door verwijderen van apps die je niet meer gebruikt op de Raspberry Pi (als je die als device in het netwerk bij je router inzet voor o.a. firewall, blokkeren van add-ware etc.). Ook straks het copieren zal iets vlotter verlopen van overbodige zaken:

Een aantal ruimt met deze commando al aardig op (uit te voeren vanaf de command line/prompt):

sudo apt-get purge libreoffice wolfram-engine sonic-pi scratch
sudo apt-get autoremove

Er zijn nog meer applicaties te verwijderen, maar deze vormen al een groot deel van software die veel ruimte in beslag nemen. Wellicht dat deze stap(pen) kunnen vervallen bij het gebruiken van een Debian-lite versie (een kale versie van Debian, zonder vele applicaties).

Update je Raspbian software naar recente versies

Ontwikkelingen gaan snel, zeker met software, dus voer voor je verder gaat de volgende commando’s uit om de laatste software (inclusief firmware voor de Raspberry) binnen te halen:

sudo apt-get update
sudo apt-get dist-upgrade

Daarmee is de meest recente software (en stabiele firmware) op je Raspberry aanwezig, welke actief wordt na een herstart. Laat je RPI dus rustig even rebooten!

Activeer SSH op je Raspberry Pi

Vanuit Raspbian PIXEL (de GUI) kun je eenvoudig SSH activeren. SSH maakt het mogelijk om vanaf je andere computer (laptop, desktop) in het netwerk remote beheer te doen, waarbij de Raspberry niet aangesloten hoeft te zijn op keyboard, muis en beeldscherm. Ideaal 🙂

Vanaf de command line is dit ook mogelijk:

sudo raspi-config

  • kies Interfacing options
  • Navigeer naar SSH en selecteer deze
  • Kies Yes
  • Kies OK
  • Kies Finish (en reboot om e.e.a. te activeren).

Je kan nu via ‘ ssh pi@<ip_adres_van_je_raspberry>’ remote inloggen en beheer-taken uitvoeren.

Wijs een vast IP-adres toe aan je Raspberry Pi

Standaard zal DHCP services op je Raspberry of op je router instellen dat je Raspberry een uniek IP-adres krijgt toegewezen. Echter voor server/service doeleinden is het handiger om op je Raspberry dit zelf voor jouw netwerk handmatig te fixeren/forceren.

Ik heb hierbij gebruik gemaakt van deze informatie

Maak een copie van de huidige netwerkinstellingen

sudo cp /etc/dhcpcd.conf /etc/dhcpcd.conf.org

Stel een vast IP-adres in via:

sudo nano /etc/dhcpcd.conf

Aangezien de Raspberry Pi straks met een Ethernet (bekabelde) verbinding aan de (mijn) router hangt, zoek je in het bestand dhcpcd.conf naar de term ‘eth0’. Ik wijs hier het ip-adres 192.168.1.30 toe aan de Raspberry Pi. Voor jouw situatie kan/mag dat anders zijn, iets om te controleren.

interface eth0
 static ip_address=192.168.1.30/24
 static routers=192.168.1.1
 static domain_name_servers=8.8.8.8

Sla de wijziging op via de combinatie CTRL X, Yes, ENTER

en herstart de netwerk-instellingen via

sudo reboot -h 0

met commando ifconfig kun je zien of je Rpi nu het juiste ingestelde netwerkadres heeft:

sudo ifconfig 

Nu worden van alle netwerk-connecties o.a. ip-adres, gateway en mask getoond. Met ‘ping 8.8.8.8’ zou je kunnen controleren of je nog een internetverbinding hebt, die contact kan maken met Google.

Zet je videogeheugen van 64Mb naar 16Mb

Om geheugen vrij te maken (en er geen games of video op afgespeelt wordt) heb ik de Raspberry ingesteld om maximaal 16Mb voor videogeheugen te reserveren.

op de command line toets in:

sudo raspi-config

  • Selecteer (met tab-toets/cursor toets) item ‘Memory Split’
  • En kies 16Mb voor GPU (Graphics Processing Unit) item.
  • Na opslaan en afsluiten, wordt dit actief na een herstart.

Omdat we de Raspberry zonder scherm gebruiken, SSH benut wordt voor beheer, kan de Raspberry sneller opstarten via de command line ipv via Pixel (de GUI).

In raspi-config zoek daarbij naar Boot options -> Desktop/CLI –> B1 Console

Na opstarten zal Raspberry wachten op een geldige login-actie.

De externe USB harde schijf configureren

Sluit nu op een USB poort je USB harde schijf aan. Dit mag een USB 2.0 of 3.0 variant zijn, de Raspberry ondersteunt USB 2.0

We gaan de SD-kaart ontlasten, zodat alle schrijf-acties niet op de SD-kaart plaats vinden maar op de hard disk.

Eerst zullen we moeten partitioneren (partities aanmaken), en deze mounten, waarna verdere instellingen zorg dragen dat de hard disk in het boot proces benut wordt.

Ikzelf heb hier een 500Gb Western Digital Elements harde schijf voor ingezet. Als partities heb ik de volgende indeling gemaakt (met deze bron en deze als support)

 

 

 

De 500 Gb hard disk (kenmerk ‘sda’) is voorzien van:

  • een 30 Gb grote partitie (/dev/sda1) waarop Raspbian komt te staan, en er ruimte over blijft voor additionele software (zoals bijvoorbeeld Pi-Hole en RPI-monitor);
  • een 5 Gb grote partitie (/dev/sda2) voor swap (tijdelijke bestanden) weg te schrijven voor de Raspberry. Minimaal zou je kunnen volstaan met 2x de maximale geheugen van de Raspberry (2x 1Gb, dus 2Gb), maar 5Gb is zeker ruim bemeten.
  • de overige ruimte (ca 430 Gb) is voorzien om als mount-schijf (/dev/sda3) de data voor de bitcoin node (de gehele blockchain is ca 110Gb groot medio juli 2017). Dus hiermee kan de Raspberry voorlopig mee vooruit.

Dus koppel je USB hard disk aan de Raspberry en laat deze opstarten.

Vanaf de command line voer de volgende commando’s uit:

sudo fdisk -l

een overzicht van devices wordt getoond (o.a. van de SD-kaart waarvan je opgestart bent). Zoek naar het device ‘/dev/sda’. Dit is jouw externe harddisk die herkend wordt (als het goed is zonder partities).

Nu gaan we partities aanbrengen (in het voorbeeld: 1 partie van ca. 30Gb, 1 swap partitie van ca. 5Gb, en de rest voor de bitcoin informatie (ruim 150Gb).

sudo fdisk /dev/sda

Creeer de root partitie (van ca. 30Gb):

  • Voer ‘n’ in en geef ENTER
  • Voer ‘p’ in voor primary partition
  • Voer ‘1’ in voor eerste partitie (/dev/sda1)
  • Selecteer de default/standaard start-sector (dus ENTER geven)
  • Voer in ‘+30G’ om een partitiegrootte van 30Gb te maken

Creeer de swap partitie (van ca. 5Gb (advies: minimaal 2x je intern geheugen, dus minimaal 2Gb bij een Raspberry Pi 3b)

  • Voer ‘n‘ in en geef ENTER
  • voer ‘p‘ in voor primary partition
  • Voer ‘2‘ in voor tweede partitie (/dev/sda2)
  • Selecteer de default/standaard start-sector (dus ENTER geven)
  • Voer in ‘+5G’ om een partitiegrootte van 5Gb te maken
  • Voer ‘t‘ in voor het type partitie toe te wijzen
  • Voer ‘2‘ in voor de tweede partitie
  • Voer ‘82‘ in voor Swap partitie (swap Linux / Solaris)

Creeer de data partitie waar we alle data van de Bitcoin blockchain opslaan:

  • voer ‘n‘ in en geef ENTER
  • voer ‘p‘ in voor primary partition
  • Voer ‘3‘ in voor derde partitie (/dev/sda3)
  • Selecteer de default/standaard start-sector (dus ENTER geven)
  • Selecteer de default/standaard EIND sector zodat de resterende ruimte op de harde schijf hieraan toegewezen wordt (dus ENTER geven)

Met ‘p‘ kun je een kort overzicht laten weergeven van de partities.

Toets ‘w‘ om de partities weg te schrijven en FDISK te verlaten.

Nu het formatteren van de partities (de /dev/sdaX zijn aangehouden van mijn voorbeeld maar KUNNEN verschillen bij jouw situatie):

sudo mkfs.ext4 /dev/sda1
sudo mkfs.ext4 /dev/sda3

initialiseer de swap partitie:

sudo mkswap /dev/sda2
sudo swapon /dev/sda2

Het copieren van de data van SD-kaart naar harde schijf

Nu kunnen we data overzetten naar de hard disk, zodat de Raspberry initieel vanaf SD-kaart opstart, en al snel overschakelt naar de externe harde schijf (en daarmee de SD-kaart effectief slijtage door schrijf-acties tijdens gebruik voorkomt)

Eerst gaan we de nieuwe root partitie (in dit artikel /dev/sda1) mounten (koppelen/aanmelden), waarna de harde schijf gevonden kan worden in de subdirectory /mnt onder Raspbian:

sudo mount /dev/sda1 /mnt

Nu gaan we de gehele structuur van SD-kaart overzetten naar de harde schijf middels een copieer actie van RSYNC:

sudo rsync -avz --exclude '/mnt' / /mnt

Hierna zal het copieren starten, dit kan afhankelijk van type Raspberry, omvang van data etcetera. even duren. Tijd voor koffie/lunch

Nadat de copy-actie gelukt is, moeten we de nieuwe partitie op de hard disk laten mounten bij opstarten (anders blijft Raspberry vanaf de SD-kaart starten):

sudo nano /mnt/etc/fstab We verwijzen nog naar de gemounte hard disk vandaar /mnt/…

Ik heb met een ‘#’  (hashtag) de oorspronkelijke partitie op de SD-kaart gedeactiveerd.

Je ziet de swap partitie (/dev/sda2) opgenomen in de lijst,

alsmede de nieuwe root (die nu naar de hard disk is gekopieerd (/dev/sda1) als de bitcoin partitie (/mnt/pidrive) (de pi-drive mount komt in het volgende item aan bod, bij installatie van de Bitcoin software)

fstab bij raspberry pi
Overzicht van /etc/fstab

 

 

 

 

Verwijder tevens de oude (swap) files op de hard disk via:
sudo rm /mnt/etc/rc?.d/*dphys-swapfile
sudo rm /mnt/var/swap

Nu maken we eerst een copie van cmdline:
sudo cp /boot/cmdline.txt /boot/cmdline.org

en nu wijzigen we de cmdline.txt:
sudo nano /boot/cmdline.txt

Nieuwe /boot/cmdline.txt met verwijzing naar /dev/sda1 hard disk

Daar waar in de regel (zie afbeelding) initieel een andere text stond (bv iets met ‘mmbclk…’) dat dient nu aangepast te worden naar de nieuwe root (in ons artikel ‘/dev/sda1’)

Sla de aanpassingen op (CTRL X, Yes)

Nu zijn de aanpassingen gereed, en zou als alles goed is de Raspberry bij opstarten eerst een stukje op de SD_kaart lezen, en vervolgens de verdere boot-procedure vanaf de harde schijf uitvoeren.

Voer het commando ‘sudo reboot‘ in en kijk of na het opstarten je weer op de command line terecht komt. If so: congratulations! If not, try again 😉

De installatie van de Bitcoin full node software

Nu een en ander is voorbereid, kan de software voor de Bitcoin full node gereed gezet worden. Hierbij heb ik initieel (en met succes) informatie benut van dit artikel. Aangezien we een aantal zaken al geregeld hebben, beschrijf ik hier de nog uit te voeren stappen.

De harde schijf (/dev/sda) heeft reeds enkele partities, en 1 partitie (hier : de grootste, /dev/sda3) is toegewezen voor de Bitcoin activiteiten.

Mount de partitie voor de bitcoin-data:

sudo mkdir /mnt/pidrive

Noteer de PARTUUID van de partitie:

sudo blkid

en copieer de regel met /dev/sda3 (je ‘bitcoin’ partitie) de data na PARTUUID (zie afbeelding)

De PARTUUID van de bitcoin partitie

 

 

 

Open nu etc/fstab en voeg de PARTUUID toe (zie eerdere afbeelding in dit artikel):

PARTUUID="d9e4ca8c-03" /mnt/pidrive ext4 defaults 0 0

Na het opslaan (CTRL X, Yes), zal de hard disk met de partitie voor de bitcoin data automatisch gemount worden in de folder /mnt/pidrive

controleer (evt. na een herstart) met het commando:
df -h

/dev/sda3 (424Gb voor Bitcoin partitie) is succesvol gemount

 

 

 

 

 

Nu gaan we de software installeren met voldoende opslagruimte (>400Gb voor bitcoin data, en 30Gb voor overige raspberry software). Hierbij heb ik gebruik gemaakt van deze bron (die beschrijft ook een deel aan voorbereidingen, partitioneren/formatteren etc.).

sudo apt-get install git autoconf libevent-dev libtool libssl-dev libboost-all-dev libminiupnpc-dev

De bitcoin UASF BIP148 software:
mkdir ~/bin
cd ~/bin
git clone git://github.com/UASF/bitcoin -b 0.14-BIP148
cd bitcoin
./autogen.sh
./configure --enable-upnp-default --disable-wallet --disable-bench --disable-zmq --without-gui --prefix=/usr/
make
make check

als hierna de software succesvol is geinstalleerd, voer dan pas de volgende stappen uit:
sudo make install
rm -R ~/bin

Maak een Bitcoin opslag & authoriseer (nieuwe) user ‘bitcoind’:
sudo mkdir -p /mnt/pidrive/.bitcoinData/
sudo useradd -r bitcoind
sudo chown bitcoind:bitcoind /mnt/pidrive/.bitcoinData

Maak een systeem service aan:
sudo nano /lib/systemd/system/bitcoind.service
en voeg in toe:
[Unit]
Description=Bitcoin's distributed currency daemon
After=network.target
[Service]
User=bitcoind
Group=bitcoind
Type=forking
PIDFile=/mnt/pidrive/.bitcoinData/bitcoind.pid
ExecStart=/usr/bin/bitcoind -daemon -pid=/mnt/pidrive/.bitcoinData/bitcoind.pid \
-conf=/etc/bitcoin/bitcoin.conf -datadir=/mnt/pidrive/.bitcoinData -disablewallet
Restart=always
PrivateTmp=true
TimeoutStopSec=60s
TimeoutStartSec=2s
StartLimitInterval=120s
StartLimitBurst=5
[Install]
WantedBy=multi-user.target

(kies CTRL X, Yes om op te slaan)
Voer nu uit:
sudo ln -s /lib/systemd/system/bitcoind.service /etc/systemd/system/multi-user.target.wants/bitcoind.service

Maak een configuratie bestand voor Bitcoin aan:
sudo mkdir /etc/bitcoin
sudo nano /etc/bitcoin/bitcoin.conf

en voeg in toe:
maxmempool=50
rpcuser=makeupanyusernamehere
rpcpassword=makeupanysecretpasswordhere

Voer nu uit:
sudo service bitcoind start

Hiermee worden processen gestart, en zal de eerste dagen/weken besteed worden aan het binnenhalen van de blockchain.

Wel dient jouw router nog aangepast te worden, en verkeer van het bitcoin node netwerk doorgestuurd te worden naar je Raspberry Node.
Hoe dit moet is per router /merk verschillend, maar is wel noodzakelijk om meer dan 8 connecties goed te kunnen bedienen.
Als voorbeeld heb ik mijn setting op de FritzBox 6390 hieronder afgebeeld:

 

 

 

Details van port forward op FritzBox rondom port 8333 Bitcoin

 

Als alles in orde is, raadpleeg jouw (externe) ip-adres van je aansluiting via (bijvoorbeeld):What’s my IP en noteer dit adres.

Surf nu naar de website van 21.com, om te controleren of jouw Raspberry Pi nu herkend en benaderd kan worden: BitNodes

Voer daarbij jouw IP-adres in van de eerdere “whats my IP’ site, gevolgd door poort-nummer 8333. Als het goed is zal na enkele minuten bevestigd worden dat je Node bereikt kon worden (en het bijwerken nu loopt).

Het is nu een kwestie om je Raspberry Pi met harde schijf netjes aan te laten staan (en voor lange duur in te bouwen in je meterkast, nabij de router/internet aansluiting). Schattingen lopen uiteen, maar ik verneem (anno juli 2017) dat een Raspberry er initieel 3 weken over doet om gesynchroniseerd te geraken. De CPU load op de Raspberry Pi 3b is laag (2-5%), dus er is genoeg capaciteit over om bijvoorbeeld Pi-Hole (ad-ware blocker), of jSunnyReports (monitoring van je PV-installatie) of RPI-monitor hierop te zetten.

Voor op je raspberry heb ik onderstaande informatie nog gevonden. Deze bleken bij mij niet verplicht te zijn, ik beschouw ze dan ook optioneel!
sudo iptables -A INPUT -p tcp --dport 8333 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 8333 -j ACCEPT

Optioneel: Pi-Hole ad-ware blocker

Aangezien de Raspberry toch duimen draait en genoeg reserves heeft, waarom niet gebruik maken van een ad-ware blocker (zoals Pi-Hole) die je internet-verkeer filtert en zeer veel overbodige data tegenhoudt (m.n. commerciele uitingen op websites).

Nu de raspberry draait, kan je via SSH (je kent het wel: ssh pi@<ip-adresRaspberry>) deze software er zo op zetten.

Vanaf de command line op de raspberry uit te voeren :

curl -sSL https://install.pi-hole.net | bash

Vanaf 4:36 is op deze Youtube bijdrage de stappen goed te volgen:

Optioneel: RPI Monitor

Niets zo handig om een (HTML5) webpage te zien met status-informatie van je Raspberry Pi. Gewoon voor de fun, of om te zien hoe zwaar de Raspberry belast wordt.

Overzicht van RPI monitor, met (realtime) status informatie van je Raspberry. Ook andere in het netwerk aanwezige Raspberry’s kun je zo monitoren!

Met RPI Monitor is dat mogelijk, en de installatie ervan is recht-toe-recht aan hier beschreven

Zoals je ziet zijn met de Raspberry Pi vele doelen te bereiken en dat met minimale investering(en) in hardware en software. Sterker nog, voor een kleine 5-8Watt (geschat) draait je Raspberry thuis een goede filter op reclames, terwijl duimendraaiend ook Bitcoin als node de transacties valideert.

Beveiliging

Je maakt gebruik van het account ‘pi’ en daar is standaard een default wachtwoord aan toegewezen.

Advies is om na alle configuratie/installatie-activiteiten je account ‘pi’ te voorzien van een nieuw (veilig) wachtwoord:

Indien je ingelogd bent als ‘pi’ op je Raspberry, toets dan in

passwd

en voer het huidige & twee keer een nieuw wachtwoord in. Bij de volgende keer aanmelden moet je je nieuwe wachtwoord benutten.

Nawoord

Tenslotte nog een nawoord. Ikzelf draai al enige maanden een Raspberry Pi met Pi-hole die mijn netwerk schoon houdt van ad-ware. Daar deze low-power oplossing nog ruimte in processor-capaciteit en opslag-capacititeit over heeft, heb ik gekeken wat er nog meer mee mogelijk is. En gezien ik sinds enkele weken ‘iets’ met Bitcoins doe (ben me er eens op gaan verdiepen, en de open organisatie spreekt mij erg aan, mede met goede cryptografische beveiligingen). Nu lees/hoor ik vaak op het nieuws berichten van “Bitcoin wordt voor criminele zaken benut”, maar wat mij opvalt is dat het huidige contante geld daar ook voor (helaas) leent. Dus als nieuws/journalisten daar zo op hameren, zou ook contant geld eenzelfde aandacht moeten verdienen.

Nu weet ik uit ervaring dat het overmaken van een bedrag via Bitcoin soms snel (binnen 5-10 minuten) gaat, maar ook soms traag (ruim 1 uur tussen verzending & bevestiging), en er een aanstaande wijziging mogelijk optreedt die de miners meer macht gaat geven, heb ik mijn Raspberry geconfigureerd om de ‘power to the people’ te behouden. Door bovenstaande software steun je de UASF (User Activated Soft Fork), en ondersteun je de wijzigingen/vernieuwingen zoals beschreven in BIP 148 (BIP=Bitcoin Improvement Proposal, zeg een hedendaagse ‘Request for Change’ zoals in IT-projecten bekend is). Een belangrijke (peil) datum zal 1 augustus 2017 a.s. zijn, waarop dan bekend is hoe de Bitcoin zich verder ontwikkeld. Een soft-fork is ‘forward compatible’ met toekomstige ontwikkelingen, waar een hard-fork (waar met name de miners een voorstander van blijken te zijn) dat niet zijn.

Dit alles kan betekenen dat de miners (die de bitcoins ontdekken via langdurige complexe berkeningen) niet tevens de macht krijgen om o.a. transactie-fees (vergoedingen) te gaan bepalen. Ik vind het daarom belangrijk om met de kleine Raspberry een bijdrage te leveren aan het open houden van de Bitcoin gedachte & het onderhouden van een fijnmazig netwerk van nodes voor het optimaal verwerken van transacties. Mijn Raspberry heeft nu iets over de 80% van de Bitcoin blockchain binnengehaald sinds 22 juni 2017 j.l.

Wil je meer hierover (UASF, BIP148, SegWit etc.) lezen, dan kan ik deze (engelstalige) bron aanbevelen.

7 Comments

  1. FYI, de Raspberry pi staat op een conservatief regime te werken. Dwz het powermanagement laat de 4 cores snel terugschakelen. Mocht je gedurende deze initiele load van de blockchain vol vermogen willen hebben (wie weet om tijd te winnen):

    echo “performance”| sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

    Nu werken de 4 cores op maximale snelheid (fixed op 1.2GHz). koellichamen zijn dan wel aan te raden (met warmtegeleidende pasta ertussen)

    Update 8 juli: Ik merk dat 4 cores op maximale snelheid niets verbeteren op het inlezen & verwerken van de blockchain. Dus laat gerust je Raspberry op een conservatieve (‘ondemand’) performance regeling staan, daar blijft je SoC (System on a Chip) ook koel bij. Bij 4 cores, maximaal belast op elk 1.2GHz, geeft temperaturen van 70-71 graden Celsius op (uitgerust met een koellichaam). Afkoelen met een 30cm buro-ventilator laat de temperatuur dalen naar 39-40 graden C. op deze maximum setting 😉

  2. Indien een vriend/vriendin ook een Full Node wil draaien, is het kopieren van de (gedeeltelijke) block chain mogelijk. Hiervoor moet de 2e Raspberry uiteraard wel een uniek IP-adres hebben.
    Met het commando ‘SCP’ (Secure Copy) hebben we de .bitcoinData folder (en onderliggende files + folders) gecopieerd over 100Mbit ethernet (bij 122Gb data, is dat geschat 4-4,5 uur arbeid).

    Stop eerst het bitcoin proces (‘sudo service bitcoind stop‘);

    navigeer naar de folder/mount waar de bitcoin-data /block chain staat.

    Zorg dat de andere Raspberry Pi opgestart en connect met zijn IP-adres op het netwerk (bv op ip-adres : 192.168.1.10) en zijn hard disk partitie goed gemount heeft voor de (te ontvangen) block chain.

    toets in op de (bron) Raspberry (de zender..hier als 192.168.1.40) als user pi:
    sudo scp -r pi@192.168.1.40:/mnt/pidrive/.bitcoinData pi@192.168.1.10:/mnt/pidrive/

    Als alles goed is zou het copy-proces (incl. folders) starten nadat op de (doel)raspberry het juiste wachtwoord ingevoerd wordt.

    daarna niet vergeten de service weer te (her)starten middels ‘sudo service bitcoind start

  3. let op, bovenstaande stappenplan zet een Full Node op waarbij op IP v4 protocol e.e.a. gekoppeld wordt met het internet. De laatste ontwikkelingen zorgen voor protocol IP v6, en daar kan de Raspberry Pi (met deze full node software) ook mee overweg.
    Stappen hiervoor (naast IPV4 ook IPV6 compatibiliteit in te stellen) zijn:
    connect met SSH met je Raspberry en log in (SSH pi@);
    sudo nano /etc/modules
    voeg als laatste regel toe in /etc/modules: ipv6
    en sla op (CTRL-X, Yes)
    Herstart je Raspberry (sudo reboot -h 0)
    na herstarten connect weer met SSH met je Raspberry
    sudo nano /etc/dhcpcd.conf om te bewerken
    zoek de regel met ‘slaac private‘ en plaats een hash-tag (‘#’) voor ‘slaac private’ en voeg vervolgens de regel toe :
    slaac hardware
    Bewaar het bestand (CTRL-X, Yes).
    Na een herstart van de Raspberry, is het IP V6 address vast gezet op hardware (MAC) adres van je Ethernet interface (veelal ‘eth0’).

    Nu dien je in je router ook voor IPv6 een port-forward naar het IP v6 adres van dezelfde raspberry te zetten, en zal daarna je Raspberry zowel op IPv4 als IPv6 adres de bitcoin activiteiten ondersteunen!
    Om te testen:
    netstat -na | grep 8333 toont alle connecties op IPv4 en IPv6.

    IP v4 ping-test: ping 192.168.1.
    IP v6 ping-test (voorbeeld Mac OSX): ping6 2001:980:ce79:1:ba27:ebff:fe86:65a5 voor het IP v6 adres

  4. Met RPi-monitor heb ik gegevens verzameld omtrent het aantal verbindingen op poort 8333. Zoals je ziet, heeft mijn Full Node zo rond de 60-65 connecties, met een enkele piek op 81-82 connecties (dit alles met standaard software, standaard configuratie)>
    Aantal verbindingen op/met mijn Raspberry full node

  5. Betreffende (nieuwe) firmware/kernel updates d.m.v. het rpi-update commando.
    Dit commando haalt nieuwe (en relatief) ongeteste firmware binnen die mogelijk negatieve invloed kunnen hebben op de Raspberry. Daarom is mijn advies te blijven bij de standaard kernel/firmware.
    Laat elke 2-3 maanden de raspberry pi controleren op updates via
    sudo apt-get update
    sudo apt-get dist-upgrade

    en herstart indien nieuwe packages zijn geinstalleerd.

    Om de originele firmware/kernel terug te zetten voer het volgende commando uit:
    sudo apt-get install --reinstall raspberrypi-bootloader raspberrypi-kernel
    en herstart je Raspberry Pi.

  6. de nieuwe release van Bitcoin node software (v 0.15) is beschikbaar op https://bitcoin.org/bin/bitcoin-core-0.15.0/.

    sudo service bitcoind stop
    en volg deze stappen:

    mkdir ~/bin
    cd ~/bin
    git clone git://github.com/bitcoin/bitcoin -b -0.15
    cd bitcoin
    ./autogen.sh
    ./configure --enable-upnp-default --disable-wallet --disable-bench --disable-zmq --without-gui --prefix=/usr/
    make
    make check

    En daarna:

    sudo make install
    rm -R ~/bin
    sudo service bitcoind start

  7. Daar de Raspberry Pi als bitcoin full node aan het internet is gekoppeld, adviseer ik dringend om enige extra maatregelen van beveiliging te treffen. Al is het alleen maar om verdere (mogelijke) schade te beperken indien je Raspberry gehacked wordt.
    * vergrendel het account ‘pi’;
    * ken een nieuw, uniek en sterk wachtwoord toe aan gebruiker ‘pi’ (‘raspberry’ is het standaard wachtwoord);
    * ken een nieuw, uniek en sterk wachtwoord toe aan gebruiker ‘root’;
    * maak een nieuw account aan (met unieke login-ID en een sterk wachtwoord, die tevens lid gemaakt wordt van de groep ‘sudo’ (zodat dit account beheer kan voeren over de Raspberry, zoals commando’s apt-get update/apt-get distr-upgrade)
    Meer geavanceerde instellingen zijn o.a. uit dit artikel te gebruiken: https://makezine.com/2017/09/07/secure-your-raspberry-pi-against-attackers/

Leave a Reply

Your email address will not be published. Required fields are marked *