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: "Lucian Poston" <lucianposton@...>
Subject: Progress Report - Revdep-rebuild
Date: Sun, 20 Jul 2008 04:23:12 -0500
Two major additions happened this week:

-A large part of the functionality that finds broken dependencies has
been moved into LinkageMap within pym/portage/dbapi/vartree.py.
listBrokenDependencies() and listProviders() were added as well as a
minor change to what was being added into the needed entries in
_obj_properties.  Empty strings were inserted into needed entries when
binaries had no needed entries in NEEDED.ELF.2.

-I resorted to masking directories and libraries to filter false
positives due to various reasons that are mentioned below.  The
existing SEARCH_DIRS_MASK and LD_LIBRARY_MASK variables from
/etc/revdep-rebuild/* are being used for now to mask special binaries
and directories, which are most often the result of binary packages.
This is the only way I've been able to filter binaries that are in
fact missing shared libraries according to my understanding of how the
dynamic linkers locates libraries (and what ldd reports).

vartree.py and sets.conf have been added to the repository at
http://repo.or.cz/w/revdep-rebuild-reimplementation.git

Replacing vartree.py and adding revdep.py and /etc/portage/sets.conf
should be enough to test out the set via emerge @missing-rebuild (you
may want to disable debug in sets.conf).  It's quite likely that many
packages are causing false positives.

Below are some examples of the types of edge cases I've encountered
and how they were resolved.

Lucian



------------------
www-client/mozilla-firefox-2.0.0.15
(/usr/lib/mozilla-firefox/plugins/libunixprintplugin.so)
386;/usr/lib/mozilla-firefox/plugins/libunixprintplugin.so;libunixprintplugin.so;$ORIGIN:/usr/lib/nspr;libxpcom.so,libxpcom_core.so,libplds4.so.6,libplc4.so.6,libnspr4.so.6,libpthread.so.0,libdl.so.2,libXt.so.6,libX11.so.6,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

The previous requires the two following libs:

www-client/mozilla-firefox-2.0.0.15 (/usr/lib/mozilla-firefox/libxpcom.so)
386;/usr/lib/mozilla-firefox/libxpcom.so;libxpcom.so;$ORIGIN:/usr/lib/nspr;libplds4.so.6,libplc4.so.6,libnspr4.so.6,libpthread.so.0,libdl.so.2,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

www-client/mozilla-firefox-2.0.0.15 (/usr/lib/mozilla-firefox/libxpcom_core.so)
386;/usr/lib/mozilla-firefox/libxpcom_core.so;libxpcom_core.so;$ORIGIN:/usr/lib/nspr;libplds4.so.6,libplc4.so.6,libnspr4.so.6,libpthread.so.0,libdl.so.2,libgtk-x11-2.0.so.0,libgdk-x11-2.0.so.0,libatk-1.0.so.0,libgdk_pixbuf-2.0.so.0,libpangocairo-1.0.so.0,libpango-1.0.so.0,libcairo.so.2,libgobject-2.0.so.0,libgmodule-2.0.so.0,libglib-2.0.so.0,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

Notice that the two libs are needed; however, they are not located in
DT_RUNPATH of libunixprintplugin.so.
The rpath of libunixprintplugin.so includes
/usr/lib/mozilla-firefox/plugins; however, the required libs are in
/usr/lib/mozilla-firefox.

It would appear that the runpath for
libunixprintplugin.so should include $ORIGIN/.. rather than $ORIGIN.
I added a mask for /usr/lib/mozilla-firefox/plugins to deal with this.

------------------
app-emulation/vmware-workstation-5.5.7.91707
(/opt/vmware/workstation/lib/bin/vmware)
386;/opt/vmware/workstation/lib/bin/vmware;;;libdl.so.2,libm.so.6,libX11.so.6,libXext.so.6,libXi.so.6,libexpat.so.0,libfontconfig.so.1,libfreetype.so.6,libXrender.so.1,libXft.so.2,libglib-2.0.so.0,libgmodule-2.0.so.0,libgobject-2.0.so.0,libgthread-2.0.so.0,libatk-1.0.so.0,libpango-1.0.so.0,libpangoft2-1.0.so.0,libpangoxft-1.0.so.0,libpangox-1.0.so.0,libgdk-x11-2.0.so.0,libgdk_pixbuf-2.0.so.0,libgtk-x11-2.0.so.0,libgcc_s.so.1,libstdc++.so.5,libsigc-2.0.so.0,libglibmm-2.4.so.1,libglibmm_generate_extra_defs-2.4.so.1,libatkmm-1.6.so.1,libpangomm-1.4.so.1,libgdkmm-2.4.so.1,libgtkmm-2.4.so.1,libart_lgpl_2.so.2,libxml2.so.2,libglade-2.0.so.0,libgnomecanvas-2.so.0,libgnomecanvasmm-2.6.so.1,librsvg-2.so.2,libview.so.2,libsexy.so.1,libsexymm.so.1,libpthread.so.0,libz.so.1,libc.so.6,ld-linux.so.2

The previous requires the following:

app-emulation/vmware-workstation-5.5.7.91707
(/opt/vmware/workstation/lib/lib/libview.so.2/libview.so.2)
386;/opt/vmware/workstation/lib/lib/libview.so.2/libview.so.2;libview.so.2;/usr/lib/.;libgtkmm-2.4.so.1,libgdkmm-2.4.so.1,libatkmm-1.6.so.1,libgtk-x11-2.0.so.0,libpangomm-1.4.so.1,libglibmm-2.4.so.1,libsigc-2.0.so.0,libgdk-x11-2.0.so.0,libatk-1.0.so.0,libgdk_pixbuf-2.0.so.0,libpangoxft-1.0.so.0,libpangox-1.0.so.0,libpango-1.0.so.0,libgobject-2.0.so.0,libgmodule-2.0.so.0,libdl.so.2,libglib-2.0.so.0,libstdc++.so.5,libm.so.6,libc.so.6,libgcc_s.so.1

app-emulation/vmware-workstation-5.5.7.91707
(/opt/vmware/workstation/lib/lib/libpangomm-1.4.so.1/libpangomm-1.4.so.1)
386;/opt/vmware/workstation/lib/lib/libpangomm-1.4.so.1/libpangomm-1.4.so.1;libpangomm-1.4.so.1;/usr/lib/.;libglibmm-2.4.so.1,libsigc-2.0.so.0,libpango-1.0.so.0,libgobject-2.0.so.0,libgmodule-2.0.so.0,libdl.so.2,libglib-2.0.so.0,libstdc++.so.5,libm.so.6,libc.so.6,libgcc_s.so.1

app-emulation/vmware-workstation-5.5.7.91707
(/opt/vmware/workstation/lib/lib/libexpat.so.0/libexpat.so.0)
386;/opt/vmware/workstation/lib/lib/libexpat.so.0/libexpat.so.0;libexpat.so.0;;libc.so.6

Not in rpath.  I assume this is a bug or special binaries.
/opt/vmware/workstation/lib/bin isn't in $PATH anyhow.  I don't know
why binary packages have to be so rebellious.  I had to add a mask for
/opt/vmware/workstation/lib.

--------------------
dev-java/sun-jdk-1.6.0.06 (/opt/sun-jdk-1.6.0.06/jre/lib/i386/libjawt.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/libjawt.so;libjawt.so;$ORIGIN;libmawt.so,libjvm.so,libc.so.6

The previous requires one of the following:

dev-java/sun-jdk-1.6.0.06
(/opt/sun-jdk-1.6.0.06/jre/lib/i386/motif21/libmawt.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/xawt/libmawt.so;libmawt.so;$ORIGIN:$ORIGIN/..;libpthread.so.0,libm.so.6,libXext.so.6,libX11.so.6,libdl.so.2,libXtst.so.6,libXi.so.6,libjvm.so,libc.so.6

dev-java/sun-jdk-1.6.0.06
(/opt/sun-jdk-1.6.0.06/jre/lib/i386/headless/libmawt.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/motif21/libmawt.so;libmawt.so;$ORIGIN:$ORIGIN/..;libXp.so.6,libXtst.so.6,libXext.so.6,libX11.so.6,libXi.so.6,libjvm.so,libm.so.6,libdl.so.2,libc.so.6

dev-java/sun-jdk-1.6.0.06 (/opt/sun-jdk-1.6.0.06/jre/lib/i386/xawt/libmawt.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/headless/libmawt.so;libmawt.so;$ORIGIN:$ORIGIN/..;libjvm.so,libm.so.6,libdl.so.2,libc.so.6

Not in rpath. The rpath of libjawt.so includes
/opt/sun-jdk-1.6.0.06/jre/lib/i386, but the required lib(s) are a
level deeper.  The existing masks in /etc/revdep-rebuild/* covered these.

--------------------
dev-java/sun-jdk-1.6.0.06 (/opt/sun-jdk-1.6.0.06/jre/lib/i386/libJdbcOdbc.so)
386;/opt/sun-jdk-1.6.0.06/jre/lib/i386/libJdbcOdbc.so;libJdbcOdbc.so;$ORIGIN;libodbcinst.so,libodbc.so,libjvm.so,libc.so.6

The previous requires libodbcinst.so and libodbc.so, which are not
installed by this package or any dependencies.
The existing masks in /etc/revdep-rebuild/* covered these.

--------------------
app-office/openoffice-bin-2.4.1
(/usr/lib/openoffice/program/hatchwindowfactory.uno.so ->
hatchwindowfactory.uno.so.1.1)
386;/usr/lib/openoffice/program/hatchwindowfactory.uno.so.1.1;;$ORIGIN:$ORIGIN/../ure-link/lib;libtk680li.so,libvcl680li.so,libtl680li.so,libuno_cppuhelpergcc3.so.3,libuno_cppu.so.3,libuno_sal.so.3,libdl.so.2,libpthread.so.0,libstlport_gcc.so,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

The previous requires the following:

app-office/openoffice-bin-2.4.1
(/usr/lib/openoffice/program/libstlport_gcc.so -> libstlport_gcc.so.1)
386;/usr/lib/openoffice/program/libstlport_gcc.so.1;;$ORIGIN;libm.so.6,libc.so.6

app-office/openoffice-bin-2.4.1
(/usr/lib/openoffice/program/libvcl680li.so -> libvcl680li.so.1.1)
386;/usr/lib/openoffice/program/libvcl680li.so.1.1;;$ORIGIN:$ORIGIN/../ure-link/lib;libpsp680li.so,libsot680li.so,libutl680li.so,libtl680li.so,libi18nisolang1gcc3.so,libcomphelp4gcc3.so,libucbhelper4gcc3.so,libuno_cppuhelpergcc3.so.3,libuno_cppu.so.3,libvos3gcc3.so,libuno_sal.so.3,libbasegfx680li.so,libicuuc.so.36,libicule.so.36,libjvmaccessgcc3.so.3,libfreetype.so.6,libX11.so.6,libXext.so.6,libdl.so.2,libpthread.so.0,libstlport_gcc.so,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

app-office/openoffice-bin-2.4.1
(/usr/lib/openoffice/program/libtk680li.so -> libtk680li.so.1.1)
386;/usr/lib/openoffice/program/libtk680li.so.1.1;;$ORIGIN:$ORIGIN/../ure-link/lib;libvos3gcc3.so,libvcl680li.so,libsot680li.so,libutl680li.so,libtl680li.so,libcomphelp4gcc3.so,libuno_cppuhelpergcc3.so.3,libuno_cppu.so.3,libuno_sal.so.3,libX11.so.6,libdl.so.2,libpthread.so.0,libstlport_gcc.so,libstdc++.so.6,libm.so.6,libgcc_s.so.1,libc.so.6

The required libs are in rpath; however, they are missing sonames, so
LinkageMap can't add provider info into _libs.
Bugs in the package, I assume.  A little hack in
listBrokenDependencies() covered the case of missing sonames within
libraries (though these happen to be masked anyway).

--------------------
net-analyzer/netcat-110-r8 (/usr/bin/nc)
386;/usr/bin/nc;;;libmix.so,libc.so.6

The previous requires:

dev-libs/libmix-2.05 (/usr/lib/libmix.so)
386;/usr/lib/libmix.so;;;libc.so.6

Same as above. Missing soname in libmix.so.
Seems to be a bug.

------------------
x11-drivers/nvidia-drivers-173.14.09
(/usr/lib/opengl/nvidia/lib/libGL.so -> libGL.so.173.14.09)
386;/usr/lib/opengl/nvidia/lib/libGL.so.173.14.09;libGL.so.1;;libGLcore.so.1,libnvidia-tls.so.1,libm.so.6,libXext.so.6,libX11.so.6,libdl.so.2,libc.so.6

The previous requires the following:

x11-drivers/nvidia-drivers-173.14.09
(/usr/lib/opengl/nvidia/lib/libnvidia-tls.so ->
../tls/libnvidia-tls.so)
386;/usr/lib/opengl/nvidia/tls/libnvidia-tls.so.173.14.09;libnvidia-tls.so.1;;

The symlink is in rpath, but target is not. Only the target's path is
stored in LinkageMap, so the need is unsatisfied according to
findProviders().
listBrokenDependencies() checks for this case (only symlinks in runpath).

--------------------


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 - Setting Beacon Afloat
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.