I had two MIPS-related hiccups with this:
- the musl-upstream `musl-gcc` wrapper script has a bug that drops compiler arguments (patch included here; hopefully we can remove in the future?)
- QEMU couldn't run the resulting MUSL binaries until I applied an update to my binfmt magic/mask (https://bugs.debian.org/1041597, bb0811e353) - it also runs just fine on real musl hardware
This adds a `.host-arch` symlink to build output; this doesn't get committed (for hopefully obvious reasons), but allows for things like `CMD` and `update.sh` to have a known-effective target for testing the output further in some way.
This was a mapping we already had thanks to `ARCH_TEST`, so I've also reordered our builds such that they're grouped by "host" architecture and sorted by "preference"/compatibility (with the goal that we get a more "correct" `.host-arch` symlink).
The intent of the previous implementation was to avoid libc, but it turns out that just invoking a syscall without libc is complicated (see https://github.com/docker-library/hello-world/pull/62#issuecomment-568573535 for details).
On the other hand, my personal machine can cross-compile all of musl in ~30s per architecture, which is pretty reasonable, and the resulting binary sizes are only around ~10k each, and I was able to do so successfully for every architecture we currently support.
See https://hub.docker.com/r/microsoft/nanoserver:
> The Windows Server 2016-based Nano Server container base image was a Semi-Annual Channel (SAC) release and received its final update on October 23rd, 2018.
```console
$ ./amd64/hello-world/hello
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
```