Re: [CFT] rewrite of the merge(1) utility

From: Slawa Olhovchenkov <slw_at_zxy.spb.ru>
Date: Fri, 14 Aug 2015 23:26:16 +0300
On Fri, Aug 14, 2015 at 12:59:30PM -0700, John Baldwin wrote:

> > > There are a few ways.  Newer installs do bootstrap it for you, so if you
> > > follow the traditional source upgrade method you can just run 'etcupdate'
> > > in place of 'mergemaster'.  If you do not want to have a /usr/src tree,
> > > how are you updating your world?
> > 
> > yes, I don't want to have /usr/src tree.
> > I have buld host and run release.sh.
> > After done I use R/ftp/*.txz for extract on target host.
> > I see var/db/etcupdate/current in base.txz.
> > But I don't cleanly understund etcupdate:
> >  - is this enough (var/db/etcupdate/current from base.txz)?
> >  - what is best way to preserve var/db/etcupdate/current before
> >    extract?
> >  - do I need some work for record changes in /etc?
> 
> In this model, I think etcupdate isn't really what you need/want.
> For one, if you extract base.txz it already overwrites your files
> in /etc and loses any local changes (including any files that

Of couse, I am dont extract from base.txz /etc and /var itself, only var/db/etcupdate.

> etcupdate would upgrade).  It doesn't lose new files like /etc/fstab
> or /etc/rc.conf, but if you make changes to existing files (like
> /etc/ttys) then extracting base.txz will overwrite those with the
> stock versions.  If you wanted to not overwrite /etc then you could
> use etcupdate to merge in the changes to /etc instead.  However,
> you would need to do something like this:
> 
> 1) Ignore /etc and /var/db/etcupdate/current when you extract
>    base.txz via --exclude.

Actual command is:

tar xf - --exclude ./boot/device.hints ./COPYRIGHT boot dev media mnt proc tmp bin lib libexec rescue sbin usr

because tar don't allow include/exclude and var in base.txz also
contains var/log/sendmail.st, var/crash/minfree,
var/db/mergemaster.mtree, var/db/locate.database.

> 2) Extract just /var/db/etcupdate/current from base.txz to
>    some other temporary location (/some/tmp/path).
> 
> 3) Create a new tarball from that tree
>    ( tar cfy foo.tbz -C /some/tmp/path/var/db/etcupdate/current . )
> 
> 4) Use foo.tbz with etcupdate as the tarball (etcupdate -t foo.tbz)

Thanks, I try this.

> Alternatively, you could save on steps 2 + 3 by patching your release
> process to run 'etcupdate build' (you can see where the current release
> Makefile runs 'etcupdate extract' and use 'build' with the same options).
> 
> -- 
> John Baldwin
Received on Fri Aug 14 2015 - 18:26:19 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:59 UTC