On Jan 5, 2013, at 11:34 AM, Mykel Alvis <[email protected]> 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 <[email protected]> wrote:
>
> On Jan 4, 2013, at 8:42 PM, Mykel Alvis <[email protected]> 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!
>
>