From: Joel Holdsworth <joel.holdsworth@vcatechnology.com>
To: Laurent Vivier <laurent@vivier.eu>, qemu-devel@nongnu.org
Cc: riku.voipio@iki.fi, Vasileios.Kalintiris@imgtec.com
Subject: Re: [Qemu-devel] [PATCH v2 2/4] linux-user: pass environment arguments in execve
Date: Mon, 20 Jun 2016 22:27:50 +0100 [thread overview]
Message-ID: <57685FD6.5020509@vcatechnology.com> (raw)
In-Reply-To: <fbec165c-b1a8-c83b-a77c-bdd2fb6a7c3a@vivier.eu>
On 20/06/16 21:29, Laurent Vivier wrote:
>
> Le 20/06/2016 à 21:51, Joel Holdsworth a écrit :
>> On 15/06/16 20:59, Laurent Vivier wrote:
>>> Le 14/06/2016 à 21:26, Joel Holdsworth a écrit :
>>>> Previously, when emulating execve(2), qemu would execute a child
>>>> instance of the emulator with the environment variables provided by
>>>> the parent process. This caused problems with qemu if any of the
>>>> variables affected the child emulator's behaviour e.g.
>>>> LD_LIBRARY_PATH.
>>> The best way to avoid that is to use a statically linked qemu.
>> Stepping back a bit; the problem I'm trying to solve is this...
>>
>> There are some processes that invoke a helper process to do some work
>> for them e.g. gstreamer's gst-plugin-scanner. Previously qemu would
>> attempt to execute the helper executable as if it were machine-native,
>> which won't work. These patches modify qemu so that it will (optionally)
>> run the child process inside a child instance of qemu.
> If the context is to use qemu to have a cross build/test environment, I
> like the idea, but you should use chroot/binfmt to do that.
>
> Even without the architecture change, the build/test environment must be
> isolated (chroot) from the host environment to know exactly what you
> build/test.
I do know what we test though: (a gstreamer unit test) ->
(gst-plugin-scanner).
chroot+binfmt is a fine solution for testing a whole user-space, but
rather overkill for just a single program.
Also, chroot and binfmt require root permissions. Also the libraries
have to be installed in a rootfs tree - which isn't how my use case works.
>> My experience as a user was that it took a couple of hours of searching
>> through strace logs to figure out what the issue was. gstreamer would
>> just fail with a generic error about the helper. These patches are meant
>> to make qemu do the right thing.
>>
>> Saying to the user that they should make a static linked build of qemu
>> isn't very practical. Having a command line argument is a much easier
>> solution for the user, that doesn't force them not to used
>> shared-library builds. The distros aren't going to go for that.
> You can provide the RPM/DEB with the statically linked qemu.
> (it will have no dependencies)
Users could do that, but as far as I'm concerned that isn't really
satisfactory.
The current behaviour was quite unexpected to me - there were no
warnings, and the need to link qemu statically isn't documented
anywhere. If you really believe that static linking is the best answer
here, then shouldn't the shared library option be removed? Because with
the shared-library build, qemu-user is somewhat "broken".
But the distros won't like that because of the induced bloat.
>> Moreover, LD_LIBRARY_PATH is just one example. LD_PRELOAD is another.
>> Timezone and locale environment variables are also an issue.
> all LD_ are for the ld.so, the dynamic loader, and with a statically
> linked qemu, you don't use the host ld.so (see ld.so(8)).
>
> Why timezone and local environment variables are also an issue?
All these environment variables affect the behaviour of qemu's glibc -
these are examples of the the parent-guest being able to modify the
behaviour of the child-host if the execve qemu wrapper patch is
integrated. The correct way to pass the execve environ to the child qemu
wrapper is through -E and -U arguments.
> Child qemu instance should just ignore it. Thanks, Laurent
The child qemu can't control what glibc will respond to.
There are a lot of environment variables that can affect it:
http://www.scratchbox.org/documentation/general/tutorials/glibcenv.html
For example with LANG=, the parent-guest process might want to run the
child-guest in Japanese, but the child-qemu should still run in English.
next prev parent reply other threads:[~2016-06-20 21:27 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-14 19:26 [Qemu-devel] linux-user: add option to intercept execve() syscalls Joel Holdsworth
2016-06-14 19:26 ` [Qemu-devel] [PATCH v2 1/4] " Joel Holdsworth
2016-06-15 19:31 ` Laurent Vivier
2016-06-20 20:04 ` Joel Holdsworth
2016-06-14 19:26 ` [Qemu-devel] [PATCH v2 2/4] linux-user: pass environment arguments in execve Joel Holdsworth
2016-06-15 19:59 ` Laurent Vivier
2016-06-20 19:51 ` Joel Holdsworth
2016-06-20 20:29 ` Laurent Vivier
2016-06-20 21:27 ` Joel Holdsworth [this message]
2016-06-20 21:40 ` Peter Maydell
2016-06-20 22:15 ` Joel Holdsworth
2016-06-20 22:54 ` Peter Maydell
2016-06-14 19:26 ` [Qemu-devel] [PATCH v2 3/4] linux-user: pass elf interpreter prefix " Joel Holdsworth
2016-06-15 20:06 ` Laurent Vivier
2016-06-20 19:57 ` Joel Holdsworth
2016-06-14 19:26 ` [Qemu-devel] [PATCH v2 4/4] linux-user: pass strace argument " Joel Holdsworth
2016-06-15 20:37 ` Laurent Vivier
2016-06-20 20:02 ` Joel Holdsworth
-- strict thread matches above, loose matches on Subject: below --
2016-06-20 20:08 [Qemu-devel] [PATCH v2 2/4] linux-user: pass environment arguments " Riku Voipio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=57685FD6.5020509@vcatechnology.com \
--to=joel.holdsworth@vcatechnology.com \
--cc=Vasileios.Kalintiris@imgtec.com \
--cc=laurent@vivier.eu \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).