cculianu / Fulcrum

A fast & nimble SPV Server for BCH, BTC, and LTC
Other
343 stars 77 forks source link

Release binary for Raspberry Pi #95

Closed craigraw closed 2 years ago

craigraw commented 2 years ago

After writing https://www.sparrowwallet.com/docs/server-performance.html I was advised to look at Fulcrum as an alternative to ElectrumX. As I noted in the article, profiling ElectrumX's indexing behaviour shows that its single threaded approach does not scale on limited hardware. I am unsure how Fulcrum tackles this, but I'd like to try it.

The Raspberry Pi is probably the most common hardware used to run BTC nodes given the number of prebuilt node packages targeting it (Umbrel, Nodl, MyNode, Ronin Dojo etc). Currently these platforms all contain Electrs, which does not scale well with "deep" wallets.

As such I think it would be interesting to see if Fulcrum can be the "goldilocks" private Electrum server implementation - fast enough indexing, and with an inclusive index able to provide reasonable performance for deep wallets. Compiling Fulcrum for this platform seems daunting however: https://wiki.qt.io/RaspberryPi2EGLFS - has this been attempted? Is this a reasonable proposition? If so I would love to see a release binary targeting this architecture.

cculianu commented 2 years ago

Hmm, I definitely could make a static binary or whatever for arm, but it would have to be arm64. Fulcrum requires a 64-bit OS, because it really REALLY would love to be able to address more than 4GB of memory if it needs to.

I actually recommend you go with Ubuntu for your Raspberry Pi, especially if your processor is 64-bit. I could build a Fulcrum binary and add it to the release for Ubuntu on RPi.

Unfortunately, Fulcrum just won't run on a 32-bit OS, due to the way it's designed.

What OS do you run?

craigraw commented 2 years ago

I'm running 32-bit arm right now, but I'd be happy to try a 64 bit OS, and happy to use Ubuntu. The RPi I'm using is actually an 8Gb version so this makes sense anyway.

cculianu commented 2 years ago

Oddly enough, if you actually install Ubuntu 64-bit on your RPi, you will find compiling Fulcrum on it should be pretty straightforward, after the prereqs are in place (Qt5Core and Qt5Network, plus libbz2-dev and some other odds and ends, all can be installed with apt). It should just be a matter of running qmake and then make...

craigraw commented 2 years ago

You're right, compiling was painless after installing Ubuntu 21.04 64-bit server. For others looking to do this, I installed with apt: qtbase5-dev, pkg-config, libzmq3-dev and libbz2-dev. That said, I believe a release binary would still be beneficial if possible.

cculianu commented 2 years ago

Ok, I'll work on adding docker auto-build scripts to do static builds on my RPi.. never ran docker on an Rpi4 before but should be fun!

cculianu commented 2 years ago

Hi -- I got my docker stuff to build for arm64. Turns out the same scripts that built x86_64 were able to build arm64, if run on an arm64 system. So I updated the release here: https://github.com/cculianu/Fulcrum/releases/tag/v1.6.0 to also include arm64 static binaries (can be run on Raspberry Pi if using a 64-bit Linux).

I tested it and it works. I'm going to go ahead and close this issue. If you feel this issue still needs to stay open, feel free to re-open it.

craigraw commented 2 years ago

Thank you! Updated my doc to indicate this.