The patch and checksum collection will help mergemaster to update all not modified files without asking you.

1. Download and apply patch to mergemaster: mergemaster-checksum.diff.
2. Create directory for checksums and fetch checksums file to this directory:
# mkdir -p /var/db/sys/etc
# (cd /var/db/sys/etc && fetch http://people.freebsd.org/~den/scripts/mergemaster/new/sums-etc-sorted.list)
3. Run patched mergemaster, it will update all not modified files in fully automated mode.

NOTE: Don't forget to make backup copy of /etc directory before processing.

tobez's patch (CVS functionality)

The sums-etc-sorted.list (and sums-etc-sorted.list.gz) file was updated.

The sums-etc-sorted.list (and sums-etc-sorted.list.gz) file was updated.

The sums-etc-sorted.list file was updated. Two bugs was found in etc_collect-3.sh, and this script was updated too.

Daniel O'Connor pointed me to sysutils/etcmerge, and after some discussion with him I decide that in will be good to implement ability to calculate and store checksums in mergemaster.

So, this patch: mergemaster-check-store.diff bring to mergemaster ability to store checksums for existing sources (if checksums not found in existing checksums files). Unfortunately, this will help only on further updates.

Resolve issues with files, that present in src/etc CVS, but designated for other directories.

Implemented TODO:
Checksum collector script now able to collect checksum for files outside src/etc, and able to update collected checksums.

New checksum collector script: etc_collect-3.sh.

List of the files outside src/etc (used by script): etc-other

Checksum file (sorting was changed from previous variants): sums-etc-sorted.list (sums-etc-sorted.list.gz)

Improved checksum collector script, which splits checksums list on two parts (based on revision date): etc_collect_checksums-splitted.sh.
Output: sums-etc-before2k.list (sums-etc-before2k.list.gz), sums-etc-recent.list (sums-etc-recent.list.gz).

I don't know how useful it is, because full collection is not too big. (~ 650k uncompressed).


1. Ability to collect checksum for files not from src/etc. Examples:

etc/gnats/freefall src/gnu/usr.bin/send-pr/categories,v
etc/ssl/openssl.cnf src/crypto/openssl/apps/openssl.cnf,v

2. Ability to update collected checksums.

The checksum collector script: etc_collect_checksums.sh
Output: sums-etc.list (sums-etc.list.gz).

To run this script you should have local CVS repository. After script's job complete (it take few hours) do:

# mkdir -p /var/db/sys/etc
# cp sums-etc.list /var/db/sys/etc

The patch to mergemaster to check stored checksums first, then try CVS if checksum fails (if one checksum success, CVS will be disabled): mergemaster-checksum.diff.

The patch to check files that was not modified against CVS: mergemaster-cvs-anoncvs.diff

The mergemaster with this is test patch can auto-update files that was not modified.

It do this by comparing each file with it's CVS copy. If file was not modified, it can be rewritten. This dramatically reduces amount of files that require admin's attention.

There is one major problem here: This can be done in single-user mode only if your have local CVS repository, because if local CVS is not exist, anoncvs is used.