Re: Updating -CURRENT, what about outdated files?

From: Ruslan Ermilov <ru_at_freebsd.org>
Date: Sun, 25 May 2003 20:02:30 +0300
On Sun, May 25, 2003 at 08:05:59PM +1000, Joshua Goodall wrote:
> On Sun, May 25, 2003 at 11:43:44AM +0300, Ruslan Ermilov wrote:
> > But you don't often know if installworld attemps to install it
> > or not, if it wasn't here:
> > 
> > src/sys/boot/i386/loader/Makefile:
> > 
> > beforeinstall:
> > ...
> > .if !exists(${DESTDIR}/boot/loader.rc)
> > 	${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 \
> > 		${.CURDIR}/../../forth/loader.rc ${DESTDIR}/boot
> > .endif
> > 
> > > Other than the general case of using install -C, can you
> > > point out any specific examples?  I thought that was the point
> > > of mergemaster; to manage elements of the distribution where
> > > simply overwriting would be inappropriate.
> 
> > Nope, mergemaster(8) deals with updating of /etc only, unless
> > I'm horribly mistaken (I don't use it personally, but pretty
> > much do what it does manually).
> 
> What you just said implies that installing world+kernel, then running
> mergemaster, does not update every part of a FreeBSD base system
> installation, modulo ports and make.conf knobs.
> 
It doesn't, mergemaster(8) only covers the set of files produced by
"make distribution" from src/etc/Makefile.  These are /dev, /etc, /root,
and /var/log files, with a few minor exceptions like /COPYRIGHT, /.cshrc,
/.profile, and /var/run.

> I knew that already about /stand.  I didn't realise it extended elsewhere.
> Perhaps because I lack install-fu.
> 
I remove /stand as soon as I install the system.  It will soon be
replaced in 5.x with some very useful stuff (/rescue).

> I confess that my Astonishment meter just twitched a little. Any
> reason why /boot/loader.rc *shouldn't* be under mergemaster control?
> 
It cannot be, because it's installed by "installworld" and not
the "distribution" from src/etc/Makefile.

To install a fresh system, one needs to "installworld" first, then
run "make distribution" from src/etc/.  That gives a fresh system,
pretty much like after the initial installation, with an empty
root password in /etc/master.passwd, etc.  (Never ever run this on
a running system without also specifying DESTDIR=/somewhere, like
mergemaster(8) does for you!)

> At any rate, I'd expect to catch-and-document special cases, if
> only through a find-and-diff.
> 
To summarize, mergemaster(8) only adds/updates/removes files from
the "make distribution" set.  The files from "installworld" are
unaffected.  I use find(1) to clean the "installworld" leftovers,
and I use the procedure similar to what is done by mergemaster(8)
to clean the "make distribution" set of files: my /var/tmp on
each machine has two directories, e.g., 20021204/ and 20030415/,
that are populated by the "make distribution" outputs from their
respective dates.  If I'd be about to upgrade this system today,
as the last step, I would create the 20030525 directory, populate
it with "make distribution", and then diff(1) compare it against
20030415/ (and remove 20021204/).

You can always have a fresh system by using this sequence:

rm -rf /somewhere && mkdir -p /somewhere
cd /usr/src && make DESTDIR=/somewhere installworld
cd /usr/src/etc && make DESTDIR=/somewhere distribution
diff(1) compare "/" and "/somewhere"

Hint: the -q option to diff(1) is very handy here, as it
optimizes the case where two files differ in size.


Cheers,
-- 
Ruslan Ermilov		Sysadmin and DBA,
ru_at_sunbay.com		Sunbay Software AG,
ru_at_FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age

Received on Sun May 25 2003 - 08:04:13 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:09 UTC