mergemaster(8)
NAME
- mergemaster - merge configuration files, et al during an up
- grade
SYNOPSIS
mergemaster [-scrvahipCP] [-m /path/to/sources] [-t
/path/to/temp/root]
[-d] [-u N] [-w N] [-A architecture] [-D /path]
DESCRIPTION
- The mergemaster utility is a Bourne shell script which is
- designed to aid
you in updating the various configuration and other files - associated with
FreeBSD. It is HIGHLY recommended that you back up your - /etc directory
before beginning this process. - The script uses /usr/src/etc/Makefile to build a temporary
- root environment from / down, populating that environment with the vari
- ous files.
You can specify a different source directory with the [-m] - command line
option, or specify the destination directory with the [-D] - option. It
then compares each file in that environment to its installed - counterpart.
When the script finds a change in the new file, or there is - no installed
version of the new file it gives you four options to deal - with it. You
can install the new file as is, delete the new file, merge - the old and
new files (as appropriate) using sdiff(1) or leave the file - in the temporary root environment to merge by hand later.
- By default it creates the temporary root in
- /var/tmp/temproot and compares the cvs(1) version $Id/$FreeBSD strings for files that
- have them,
deleting the temporary file if the strings match. If there - is no $Id
string, or if the strings are different it compares the - files themselves.
You can also specify that the script ignore the $Id strings - and compare
every file. - The merge menu option is designed to let you easily combine
- your customizations from the old version of a file into the new one.
- While you
can use the merge function to incorporate changes from files - that you
have not customized, it is not recommended. - The mergemaster utility checks your umask and issues a warn
- ing for anything other than 022. While it is not mandatory to grant
- world read permissions for most configuration files, you may run into
- problems without
them. If you choose a umask other than 022 and experience - trouble later
this could be the cause. /etc/master.passwd is treated as a - special
case. If you choose to install this file or a merged ver - sion of it the
file permissions are always 600 (rw-------) for security - reasons. After
installing an updated version of this file you should proba - bly run
pwd_mkdb(8) with the -p option to rebuild your password - databases and
recreate /etc/passwd. - The script uses the owner and group id's that the files are
- created with
by /usr/src/etc/Makefile, and file permissions as specified - by the umask.
Unified diffs are used by default to display any differences - unless you
choose context diffs. - The mergemaster utility will source scripts that you specify
- right before
it starts the comparison, and after it is done running. The - easiest way
to handle this is to place the path to the script(s) in the - appropriate
variables in your .mergemasterrc file. The script sourced - before comparison is named in MM_PRE_COMPARE_SCRIPT, and the one sourced
- after the
script is done is MM_EXIT_SCRIPT. This is the recommended - way to specify
local modifications, or files that you want to give special - handling to.
This includes files that you want to be deleted without be - ing compared.
Because the named scripts are sourced from within - mergemaster, all of the
script's variables are available for use in your custom - script. You can
also use /etc/mergemaster.rc which will be read before - .mergemasterrc.
Options specified on the command line are updated last, and - therefore can
override both files. - The options are as follows:
- -s Perform a strict comparison, diff'ing every pair
- of files.
- This comparison is performed line by line, with
- out regard to
CVS $Id's. - -c Use context diffs instead of unified diffs.
- -r Re-run mergemaster on a previously cleaned di
- rectory, skip
- ping the creation of the temporary root environ
- ment. This
option is compatible with all other options. - -v Be more verbose about the process. You should
- probably use
- this option the first time you run mergemaster.
- This option
also gives you a list of files that exist only - in the
installed version of /etc. - -a Run automatically. This option will leave all
- the files that
- differ from the installed versions in the tempo
- rary directory
to be dealt with by hand. If the temproot di - rectory exists,
it creates a new one in a previously non-exis - tent directory.
This option unsets the verbose flag, but is com - patible with
all other options. Setting -a makes -w super - fluous.
- -h Display usage and help information.
- -i Automatically install any files that do not ex
- ist in the des
- tination directory.
- -p Pre-buildworld mode. Compares only files known
- to be essen
- tial to the success of {build|install}world, in
- cluding
/etc/make.conf. - -C After a standard mergemaster run, compares your
- rc.conf[.local] options to the defaults.
- -P Preserve files that you replace in
- /var/tmp/mergemaster/preserved-files-<date>, or
- another
directory you specify in your mergemaster rc - file.
- -m /path/to/sources
- Specify the path to the directory where you want
- to do the
make(1). (In other words, where your sources - are, but -s was
already taken.) - -t /path/to/temp/root
- Create the temporary root environment in
- /path/to/temp/root
instead of the default /var/tmp/temproot. - -d Add the date and time to the name of the tempo
- rary root
- directory. If -t is specified, this option must
- follow it if
you want the date added too. - -u N Specify a numeric umask. The default is 022.
- -w N Supply an alternate screen width to the sdiff(1)
- command in
- numbers of columns. The default is 80.
- -A architecture
- Specify an alternative TARGET_ARCH architecture
- name.
- -D /path Specify the destination directory for the in
- stalled files.
ENVIRONMENT
- The mergemaster utility uses the PAGER environment variable
- if set. Otherwise it uses more(1). If PAGER specifies a program out
- side its limited
PATH without specifying the full path, mergemaster prompts - you with
options on how to proceed. The MM_PRE_COMPARE_SCRIPT and - MM_EXIT_SCRIPT
variables are used as described above. Other variables that - are used by
the script internally can be specified in .mergemasterrc as - described in
more detail below.
FILES
/etc/mergemaster.rc
$HOME/.mergemasterrc
- The mergemaster utility will . (source) these files if they
- exist. Command line options will override rc file options.
- $HOME/.mergemasterrc
overrides /etc/mergemaster.rc. Here is an example with all - values commented out:
- # These are options for mergemaster, with their default val
- ues listed
# The following options have command line overrides
#
# Directory to install the temporary root environment into
#TEMPROOT='/var/tmp/temproot'
#
# Strict comparison bypasses the CVS $Id tests and compares - every file
#STRICT=no
#
# Type of diff, such as unified, context, etc.
#DIFF_FLAG='-u'
#
# Additional options for diff. This will get unset when us - ing -s.
#DIFF_OPTIONS='-I$FreeBSD:.*[$]' # Ignores CVS Id - tags
#
# Verbose mode includes more details and additional checks
#VERBOSE=
#
# Automatically install files that do not exist on the sys - tem already
#AUTO_INSTALL=
#
# Compare /etc/rc.conf[.local] to /etc/defaults/rc.conf
#COMP_CONFS=yes
#
# Preserve files that you replace
#PRESERVE_FILES=yes
#PRESERVE_FILES_DIR=/var/tmp/mergemaster/preserved - files-`date +%y%m%d-%H%M%S`
#
# Sourcedir is the directory to do the 'make' in (where the - new files are)
#SOURCEDIR='/usr/src/etc'
#
# The umask for mergemaster to compare the default file's - modes to
#NEW_UMASK=022
#
# Specify the destination directory for the installed files
#DESTDIR=
#
# The following options have no command line overrides
# For those who just cannot stand including the full path to
PAGER
- #DONT_CHECK_PAGER=
#
# If you set 'yes' above, make sure to include the PATH to - your pager
#PATH=/bin:/usr/bin:/usr/sbin
#
# Don't compare the old and new motd files
#IGNORE_MOTD=yes
#
# Specify the path to scripts to run before the comparison - starts,
# and/or after the script has finished its work
#MM_PRE_COMPARE_SCRIPT=
#MM_EXIT_SCRIPT=
EXIT STATUS
- Exit status is 0 on successful completion, or if the user
- bails out manually at some point during execution.
- Exit status is 1 if it fails for one of the following rea
- sons:
- Invalid command line option
- Failure to create the temporary root environment
- Failure to populate the temporary root
EXAMPLES
- Typically all you will need to do is type mergemaster at the
- prompt and
the script will do all the work for you. - To use context diff's and have mergemaster explain more
- things as it goes
along, use:
# mergemaster -cv- To specify that mergemaster put the temporary root environ
- ment in
/usr/tmp/root, use:
# mergemaster -t /usr/tmp/root- To specify a 110 column screen with a strict comparison,
- use:
# mergemaster -sw 110
SEE ALSO
cvs(1), diff(1), make(1), more(1), sdiff(1), pwd_mkdb(8)
/usr/src/etc/Makefile
- Nik Clayton, The Cutting Edge (using make world), http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/hand
- book/makeworld.html.
HISTORY
- The mergemaster utility was first publicly available on one
- of my web
pages in a much simpler form under the name comproot on 13 - March 1998.
The idea for creating the temporary root environment comes - from Nik Clayton's make world tutorial which is referenced above.
AUTHORS
- This manual page and the script itself were written by Dou
- glas Barton
<DougB@FreeBSD.org>.
BUGS
- There are no known bugs. Please report any problems, com
- ments or suggestions to the author. Several of the improvements to this
- program have
come from user suggestions. Thank you. - BSD February 4, 2006