RPM building section of RHL's developer guide

Jeff Johnson jbj at redhat.com
Thu Jul 24 14:00:09 UTC 2003


On Wed, Jul 23, 2003 at 06:35:00PM -1000, Warren Togami wrote:
> > 
> > 5) "The package may obsolete itself"... I really don't get that one!
> 
> When we hear the answer to this, can we have links from the RHLP page to
> more detailed information describing "why" and examples where it is
> used?
> 
> Can we Wiki this? =)
> 

Every package obsoletes (i.e. erases) itself when using --upgrade.

Obsoletes: is commonly used to get rid of a differently named but otherwise
nearly identical package. In order to resolve dependencies, the new package
often carries a Provides:. So what a packager sees is
	Name: newfoo
	...
	Obsoletes: oldfoo
	Provides: oldfoo
leading to a confusion based on (from user POV) newfoo == oldfoo interpretation.

The only other case I can think of where a packager might consider adding
	Name: foo
	...
	Obsoletes: foo
is to attempt to get rid of other copies of packages if rpm is
invoked with --install. Not gonna work, doesn't afaik, as the
promise of --install is
	No information will ever be erased if invoked with --install.
There's enough conflicting features and policies in rpm that it wouldn't
surprise me to hear about some exotic corner case, but that's a bug imho.

> > 13) "If a newer RPM does not have a binary package that the older
> > SRPMS
> >     produced, the binary package not produced anymore must be
> > specified
> >     with the Obsoletes: option in the new spec file."
> >     I would also add something about encouraging to always use
> > versions
> >     with "Obsoletes:" in order to avoid many kind of future issues
> > when
> >     re-introducing packages for example.
> > 
> > Also, there is no mention of "Epoch:" usage, not even a quick note to
> > suggest not introducing any apart from when it's really the last
> > resort. I
> > guess people may want to stay out of the endless discussion for as
> > long as
> > possible ;-)
> > IIRC, I think I read someone mentioning somewhere that a list of
> > current
> > packages with full "n-e-v-r" would be maintained. With the current
> > implementation of epoch handling in rpm >= 4.2.1, this will become a
> > necessity when depending on specific versions of certain packages.
> 
> Responding to this in a new thread.  Preparing flame retardant suit.
> 

Current behavior in rpm-4.2.1 (and all future versions of rpm) is
	A missing (i.e. unsepcified) Epoch: is exactly equivalent to Epoch: 0.

Whether you choose to make the Epoch: explicit is a matter of style, the
version comparison in rpm is now deterministic, the same answer is returned
every time.

I'd suggest that broken packages (i.e. missing Epoch: is needed) are more
easily handled with
	rpm -Va --nofiles --dbpath /usr/lib/rpmdb/i386-redhat-linux/redhat/
i.e. verify that the dependencies of each package are satisfied within
the universe of packages contained in, say, the rpmdb-redhat package for
the distro, becuase
	a) missing Epoch: is just a special case of a more general problem,
	dependency closure for a collection of packages called a distro.
	a) closure on dependencies cannot be easily detected by a packager,
	but is trivial (and necessary) to check by a distro release manager.

(aside) I'd like to add the closure check to rpmbuild, what stops me is
that noone is willing to figger means to maintain the equivalent of a
rpmdb-redhat package incrementally. Without that, it's premature to
check for dependency closure in rpmbuild. So the immediate problem is
to establish the need of creating a rpmdb-redhat database so that the
tools necessary to do the job can start being written.

73 de Jeff

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





More information about the fedora-devel-list mailing list