Help with etcupdate when using alternate source and destination.

From: Dean Weimer <dean.weimer_at_outlook.com>
Date: Fri, 03 Nov 2023 20:20:25 UTC
Can anybody point me to a howto, when using etcupdate with alternate source and destinations. I have been using ZFS with snapshots mounted to alternate paths to do my updates from source since I believe around 9.2 release. Mergemaster has been working for me, but I am trying to switch my process to etcupdate instead and I am failing spectacularly.

I have a /etc/src-env.conf file containing.
WITH_META_MODE=yes
MAKEOBJDIRPREFIX?=/usr/obj
DESTDIR=/jails/devel/ROOT
__MAKE_CONF=/jails/devel/ROOT/etc/make.conf
SRCCONF=/jails/devel/ROOT/etc/src.conf
SRC_ENV_CONF=/jails/devel/ROOT/etc/src-env.conf

This is my old process.
I mount my snapshot to /jails/devel/ROOT
run the following
mount -t nullfs -o ro /usr/src /jails/devel/ROOT/usr/src
cd /jails/devel/ROOT/usr/src
make buildworld && make buildkernel
make installkernel && make installworld
mergemaster -Ui -m /jails/devel/ROOT/usr/src -D /jails/devel/ROOT
make -DBATCH_DELETE_OLD_FILES delete-old && make -DBATCH_DELETE_OLD_FILES delete-old-libs

I would then start a jail from this, update any packages check configurations and then stop jail and switch main system over. I use same system for patch level updates, but would build a VM from fresh install for new major versions and ship snapshots over to it, build and then back to primary system for reboot.

First attempt at new process.
mount my snapshot to /jails/devel/ROOT
mount -t nullfs -o ro /usr/src /jails/devel/ROOT/usr/src
cd /jails/devel/ROOT/usr/src
etcupdate extract -s /usr/src_13.2-RELEASE-p4 -D /jails/devel/ROOT
etcupdate diff -s /usr/src_13.2-RELEASE-p4 -D /jails/devel/ROOT
# Diff looks as expected
make buildworld && make buildkernel && make installkernel
etcupdate -p -s /jails/devel/ROOT/usr/src -D /jails/devel/ROOT
# PANIC: merge failed with status 127
#Logs end with:
Building tree at /jails/devel/ROOT/var/db/etcupdate/etcupdate-YyFRXe8 with make -DNO_FILEMON
/usr/sbin/etcupdate: diff3: not found
# Get past this by running
etcupdate extract -s /jails/devel/ROOT/usr/src -D /jails/devel/ROOT
etcupdate diff -s /jails/devel/ROOT/usr/src -D /jails/devel/ROOT
# Output looks as expected
etcupdate -p -s /jails/devel/ROOT/usr/src -D /jails/devel/ROOT
# returns with no errors
make installworld
etcupdate -B -s /jails/devel/ROOT/usr/src -D /jails/devel/ROOT
# Returns with no errors, however nothing in system is updated

I have trying added etcupdate resolve after the -p & -B runs, just returns no errors, doesn't show any conflicts to resolve.

I have been able to get system running on new version by falling back to running mergemaster command, but I have to edit some files manually as there are a few changes that don't get merged correctly in the 13.2-RELEASE-p4 to upgrade 14.0-RC.