# Installing bitcoind on raspberry pi

### Installing bitcoind on linux

Running a full bitcoin node helps the bitcoin network to accept, validate and relay transactions. If you want to volunteer some spare computing and bandwidth resources to run a full node and allow Bitcoin to continue to grow you can grab an inexpensive and power efficient raspberry pi and turn it into a full node.

There are plenty of tutorials on the Internet explaining how to install a bitcoin full node; this tutorial won't go over setting up a raspberry pi and using ssh.

In order to store the full blockchain we will mount a network drive and tell bitcoind to use this mapped drive as the data directory.

#### Download the bitcoin client

Go to https://bitcoin.org/en/download

Copy the URL for the ARM 32 bit version and download it onto your raspberry pi.

    wget https://bitcoin.org/bin/bitcoin-core-0.15.1/bitcoin-0.15.1-arm-linux-gnueabihf.tar.gz

Locate the downloaded file and extract it using the arguement xzf

    tar xzf bitcoin-0.15.1-arm-linux-gnueabihf.tar.gz

a new directory bitcoin-0.15.1 will be created, it contrains the files we need to install the software

#### Install the bitcoin client

We will install the content by copying the binaries located in the bin folder into /usr/local/bin by using the install command. You must use sudo because it will write data to a system directory

    sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.15.1/bin/*

Launch the bitcoin core client by running

    bitcoind -daemon

### Configuration of the node

#### Start your node at boot

Starting you node automatically at boot time is a good idea because it doesn't require a manual action from the user. The simplest way to achive this is to create a cronjob.

Run the following command

    crontab -e

Select the text editor of your choice, then add the following line at the end of the file

    @reboot bitcoind -daemon

Save the file and exit; the updated crontab file will be installed for you.

#### Full Node

If you can afford to download and store all the blockchain, you can run a full node. At the time of writing, the blockchain is 150Go (https://blockchain.info/fr/charts/blocks-size). Tree ways to store this are : use a microSD with 256Go or more add a thumbdrive or an external drive to your raspberry pi * mount a network drive from a NAS

If you have purchased a big SD card then you can leave the default location for the blockchain data (~/.bitcoin/). Otherwise, you will have to change the datadir location to where your drive is mounted (in my case I have mounted it to /mnt)

In order to configure your bitcoin client, edit/create the file bitcoin.conf located in ~/.bitcoin/

    nano ~/.bitcoin/bitcoin.conf

copy the following text

    # From redoules.github.io

    # This config should be placed in following path:
    # ~/.bitcoin/bitcoin.conf

    # [core]
    # Specify a non-default location to store blockchain and other data.
    datadir=/mnt
    # Set database cache size in megabytes; machines sync faster with a larger cache. Recommend setting as high as possible based upon mach$
    dbcache=100
    # Keep at most <n> unconnectable transactions in memory.
    maxorphantx=10
    # Keep the transaction memory pool below <n> megabytess.
    maxmempool=50

    # [network]
    # Maintain at most N connections to peers.
    maxconnections=40
    # Tries to keep outbound traffic under the given target (in MiB per 24h), 0 = no limit.
    maxuploadtarget=5000

Check https://jlopp.github.io/bitcoin-core-config-generator it is a handy site to edit the bitcoin.conf file

#### Pruning node

If you don't want to store the entire blockchain you can run a pruning node which reduces storage requirements by enabling pruning (deleting) of old blocks.

Let's say you want to allocated at most 5Go to the blockchain, then specify prune=5000 into your bitcoin.conf file. Edit/create the file bitcoin.conf located in ~/.bitcoin/

    nano ~/.bitcoin/bitcoin.conf

copy the following text

    # From redoules.github.io

    # This config should be placed in following path:
    # ~/.bitcoin/bitcoin.conf

    # [core]
    # Set database cache size in megabytes; machines sync faster with a larger cache. Recommend setting as high as possible based upon mach$
    dbcache=100
    # Keep at most <n> unconnectable transactions in memory.
    maxorphantx=10
    # Keep the transaction memory pool below <n> megabytess.
    maxmempool=50
    # Reduce storage requirements by only storing most recent N MiB of block. This mode is incompatible with -txindex and -rescan. WARNING: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, greater than 550 = automatically prune blocks to stay under target size in MiB).
    prune=5000

    # [network]
    # Maintain at most N connections to peers.
    maxconnections=40
    # Tries to keep outbound traffic under the given target (in MiB per 24h), 0 = no limit.
    maxuploadtarget=5000

### Checking if your node is public

one of the best way to help the bitcoin network is to allow your node to be visible and to propagate block to other nodes.

The bitcoin protocole uses port 8333, other clients should be able to share information with your client.

Run

    ifconfig

and check if you have an ipv6 adresse (look for adr inet6:)

#### IPV6

Get the global ipv6 adresse of your raspberry pi

              Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
              inet adr:192.168.1.x  Bcast:192.168.1.255  Masque:255.255.255.0
              adr inet6: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Lien
              adr inet6: xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 Scope:Global
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:42681744 errors:0 dropped:0 overruns:0 frame:0
              TX packets:38447218 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000
              RX bytes:3044414780 (2.8 GiB)  TX bytes:2599878680 (2.4 GiB)

it is located between adr inet4 and Scope:Global

    adr inet6: xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 Scope:Global

Copy this adresse and past it into the search field on https://bitnodes.earn.com/

If your node is visible, it will appear on the website

#### IPV4

If you don't have an ipv6 adresse, you will have to open port 8333 on your router and redirect it to the internal IP of your raspberry pi.

It is not detailed here because the configuration depends on your router.

### Find an error or bug? Have a suggestion?

Everything on this site is avaliable on GitHub. Head on over and submit an issue. You can also message me directly by email.