Trying to build on ARM

The cross-compiled builds are indeed what we would publish, after the aforementioned CI and build system limitations are addressed.

2 Likes

To Str4d’s point above we aren’t quite there yet, but if you do need an untested/unsupported ARM binary to experiment with from fairly recent on master:

ipfs get /ipfs/QmWEadk44oqz84HJ5LumohBvEeMvAwFQMMtm8G8aLEaxA6 -o zcashd-artifacts-aarch64-linux-gnu-90232f6.tgz

Built from GIT_COMMIT=90232f6. More to come soon :nerd_face: :zcash:

1 Like

thanks a great lot @mdr0id, I really appreciate it! but for that hash I get Error: merkledag: not found. other hashes work for me. could you check if it’s still in the IPFS network?

@slush No worries. Always happy to help as much as possible. I verified the CID is valid still.

Please ensure your ipfs daemon is installed and running:
ipfs daemon &

Then run the prior command:

ipfs get /ipfs/QmWEadk44oqz84HJ5LumohBvEeMvAwFQMMtm8G8aLEaxA6 -o zcashd-artifacts-aarch64-linux-gnu-90232f6.tgz

You likely will notice logs while downloading binaries, but these are expected:

15:31:41.319 ERROR  basichost: setting stream deadline:  stream closed basic_host.go:238
15:32:46.417 ERROR  basichost: setting stream deadline:  stream closed basic_host.go:238
15:38:29.012 ERROR  basichost: setting stream deadline:  stream closed basic_host.go:238
15:40:25.309 ERROR  basichost: setting stream deadline:  stream closed basic_host.go:238
15:41:08.678 ERROR  basichost: setting stream deadline:  stream closed basic_host.go:238
15:41:08.678 ERROR  basichost: setting stream deadline:  stream closed basic_host.go:238

Once complete, you should have zcashd-artifacts-aarch64-linux-gnu-90232f6.tgz.

The last remaining item to get the node running on ARM is the params:

ipfs get /ipfs/QmUSFo5zgPPXXejidzFWZcxVyF3AJH6Pr9br6Xisdww1r1 -o zcash-params.tgz

It might take a while to download these files depending on your ISP/GeoLoc/IPFS peer count. If IPFS doesn’t work to get the parameters, you can always use the standard ‘fetch-params.sh’ in zcash repo.

1 Like

many thanks @mdr0id. I began using ipfs only recently so I’m sure I made mistakes, but I couldn’t get the build to download on my own ipfs CLI client. it’s as if the daemon froze when I requested this specific content. also tried from ipfs-desktop, and it kept searching indefinitely. but I managed to get the content through a hosted gateway. I’m clueless.

on a positive note, the build works, and apart from some issues, it’s absolutely usable! I’m thankful you built it and shared it with the world. I’ll leave some notes below about the issues in case that helps stabilizing the build.

  • importing private keys with the rescan argument consistently caused zcashd to become unresponsive, and after ~5 minutes, crash on its own. when I launched it again, it did the rescan, so I eventually got what I wanted, just with hiccups and taking more time. when this after-the crash rescan happened, z-addresses were rescanned from block 0, so that consumed a lot of time. but nothing was damaged. if it matters, all these happened on (unlocked) password-protected wallet.dat’s.
  • it crashed once without any reason, after which the block index became corrupted and the data needed a reindexing. that took an awful lot of time, on the order of intial block download and verification. I wonder if it also re-verified the PoW and that is what took so long.
  • there have been a few graphical glitches, zcashd stats lines multiplying and such, especially when I moved around the terminal window a lot, or there was something else computationally intensive happening.
2 Likes

@mdr0id’s build no longer works due to the automatic deprecation.

I tried to build zcashd for arm64 via transpilation, following the official docs and @garethtdavies’s cool guide but it failed. I’ll link to the terminal output below. can someone please help me figure out what went wrong?

https://mega.nz/file/0OJADRjI#b6czskwcqWeJ8AY6DLL-mW27Smpx2_3dRtmomPQOmco

2 Likes

aarch64-linux (arm64) binaries are available from Zecwallet: Releases · adityapk00/zcash · GitHub

3 Likes

There are a couple issues on different platforms with cross compiling for ARM, at the momemnt. My best recommendation is to use an Ubuntu20.04 system or our docker zcashd-worker image:
https://hub.docker.com/repository/docker/electriccoinco/zcashd-build-ubuntu2004

Please let us know if you have any other issues

3 Likes

thank you @adityapk00 , that’s very helpful! for now I tried your build but it crashes while “Init message: Loading block index…” is going on. after the crash it says “Killed” even though I didn’t kill it.

debug.log lists only one error:

Binding RPC on address 0.0.0.0 port 8232 failed.

but then it moves on normally. the last entry zcashd manages to add to the log file is this:

Opened LevelDB successfully

any ideas what’s going wrong?

1 Like

Out of memory, maybe.

1 Like

@hanh you were absolutely right, thank you. I had to free up some RAM and make the swap situation closer to ideal, and now it’s running properly.

@adityapk00 great build. could you share the specifics of your build environment?

1 Like

It’s built by this script: zcash/buildall.sh at master · adityapk00/zcash · GitHub

1 Like

@adityapk00 I tried to build it, but I’m getting all kinds of Docker errors, for example:

“docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create”: dial unix /var/run/docker.sock: connect: permission denied.”

Again, can I ask you to specify the environment in which you build?

And is there a method to build only for the architecture I want, not all of them?

1 Like

Is there any way ECC or someone could make this whole process of building/deploying nodes on ARM better?

One of the criticisms I have heard about Zcash is that there are only 300ish network nodes. I think this is due to

  1. Running a full node takes more time/space to do.
  2. 16 week cycle for mandatory updates
  3. Is confusing for newbs
  4. Lack of proper ARM support.

Perhaps there could even be some sort of out-of-the-box solution for users to buy or DIY a Casa style node: Bored at home? Try building your own Casa Bitcoin node - Decrypt

But to do this requires proper support and builds pushed for all platforms every 16 weeks. It’s got to be easy for newbs and not require constant cross-compiling to work.

Perhaps an idea for @ZcashGrants ?

2 Likes

We will be publishing a call to grants in the coming weeks. Making full nodes easy to run is on our list. :slightly_smiling_face:

Meanwhile, if anyone prefers to run a solo node, zebrad start works like charm on ARM arch.

5 Likes

We are going to push some documents describing how to build on ARM and other platforms easier soon. Additionally, some of the docker work we did a couple years ago will allow some of this process to be handled through docker buildx mechanisms or similar. The work being done right now will guide ARM to being a fully supported and deployed platform, like Debian or Ubuntu packaging.

5 Likes

@slush

Here’s a vagrant file. Just do vagrant up and it will build an ARM binary automatically.

You need to install vagrant first:

Once it finishes, you can copy the binary out of the VM using

vagrant scp default:/home/vagrant/zcashd/src/zcashd .

However, I haven’t used it for nearly a year. I know it still builds a binary but I don’t have the hardware to test it.

3 Likes

Does this work for ARM64 folks?

https://ecc.mypinata.cloud/ipfs/QmZEEf3C66V2dAzHfSbiQqFa9VpNE819FPsCJkK9yJStJU

Inside includes the source/binaries for zcash v5.0.0-rc1, IIRC. There exists some issues for folks using the 4GB RAM ARM64 boards but it is documented. Otherwise default syncs should operate gracefully (e.g. none reindexes and nodes syncing without lwd/explorer/txindex configs)

(Update :tada: :stadium: :zcash: )Get v5.0.0
https://ecc.mypinata.cloud/ipfs/Qmf25mpm8BwjJTivLzcKGyrXW32u2ijsdb3cjpc88hwC71

Extract

tar -xvf Qmf25mpm8BwjJTivLzcKGyrXW32u2ijsdb3cjpc88hwC71

Output:

workspace/source/src/zcashd
workspace/source/src/zcash-cli
workspace/source/src/zcash-gtest
workspace/source/src/zcash-tx
workspace/source/log.out
3 Likes
HOST=aarch64-unknown-linux-gnu zcutil/build.sh

Cross compiled 5.0 successfully using the above for my 8GB Pi4.
Screenshot_2022-05-13_13-54-00

3 Likes

:shield: :zcash: Woot! Nice! The native compile kinda works, but it is painfully slow on those boards.

For what it is worth, looking around in the ARM64 board world, ODROID released their M1 8GB boards fairly recently:

or

(note: nvme, sata3.0, eMMc compared to other boards; tbf their are adapters for pi4s but haven’t personally used them)

2 Likes