Hello guys, a few lines to announce the porting of UNN core on arm64 architectures (like Raspberry Pi 3/4) and to explain to you my choices of implementations.
First of all, it seems necessary to me to explain several concepts.
As you may know - for those who run a node - we use Docker and more precisely docker compose to run the node.
Docker is an open source containerization and allows you to embed an application in a virtual container that can run on any machine without having to worry about the host OS, packages already installed or not, etc. Wonderful technology, isn’t it?
Next, I would like to explain how Unikname uses the continuous integration system with CircleCI to build a Docker image of its node.
With a lot of simplification, as soon as the code of UNN core is modified a whole process is launched to build a docker image ; this is called continuous integration.
This process goes through many steps to assemble the code, run a multitude of tests, build the Docker image and make it available to everyone on the docker hub.
Let’s go back to our goal, successfully compile and run a node on an arm64 architecture!
After some research, I concluded that I had 2 options:
- 1st, use a tool called buildx that would do all the work
- 2nd, use the matrix jobs on CircleCI to build natively and then create a manifest to merge the two docker images under the same tag
After several tries, I realized that in our case, buildx wasn’t very stable (many build failures) and that the build time was long, very loooong
So I chose to use the CircleCI matrix jobs, even if there are some drawbacks… Notably the fact that you have to push the image for each architecture (in our case amd64 and arm64) before making a manifest which merge the two images. This is not optimal and not very ecological (even if the releases are not very frequent either).
I hope this article has helped you understand how UNN core build works.
The next version of unn core (6.0.0) should be available on arm64
(by the way you can support me on My Unikname App or with the cli with
uns delegate:vote @qsvtr)