RPM Community Forums

Mailing List Message of <rpm-users>

Re: Requires/Provides issue with re-packaging a complex product (endeca)

From: Jeffrey Johnson <n3npq@me.com>
Date: Sat 05 Jan 2013 - 18:10:44 CET
Message-id: <1C808BED-A563-462B-AF90-EAF114068C01@me.com>

On Jan 5, 2013, at 11:34 AM, Mykel Alvis <malvis@restorationhardware.com> wrote:

> Darnit!  I didn't even notice that I had joined the rpm5 list.  I'm actually quite sick this week and my head's probably not totally in the game. 
> 
> First, I very much appreciate the help, Jeff.  
> 
> Second, you're right, I'm using rpm 4.8 from RHEL.  It's the only choice I have.
>   

OK.

FYI: there's not enough difference to worry about between @rpm.org <-> @rpm5.org.

The goals are more different than the code is: RHEL "support" is a deadly sea-anchor
to change. So @rpm5.org has more -- and more aggresive -- features.

> Next, at least in my case, setting the -x flag doesn't change anything.  
> 

Not setting, but removing, the execute bit. Verify the final result in the *.rpm using
	rpm -qp --xml *.rpm

> As for the dependencies, you're correct in that there is no reason to suspect that they aren't required.  The problem I'm experiencing is that all the dependencies that are required are being supplied by the local package, but RPM is generating external dependencies because it sees the need for a Requires and isn't noticing that it was supplied as a Provides.
> 

Note that there may be a typo: note the extra '/' character within parentheses:

Error: Package: endeca-toolsandframeworks-3.1.1-1.el6.x86_64 (/endeca-toolsandframeworks-3.1.1-1.el6.x86_64)
           Requires: endeca-mdex=6.4.0

See if that is in the package requirements
	rpm -qp --requires endeca-toolsandframeworks-3.1.1-1.el6.x86_64.rpm


> If you have any information about how I could filter using rpm 4.8 I'd appreciate it.
> 

Filtering in rpm-4.8 is fairly complex (compared to rpm5).

But filtering basically involves writing a 1 line wrapper script
to a helper to post-process stdout to remove a token using sed(1).
(rpm5 implements the same token removal by applying patterns
to tokens, and excluding, w/o the need for scripts & helpers).

There's a bunch of macros in rpm-4.8 (and conventions) that are supposed to assist
with the filtering, but add complexity from the conventional choices/names of parameters
used in wrappers etc.

> In any case, thanks for calling to my attention that I had asked my question in the wrong place.
> 

np, happens all the time: linux vendors have achieved customer lock-in
and "support" income streams, exactly as intended. 

73 de Jeff

> Mykel
> 
> 
> On Sat, Jan 5, 2013 at 12:06 AM, Jeffrey Johnson <n3npq@me.com> wrote:
> 
> On Jan 4, 2013, at 8:42 PM, Mykel Alvis <alvis.mykel@gmail.com> wrote:
> 
>> tl;dr version:  How do I get rpmbuild to ignore the .so in the %files tree and just add the .so without adding a provides or requires for it?
>> 
> 
> (aside)
> You haven't identified what RPM you are using: the following is
> relevant to @rpm5.org.
> 
> There's any number of ways to remove dependencies. There is also no
> reason to think that the dependencies aren't necessary but 
> 
> RPM generates Requires: dependency only for executable files.
> 
> So add to %install at end
> 	chmod -x %{buildroot}/path/to/somewhere/libfoo.so
> and rpmbuild will not attempt to generate Requires:.
> 
> You can also do any of the following:
> 	1) add all the missing dependencies as Provides:
> 	2) add the missing dependencies to /etc/rpm/sysinfo/Providename
> 	3) filter the dependencies being generated
> 	4) build another package that has the Provides:
> 
> I recommend "chmod -x " as simplest: ymmv.
> 
>> Full text of the question below:
>> 
>> So I'm trying to package the Endeca engine so that I can easily install it via RPM.  I'm pretty sure this doesn't violate any terms of service, and the installation is actually pretty simplistic.  You run a few shell scripts giving them a target directory.  It writes a few config files that are easily modified.  This the whole thing should be pretty transportable, right?
>> 
>> First, the installation has a pile of shared libraries in it.  libstdc++.so.6 is just one of them, but it's a consistent thorn in my side. 
>> Second, the installation installs its own jdk and perl binaries.  I'm sure it was just WAY too hard for the endeca developers to write something with compatibility checks built in, but that's  another story.
>> 
>> The real problem I have is that when I package the various pieces, rpmbuild produces something that looks like this:
>> 
>> Processing files: endeca-mdex-6.4.0-1.el6.x86_64
>> Provides: libclntshcore.so.12.1()(64bit) libcrypto.so.1.0.0()(64bit) libcurl.so.4()(64bit) libeaspell.so.15()(64bit) libexerces-c.so.27()(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_3.3)(64bit) libgcc_s.so.1(GCC_3.3.1)(64bit) libgcc_s.so.1(GCC_3.4)(64bit) libgcc_s.so.1(GCC_3.4.2)(64bit) libgcc_s.so.1(GCC_3.4.4)(64bit) libgcc_s.so.1(GCC_4.0.0)(64bit) libgcc_s.so.1(GCC_4.2.0)(64bit) libgcc_s.so.1(GCC_4.3.0)(64bit) libicudata.so.42()(64bit) libicui18n.so.42()(64bit) libicuuc.so.42()(64bit) libimf.so()(64bit) libintlc.so.5()(64bit) libirc.so()(64bit) libolt.so()(64bit) libolt_c.so()(64bit) libolt_j.so()(64bit) libssl.so.1.0.0()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(CXXABI_1.3.1)(64bit) libstdc++.so.6(CXXABI_1.3.2)(64bit) libstdc++.so.6(CXXABI_1.3.3)(64bit) libstdc++.so.6(CXXABI_1.3.4)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libstdc++.so.6(GLIBCXX_3.4.1)(64bit) libstdc++.so.6(GLIBCXX_3.4.10)(64bit) libstdc++.so.6(GLIBCXX_3.4.11)(64bit) libstdc++.so.6(GLIBCXX_3.4.12)(64bit) libstdc++.so.6(GLIBCXX_3.4.13)(64bit) libstdc++.so.6(GLIBCXX_3.4.14)(64bit) libstdc++.so.6(GLIBCXX_3.4.2)(64bit) libstdc++.so.6(GLIBCXX_3.4.3)(64bit) libstdc++.so.6(GLIBCXX_3.4.4)(64bit) libstdc++.so.6(GLIBCXX_3.4.5)(64bit) libstdc++.so.6(GLIBCXX_3.4.6)(64bit) libstdc++.so.6(GLIBCXX_3.4.7)(64bit) libstdc++.so.6(GLIBCXX_3.4.8)(64bit) libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
>> Requires(interp): /bin/sh /bin/sh /bin/sh /bin/sh
>> Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
>> Requires(pre): /bin/sh
>> Requires(post): /bin/sh
>> Requires(preun): /bin/sh
>> Requires(postun): /bin/sh
>> Requires: /bin/bash ld-linux-x86-64.so.2()(64bit) ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) libaio.so.1()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libclntshcore.so.12.1()(64bit) libcrypto.so.1.0.0()(64bit) libcurl.so.4()(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libeaspell.so.15()(64bit) libexerces-c.so.27()(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_3.3)(64bit) libgcc_s.so.1(GCC_4.2.0)(64bit) libicudata.so.42()(64bit) libicui18n.so.42()(64bit) libicuuc.so.42()(64bit) libimf.so()(64bit) libintlc.so.5()(64bit) libirc.so()(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libncurses.so.5()(64bit) libnsl.so.1()(64bit) libolt.so()(64bit) libolt_c.so()(64bit) libolt_j.so()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libpthread.so.0(GLIBC_2.3.2)(64bit) librt.so.1()(64bit) libssl.so.1.0.0()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(CXXABI_1.3.1)(64bit) libstdc++.so.6(CXXABI_1.3.2)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libstdc++.so.6(GLIBCXX_3.4.11)(64bit) libstdc++.so.6(GLIBCXX_3.4.14)(64bit) libstdc++.so.6(GLIBCXX_3.4.9)(64bit) rtld(GNU_HASH)
>> 
>> 
>> The top of my spec file has the following 
>> ---- snip ----
>> 
>> %global __libtool_requires      %{nil}
>> %global __libtool_provides      %{nil}
>> %global __os_install_post %{nil}
>> %global __perl_requires %{nil}
>> %global __perl_provides %{nil}
>> 
>> 
>> %define __find_requires %{nil}
>> %define __find_provides %{nil}
>> 
>> Autoreq: 0
>> Autoprov: 0
>> 
> 
> Ick: Get rid of all this crapola: just "chmod -x" to disable dependency
> generation on a per-file basis.
> 
>> # %{target} is NOT like a prefix.  You can't relocate these packages except at RPM build time
>> %define         target          /opt
>> 
>> 
>> ---- snip ----
>> 
>> Here's my question:  
>> How do I get rpmbuild to just package the files without processing the .so dependencies and requirements?  I KNOW that the packaging will work, because I've done the copy by hand.  I know I don't need anything else when I install.  But when I do a
>> yum localinstall endenca*
>> I get 
>> Examining endeca-platformservices-6.1.3-1.el6.x86_64.rpm: endeca-platformservices-6.1.3-1.el6.x86_64
>> Marking endeca-platformservices-6.1.3-1.el6.x86_64.rpm to be installed
>> Examining endeca-presentationapi-6.4.0-1.el6.x86_64.rpm: endeca-presentationapi-6.4.0-1.el6.x86_64
>> Marking endeca-presentationapi-6.4.0-1.el6.x86_64.rpm to be installed
>> Examining endeca-toolsandframeworks-3.1.1-1.el6.x86_64.rpm: endeca-toolsandframeworks-3.1.1-1.el6.x86_64
>> Marking endeca-toolsandframeworks-3.1.1-1.el6.x86_64.rpm to be installed
>> Resolving Dependencies
>> --> Running transaction check
>> ---> Package endeca-mdex.x86_64 0:6.4.0-1.el6 will be installed
>> ---> Package endeca-platformservices.x86_64 0:6.1.3-1.el6 will be installed
>> --> Processing Dependency: /export/home/packaging/Work/RPM/BUILDROOT/endeca-1.0.0-1.el6.x86_64/opt/endeca/PlatformServices/6.1.3/perl/bin/perl for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: /usr/local/bin/perl for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: /usr/local/perl-5.8.3/bin/perl for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: endeca-mdex=6.4.0 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: ld-linux.so.2 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: ld-linux.so.2(GLIBC_2.3) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libc.so.6 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libc.so.6(GLIBC_2.0) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libc.so.6(GLIBC_2.1) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libc.so.6(GLIBC_2.1.2) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libc.so.6(GLIBC_2.1.3) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libc.so.6(GLIBC_2.2) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libc.so.6(GLIBC_2.2.4) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libc.so.6(GLIBC_2.3) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libcrypt.so.1 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libcrypt.so.1(GLIBC_2.0) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libdb-4.1.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libdl.so.2 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libdl.so.2(GLIBC_2.0) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libdl.so.2(GLIBC_2.1) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libgdbm.so.2 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libm.so.6 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libm.so.6(GLIBC_2.0) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libnsl.so.1 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libpthread.so.0 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libpthread.so.0(GLIBC_2.0) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libpthread.so.0(GLIBC_2.1) for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libsc_ch.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libsc_da.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libsc_ex.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libsc_fa.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libsc_fi.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libsc_fut.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libsc_lo.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libsc_ut.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libutil.so.1 for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: libwv_core.so for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> ---> Package endeca-presentationapi.x86_64 0:6.4.0-1.el6 will be installed
>> --> Processing Dependency: endeca-mdex=6.4.0 for package: endeca-presentationapi-6.4.0-1.el6.x86_64
>> ---> Package endeca-toolsandframeworks.x86_64 0:3.1.1-1.el6 will be installed
>> --> Processing Dependency: endeca-mdex=6.4.0 for package: endeca-toolsandframeworks-3.1.1-1.el6.x86_64
>> --> Processing Dependency: endeca-platformservices=6.1.3 for package: endeca-toolsandframeworks-3.1.1-1.el6.x86_64
>> 
>> And then at the end I get 
>> 
>> --> Processing Dependency: /usr/local/bin/perl for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: /export/home/packaging/Work/RPM/BUILDROOT/endeca-1.0.0-1.el6.x86_64/opt/endeca/PlatformServices/6.1.3/perl/bin/perl for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Processing Dependency: /usr/local/perl-5.8.3/bin/perl for package: endeca-platformservices-6.1.3-1.el6.x86_64
>> --> Finished Dependency Resolution
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libsc_ut.so
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libsc_ex.so
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: endeca-mdex=6.4.0
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libsc_ch.so
>> Error: Package: endeca-presentationapi-6.4.0-1.el6.x86_64 (/endeca-presentationapi-6.4.0-1.el6.x86_64)
>>            Requires: endeca-mdex=6.4.0
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libsc_lo.so
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: /export/home/packaging/Work/RPM/BUILDROOT/endeca-1.0.0-1.el6.x86_64/opt/endeca/PlatformServices/6.1.3/perl/bin/perl
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: /usr/local/bin/perl
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: /usr/local/perl-5.8.3/bin/perl
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libdb-4.1.so
>> Error: Package: endeca-toolsandframeworks-3.1.1-1.el6.x86_64 (/endeca-toolsandframeworks-3.1.1-1.el6.x86_64)
>>            Requires: endeca-platformservices=6.1.3
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libwv_core.so
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libsc_fa.so
>> Error: Package: endeca-toolsandframeworks-3.1.1-1.el6.x86_64 (/endeca-toolsandframeworks-3.1.1-1.el6.x86_64)
>>            Requires: endeca-mdex=6.4.0
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libsc_fi.so
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libsc_da.so
>> Error: Package: endeca-platformservices-6.1.3-1.el6.x86_64 (/endeca-platformservices-6.1.3-1.el6.x86_64)
>>            Requires: libsc_fut.so
>>  You could try using --skip-broken to work around the problem
>>  You could try running: rpm -Va --nofiles --nodigest
>> 
> 
> Again:
> 	If you are using yum, then you are unlikely to be using @rpm5.org code,
> and you will have to find your own "politically correct" answer elsewhere.
> 
> hth
> 
> 73 de Jeff
> 
>> 
>> All of these requirements are fulfilled already, so how do I get rpmbuild to ignore them and not mark the various *.so as requirements?
>> 
>> Thanks!
> 
> 
Received on Sat Jan 5 18:10:56 2013
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.