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