On Tue, Jun 19, 2001 at 02:22:32PM +0200, Guillaume Cottenceau wrote:
> "mandrake-cooker" <[EMAIL PROTECTED]> writes:
> 
> > Hi!
> > 
> > Can somebody tell me why the packages I just rebuild from source rpms
> > fail on libsafe dependency? 
> > 
> > $ cat /etc/mandrake-release
> > Linux Mandrake release 8.0 (Traktopel) for i586
> > 
> > $ rpm -ivh gftp-2.0.8-1.1mdk.i686.rpm
> > error: failed dependencies:
> >         libsafe.so.2.0 is needed by gftp-2.0.8-1.1mdk
> > 
> > $ rpm -ivh libsafe-2.0-3mdk.i686.rpm
> > error: failed dependencies:
> >         libsafe.so.2.0 is needed by libsafe-2.0-3mdk
> > 
> > $ rpm -Uvh libsafe-2.0-3mdk.i686.rpm
> > error: failed dependencies:
> >         libsafe.so.2.0 is needed by libsafe-2.0-3mdk
> > 
> > $ rpm -qa | grep libsafe
> > libsafe-2.0-2mdk
> > 
> > $ rpm -ql libsafe
> > /lib/libsafe.so.2
> > /lib/libsafe.so.2.0/
> > <CUT>
> > 
> > Thank you very much.
> 
> Works here. Removing the current one before upgrading.

No, Guilllaume,

The query is regarding why, when this gentleman builds his own RPMs,
they all have a requirement on libsafe.so.2.0.

This is because when one uses libsafe in one's LD_PRELOAD (or
/etc/ld.so.preload) it makes ldd think that it's the binary that
requires the lib when in fact it is not.  ldd is used in find-requires
to find all of the libs that a binary needs and enter those as
requirements in the RPM.  The preload is fooling ldd and thus
find-requires.

There are two solutions, both of which have been brought up on the rpm
mailing list however the developers there seem to be too stubborn to
admit that this is a problem.  The last time I brought this up they
insisted that it was the build machine that was incorrectly
configured (to use preloads - ~sigh~), not that it was a problem with
RPM's find-requires script.

One of the solutions is to use objdump instead of ldd.  The other is
to exclude the results of $LD_PRELOAD and /etc/ld.so.preload from the
ldd output in find-requires with something like:

--- /usr/lib/rpm/find-requires  Fri Jun 15 02:16:32 2001
+++ /tmp/bjm    Tue Jun 19 08:12:19 2001
@@ -35,7 +35,7 @@
     [ -r $f -a -x $f ] || continue
     lib64=`if file -L $f 2>/dev/null | \
        grep "ELF 64-bit" >/dev/null; then echo "()(64bit)"; fi`
-    ldd $f | awk '/=>/ {
+    ldd $f | grep -v -f /etc/ld.so.preload | awk '/=>/ {
        if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/) {
            gsub(/'\''"/,"\\&",$1);
            printf "%s'$lib64'\n", $1
@@ -49,7 +49,7 @@
     [ -r $f ] || continue
     lib64=`if file -L $f 2>/dev/null | \
        grep "ELF 64-bit" >/dev/null; then echo "()(64bit)"; fi`
-    ldd $f | awk '/=>/ {
+    ldd $f | grep -v -f /etc/ld.so.preload | awk '/=>/ {
        if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/) {
            gsub(/'\''"/,"\\&",$1);
            printf "%s'$lib64'\n", $1

Incorporating the exclusion of contents from $LD_PRELOAD is left as an
excercise for the reader.  :-)

b.


-- 
Brian J. Murrell

Reply via email to