The following script will install the Ethereum client “Geth” and configure it to run as a daemon/service running in the background using Supervisor. It has been upgraded to include instructions to upgrade supervisor to 3.3.3 (or whatever is newer) because the Ubuntu package sucks and has bugs.
Please read this entire post BEFORE following the instructions because the configuration of the Supervisor Service file
geth.conf is an important piece and I provide additional suggestions and insights near the bottom of the post.
Add the Geth repository
apt install software-properties-common add-apt-repository -y ppa:ethereum/ethereum
Update apt and install Geth and Supervisor (for running Geth as a service)
apt update apt -y install ethereum supervisor python-pip curl
Upgrade pip & Supervisor
pip install pip --upgrade pip install supervisor --upgrade sed -i "s#usr/bin#usr/local/bin#g" /lib/systemd/system/supervisor.service
Configure Geth Supervisor Service – Copy and paste this into /etc/supervisor/conf.d/geth.conf
[program:geth] command=bash -c '/usr/bin/geth' autostart=true autorestart=true stderr_logfile=/var/log/supervisor/geth.err.log stdout_logfile=/var/log/supervisor/geth.out.log
Start supervisor, which will auto-start Geth
systemctl enable supervisor systemctl start supervisor
That’s it. Geth should now be running and starting its sync process.
A few things to note that you may want to change in /etc/supervisor/conf.d/geth.conf:
#1. As of v1.6.0, fast sync is the new default, you don’t need to include it…
#2. You might want to modify the geth.conf to include user= so it doesn’t run as root…?
#3. You WILL certainly want to modify the command= line to include additional Command Line Options
Here’s my setup:
[program:geth] command=bash -c '/usr/bin/geth --datadir /geth/.ethereum --rpc --rpccorsdomain "*" --cache 1024 --txpool.nolocals --nat extip:$(curl -s ipinfo.io/ip) --maxpeers 50 --port 30303 --lightserv 50 --lightpeers 50 --ethstats=MysticRyuujin-Geth:SECRET@ethstats.net' autostart=true autorestart=true stderr_logfile=/var/log/supervisor/geth.err.log stdout_logfile=/var/log/supervisor/geth.out.log user=geth
I created an account called geth and created a directory called geth for the database and my network doesn’t support UPnP so I use the –nat to specify my external IP. I also increased the peer count and changed the port number that it’s running on…
adduser --system --no-create-home --group geth mkdir /geth chown -R geth:geth /geth
You can connect to the geth console via:
geth attach ipc:/geth/.ethereum/geth.ipc