[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: RPM v4 upgrade?



On Thu, Aug 31, 2000 at 04:33:37PM -0600, Bryan Stillwell wrote:
> On Wed, Aug 30, 2000 at 06:45:02PM -0400, Jeff Johnson wrote:
> >> Now on to my new problem.  I just picked up maintenance of the apt-get
> >> like autoupdater called yup, and my first task is to get it working with
> >> rpm v4.  However when checking the validity of the current database it
> >> can't find which package provides rpmlib(PayloadFilesHavePrefix).  Even
> >> if I have rpm figure it out, it can't find what provides it:
> >> 
> >> (~)> rpm -q --whatprovides rpmlib\(PayloadFilesHavePrefix\)
> >> no package provides rpmlib(PayloadFilesHavePrefix)
> >> 
> >
> >And no package shoule *ever* provide rpmlib(...) dependencies, they are
> >provided internally by rpmlib itself in order to track legacy rpm
> >incompatibilities.
> 
> When I added rpmlib(...) to the provides section for rpm it fixed
> everything for me...  We're using the rpm-python bindings in yup, and
> one of the first things it does is resolve all dependencies.  So since
> the new rpm4 rpms require the rpmlib(...) stuff and it can't find
> another package that provides them, it fails.  So, I don't understand
> what would be the proper way to handle the rpmlib(...) requirements.
> Should I hardcode it to ignore any rpmlib(...) stuff (which I don't want
> to do), or is there a better way I should handle it?
> 

BTW, if you do "rpm --showrc", you will see (these from rpm-3.0.5)

...
Features supported by rpmlib:
    rpmlib(VersionedDependencies) = 3.0.3-1
        PreReq:, Provides:, and Obsoletes: dependencies support versions.
    rpmlib(CompressedFileNames) = 3.0.4-1
        file names stored as (dirName,BaseName,dirIndex) tuple, not as path.
    rpmlib(PayloadIsBzip2) = 3.0.5-1
        package payload compressed using bzip2.
    rpmlib(PayloadFilesHavePrefix) = 4.0-1
        package payload files have "./" prefix.
...


The the dependencies use the rpm version where the incompatibility was
introduced.

Clearly, adding "rpmlib(PayloadIsBzip2)", which indicates that the
package with the dependency has a bzip2 compressed payload, can only
be resolved by upgrading rpm, since legacy versions of rpm did
not have support for this (Aside: using bzip2 payloads is *NOT*
recommended, since packages with bzip2 payloads are ~5x slower
and require several 100K more memory per-package to install.)

Similarly, "rpmlib(CompressedFileNames)" is tracking a change in
how file names are represented. A package with this dependency, when
installed by a legacy version of rpm using --nodeps, will either segfault
or appear to have no files in the package.

And again, a package with "rpmlib(PayloadFilesHavePrefix)", installed
by legacy rpm using --nodeps, will not install any file at all.

Please don't add rpmlib(...) anything to a package. If you absolutely
must satsify the dependency (and you are willing to live with the
consequences, similar to what is described above), then do
	echo "Provides: rpmlib(yadda)" >> /etc/rpmrc

What you really need to do is use python bindings and shared libraries
from rpm-3.0.5 (or rpm-4.0) in order to satisfy rpmlib(...) dependencies
correctly.

73 de Jeff

-- 
Jeff Johnson	ARS N3NPQ
jbj@jbj.org	(jbj@redhat.com)
Chapel Hill, NC





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index] []