[CentOS-devel] Building ARM64 RPMs on AMD64?

Sat Dec 5 19:35:36 UTC 2020
Mihai Moldovan <ionic at ionic.de>

[Resent this message to the list without aa GPG signature, since my signature
blows the message up past the 50 KB mark... meh.]

* On 12/5/20 8:15 PM, Simon Matter wrote:
> [...]
> We are thinking about adding ARM64 based devices to our systems.
>
> As we are using CentOS almost everywhere and have quite a number of
> inhouse RPM packages in our company repository, we'd like to enhance it
> and add ARM64 alias aarch64 to it.
>
> What I'm still wondering is how to run the build environment for the new
> arch?
>
> How does the CentOS project do it, run ARM64 hardware or using emulation?
> Or to ask differently, is it an option to run the build system emulated
> with QEMU?

I cannot speak for the CentOS project, but I'm doing something along those
lines, albeit in a Debian-context with sbuild chroots (which are static,
compared to mock's chroots, so getting this stuff working with mock could be
painful).

Essentially, you can leverage the binfmt_misc Linux kernel feature inn tandem
with qemu-static-user binaries. The Fedora package name for that is
qemu-user-static, I believe it's the same for CentOS.

Basically, what you have to do is to make sure that BINFMT_MISC is enabled in
the kernel (the default for any non-ancient version) and to copy the static user
binary (typically /usr/bin/qemu-${arch}-static on the host system) to
/usr/bin/qemu-${arch} into the chroot. Boom, suddenly you can just execute any
native ${arch} binary within that chroot.

Note that this method has shortcomings. Qemu's emulation might be buggy and
incomplete at times (for instance, I saw aptitude crashing due to a qemu bug,
while it worked fine natively). It's also quite slow compared to native code
execution and it might even be slower than a fully-emulated qemu-powered VM due
to the additional overhead of having to spawn an ad-hoc VM for every new
foreign-arch process.

Also, you'd better periodically update the qemu user static binary. Naturally
this won't be done automatically.


In general, such a setup is doable. It has its drawbacks, but should mostly work.


The CentOS project doesn't have to work with such trickery. AFAIK, they just run
native-arch builders, even for architectures such as aarch64.


Mihai