Subject: Re: Introducing a better way of updating packages (long)
To: Frederick Bruckman <fredb@immanent.net>
From: Alistair Crooks <agc@wasabisystems.com>
List: tech-pkg
Date: 05/20/2002 12:24:46
On Thu, May 16, 2002 at 08:45:00PM -0500, Frederick Bruckman wrote:
> 
> 
> The problem:
> -----------
> 
> Upgrading a package often requires updating a web of dependencies.
> That's fine, except when those dependencies have dependents which are
> unrelated to the package of interest -- then you've got to update all
> of them, too. Moreover, the current methods demands that those
> dependents be deleted before anything is built. If anything goes wrong
> with any link in the chain, the builder could be left with a severely
> degraded system.
> 
> 
> Some ideas:
> ----------
> 
> First, some background. PR pkg/10835, with the fetching title "Package
> upgrade procedure sucks", called for leaving old files from any old,
> out-of-date package in place, much as if you'd simply done a "make &&
> make install" without a package system. That's a good idea, to let the
> package system get out of the way while still keeping all it's other
> benefits, but the devil's in the details...
> 
> I have discussed all this, somewhat, with some of the other "pkgsrc"
> developers at various times. Notably, it was pointed out by Hubert
> Feyrer, that a naive implementation would lead to a "flag day" in
> "pkgsrc". I do seem to remember that all were agreeable to no keeping
> old headers at all; the only files we really need to keep are the
> shared libraries in those packages which contain shared libraries. In
> ELF, now, that means we need to keep the file, and the major link, but
> not the "so" link. (The idea being to keep the minimum to run the
> dependents against -- never to build against.)

Another solution to this problem is to use the pkg_retire package

	ftp://ftp.netbsd.org/pub/NetBSD/misc/agc/pkg_retire.tgz

(which is the pkgsrc entry for that package). All that this package
does is to preserve the lib*.so.* entries in a renamed package, whilst
modifying other packages' +CONTENTS files to point to the "retired"
package, and also preserving the +REQUIRED_BY file in the retired package.

Whilst this approach does work, its efficacy is limited - only major
number bumps will continue to work with the retired package on ELF
platforms, and so it is of only minor use.

I fully intend to commit some changes to pkgsrc which will address
this problem in a different way, after the 1.6 effort in pkgsrc.

Regards,
Alistair