Re: RFC: static builds for user emulators in Fedora QEMU RPMs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jun 29, 2016 at 06:45:36AM -0700, Neal Gompa wrote:
> On Wed, Jun 29, 2016 at 3:03 AM, Daniel P. Berrange <berrange@xxxxxxxxxx> wrote:
> > For those who aren't familiar, QEMU actually provides two completely
> > different sets of emulators
> >
> >  - system emulators - they emulate a full virtual machine and thus run
> >    a full guest OS.
> >  - user emulators - they emulate the Linux userspace ABI letting you
> >    run non-native arch executables directly.
> >
> > The user emulators are what I'm concerned with in this mail, so ignore
> > the system emulators.
> >
> > Currently all the user emulators are provided in the "qemu-user" RPM
> > which also includes files in /usr/lib/binfmt.d to register each emulator
> > binary as a binary format handler for its respective architecture.
> >
> > This is ok if you have a non-native arch binary that's statically linked
> > and you just want to run it from context of your main OS root filesystem.
> > Running dynamic linked binaries won't fly because if say running an arm
> > binary on x86_64 host, it'll look for /lib/libc.so and find the i386 one,
> > instead of the arm one. You can't set LD_LIBRARY_PATH to override this
> > as the env var will apply to both qemu-arm (an x86_64 binary) and the
> > binary it is trying to run (an arm binary).
> >
> > More typical though is that you have a directory containing an fullish
> > install tree of a non-native architecture and you just want to chroot
> > into that. When doing such a chroot, the qemu-$ARCH emulator must be
> > present inside the chroot too. ie the x86_64 build of /usr/bin/qemu-arm
> > must be present inside at /my/chroot/for/fedora-arm/usr/bin/qemu-arm.
> > So again you have the potential problem of clashing libc.so in /usr/lib
> > It is a shame Fedora doesn't have full multi-arch support, instead of
> > merely multi-lib to avoid these clashing lib dirs across architecture
> > RPMs.
> >
> > The recommended way to deal with this for the qemu user emulator binaries
> > to be statically linked, so when copied inside the non-native arch chroot,
> > they never need to resolve any native arch libraries. Fedora's qemu user
> > binaries are all dynamic linked right now.
> >
> > Debian handles this by having several packages [1]
> >
> >  - qemu-user - the dynamic linked qemu user binaries
> >  - qemu-binfmt - binfmt rules registering the dynamic linked binaries
> >  - qemu-user-static - the static linked qemu user binaries *and* binfmt
> >                       rules to register them. The static binaries all
> >                       have -static suffix on their name
> >
> > NB, this means qemu-binfmt and qemu-user-static are mutually exclusive
> > since they both provide the same binfmt files. You can however have both
> > qemu-user and qemu-user-static installed as their binary names won't
> > clash, and in this case the static ones will be registered as binfmts
> >
> > This nice thing about this multiple package approach is that when you
> > copied the x86_64 build of the "qemu-arm-static" binary into your arm
> > chroot, you still then have the possibility of installing the arm build
> > of the "qemu-arm" binary inside that chroot without filename clash.
> >
> > An alternative simpler approach would be to just have one package,
> > qemu-user, which contains the static binaries and never ship any
> > dynamic linked qemu user binaries. This is slightly more restrictive
> > though, as explained in the previous paragraph, so I'd like to avoid
> > doing that.
> >
> >
> > I'd like to make using non-native arch chroots simple with Fedora without
> > people needing to manually build their own static QEMU binaries, or download
> > static binaries provided by another distro[2]. So I'm suggesting to make a
> > change to Fedora qemu packages to essentially copy the way Debian has done
> > things. Specifically I will
> >
> >  - Pull the binfmt registration files out of qemu-user and into a
> >    new qemu-binfmt package which depends on qemu-user.
> >
> >  - Add static builds of qemu user emulators to a new qemu-user-static
> >    package, along with binfmt registration files
> >
> > The static build of QEMU user emulators is moderately light on
> > dependancies, only requiring glib2-static, pcre-static, zlib-static
> > and glibc-static packages.
> >
> > The change to introduce a qemu-binfmt package has small upgrade
> > implications since anyone with qemu-user installed today, will loose
> > the binary format rules unless they manually install qemu-binfmt. I
> > think the number of people affected is probably quite small, and some
> > of them may well wish to use qemu-user-static instead anyway.
> >
> > Obviously this would only be done in rawhide, not any existing stable
> > releases of Fedora.
> >
> > Nothing will change about the rest of QEMU packaging - ie all system
> > emulators will continue to use dynamic linking
> >
> > Regards,
> > Daniel
> >
> 
> 
> Amazingly, I've been pre-empted here. I was going to ask about this
> for Fedora, since we've got interest in this for Mageia as part of
> potentially enabling cross-arch building with mock in an easy fashion.
> 
> Mageia tries to keep its QEMU package in sync with Fedora, so I'd love
> to see this happen so that it becomes easier to maintain the
> qemu-user-static stuff.
> 
> Right now, we only have a couple of the arches built, but one of our
> guys interested in this might be willing to help out on this side of
> the fence with it (Per Øyvind Karlsen). I've CC'd him to this email.

FYI, I have a test scratch-build with the proposed change:

  http://koji.fedoraproject.org/koji/taskinfo?taskID=14702004

This is completely untested by me so far, so may have bugs,m but it
serves to illustrate the goal.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|
--
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxxx
https://lists.fedoraproject.org/admin/lists/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux