On Thu, Jun 26, 2025 at 09:22:58AM -0400, Solomon Peachy wrote:
> On Thu, Jun 26, 2025 at 08:50:48AM +0100, Daniel P. Berrangé wrote:
> > Yes, I can understand the benefit of testing 64 vs 32 bit in general,
> > as that's a frequent source of bugs in many apps still, alongside
> > big endian vs little endian, which s390x gives coverage of.
> > 
> > Would containers mitigate this use case well enough ?
> 
> Question: How are said containers to be constructed (much less 
> maintained) when working within the Fedora/RHEL ecosystem?

Thanks to Debian multi-arch it is possible to build cross envs for
many archs, from any Linux system with podman/docker. This gets
you a build env, though you do need qemu-user emulation (or native
HW) for most combinations if you need to actually execute the
binaries you build. Just having the build envs though is a massive
win in reducing maint burden across distros & arches.

To limit the dockerfile maint overheads long term, auto-generating
dockerfiles is pretty important IME.

This is one such example (auto-generated) dockerfile from libvirt's
primary git repo:

  
https://gitlab.com/libvirt/libvirt/-/blob/master/ci/containers/debian-12-cross-i686.Dockerfile

for cross compilers, we have the basic Debian native toolchain installed
the first layer (this content is common to all cross containers), then
add the cross-arch toolchain and libraries into a second layer.

Using it goes approximately like this:

$ cd $HOME/src/virt/libvirt
$ podman --remote run -v `pwd`:/libvirt --security-opt label=disable -it 
registry.gitlab.com/libvirt/libvirt/ci-debian-12-cross-i686

root@f8a173b98d5b:/# cd /libvirt

root@f8a173b98d5b:/libvirt# echo $MESON_OPTS 
--cross-file=i686-linux-gnu

root@f8a173b98d5b:/libvirt# meson build-i686 $MESON_OPTS 
The Meson build system
Version: 1.0.1
Source dir: /libvirt
Build dir: /libvirt/build-i686
Build type: cross build
Project name: libvirt
Project version: 11.5.0
C compiler for the host machine: /usr/bin/i686-linux-gnu-gcc (gcc 12.2.0 
"i686-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0")
C linker for the host machine: /usr/bin/i686-linux-gnu-gcc ld.bfd 2.40
Compiler for language c for the build machine not found.
Build machine cpu family: x86_64
Build machine cpu: x86_64
Host machine cpu family: x86
Host machine cpu: i686
Target machine cpu family: x86
Target machine cpu: i686
...snip...
root@f8a173b98d5b:/libvirt# ninja -C build-i686
...snip...


We auto-generate all our dockerfiles across 30+ project git repos, for 20
different distro versions, and 11 different linux arches and 2 mingw targets.
The number of possible variants is enourmous. In CI we limit what we generate
by default to remain within our CI budget, but locally a dev can create any
of the combinations they might need.

A repo declares what it needs using a list of generic package names

     
https://gitlab.com/libvirt/libvirt/-/blob/master/ci/lcitool/projects/libvirt.yml

we then have a centralized mapping file which translates generic names
to distro specific names 
    
     
https://gitlab.com/libvirt/libvirt-ci/-/blob/master/lcitool/facts/mappings.yml

The 'lcitool' command takes the two and spits our dockerfiles for a
project. We can spit out individual dockerfiles on demand, but for CI
we have a manifest to declare our overall standard target set for
CI purposes

  https://gitlab.com/libvirt/libvirt/-/blob/master/ci/manifest.yml

this bulk emits the common dockerfiles we need, along with all the gitlab
CI yml rules to use them. NB, the FreeBSD/macOS bits there don't use
containers, they use a gross hack where we call out to Cirrus CI from
GitLab CI, to use Cirrus' free hardware resources while keeping GitLab
as a single dashboard.

That's probably way more info than you wanted :-)

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

-- 
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to