neue internet
Setup a Handshake full node with systemd
Low maintenance - this is the way
systemd
is the system and service manager for Linux systems. It’s quite capable and a great way to automate programs. In this post, we’re going to learn how to get a Linux server equipped with hsd (the Handshake daemon and full node), and ensure hsd runs whenever the server is rebooted.
hsd installation
# we are going to install in the /mnt folder
cd /mnt
# clone hsd and cd into the folder
git clone --depth 1 --branch latest https://github.com/handshake-org/hsd.git && cd hsd
# install production dependencies
npm i --omit=dev
# exit hsd/ directory, remain in mnt/
cd ..
# create hsd config directory and file
mkdir .hsd && touch .hsd/hsd.conf
# update contents of hsd config file
nano .hsd/hsd.conf
If you have specific configuration, it’s much better to put them in this file instead of passing command-line arguments. However, some parameters are only possible as command-line arguments. Review the hsd documentation for more.
Here’s the contents of my hsd configuration for lookup.tx, a Handshake transaction explorer:
api-key: <password>
index-address: true
index-tx: true
log-level: warning
I actually had the log-level
set to “debug” so I could monitor the sync progress, and changed it back to “warning” when initial sync completed.
systemd setup
# create and open the hsd service file
nano /etc/systemd/system/hsd.service
Then, paste this:
[Unit]
Description=Handshake Daemon & Full Node
Documentation=https://hsd-dev.org/
After=network.target
[Service]
Type=simple
User=root
ExecStart=/mnt/hsd/bin/hsd --no-wallet --prefix /mnt/.hsd
WorkingDirectory=/mnt/hsd/
Restart=on-failure
[Install]
WantedBy=multi-user.target
If your hsd installation location isn’t /mnt
like mine, you’ll need to update paths in the content above.
Whenever you create or modify systemd
services, you have to reload with systemctl daemon-reload
. Then, enable your new service with systemctl enable hsd.service
. Finally, to start hsd.service
, run systemctl start hsd
.
Here are more (self-explanatory) commands you’ll find useful:
service hsd status
systemctl stop hsd
systemctl start hsd
systemctl restart hsd
At the time of this post, a Handshake full node is ~55GB so you’ll need a decent-sized server. It took my Linode server (4GB RAM, two dedicated CPUs, 80GB storage) about a day to fully sync, and it was operating at 180% CPU that entire time. Now that the sync is finished, CPU usage is less than 10%.
Check out http://lookup.tx if you’re equipped with a Handshake resolver. Most blockchain explorers are super technical so I built one that’s a tad more approachable. Stay tuned for updates.