Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Nov 2007 20:11:56 +0200
From:      Giorgos Keramidas <keramida@ceid.upatras.gr>
To:        "J. Porter Clark" <jpc@porterclark.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Making mergemaster skip certain files
Message-ID:  <20071117181156.GC2834@kobe.laptop>
In-Reply-To: <20071117043426.GA71265@auricle.charter.net>
References:  <20071117043426.GA71265@auricle.charter.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2007-11-16 22:34, "J. Porter Clark" <jpc@porterclark.com> wrote:
> Is there any way to keep certain files out of the reach of
> mergemaster?  I understand the need for carefully merging the
> old and the new, but I really shouldn't ever have to for files
> like these:
>
>   /etc/aliases
>   /etc/hosts
>   /etc/hosts.allow
>   /etc/manpath.config
>   ... and many others.

You can hook into mergemaster, using shell scripts.  See the manpage of
mergemaster for more details, but here's a short description of what I
use on my laptop for some time now:

1. A `.mergemasterrc' file in the HOME directory of the `root' user,
   which contains:

	STRICT=no
	MM_PRE_COMPARE_SCRIPT=/root/mm-pre-compare.sh

2. The `/root/mm-pre-compare.sh' script contains the following:

        #!/bin/sh

        # NOTE: No PATH needed, because mm's PATH is already
	# draconian enough.

	# If TEMPROOT is not set, or it is set to a path which
	# resolves to the real root filesystem, abort early, before we
	# trash the config files of the installed root filesystem.

        if test -z "${TEMPROOT}" ; then
                echo >&2 "$0: error: TEMPROOT is unset or empty."
                exit 1
        fi
        p=`realpath "${TEMPROOT}"`
        if test "${p}" = '/' ; then
                echo >&2 "$0: error: TEMPROOT is the real root filesystem."
                exit 2
        fi

        case "${PRE_WORLD}" in
        '')
                # The following files always have local changes.
                # Remove them from ${TEMPROOT} to force mergemaster(8)
                # to ignore these files when comparing /etc directories.

                rm -f "${TEMPROOT}/.cshrc"
                rm -f "${TEMPROOT}/.profile"
                rm -f "${TEMPROOT}/root/.cshrc"
                rm -f "${TEMPROOT}/root/.profile"

                rm -f "${TEMPROOT}/etc/hosts"
                rm -f "${TEMPROOT}/etc/networks"

                rm -f "${TEMPROOT}/etc/motd"
                rm -f "${TEMPROOT}/etc/printcap"

                ;;
        esac




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