The cross-compiled builds are indeed what we would publish, after the aforementioned CI and build system limitations are addressed.
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
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.
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.
@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
aarch64-linux (arm64) binaries are available from Zecwallet: Releases · adityapk00/zcash · GitHub
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
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?
Out of memory, maybe.
@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?
@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?
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
- Running a full node takes more time/space to do.
- 16 week cycle for mandatory updates
- Is confusing for newbs
- 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 ?
We will be publishing a call to grants in the coming weeks. Making full nodes easy to run is on our list.
Meanwhile, if anyone prefers to run a solo node, zebrad start
works like charm on ARM arch.
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.
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.
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
)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
HOST=aarch64-unknown-linux-gnu zcutil/build.sh
Cross compiled 5.0 successfully using the above for my 8GB Pi4.
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)