[OE-core] [PATCH] allarch: don't reset baselib
Mark Hatle
mark.hatle at windriver.com
Tue Sep 12 17:31:49 UTC 2017
On 9/12/17 11:34 AM, Burton, Ross wrote:
> On 12 September 2017 at 17:28, Mark Hatle <mark.hatle at windriver.com
> <mailto:mark.hatle at windriver.com>> wrote:
>
> On 9/12/17 10:59 AM, Ross Burton wrote:
> > allarch currently resets baselib to "lib" in an attempt to keep allarch recipes
> > uniform. However if the real value for $baselib is actually needed, for example
> > in a multilib environment where $baselib is lib64 for standard binaries and the
> > allarch package is using postinst intercepts which need to know the real value
> > of $libdir, then a non-existant or incorrect $libdir will be used.
> >
> > Real world example: liberation-fonts is allarch and inherits fontcache, which
> > uses a postinst intercept to run fc-cache inside qemu-user. In a multilib
> > configuration where normal libdir=/usr/lib64 and lib32 libdir=/usr/lib qemu will
> > try running a 64-bit fc-cache with a 32-bit ld-linux, and predicatably the
> > binary crashes.
>
> This still won't work right. If we put an allarch package in a configuration
> that can be either 32-bit or 64-bit (which is the point of allarch), then how
> will it know which arch this magic script is running on?
>
> It sounds to me like the way the script is running needs to be fixed (and/or
> qemu needs to be fixed). Calls to QEMU should inherit the matching system
> envrionment, not assume an environment from the post-install scripts.
>
>
> There's several problems, yes. qemu needs to handle this more gracefully, but
> it's clearly being told by the postinst-intercept framework to run a binary in
> rootfs/usr/bin (64-bit) using libraries in rootfs/usr/lib (32-bit). By not
> resetting baselib at least allarch packages think libdir is the "native" libdir,
> not whatever /usr/lib happens to be.
The call to qemu really should not be embedded into the postinst-intercept
script. The framework itself is what should 'know' what it is doing and deal
with it. The package can provide hints.. perhaps something like:
call-qemu <arch> <command>
Then the postinst stuff would implement the call-qemu 'function' (wrapper or
whatever) that would do the right thing for a given arch specified.
> I guess the true solution is for the recipes to not need to know the library
> path. Not sure how to do that yet though...
>
> Also its interesting that nobody else noticed this: multilib images that
> installed fonts were segfaulting in rootfs...
If the segfault is causing the postinst to exit w/ an error (non-0) then it's
likely re-running on the target itself (and thus working). If not, ugh.
I don't have a good answer how to resolve this 'right now' with the time we have.
--Mark
More information about the Openembedded-core
mailing list