Subject: Re: `make update' not without problems... :\
To: None <netbsd-users@netbsd.org>
From: Martijn van Buul <martijnb@atlas.ipv6.stack.nl>
List: netbsd-users
Date: 04/19/2006 11:04:23
It occurred to me that Zbigniew Baniewski wrote in gmane.os.netbsd.general:
> Hallo,
>
> recently I tried to update ROX-filer to a newer version. So, I unpacked
> (as root) pkgsrc "tree" (the one from 1. April), changed directory to
> appropriate (/usr/src/pgsrc ... /rox), then simply typed "make". After a
> while there was a report, that a newer version of glib2-2.8.4 will be
> needed.

There's probably a lot of packages which will be outdated, then. You don't
say what pkgsrc you had before, but if it's an older stable branch, or an
older snapshot, there's likely to be a lot of updated packages. Updating
individual packages while keeping most others is a bit tricky.

> So far - so good. So, removed current version of ROX-filer with "pkg_delete
> rox" (I know, it wasn't necessary), and then typed "make update", still
> being in [..]/rox sub-dir. And then the whole problem began:

Well, you probably didn't. You probably entered 'make update' in devel/glib2.
'make update' in /rox wouldn't have done a lot; it would've deleted all
packages dependant on rox-filer (But since you already removed the rox-filer
package, there wouldn't have been any), rebuild rox, and re-compile all
dependencies that were installed before.

But there were none.

> It did remove about 100 packages, which I wasn't going to update - packages,
> which aren't "corresponding" to ROX in any way (like irssi, mc and so on).

Which is making me believe that you really entered it in devel/glib2. irssi
depends only on glib2 and perl, for instance. If you 'make update' glib2, it
will delete *all* packages that depend on glib2 (Which is quite a lot), replace
glib2, and rebuild the packages that were there before.

> The compilation was about 40 hours long :(( (Pentium II-400). Not all the
> removed packages were rebuilt - f.e. it did remove firefox, but it didn't
> update it from sources! I had to install it "manually", when I noticed, it's
> not present. 

That's probably because the 'make update' failed. Because you updated glib2,
all packages that depended on glib2 (or gtk2, or..) would be updated in
the process. There is a big chance that one of them have another updated
dependency, one which you didn't update. If some package 'bar-1.0' you
installed before depends on glib2 and libfoo, it will be rebuilt if you
run 'make update' in glib2. However, 'bar-1.1' happens to require a newer
version of libfoo *in addition* to the updated glib2. Since you didn't update
libfoo, building 'bar-1.1' will fail. Unfortunately, this also means that
the 'make update' you started in glib2 will abort.

Really, entering 'make update' can be a dangerous process, if you do it 
without care and attention. If you do it in the wrong order, you might end
up rebuilding packages over and over again, with no guarantee of success.

> My question: did I something wrong, that instead of just update ROX (and
> eventually a few corresponding libraries, that ROX's depending on), "make
> update" wanted to replace about 1/3 of all the already installed packages?

Yes. You told it to update glib2 instead of ROX. 

> And why it was done in such unclean way - I mean: some packages were removed,
> but not restored in newer version anymore (like firefox)? 

See above; you have other conflicts besides the glib2 one. See lintpkgsrc -i
(to be found in pkgtools/pkglint) to find them out. pkgdepgraph can help you
find the best rebuild order.

See http://mail-index.netbsd.org/port-i386/2004/05/31/0003.html for an
example.

> And why it didn't even report something like: "these packages were erased,
> but not built again: *a list of missing packages*"?

"Error 1. Stop." sounds like a "hey, something is wrong here." to me..