How to setup a IOTA fullnode on Ubuntu 16.04
some tips on how to deploy a fullnode
The following shows how I setup my IOTA fullnode on Ubuntu 16.04. The same may apply to similar linux distributions.
Create a directory for the iri
~$ mkdir iota/
~$ cd iota
IRI
Download the latest iri release from GitHub
~/iota$ wget https://github.com/iotaledger/iri/releases/download/<version>/iri-<version>.jar -O iri.jar
create a config file
~/iota$ nano config.ini
and paste the following content
[IRI]
PORT = 14265
UDP_RECEIVER_PORT = 14600
TCP_RECEIVE_PORT = 15600
NEIGHBORS = tcp://<neighbour1>:15600 udp://<neighbour12:14600
IXI_DIR = ixi
HEADLESS = true
;DEBUG = true
DB_PATH = db
;ZMQ_ENABLED = true
;REVALIDATE = true
;RESCAN_DB = true
add space separated neighbors next to the NEIGHBORS
key. Use ;
for comments.
Oracle Java
Oracles java is optional, but recommended. Add the PPA
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
install the JDK 8
$ sudo apt-get install oracle-java8-installer
select the appropriate version if you have multiple java versions installed.
$ sudo update-alternatives --config java
Deamon init script
To start the iri on startup and automatically restart it on crash, a .service file is needed.
$ sudo nano /etc/systemd/system/iota.service
adapt and paste the following data:
[Unit]
Description=IOTA node
After=network.target
[Service]
WorkingDirectory=/home/<username>/iota/
ExecStart=/usr/bin/java -Xmx6g -Xms4g -jar iri.jar -c config.ini
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
-Xmx6g
is the max RAM the iri can use. -Xms4g
the startup RAM.
Reload the deamon config after saving the .service file
$ sudo systemctl daemon-reload
enable the service on startup
$ sudo systemctl enable iota
start it
$ sudo systemctl start iota
monitor the iri's output
$ sudo journalctl -u iota -f
-u
to select the service, -f
to follow the logs.
Firewall
Allow port 15600/tcp
and 14600/udp
if you use the default ports in the config.ini
.
When using ufw
:
$ sudo ufw allow 15600/tcp
$ sudo ufw allow 14600/udp
Update the IRI
- stop the service
sudo systemctl stop iota
- download the latest version from GitHub
~/iota$ wget https://github.com/iotaledger/iri/releases/download/<version>/iri-<version>.jar -O iri.jar
- uncomment
REVALIDATE
in the config.ini (only if the release notes say so) - start the service again
sudo systemctl start iota
Monitor Status
The IOTA Peer Manager is a nice tool to monitor the connection status of your nodes' neighbors. To run the IPM, Nodejs is needed
$ apt-get update
$ apt-get install nodejs
install the IPM
$ npm i -g iota-pm
create a service
$ sudo nano /etc/systemd/system/iota-pm.service
paste the following
[Unit]
Description=Node.js IOTA Peer Manager
[Service]
ExecStart=/usr/bin/nodejs /usr/local/lib/node_modules/iota-pm -i http://127.0.0.1:14265 -r 5
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodejs
[Install]
WantedBy=multi-user.target
reload and enable the service
$ sudo systemctl daemon-reload
$ sudo systemctl enable iota-pm
$ sudo systemctl start iota-pm
from your local machine open a ssh tunnel to view the dashboard
ssh username@server -L -N 8080:localhost:8888
8080
is the local port on which the ipm dashboard can be viewed http://localhost:8080
. 8888
the ipm's port on the remote machine.
Debug
- check logs
sudo journalctl -u iota -f
- check if java is listening on port 15600/14600
sudo netstat -plunt
- see packets
tcpdump -n udp port 14600
Known Issues
- The iri is known to crash on machines with little RAM. >= 6GB should run fine.
- Iri's UDP packets are of size 1650. Some datacenters use a MTU 1500 which results in all packets being dropped, if DF:1. Use TCP instead.
- Whe the Latest Solid Milestone Index is not incrementing for several minutes/hours, restart using the --revalidate flag (uncomment REVALIDATE in the config.ini)
← Arduino as ISP to change the bootloader and burn sketches
→ loom.js