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

Bug 143089

Summary: app-arch/rpm-4.4.6 - rpmbuild produces incompatible LD_ASSUME_KERNEL variable
Product: Gentoo Linux Reporter: Valentin Longchamp <valentin.longchamp>
Component: Current packagesAssignee: No maintainer - Look at https://wiki.gentoo.org/wiki/Project:Proxy_Maintainers if you want to take care of it <maintainer-needed>
Status: RESOLVED INVALID    
Severity: normal    
Priority: High    
Version: 2006.0   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Bug Depends on:    
Bug Blocks: 143316    

Description Valentin Longchamp 2006-08-07 07:09:47 UTC
I have to run a perl script on my Gentoo box which uses rpmbuild. Unfortunately, this generates a script that is incompatible with my GLIBC version (because I'm using NPTL version). The perl script wants to use its own rpm version (4.0.4) for I guess compatibility issues and certainly installs it in one other directory (not in bin). However, it uses the system's original rpm (the one emerged by portage) to build and install itself, through rpmbuild.

Here is more information:

libc version:

[ltib]> eu-readelf -n /lib/libc.so.6

Note segment of 32 bytes at offset 0x194:
  Owner          Data size  Type
  GNU                   16  VERSION
    OS: Linux, ABI: 2.6.9

rpmbuild command and its error output:

/usr/bin/rpmbuild --dbpath /tmp/rpm-valentin/rpmdb --define '_unpackaged_files_terminate_build 0' --define '_target_cpu i686' --define '__strip strip' --define '_topdir /tmp/rpm-valentin' --define '_prefix /opt/freescale/ltib/usr' --define '_tmppath /tmp' --define '_mandir /opt/freescale/ltib/usr/share/man' --define '_sysconfdir /opt/freescale/ltib/etc' -bb  --clean --rmsource  /home/valentin/EPFL/diplome_ASL/linux/ltib/dist/lfs-5.1/rpm/rpm-fs.spec
.
.
.
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd rpm-4.0.4
+ echo 'Patch #0 (rpm_lfs.patch):'
Patch #0 (rpm_lfs.patch):
+ patch -p1 -s
+ echo 'Patch #1 (rpm-4.0.4-python-configure.patch):'
Patch #1 (rpm-4.0.4-python-configure.patch):
+ patch -p1 -s
+ exit 0
Executing(%build): /bin/sh -e /tmp/rpm-tmp.9847
+ umask 022
+ cd /tmp/rpm-valentin/BUILD
+ cd rpm-4.0.4
++ uname -m
+ '[' i686 '!=' x86_64 ']'
+ export LD_ASSUME_KERNEL=2.2.5
+ LD_ASSUME_KERNEL=2.2.5
++ echo /opt/freescale/ltib/usr
++ sed -e 's,/usr$,,'
sed: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
+ var=/var
error: Bad exit status from /tmp/rpm-tmp.9847 (%build)


RPM build errors:
    Bad exit status from /tmp/rpm-tmp.9847 (%build)

Here is the generated rpmbuild script:

!/bin/sh

  RPM_SOURCE_DIR="/tmp/rpm-valentin/SOURCES"
  RPM_BUILD_DIR="/tmp/rpm-valentin/BUILD"
  RPM_OPT_FLAGS="-O2 -g -march=i386 -mcpu=i686"
  RPM_ARCH="i386"
  RPM_OS="linux"
  export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS
  RPM_DOC_DIR="/usr/share/doc"
  export RPM_DOC_DIR
  RPM_PACKAGE_NAME="rpm-fs"
  RPM_PACKAGE_VERSION="4.0.4"
  RPM_PACKAGE_RELEASE="1"
  export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE
  RPM_BUILD_ROOT="/tmp/rpm-fs"
  export RPM_BUILD_ROOT

  unset PERL_MM_OPT
  LANG=C
  export LANG
  unset DISPLAY

  set -x
  umask 022
  cd /tmp/rpm-valentin/BUILD
cd rpm-4.0.4
# this is needed for redhat-9.0 (nptl) or you get
# rpmdb: /opt/freescale/ltib/var/lib/rpm/__db.001: unable to initialize environm
ent lock: Function not implemented
#
# 27jun05: the if block was added as setting LD_ASSUME_KERNEL causes
#          failure on IA64 (error while loading shared libraries: libc.so.6)
if [ "`uname -m`" != "x86_64" ]
then
    export LD_ASSUME_KERNEL=2.2.5
fi

# For this package /opt/freescale/ltib/usr is expected to end in /usr and be the
# actual path that we're installing into .
# Note: we do not put rpm into the normal 1 directory level above prefix
#       as we don't care about single user mode and it means we
#       only need to add one additional path to all our scripts.
#
# Note: make sure we are not going to install into the host's rpm
# Note: this package is hijacked to make the lpp directory as it is the
#       bootstap package
#
var="`echo /opt/freescale/ltib/usr | sed -e s,/usr$,,`/var"
etc="`echo /opt/freescale/ltib/usr | sed -e s,/usr$,,`/etc"

# collapse multiple forward slashes
var="`echo $var | sed -e 's,/\+,/,g'`"
if [ "$var" = "/var" ]
then
    echo "You need to change your prefix to a value that won't over-write"
    echo "The installed host's rpm and rpm database."
    exit 1
fi
                                                                   fi                                                                                                                                                              varprefix=$var \                                                                lt_cv_prog_cc_static_works=no \                                                 ./configure --prefix=/opt/freescale/ltib/usr --localstatedir=$var --sysconfdir=$etc \                                                                           --without-python --without-javaglue                                                                                                                             make                                                                                                                                                                                                                                            exit 0  

And my "portage rpm" version:

* app-arch/rpm
     Available versions:  4.0.4-r5 4.2 4.2-r1 4.2-r2 -4.2.1 -4.4.1 4.4.1-r1 4.4.6
     Installed:           4.4.6
     Homepage:            http://www.rpm.org/
     Description:         Red Hat Package Management Utils
           

We can see that the LD_ASSUME_KERNEL variable is not compatible with the libc version that was emerged on my system. 


I don't have much experience with rpm (that's what I wanted to avoid when I chose Gentoo ....) but the script which uses rpmbuild is provided to me by Freescale and I have to use it (don't have time to hack it yet) and it relies very much on rpm.
Comment 1 Christian Faulhammer (RETIRED) gentoo-dev 2006-08-14 01:15:59 UTC
Did you test with older versions of app-arch/rpm?  So this is a problem of the perl script...can you change the calls of rpm so the local version is used?
Comment 2 Chris Bainbridge (RETIRED) gentoo-dev 2006-08-14 03:06:59 UTC
I would assume your problem is something to do with:

#
# 27jun05: the if block was added as setting LD_ASSUME_KERNEL causes
#          failure on IA64 (error while loading shared libraries: libc.so.6)
if [ "`uname -m`" != "x86_64" ]
then
    export LD_ASSUME_KERNEL=2.2.5
fi


Closing as invalid, if you think this bug is still valid and gentoo specific please re-open and provide a minimal test script so we can reproduce it (one that does not involve mixing a binary incompatible rpm that has probably been copied from redhat). At the moment it appears that the problem is something related to your packaged perl script, or build environment, rather than a gentoo bug.