[OE-core] libexecdir and multilib

Mark Hatle mark.hatle at windriver.com
Thu May 2 16:48:13 UTC 2013


On 5/2/13 11:10 AM, Burton, Ross wrote:
> Hi all,
>
> There were several issues being discussed here under the topic of
> libexecdir, some simple and some less so.  I'll ramble for a bit to
> try and get a proper conclusion debated.
>
> The situation where you have a 32-bit dropbear but a 64-bit openssh is
> rather pathological and I'd like to know if this was a real-world
> problem and the rationale behind it, or whether it was an example of a
> hypothetical issue.  Note that the example of Debian using "/usr/lib"
> as libexecdir is true only in the case where ML isn't being used, then
> libexecdir is $prefix/lib/$arch, which will have the same hypothetical
> problem.  Debian's SSH works because dropboard and openssh aren't
> multilib-enabled - if you look at e.g. libgstreamer in Debian you'll
> see the libexecdir there is arch-qualified.
>
> Looking at the latest FHS drafts and the revised automake
> documentation, I agree that our default --libexecdir shouldn't contain
> ${BPN}.  There may be packages that drop unrealistic numbers of
> binaries into libexecdir and for those we can join most other
> distributions and change libexecdir on a per-package basis.  However
> the exact choice of libexecdir depends on what ML behaviour we expect
> and have from the package managers, which predictably isn't uniform.
>
> If it wasn't for multilib, this wouldn't be a issue - we could just
> change the libexecdir definition to whatever we wanted.  However,
> multilib does exist and causes all sorts of annoyances, mainly around
> conflicting binaries.  As far as I'm aware rpm and opkg have different
> behaviour when binaries conflict in packages: rpm allows "executables"
> (but not libraries) to conflict and will prefer the 64-bit version,

Minor clarification.  RPM permits ELF executables to "conflict" and resolves 
them using a local policy.  The default local policy happens to be 64-bit right 
now.  (We've got an open defect to permit this policy to change.)

> whereas opkg allows files in $bindir (etc) to conflict.  So, rpm can
> handle an arbitrary libexecdir but opkg can't at present.
>
> So there are three options that I can see:
>
> libexecdir = "$libdir"
> ===
>
> No conflicting binaries in libexecdir when multilib is used, so
> companion binaries used by libraries don't get used by different
> architectures.  Other packages accessing the libexecdir could have
> different architecture, but this is likely a rare situation.

Do we have any cases where a library will care about the byte size of the 
libexecdir executable?  I'm not aware of any....

> libexecdir = "${exec_prefix}/lib"
> ===
>
> Conflicting binaries with multilib, would likely need improvements in
> the opkg bbclass.  Consistent name so cross-architecture file paths
> are consistent, although the binary architecture isn't.  There is the
> possibility of a /usr/lib solely containing libexecdir binaries if the
> ML configuration means that the libdirs used are lib32 and lib64,
> which would look odd.
>
> libexecdir = ${exec_prefix}/libexec"
> ===
>
> Conflicting binaries with multilib, would likely need improvements in
> the opkg bbclass.  Consistent name so cross-architecture file paths
> are consistent, although the binary architecture isn't.
>
> What's clear from the research I've done is that there isn't a clear
> answer - upstreams have different expectations of how
> libexecdir/bindir are used, and different distributions do different
> things to solve the multilib problems - even when the distribution
> maintainers are also upstream developers.  Some examples:
>
> dbus has a helper dbus-daemon-launch-helper, which is installed into
> libexecdir.  Fedora moves it into $libdir, where as Debian moves this
> same binary to /usr/lib/dbus-1 avoiding the $arch... Some disagreement
> there apparently.
>
> gdk-pixbuf has a tool to introspect/register the installed loader
> modules.  As this loads the libraries, it needs to match the
> architecture of the libgdk-pixbuf being used.  Upstream has this tool
> installing to $bindir yet multilib distributions can't have this tool
> being replaced with different architectures, so Fedora adds a
> word-size suffix to the binary, and Debian moves it to their
> libexecdir (which in ML-compatible packages in $libdir/$arch), and
> both adapt their postinst scripts to match.
>
> Both of these examples are in mainstream packages where the package
> maintainers in the distro are also upstream developers, and yet these
> kludges exist (note that our gdk-pixbuf is currently broken in this
> respect).
>
> My personal opinion at this point in time is that we should change
> libexecdir to be $libdir.  My rationale for this is these internal
> binaries then "stick" with their architecture, and that the number of
> binaries that need to be invoked and match their library's
> architecture is likely higher than the number of cross-package and
> cross-architecture hard-coded execution paths (such as 32-bit dropbear
> running 64-bit openssh helpers).

I'm looking for examples of a libexecdir that -is- architecture specific.  I.e. 
a library (or something external) calls it and expects a specific byte size 
version.  If this is the case (gstreamer, dbus, etc?) then $libdir does make 
sense with the update-alternative link being in ${exec_prefix}/lib/... so that 
shell scripts and other things can find it..

--Mark

> Hopefully nobody got too bored reading this, any comments?
>
> Ross
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>





More information about the Openembedded-core mailing list