Dag,
Adding some context, this is from a full buildworld/installworld over the last few days. (I maintain two poudriere systems. One follows 15 via pkgbase, the other follows HEAD and builds via src).
It sounds like when you say /var/db/etcupdate, you're describing what the man page describes as the "work dir" (specified with -d), but it also mentions in the manpage an argument for -D (destdir), which defaults to /etc.
If that's the case, that's a manpage failure. Here's the usage section.
etcupdate extract [-BN] [-d workdir] [-s source | -t tarball]
[-D destdir] [-L logfile] [-M options] [-m make]
The only thing the manpage says about "extract mode" is:
Extract Mode
The extract mode generates a new “current” tree. Unlike the default
mode, it does not save any existing “current” tree and does not modify
any existing “previous” tree. The new “current” tree can either be built
from a source tree or extracted from a tarball.
It's easy to read that as either of "extract updates the workdir" or "extract generates a real, current tree in actual /etc", but it sounds like it only does the former. I'm not sure why there's even a -D in the usage?
It doesn't mention that it's only updating the workdir, and I think when Lowell suggested it to me, it seems he also thought that it would do what I want.
So, as a followon, is there anything wrong with simply copying the files from /var/db/etcupdate/current/etc into /etc (with the exception of things like master.passwd, obviously).
One thing I tried, is:
etcupdate -A \* -I /etc/master.passwd -I /etc/group
Which *seems* like it should take all files except for the two I told it to -Ignore, but no dice. I'm still stuck with something like 338 files in the diff.
-Dan
PS: As another silly example of how things have been polluted (in addition to the $FreeBSD strings), my current diffs for /boot/device.hints look like the below. I forced it to a "current" state by running 'etcupdate -A /boot/device.hints', just as a test.
This is a file I've never modified locally. I get it, that the "diff" program has attempted to gently merge things in, harmlessly leaving in place what it thought was safe, but....this is a VM.
There's no nonstandard hardware here, no floppy controllers to speak of, and no virtual uarts. I get that the goal is not to break a running system, but unless etcupdate finds a conflict, there's no way to say "theirs" for this file as part of the normal process of updating, as put forth in the handbook.
I hope this makes sense.
Index: /boot/device.hints
===================================================================
--- /boot/device.hints (stock)
+++ /boot/device.hints (local)
@@ -1,3 +1,12 @@
+# $FreeBSD$
+
hint.fdc.0.at="isa"
+hint.fdc.0.port="0x3F0"
+hint.fdc.0.irq="6"
+hint.fdc.0.drq="2"
+
hint.fd.0.at="fdc0"
+hint.fd.0.drive="0"
+
hint.fd.1.at="fdc0"
+hint.fd.1.drive="1"
hint.atkbdc.0.at="isa"
hint.atkbdc.0.port="0x060"
hint.atkbd.0.at="atkbdc"
@@ -6,11 +15,15 @@
hint.psm.0.irq="12"
hint.sc.0.at="isa"
hint.sc.0.flags="0x100"
-
hint.uart.0.at="acpi"
+
hint.uart.0.at="isa"
hint.uart.0.port="0x3F8"
hint.uart.0.flags="0x10"
-
hint.uart.1.at="acpi"
+hint.uart.0.irq="4"
+
hint.uart.1.at="isa"
hint.uart.1.port="0x2F8"
+hint.uart.1.irq="3"
+
hint.ppc.0.at="isa"
+hint.ppc.0.irq="7"
hint.atrtc.0.at="isa"
hint.atrtc.0.port="0x70"
hint.atrtc.0.irq="8"