At last, a stable Rock64 Iota node

About a week ago I received the eMMC module from TL Lim, Co-founder of Pine64. I was very eager to try it out. It should hopefully solve the freezing of the Rock64 I experience.

An eMMC module for Rock64

For the people that havn’t read my previous stories, I had lots of stability issues trying to run a full Iota node on a small Rock64 device. I managed to compile IRI, install all the necessary software and run the node. But in the weeks after lots of problems surfaced. Overheating, freezes, crashes, corrupt databases, etc. The Iota node never ran more than 5 hours continuously without freezing or crashing.

Scale reference of a Rock64 device compared to a classic Gameboy

Stability was a huge issue. I tried everything I could possibly think of. But any of these attempts failed to increase the stability. There were moments that I thought of just quitting this project. Debugging was hard. I had no clue what really caused the freezes. If something crashes then (usually) you have a crashlog. This should give you a good hint on where to look for. But the freezing seemed random, and was very hard to find because of the lack of logs.

My solution was to rule out options. I ruled out overheating by installing heatsinks and monitoring temperature. I also ruled out a bad Java version, faulty HDD, faulty root setup, or any other thing I could come up with.

2 Heatsinks installed (grey and green) on the board. The eMMC module can be installed on the board, at the right side of of the green heatsink. The module is not installed in this picture.

In the end there was 1 option left: read/write speed. Now this is where the new eMMC module implementation paid off. The module is much faster than an SD card and much more stable than a SATA to USB harddisc connection.

I installed the linux image right after it arrived. When I booted the device I was already impressed with its speed. It responded faster, and also copying or downloading items was a lot faster. I downloaded all the required assets again and started compiling IRI again. After a succesful compile I installed Java and downloaded the database. So far so good.

The IRI node was up and running again. But I got a little bit too confident. I downloaded nelson to easily connect to other neighbors, and if that wasn’t bad enough, I also installed the prometheus service to read statistics from the device, including all the dependencies needed for it to work. The node ran for about 2 hours and then it froze again.

After this I decided to remove all the unnecessary software and services. To make sure there is nothing left on the device, I formatted and started from scratch. I installed Linux, copied the already compiled iri-, installed java v161, and booted IRI.

It worked and after syncing a fresh database, it was fully synced and running. I decided to stick with this minimum approach to see if this would work. I tried this minimum approach before with HDD and SD Card setups but both failed to run stable.

This time however, it ran stable. At this moment of writing its up for over 72 hours without any problems or downtime. Thanks to TL Lim for sending me the eMMC module! I was close to giving up but this little boost kept me on track and made me realise this awesome project.

Thanks to everybody who helped me during the project. The IOTA community is really helpful and I couldn’t have pulled this off without them.

My next project will be to see if I can make out of the box working Iota nodes on a Rock64 for anyone who wants to own one. Just follow me on Medium so you don’t miss the updates!

If you’d rather build one yourself then that’s also possible. I released the compiled iri- file on my Github.