Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 503412

Summary: app-emulation/emul-linux-x86-baselibs installs broken "libs" in /usr/lib when SYMLINK_LIB=no (pointing to /lib32 instead of /lib)
Product: Gentoo Linux Reporter: Georgi Georgiev <chutz+bugs.gentoo.org>
Component: [OLD] LibraryAssignee: Multilib team <multilib+disabled>
Status: RESOLVED INVALID    
Severity: normal CC: tetromino
Priority: Normal    
Version: unspecified   
Hardware: AMD64   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---

Description Georgi Georgiev 2014-03-04 14:27:45 UTC
I am using a multilib profile with SYMLINK_LIB=no. Now my /lib and /usr/lib have 32-bit libraries, while /lib64 and /usr/lib64 have 64-bit ones.

However all "fake" dynamic lib scripts in /usr/lib installed by app-emulation/emul-linux-x86-baselibs are pointing to /lib32, which does not exist.

app-emulation/wine for example fails to compile with an "unable to find /lib32/libz.so.1" message.

> cat /usr/lib/libz.so                                                                                                                                                  
/* GNU ld script
   Since Gentoo has critical dynamic libraries in /lib, and the static versions
   in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
   run into linking problems.  This "fake" dynamic lib is a linker script that
   redirects the linker to the real lib.  And yes, this works in the cross-
   compiling scenario as the sysroot-ed linker will prepend the real path.

   See bug http://bugs.gentoo.org/4411 for more info.
 */
OUTPUT_FORMAT ( elf32-i386 )
GROUP ( /lib32/libz.so.1 )

Other files are the same:

> q list -e app-emulation/emul-linux-x86-baselibs | grep /usr/lib/[^/]*.so$ | xargs file | awk -F: '/ASCII/ {print $1}' | xargs -n1 sed -ne '$p'
GROUP ( /lib32/libacl.so.1 )
GROUP ( /lib32/libbz2.so.1 )
GROUP ( /lib32/libncurses.so.5 )
GROUP ( /lib32/libz.so.1 )
GROUP ( /lib32/libreadline.so.6 )
GROUP ( /lib32/libwrap.so )
GROUP ( /lib32/libss.so.2 )
GROUP ( /lib32/libpam.so.0 )
GROUP ( /lib32/libattr.so.1 )
GROUP ( /lib32/libhistory.so.6 )
GROUP ( /lib32/libcrack.so.2 )
GROUP ( /lib32/libkeyutils.so.1 )
GROUP ( /lib32/libgpm.so.1 )
GROUP ( /lib32/libuuid.so.1 )
GROUP ( /lib32/libncursesw.so.5 )
GROUP ( /lib32/libtirpc.so.1 )
GROUP ( /lib32/libpamc.so.0 )
GROUP ( /lib32/libblkid.so.1 )
GROUP ( /lib32/libpwdb.so.0 )
GROUP ( /lib32/libcom_err.so.2 )
GROUP ( /lib32/libpcre.so.1 )
GROUP ( /lib32/libe2p.so.2 )
GROUP ( /lib32/libmount.so.1 )
GROUP ( /lib32/libpam_misc.so.0 )
GROUP ( /lib32/libext2fs.so.2 )
Comment 1 Alexandre Rostovtsev (RETIRED) gentoo-dev 2014-03-04 19:47:19 UTC
Which profile is this? Something that Gentoo provides, or your own custom profile?

Please attach the output of "emerge --info".
Comment 2 Alexandre Rostovtsev (RETIRED) gentoo-dev 2014-03-05 03:40:18 UTC
After thinking further, it seems that app-emulation/emul-linux-x86-* ebuild are fundamentally incompatible with your profile:

1. All pkgconfig files are going to contain paths with /lib32 or /usr/lib32 in them;
2. All plugins (e.g. for alsa, gdk-pixbuf, pango, pulseaudio, etc.) will be loaded (or in your case, will fail to load) from hard-coded directories under /usr/lib32;
3. Various binaries provided in emul-linux-x86-* have rpaths under /usr/lib32

Fixing all of that would be a lot of work and the result would be very fragile.

If you want to change the filesystem layout from Gentoo's defaults, instead of pre-compiled binaries from app-emulation/emul-linux-x86-*, you will probably need to use native multilib ebuilds (you will need to switch to unstable ACCEPT_KEYWORDS and set ABI_X86="32 64" in make.conf).
Comment 3 Georgi Georgiev 2014-03-06 13:33:28 UTC
(In reply to Alexandre Rostovtsev from comment #2)
> After thinking further, it seems that app-emulation/emul-linux-x86-* ebuild
> are fundamentally incompatible with your profile:
> 
> 1. All pkgconfig files are going to contain paths with /lib32 or /usr/lib32
> in them;
> 2. All plugins (e.g. for alsa, gdk-pixbuf, pango, pulseaudio, etc.) will be
> loaded (or in your case, will fail to load) from hard-coded directories
> under /usr/lib32;
> 3. Various binaries provided in emul-linux-x86-* have rpaths under /usr/lib32
> 
> Fixing all of that would be a lot of work and the result would be very
> fragile.
> 
> If you want to change the filesystem layout from Gentoo's defaults, instead
> of pre-compiled binaries from app-emulation/emul-linux-x86-*, you will
> probably need to use native multilib ebuilds (you will need to switch to
> unstable ACCEPT_KEYWORDS and set ABI_X86="32 64" in make.conf).

Okay, you reasoning makes sense and you are offering a reasonable alternative. Thanks. Feel free to reject this ticket.

Regarding the profile (just to wrap it up); it inherits the following:

default/linux/amd64/13.0/desktop/gnome/systemd
features/multilib

And the custom part looks like this:

> grep -T . *.*
make.defaults  :SYMLINK_LIB="no"
package.mask   :# Kill everything that uses ruby20 - too broken
package.mask   :=dev-lang/ruby-2.0*
package.mask   :=virtual/rubygems-6
package.mask   :=virtual/ruby-ssl-3
package.use.mask       :sys-apps/acl -nfs
use.mask       :ruby_targets_ruby20

And I am using paludis so "emerge --info" would be irrelevant.
Comment 4 Georgi Georgiev 2014-03-16 02:34:26 UTC
(In reply to Alexandre Rostovtsev from comment #2)
>
> If you want to change the filesystem layout from Gentoo's defaults, instead
> of pre-compiled binaries from app-emulation/emul-linux-x86-*, you will
> probably need to use native multilib ebuilds (you will need to switch to
> unstable ACCEPT_KEYWORDS and set ABI_X86="32 64" in make.conf).

I just want to confirm that the native multilib works really well. Thank you!

I did have to keyword a lot of packages, and I also had to unmask the abi_x86_32 flag for even more packages (they had it masked in profiles/default/linux/amd64/13.0/package.use.stable.mask). But once that was done, it worked GREAT!

Thanks.