Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Mar 2015 22:06:37 +0000
From:      Ben Morrow <ben@morrow.me.uk>
To:        list-freebsd-stable@jyborn.se, freebsd-stable@freebsd.org
Subject:   Re: There has to be a better way of merging /etc during a major freebsd-update
Message-ID:  <20150310220635.GA90305@anubis.morrow.me.uk>
In-Reply-To: <20150310191849.GI9442@pol-server.leissner.se>
References:  <20150310120540.GN8223@pol-server.leissner.se> <CA%2BtpaK2QWN4ez%2BjKViQ0=wVxysvrfN-S9qrumEdpF7wwM-822A@mail.gmail.com> <1d4863fa5d3f1374a9fa5f9bd19d01b7@ultimatedns.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Quoth Peter Olsson <list-freebsd-stable@jyborn.se>:
>
> (But I will try running freebsd-update without merging /etc,
> and use mergemaster -F instead. Should solve my problem.)

I'm fairly sure this won't do what you want, and in fact won't work at
all, unless your /etc is identical to the stock /etc installed from the
ISO. (Which it isn't, of course.)

installworld specifically avoids installing the files in /etc; then,
when you run mergemaster, it installs the new versions of those files
into a temporary directory and merges them with the existing /etc. 

freebsd-update works a little differently: because it doesn't have a
source tree available, it has to fetch the stock versions of the files
in /etc for the release you're upgrading from, so that it can patch them
to the new release and then merge the changes into your current /etc. If
you tell freebsd-update to install /etc without merging it will blindly
update files you haven't changed (which is probably what you want) but
(I think) will fail to update the files that you have changed, because
it uses binary patches which won't apply to your modified versions.

If you want a rather hackish solution, you could try something like
this:

    - Rename /etc to /oldetc.
    - Find yourself a copy of the stock /etc for the version you are
      upgrading from. (tar -xpf base.txz --include /etc)
    - Run freebsd-update with /etc removed from the merge list. This
      will (should?) give you a stock /etc for the version you are
      upgrading to.
    - Rename /etc -> /tmp/etc, /oldetc -> /etc and run mergemaster with
      -t /tmp.

Obviously I would script this if I was doing more than one or two
machines.

Ben




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150310220635.GA90305>