Category: bitcoin

Raspberry Pi dedicated bitcoin node with Ubuntu ARM Instructions

In this post, we build a bitcoin node with a raspberry pi.

Requirements

  • Raspberry Pi with 4Gb or more
  • External hardrive 500Gb or more
  • SD card reader

Installing Ubuntu Server

Use these intructions to Install ubuntu server for raspberry pi

Use Ubuntu Server 20.04.1 LTS

Secure Ubuntu

Copy your over to authorized keys over to raspbeery pi with:

ssh-copy-id ubuntu@rasp_ip

Now you can edit sudo vim /etc/ssh/sshd_config and set:

PasswordAuthentication no
PermitRootLogin no
UsePAM no
X11Forwarding no

Reload SSH:

sudo systemctl reload ssh

You can also use this more pedantic openSSH hardening guide

Then you want to enable ufw Uncomplicated firewall - an interface to iptables.

Check the current ufw status with:

sudo ufw status

Allow ssh and enable:

sudo ufw allow OpenSSH
sudo ufw enable

I think by default incoming traffic not in the allowed will be blocked

Install Bitcoin Core

Go to https://bitcoin.org/bin and download the arm version you need:

Importantly you want bitcoin-0.21.0-aarch64-linux-gnu.tar.gz.

I thought this was the one bitcoin-0.21.0-arm-linux-gnueabihf.tar.gz but it is not. Perhaps it is for 32 bit CPU architecture - I'm not sure

Ensure you have your 500Gb or more external storage plugged in and use this tutorial to mount the partition permanently

Download bticoin core, verify and unpack:

cd /opt
sudo wget https://bitcoincore.org/bin/bitcoin-core-0.21.0/bitcoin-0.21.0-aarch64-linux-gnu.tar.gz
sha256-sum bitcoin-0.21.0-aarch64-linux-gnu.tar.gz
# Ensure it matches the given signatures on bticoin.org
tar xzf bitcoin-0.21.0-aarch64-linux-gnu.tar.gz
sudo install -m 0755 -o root -g root -t /usr/local/bin/ bitcoin-0.21.0/bin/*

Now bitcoind and bitcoin-cli should be in your path.

Make a directory on your 500GB plus HD:

cd /mnt/my-hd
mkdir bitcoin

Start bitcoind specifying the datadir:

bitcoind -daemon -datadir=/mnt/my-hd/bitcoin

This should also create a directory in ~/.bitcoin/bitcoin.conf specifying that location.

Now you have to wait for the entire blockchain - journal of transaction from the epoch of bitcoin to download

Ensure you have downloaded the full blockchain by checking the blockcount on bitinfo, then checking what your node block count is:

bitcoin-cli getblockcount
659835

Open up your node to the Internet

Inbound connections need to be enabled for port 8333 from the public internet.

So enable that with the firewall ufw:

sudo ufw allow 8333

Ensure all is good:

udo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
8333                       ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
8333 (v6)                  ALLOW       Anywhere (v6)    

Then you need to do the following things:

  1. Giving your computer a static (unchanging) internal IP address by configuring the Dynamic Host Configuration Protocol (DHCP) on your router.
  2. Forwarding inbound connections from the Internet through your router to your computer where Bitcoin Core can process them.

The above tasks can be done in your router with DHCP address reservation and using NAT (Network Address Translation) port forwarding

You can test connectivity with:

bitcoin-cli getnetworkinfo

Ensure there are inbound connections "connections_in": 0,

or by going to bitnodes

Ensure bitcoind starts at startup - for power failure events

The crontab entry suggested by the full node guide does not work for me.

@reboot bitcoind -daemon

Rather create a file:

sudo touch /etc/systemd/system/bitcoind.service

Add:

[Unit]
Description=bitcoin
After=network.target

[Service]
Type=simple
User=ubuntu
Group=ubuntu

Environment=BITCOIN_PID=/home/ubuntu/bitcoin/bitcoin.pid
Environment=BITCOIN_HOME=/home/ubuntu/bitcoin/.bitcoin

ExecStart=/usr/local/bin/bitcoind
ExecStop=/bin/kill -15 $MAINPID

[Install]
WantedBy=multi-user.target

Then enable and start:

sudo systemctl daemon-reload
sudo systemctl enable bitcoind
sudo systemctl start bitcoind

Update April 2021

The problem is I was using a lot of data.
Which was okay but I think my ISP starts capping (it claims not to though).

2000GB in a month, at about 80GB a day is a problem.
I wasn't even at home during a lot of that time.

bitcoin-node-uses lots of data

So the best thing to do is limit the usage in your bitcoin.conf as suggested by this reddit post.

maxconnections=10
maxuploadtarget=50

That limits the number of connected peers and sets the max upload per day at 50MB - thereafter no historical blocks will be sent over the network. I will play my part but not at the expenses of productivity on my network.

There is also a good article on reducing traffic .

Sources

Installing and Running a Full Node with Bitcoin Core Daemon on Ubuntu 20.04

In this guide I will be showing the steps I used to get a bitcion full node running.
It is based mainly on the bitcoin core full node guide however I also used some info from the Mastering Bitcoin book

Prerequisites

In order to run a full node your computer needs to meet certain performance metrics.

  • Desktop or laptop hardware running recent versions of Windows, Mac OS X, or Linux.
  • 350 gigabytes of free disk space, accessible at a minimum read/write speed of 100 MB/s.
  • 2 gigabytes of memory (RAM)
  • A broadband Internet connection with upload speeds of at least 400 kilobits (50 kilobytes) per second
  • An unmetered connection - download usage is around 20 gigabytes a month, plus around an additional 340 gigabytes the first time you start your node.
  • 6 hours a day that your full node can be left running.

If you meet these requirements you can continue

Install Ubuntu and Bitcoin Core

Install a fresh GNU/linux ubuntu OS instance on your computer, downloadable from ubuntu/downloads

Important to install a fresh OS and verify the hash to ensure it has not been altered - as we are dealing with bitcon and must ensure we are not susceptible to attackers

Once installed, update and upgrade the system.

sudo apt update
sudo apt upgrade
sudo wget https://bitcoin.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-x86_64-linux-gnu.tar.gz
sha256sum bitcoin-0.20.1-x86_64-linux-gnu.tar.gz
# ensure the hash matches the verification signatures
sudo tar xzf bitcoin-0.20.1-x86_64-linux-gnu.tar.gz
# Install the binaries in /usr/local/bin
sudo install -m 0755 -o root -g root -t /usr/local/bin/ bitcoin-0.20.1/bin/*

Now at this point you can decide to go the User interface route

I will be using the Bitcoin core daemon...

Running Bitcoin Core Daemon

Start the daemon

bitcoind -daemon
...Bitcoin Core starting

To interact wih the daemon we use bitcoin-cli:

There are some useful commands, a complete list can be found at bitcoin developer reference

Once started the daemon will start downloading the blockchain, which is over 300Gb now. So ensure to change the data directory to a storage device that is large enough.

Get the current block count by doing:

bitcoin-cli getblockcount
# 194044

The current block count can be found at https://blockchain.info/q/getblockcount
December 14, 2020 10:51 SAST it is 661306

Changing the data directory

By default on linux, bitcoind will put data in:

~/.bitcoin

To change this create a file called ~.bitcion/bitcoin.conf and add the line:

datadir=/your/path

Ensure the node starts at boot time

crontab -e

Scroll to the bottom and add:

@reboot bitcoind -daemon

Networking Setup

The next step is ensuing that your node is accessible to the internet, so let us look at the bitcoin full node guide