**Requirements:** Docker-Engine & arm64(aarch64) architecture with Debian operating system, such as a [Raspberry Pi 400](https://www.raspberrypi.org/products/raspberry-pi-400/specifications/)
These are instructions for cross compiling a Hush full node daemon on a regular **AMD64** PC (also known as x86 architecture) to **ARM64(aarch64)** CPU architecture with Docker.
These instructions were created as a result of (no. 1) issues with **glibc** versions differing on the two different machine architectures and (no. 2) no gcc and g++ multilib packages existing natively on the arm64(aarch64) architecture. Currently there are open issues with Debian to include these packages for this architecture.
*Note: This should work on all types of arm64(aarch64) devices. By cross compiling (building) on a different system for another machine type, we are able to bypass the ARMv7 requirements. Cross compiling is useful for machines that don't have lots of hardware resources to compile on or, in this case, **G++-multilib** isn't available on ARM64(aarch64) devices and hushd requires it to compile binaries.*
- Install & setup Docker-Engine. Most users will install this via their operating system's package manager, but also refer to [Docker-Engine Installation](https://docs.docker.com/engine/install/ubuntu/) for additional information.
This creates a container with the latest version of Debian. A bind mount is created mapping the /tmp directory on the host machine to the /tmp directory on the container. The additional options mean the container will run in interactive mode with a terminal, and the container will be destroyed when you stop(exit) it.
6. ### Prepare binaries for our ARM64(aarch64) device
On success of building the Hush binaries, we first want to "prepare" them. We do this so we don't end up with a 311 MB hushd binary and instead get the correct size, which is much smaller.
The following cp command used in the **Docker container terminal** copies from the docker container to actual desktop machine environment into the /tmp/hush-arm64 directory.
Next we will copy these new binaries to our ARM64(aarch64) device. Now that these are on our **actual desktop machine**, we will next copy them to our raspberry pi (or other ARM device).
The installation location is up to you, but for this example we will use **/home/username/hush3-folder**, which has to already exist on the raspberry pi end, and we assume that your raspberry pi is already running a server. If you want to mount the media on your desktop system, then please do a web search for those instructions, but most people will be scp'ing the files to their raspberry pi.
*Note: this has only been tested from amd64 architecture; we will update this list later for other tested hardware; the process will almost be identical, but other dependencies may be needed*
I will update the steps required to automatically build and run hushd with a Dockerfile. This is useful for testing and also aids in other hush puppies who don't need to deep dive into developer chores and maintainance. Required dep is Docker-Engine.
### Create Hush docker image
0.`git clone https://git.hush.is/hush/hush3.git && cd hush3/`
Odinzu originally created this documentation (along with testing) after about ~34 hours of tedious focus and work. This documentation has continued to be updated by the Hush devs, so that it will still work, as it has changed from its original form.