Bananode

##### Install Docker

The docker-ce distribution is recommended. Test with your install with `docker run hello-world`.

##### Obtain Image

Either:

a) Pull the built image from the Docker Hub Registry

```
docker run -d -p 7072:7072 -v ~:/root bananocoin/banano.

```

or

b) Building the image from source.

The following commands should build a banano docker image from source:

```
git clone https://github.com/BananoCoin/banano
cd banano/docker
node/build.sh live   # choose a network - live, beta or test

```

##### Run the image

Banano uses distinct ports from Nano, and RPC is enabled by default.

`docker run -d -p 7072:7072 -v ~:/root bananocoin/banano`

where:

a) -p is proxying localhost tcp/7072 to tcp/7072 on the container.

b) -v is mounting your home directory as /root/ on the container.

After a few seconds, test the node with the following two commands:

`curl -d '{"action": "version"}' localhost:7072`

`curl -d '{"action": "block_count"}' localhost:7072`

And check if peer count has went up on the official monitor.

##### 4) Logs

The bananode process rolls logs, and they are not piped to the containers stdout. This means they are not available to view via `docker log`. To examine the nodes logs e.g.

```
$ docker ps
CONTAINER ID        IMAGE                   COMMAND                 CREATED             STATUS              PORTS                    NAMES
5368f4c7fe63        bananocoin/banano:v18   "/bin/bash /entry.sh"   44 minutes ago      Up 44 minutes       0.0.0.0:7072->7072/tcp   elated_jennings
$ docker exec -it 5368f4c7fe63 bash
root@5368f4c7fe63:/# cd /root/BananoData/log/
root@5368f4c7fe63:~/BananoData/log# ll
total 56
drwx------ 2 root root  4096 Mar 22 20:33 ./
drwx------ 3 root root  4096 Mar 22 20:20 ../
-rw------- 1 root root  9715 Mar 22 20:32 log_2019-03-22_20-20-29.0.log
-rw------- 1 root root 31711 Mar 22 21:18 log_2019-03-22_20-33-50.1.log
root@5368f4c7fe63:~/BananoData/log#

```

#### Running a Docker Bananode

##### Install docker

The easiest way to run a node is by using docker images. First install docker-ce.

##### Running the Bananode image.

Once docker is installed for your platform (check via `docker run hello-world`), to run a bananode, simply run:

```
docker run --restart=unless-stopped -d \
  -p 7071:7071 \
  -p [::1]:7072:7072 \
  -p [::1]:7074:7074 \
  -v ~:/root \
  bananocoin/banano

```

```
7071 -> TCP port
7072 -> RPC port
7074 -> Websocket port

```

You can then check your node as would normally, e.g. using `curl`.

##### Stopping the bananode

Run `docker ps` to list running containers. Use the CONTAINER\_ID to shut down the bananode, e.g.

`sudo docker stop 19d845535dc1`

##### Example

```
$ docker run --restart=unless-stopped -d -p 7071:7071 -p [::1]:7072:7072 -p [::1]:7074:7074 -v ~:/root bananocoin/banano
Unable to find image 'bananocoin/banano:latest' locally
latest: Pulling from bananocoin/banano
22dc81ace0ea: Pull complete
1a8b3c87dba3: Pull complete
91390a1c435a: Pull complete
07844b14977e: Pull complete
b78396653dae: Pull complete
9a359b47c2fa: Pull complete
082ef437d263: Pull complete
b808a9115179: Pull complete
34e529540e96: Pull complete
Digest: sha256:d713883a740222d6a5e5c473f34b474c985670768c5a7004c99573e6659d9475
Status: Downloaded newer image for bananocoin/banano:latest
19d845535dc1c3e9b4af0e69d46691e9c95340ed7afc86bb3d6531b102dca474
$

```

#### Ubuntu 16.04, 18.04, and 20.04, Debian 8, 9, 10, and 11

###### Recommended Hardware

* Run the node in a datacenter. Most SSD VPS packages will work. (DigitalOcean, Vultr, Hetzner, OVH, etc.)
* 1 modern CPU core minimum. 2 or more is recommended especially for voting nodes and principal nodes.
* 10GB Free disk space (Blockchain database is ~5.2GB in size at the moment)
* 2 GB system RAM or more. 4 GB or more is recommended especially for voting nodes and principal nodes

###### Installing dependencies

```
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install -y git cmake make g++ curl wget python-dev

```

###### Cloning the Bananode's git repository

```
git clone --recursive https://github.com/BananoCoin/banano.git banano_build

```

###### Installing precompiled Boost (Ubuntu 20.04, Debian 10, Debian 11)

If your distribution includes boost 1.67 or newer (e.g. Ubuntu 20.04) you can skip the next section and simply run:

```
sudo apt install -y libboost-all-dev

```

###### Building static Boost (Ubuntu 16.04, Ubuntu 18.04, Debian 8, Debian 9)

To automate this step, you can use `sudo banano_build/util/build_prep/bootstrap_boost.sh --m` (the optional m 'minimum' flag reduces compilation time but may break Boost for other use cases than building the bananode) which does essentially this:

```
wget https://netix.dl.sourceforge.net/project/boost/boost/1.69.0/boost_1_69_0.tar.gz
tar xzvf boost_1_69_0.tar.gz
cd boost_1_69_0
./bootstrap.sh --with-libraries=filesystem,iostreams,log,program_options,thread
./b2 --prefix=/usr/local/boost link=static install
cd ..

```

###### Building bananode

```
cd banano_build

git submodule update --init --force --recursive

cmake -DBOOST_ROOT=/usr/local/boost/ -G "Unix Makefiles"
make bananode

```

Optional: You can also add custom cmake flags like `-DACTIVE_NETWORK=nano_test_network` if you want to run a private testnet.

To copy the binaries into the parent folder and see if they are working, you can use `cp bananode ../bananode && cd .. && ./bananode --diagnostics` This will also create the `/root/BananoData` folder that will contain all specific data. If you want to use a different folder, you can add a custom `--data_path /root/BananoData` parameter each time you run bananode.

To start the node daemon in the background, use `nohup ./bananode --daemon &`, but beforehand you might want to edit the config.json in `BananoData/config.json` to `"rpc_enable": "true",` in order to accept RPC calls. You can also change the default RPC port, and enable critical commands with `"enable_control": "true",` if you want to use the node's wallets. If you do this, make sure that you specify the host that is allowed to access the RPC interface in the `"address"` field. Use IPv6 notation for this (e.g. `::1` for localhost, or `::ffff:115.35.63.22` for a remote host), to avoid problems.

RPC commands are explained in NANO's wiki. Only use the 'raw' unit when sending commands to the Bananode. Detailed implementation guides will be released shortly.

If a build fails, delete these temporary files before you try again

```
rm -rf CmakeCache.txt
rm -rf CMakeFiles

```

###### CentOS 7

You need to install a custom repository or this will fail with c++: error: unrecognized command line option ‘-std=c++14’

```
sudo yum -y check-update
sudo yum -y install git curl wget bzip2 python-devel cmake

sudo yum -y install centos-release-scl
sudo yum -y install devtoolset-7
scl enable devtoolset-7 bash

sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install -y cryptopp cryptopp-devel

```

Tools that are included in the above package: gcc gcc-c++ libstdc++-static make

###### Compiling on low-end VPS

You'll need either 2GB Ram for a successful compile, or a generous swap file:

```
sudo fallocate -l 2G /swapfile

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

```

###### OSX

```
git clone https://github.com/BananoCoin/banano.git
cd banano
sh ci/bootstrap_boost.sh
git submodule update --init --recursive
cmake -DBOOST_ROOT=/usr/local/boost/ -G "Unix Makefiles"
make
./bananode --daemon

```

To shorten boost build time, you can add `--m` after bootstrap\_boost.sh, but you may break boost for other use cases then.

Data will be stored in `~/Library/Banano`

## External links

Source

Ledger snapshot for bootrstapping nodes