Gentoo Logo
Gentoo Spaceship

Installation:
Gentoo Handbook
Installation Docs

Documentation:
Home
Listing
About Gentoo
Philosophy
Social Contract

Resources:
Bug Tracker
Developer List
Discussion Forums
Gentoo BitTorrents
Gentoo Linux Enhancement Proposals
IRC Channels
Mailing Lists
Mirrors
Name and Logo Guidelines
Online Package Database
Security Announcements
Staffing Needs
Supporting Vendors
View our CVS

Graphics:
Logos and themes
Icons
ScreenShots

Miscellaneous Resources:
Gentoo Linux Store
Gentoo-hosted projects
IBM dW/Intel article archive




List Archive: gentoo-soc
Navigation:
Lists: gentoo-soc: < Prev By Thread Next > < Prev By Date Next >
Headers:
To: gentoo-soc@g.o
From: Marius Mauch <google-soc@...>
Subject: Re: Progress Report - Revdep-rebuild
Date: Thu, 26 Jun 2008 19:47:35 +0200
On Wed, 25 Jun 2008 20:30:02 -0500
"Lucian Poston" <lucianposton@...> wrote:

> As mentioned last week, I created lists of "needed" libs and
> "installed" libs. I was hoping that the difference would produce a set
> of "missing" libs, but I encountered several problems with that, which
> I discuss below.

Yeah, it's not as easy as it might appear ;)

> 
> The list of "needed" libraries is found by calling findProviders() on
> all installed files listed in each atom's CONTENTS. It's inefficient,
> but once I'm able to find a solution to the problems mentioned below,
> I will try a different implementation to build a list of "needed"
> libs, most likely by creating another method in LinkageMap (if that is
> okay).

Sure, basically just return the relevant field from
linkmap._obj_properties. But makre sure you understand how library
resolution works by reading ld.so(8), things like DT_RUNPATH makes
things a bit tricky.

> libodbc.so; libodbcinst.so; libgdbm.so.2; libdb-3.1.so;
> libcrypto.so.0.9.6:
> 
> dev-java/sun-jdk-1.6.0.05/NEEDED.ELF.2:
> 386;/opt/sun-jdk-1.6.0.05/jre/lib/i386/libJdbcOdbc.so;libJdbcOdbc.so;$ORIGIN;libodbcinst.so,libodbc.so,libjvm.so,libc.so.6
> app-office/openoffice-bin-2.4.0/NEEDED.ELF.2:
> 386;/usr/lib/openoffice/program/python-core-2.3.4/lib/lib-dynload/dbm.so;;;libgdbm.so.2,libpthread.so.0,libc.so.6
> 
> These libraries are needed as shown above; however, they are not in
> the filesystem and consequently have no scanelf entries in any NEEDED
> file. How are they dynamically linked when the library isn't
> installed? I'm not sure what's going on with these libraries at all.

Typical problem with binary packages. That's why revdep-rebuild doesn't
scan some directories.

> ld-linux.so.2 -> ld-2.6.1.so:
> 
> This is installed by sys-libs/glibc-2.6.1; however, it has no entry in
> any NEEDED file. Scanning the library myself produces
> EM_386;/lib/ld-2.6.1.so;ld-linux.so.2;;. I'd assume that the dynamic
> linker would also have a NEEDED file entry for consistency, but it
> doesn't. Is there a reason why?

Well, I've got the following in
sys-libs/glibc-2.8_p20080602/NEEDED.ELF.2:

X86_64;/lib64/ld-2.8.so;ld-linux-x86-64.so.2;;

So not sure why you don't have it. Try rebuilding glibc, maybe it was a
bug in some older version.

> libGLcore.so.1; libnvidia-tls.so.1:
> 
> Similar to above, these libraries from
> x11-drivers/nvidia-drivers-169.09-r1 are installed and dynamically
> linked to other libraries, but they have no entry in a NEEDED file.
> For libGLcore.so.1, scanelf produced
> EM_386;/usr/lib/opengl/nvidia/lib/libGLcore.so.169.09;libGLcore.so.1;;

Same as above, I've got the relevant entries here.

> libmix.so:
> 
> dev-libs/libmix-2.05/NEEDED.ELF.2:
> 386;/usr/lib/libmix.so;;;libc.so.6
> 
> It is a part of dev-libs/libmix-2.05 and needed by /usr/bin/nc, which
> is in net-analyzer/netcat-110-r8. This library is installed and has an
> entry in a NEEDED file, but that scanelf entry has no soname.

Interesting, might be a bug in that package.

> A couple other libraries (eg libpython2.3.so.1.0, libview.so.2,
> libatkmm-1.6.so.1, libcrypto.so.0.9.7, libglibmm-2.4.so.1), which are
> part of app-office/openoffice-bin-2.4.0 or
> app-emulation/vmware-workstation-5.5.5.56455, are located in
> directories, which are not in portage.util.getlibpaths().

See DT_RUNPATH in ld.so(8), and maybe look at the LinakgeMap code.

> As a consequence of the previous situations, the dict returned by
> findProviders() includes all the previously needed libraries as keys,
> but their associated values are the empty set. I'm unsure if these
> libraries should be ignored or if some other action should be taken.

To clarify: the keys of the returned dict are the soname of requried
libraries, and the values are lists of all providers in the library
path for the object. For the libraries listed above the primary thing
to do is to figure out why the entries are missing on your system. In
general when encountering an unexpected situation you should raise an
appropriate notice so it can be analyzed.

Marius

-- 
Public Key at http://www.genone.de/info/gpg-key.pub

In the beginning, there was nothing. And God said, 'Let there be
Light.' And there was still nothing, but you could see a bit better.
-- 
gentoo-soc@g.o mailing list


References:
Progress Report - Revdep-rebuild
-- Lucian Poston
Navigation:
Lists: gentoo-soc: < Prev By Thread Next > < Prev By Date Next >
Previous by thread:
Progress Report - Revdep-rebuild
Next by thread:
Progress Report - Revdep-rebuild
Previous by date:
Re: Progress Report 2 - GNAP Love
Next by date:
Re: Progress Report - Setting Beacon Afloat


Updated Jun 17, 2009

Donate to support our development efforts.

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

php|architect

php|architect

Copyright 2001-2007 Gentoo Foundation, Inc. Questions, Comments? Email www@gentoo.org.