My experience of building a full Iota node on an ARM64 board

It was October 2017 when I first heard of the possibility to run a full node to support the IOTA network. I was intrigued by the concept of the Tangle, and wanted to contribute to the network myself by running a full node. But I did not feel much for a vps server. I wanted to have it running on my own device. One that I could maintain myself and play around with.

But running on a pc would mean I had to leave my pc on 24/7. This goes against my believe in blockchain technology. I lost my enthusiasm for Bitcoin because of the huge amount of energy that’s being wasted by mining farms. It would be silly if I would waste more power than needed on a full node. This is when I started to look into low power devices. Of course I first looked at Raspberry Pi. It is the most popular device on the market and it was also the only device I knew about back then.

How hard could it be?

But the raspberry Pi turned out to be incapable for running a full node because of its 2GB memory limit. This is when I looked at other, more powerful, boards, and my eye felt on the Rock64. It had all the specifications needed to run a full node.

Rock64 board from Pine64

Unfortunately, I couldn’t find anyone on the web with experience or a tutorial about setting up a node on a Rock64, but because of my enthusiasm I thought: “let’s deal with that later. How hard could it be anyway?”

I had no experience with Linux at all, nor did I ever compile any code. But in my daily job I’m Principal Tech Artist at a gamestudio named ForceField VR. They make VR titles for companies like Oculus. My job varries from creating complex shaders, to improving the workflow of artists. I often create scripts in various languages to support this. So I do have technical knowledge and this helped me a lot during this project.

Google was my friend

When I ordered my Rock64 I had it all figured out. I needed a HDD that I connected via a USB3 to SATA cable. Furthermore I needed a power plug and a SD card. I still had an old HDD lying around so that was already covered. Later I discovered that a heatsink would have been a good idea as well. I bought this somewhere else because the shipping itself would cost more than the heatsink.

HDD Connected to the Rock64

My Rock64 arrived somewhere late December. I was completely ready to start building the node. Ok, let’s start: Google: How to install Linux. A huge list of possible Linux images crossed my screen. I was overwhelmed by it and after trying to find out what the best one was, I just picked one randomly.

It turned out to be a bad choice of course. I can’t remember which image I choose, but it had a laggy desktop. Before I continued I started wondering: “If this desktop is already so laggy and slow, how much resources does the desktop then take?” I didn’t even start profiling it. Instead, I did some more image research and picked a new one. An image with only the bare minimal: Debian ayufan minimal.

With the Linux image installed and running I was ready for the next step. I wanted to put my root on the HDD instead of the SD card. I read somewhere on the internet that this could improve stability and possibly read/write times, so I gave it a go. I followed a tutorial and it already went wrong at step one:

“apt-get update”

This gave me a lot of errors. Great! This is really motivating…

It turned out to be a network issue. Because I flashed a minimal version of Linux, I had to manually set the correct settings.

My first code compiling

Bit by bit I got myself further along the process. Of course I encountered lots of problems, but with the help of google, people in discord, and a colleague (Who is a C++ programmer and familiar with Linux) I got myself pretty far. I wrote down everything I did, because I knew I wanted to create a tutorial of this, so people don’t have to experience the same problems I encountered.

The biggest challenge was that for a lot of packages the ARM64 version is missing. In this case, you need to download source code, compile it for ARM64, and hope it doesn’t give any errors. Of course 9 out of 10 times it did return errors, and I had to find out what caused it. Missing includes, errors in the code, mismatch versions, I think I've seen all the problems you can encounter when compiling.

Scale reference of the node

Sorry my dear wife

I spent about 10 evenings of around 6 hours each on getting the node up and running. Every evening I got a little bit closer to my goal, and that was what made me keep trying. My wife is pregnant and by the time I was working on setting up the node she was very tired so she went to bed early. This gave me all the time in the world, something I hadn’t experienced anymore in a couple of years. But it also meant that I went to bed at ridiculous times. 2 A.M, 3 A.M, and even once 3.30 A.M. I always tried to sneak into my bedroom, hoping she wouldn’t hear me. But the next day she frequently asked me: “I though you said you wouldn’t make it late last night?” Of course I had to go to work the next day as well, with the alarm set at 6.30 A.M.

I must have walked around like a zombie at some time, and I think it’s also the reason that I became ill after 2 weeks of working. But I was done. The node was running and I’ve not felt myself so proud anymore in a long time. Without any Linux experience, and without ever compiling anything in my life, I got myself a node running on an ARM64 Rock device. Dedication and believe in IOTA brought me this far.

I embedded the Rock64 into a NesPi casing.