aboutsummaryrefslogtreecommitdiff
path: root/sysutils/etcupdate/src/etcupdate.8
diff options
context:
space:
mode:
Diffstat (limited to 'sysutils/etcupdate/src/etcupdate.8')
-rw-r--r--sysutils/etcupdate/src/etcupdate.8834
1 files changed, 0 insertions, 834 deletions
diff --git a/sysutils/etcupdate/src/etcupdate.8 b/sysutils/etcupdate/src/etcupdate.8
deleted file mode 100644
index f6253a16b1d9..000000000000
--- a/sysutils/etcupdate/src/etcupdate.8
+++ /dev/null
@@ -1,834 +0,0 @@
-.\" Copyright (c) 2010-2013 Advanced Computing Technologies LLC
-.\" Written by: John H. Baldwin <jhb@FreeBSD.org>
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.Dd December 9, 2013
-.Dt ETCUPDATE 8
-.Os
-.Sh NAME
-.Nm etcupdate
-.Nd "manage updates to system files not updated by installworld"
-.Sh SYNOPSIS
-.Nm
-.Op Fl npBF
-.Op Fl d Ar workdir
-.Op Fl r | Fl s Ar source | Fl t Ar tarball
-.Op Fl A Ar patterns
-.Op Fl D Ar destdir
-.Op Fl I Ar patterns
-.Op Fl L Ar logfile
-.Op Fl M Ar options
-.Nm
-.Cm build
-.Op Fl B
-.Op Fl d Ar workdir
-.Op Fl s Ar source
-.Op Fl L Ar logfile
-.Op Fl M Ar options
-.Ar tarball
-.Nm
-.Cm diff
-.Op Fl d Ar workdir
-.Op Fl D Ar destdir
-.Op Fl I Ar patterns
-.Op Fl L Ar logfile
-.Nm
-.Cm extract
-.Op Fl B
-.Op Fl d Ar workdir
-.Op Fl s Ar source | Fl t Ar tarball
-.Op Fl L Ar logfile
-.Op Fl M Ar options
-.Nm
-.Cm resolve
-.Op Fl p
-.Op Fl d Ar workdir
-.Op Fl D Ar destdir
-.Op Fl L Ar logfile
-.Nm
-.Cm status
-.Op Fl d Ar workdir
-.Op Fl D Ar destdir
-.Sh DESCRIPTION
-The
-.Nm
-utility is a tool for managing updates to files that are not updated as
-part of
-.Sq make installworld
-such as files in
-.Pa /etc .
-It manages updates by doing a three-way merge of changes made to these
-files against the local versions.
-It is also designed to minimize the amount of user intervention with
-the goal of simplifying upgrades for clusters of machines.
-.Pp
-To perform a three-way merge,
-.Nm
-keeps copies of the current and previous versions of files that it manages.
-These copies are stored in two trees known as the
-.Dq current
-and
-.Dq previous
-trees.
-During a merge,
-.Nm
-compares the
-.Dq current
-and
-.Dq previous
-copies of each file to determine which changes need to be merged into the
-local version of each file.
-If a file can be updated without generating a conflict,
-.Nm
-will update the file automatically.
-If the local changes to a file conflict with the changes made to a file in
-the source tree,
-then a merge conflict is generated.
-The conflict must be resolved after the merge has finished.
-The
-.Nm
-utility will not perform a new merge until all conflicts from an earlier
-merge are resolved.
-.Sh MODES
-The
-.Nm
-utility supports several modes of operation.
-The mode is specified via an optional command argument.
-If present, the command must be the first argument on the command line.
-If a command is not specified, the default mode is used.
-.Ss Default Mode
-The default mode merges changes from the source tree to the destination
-directory.
-First,
-it updates the
-.Dq current
-and
-.Dq previous
-trees.
-Next,
-it compares the two trees merging changes into the destination directory.
-Finally,
-it displays warnings for any conditions it could not handle automatically.
-.Pp
-If the
-.Fl r
-option is not specified,
-then the first step taken is to update the
-.Dq current
-and
-.Dq previous
-trees.
-If a
-.Dq current
-tree already exists,
-then that tree is saved as the
-.Dq previous
-tree.
-An older
-.Dq previous
-tree is removed if it exists.
-By default the new
-.Dq current
-tree is built from a source tree.
-However,
-if a tarball is specified via the
-.Fl t
-option,
-then the tree is extracted from that tarball instead.
-.Pp
-Next,
-.Nm
-compares the files in the
-.Dq current
-and
-.Dq previous
-trees.
-If a file was removed from the
-.Dq current
-tree,
-then it will be removed from the destination directory only if it
-does not have any local modifications.
-If a file was added to the
-.Dq current
-tree,
-then it will be copied to the destination directory only if it
-would not clobber an existing file.
-If a file is changed in the
-.Dq current
-tree,
-then
-.Nm
-will attempt to merge the changes into the version of the file in the
-destination directory.
-If the merge encounters conflicts,
-then a version of the file with conflict markers will be saved for
-future resolution.
-If the merge does not encounter conflicts,
-then the merged version of the file will be saved in the destination
-directory.
-If
-.Nm
-is not able to safely merge in changes to a file other than a merge conflict,
-it will generate a warning.
-.Pp
-For each file that is updated a line will be output with a leading character
-to indicate the action taken.
-The possible actions follow:
-.Pp
-.Bl -tag -width "A" -compact -offset indent
-.It A
-Added
-.It C
-Conflict
-.It D
-Deleted
-.It M
-Merged
-.It U
-Updated
-.El
-.Pp
-Finally,
-if any warnings were encountered they are displayed after the merge has
-completed.
-.Pp
-Note that for certain files
-.Nm
-will perform post-install actions any time that the file is updated.
-Specifically,
-.Xr pwd_mkdb 8
-is invoked if
-.Pa /etc/master.passwd
-is changed,
-.Xr cap_mkdb 1
-is invoked to update
-.Pa /etc/login.conf.db
-if
-.Pa /etc/login.conf
-is changed,
-.Xr newaliases 1
-is invoked if
-.Pa /etc/mail/aliases
-is changed,
-and
-.Pa /etc/rc.d/motd
-is invoked if
-.Pa /etc/motd
-is changed.
-One exception is that if
-.Pa /etc/mail/aliases
-is changed and the destination directory is not the default,
-then a warning will be issued instead.
-This is due to a limitation of the
-.Xr newaliases 1
-command.
-Similarly,
-if
-.Pa /etc/motd
-is changed and the destination directory is not the default,
-then
-.Pa /etc/rc.d/motd
-will not be executed due to a limitation of that script.
-In this case no warning is issued as the result of
-.Pa /etc/rc.d/motd
-is merely cosmetic and will be corrected on the next reboot.
-.Ss Build Mode
-The
-.Cm build
-mode is used to build a tarball that contains a snapshot of a
-.Dq current
-tree.
-This tarball can be used by the default and extract modes.
-Using a tarball can allow
-.Nm
-to perform a merge without requiring a source tree that matches the
-currently installed world.
-The
-.Fa tarball
-argument specifies the name of the file to create.
-The file will be a
-.Xr tar 5
-file compressed with
-.Xr bzip2 1 .
-.Ss Diff Mode
-The
-.Cm diff
-mode compares the versions of files in the destination directory to the
-.Dq current
-tree and generates a unified format diff of the changes.
-This can be used to determine which files have been locally modified and how.
-Note that
-.Nm
-does not manage files that are not maintained in the source tree such as
-.Pa /etc/fstab
-and
-.Pa /etc/rc.conf .
-.Ss Extract Mode
-The
-.Cm extract
-mode generates a new
-.Dq current
-tree.
-Unlike the default mode,
-it does not save any existing
-.Dq current
-tree and does not modify any existing
-.Dq previous
-tree.
-The new
-.Dq current
-tree can either be built from a source tree or extracted from a tarball.
-.Ss Resolve Mode
-The
-.Cm resolve
-mode is used to resolve any conflicts encountered during a merge.
-In this mode,
-.Nm
-iterates over any existing conflicts prompting the user for actions to take
-on each conflicted file.
-For each file, the following actions are available:
-.Pp
-.Bl -tag -width "(tf) theirs-full" -compact
-.It (p) postpone
-Ignore this conflict for now.
-.It (df) diff-full
-Show all changes made to the merged file as a unified diff.
-.It (e) edit
-Change the merged file in an editor.
-.It (r) resolved
-Install the merged version of the file into the destination directory.
-.It (mf) mine-full
-Use the version of the file in the destination directory and ignore any
-changes made to the file in the
-.Dq current
-tree.
-.It (tf) theirs-full
-Use the version of the file from the
-.Dq current
-tree and discard any local changes made to the file.
-.It (h) help
-Display the list of commands.
-.El
-.Ss Status Mode
-The
-.Cm status
-mode shows a summary of the results of the most recent merge.
-First it lists any files for which there are unresolved conflicts.
-Next it lists any warnings generated during the last merge.
-If the last merge did not generate any conflicts or warnings,
-then nothing will be output.
-.Sh OPTIONS
-The following options are available.
-Note that most options do not apply to all modes.
-.Bl -tag -width ".Fl A Ar patterns"
-.It Fl A Ar patterns
-Always install the new version of any files that match any of the patterns
-listed in
-.Ar patterns .
-Each pattern is evaluated as an
-.Xr sh 1
-shell pattern.
-This option may be specified multiple times to specify multiple patterns.
-Multiple space-separated patterns may also be specified in a single
-option.
-Note that ignored files specified via the
-.Ev IGNORE_FILES
-variable or the
-.Fl I
-option will not be installed.
-.It Fl B
-Do not build generated files in a private object tree.
-Instead,
-reuse the generated files from a previously built object tree that matches
-the source tree.
-This can be useful to avoid gratuitous conflicts in
-.Xr sendmail 8
-configuration
-files when bootstrapping.
-It can also be useful for building a tarball that matches a specific
-world build.
-.It Fl D Ar destdir
-Specify an alternate destination directory as the target of a merge.
-This is analogous to the
-.Dv DESTDIR
-variable used with
-.Sq make installworld .
-The default destination directory is an empty string which results in
-merges updating
-.Pa /etc
-on the local machine.
-.It Fl d Ar workdir
-Specify an alternate directory to use as the work directory.
-The work directory is used to store the
-.Dq current
-and
-.Dq previous
-trees as well as unresolved conflicts.
-The default work directory is
-.Pa <destdir>/var/db/etcupdate .
-.It Fl F
-Ignore changes in the FreeBSD ID string when comparing files in the
-destination directory to files in either of the
-.Dq current
-or
-.Dq previous
-trees.
-In
-.Cm diff
-mode,
-this reduces noise due to FreeBSD ID string changes in the output.
-During an update this can simplify handling for harmless conflicts caused
-by FreeBSD ID string changes.
-.Pp
-Specifically,
-if a file in the destination directory is identical to the same file in the
-.Dq previous
-tree modulo the FreeBSD ID string,
-then the file is treated as if it was unmodified and the
-.Dq current
-version of the file will be installed.
-Similarly,
-if a file in the destination directory is identical to the same file in the
-.Dq current
-tree modulo the FreeBSD ID string,
-then the
-.Dq current
-version of the file will be installed to update the ID string.
-If the
-.Dq previous
-and
-.Dq current
-versions of the file are identical,
-then
-.Nm
-will not change the file in the destination directory.
-.Pp
-Due to limitations in the
-.Xr diff 1
-command,
-this option may not have an effect if there are other changes in a file that
-are close to the FreeBSD ID string.
-.It Fl I Ar patterns
-Ignore any files that match any of the patterns listed in
-.Ar patterns .
-No warnings or other messages will be generated for those files during a
-merge.
-Each pattern is evaluated as an
-.Xr sh 1
-shell pattern.
-This option may be specified multiple times to specify multiple patterns.
-Multiple space-separated patterns may also be specified in a single
-option.
-.It Fl L Ar logfile
-Specify an alternate path for the log file.
-The
-.Nm
-utility logs each command that it invokes along with the standard output
-and standard error to this file.
-By default the log file is stored in a file named
-.Pa log
-in the work directory.
-.It Fl M Ar options
-Pass
-.Ar options
-as additional parameters to
-.Xr make 1
-when building a
-.Dq current
-tree.
-This can be used for to set the
-.Dv TARGET
-or
-.Dv TARGET_ARCH
-variables for a cross-build.
-.It Fl n
-Enable
-.Dq dry-run
-mode.
-Do not merge any changes to the destination directory.
-Instead,
-report what actions would be taken during a merge.
-Note that the existing
-.Dq current
-and
-.Dq previous
-trees will not be changed.
-If the
-.Fl r
-option is not specified,
-then a temporary
-.Dq current
-tree will be extracted to perform the comparison.
-.It Fl p
-Enable
-.Dq pre-world
-mode.
-Only merge changes to files that are necessary to successfully run
-.Sq make installworld
-or
-.Sq make installkernel .
-When this flag is enabled,
-the existing
-.Dq current
-and
-.Dq previous
-trees are left alone.
-Instead,
-a temporary tree is populated with the necessary files.
-This temporary tree is compared against the
-.Dq current
-tree.
-This allows a normal update to be run after
-.Sq make installworld
-has completed.
-Any conflicts generated during a
-.Dq pre-world
-update should be resolved by a
-.Dq pre-world
-.Cm resolve .
-.It Fl r
-Do not update the
-.Dq current
-and
-.Dq previous
-trees during a merge.
-This can be used to
-.Dq re-run
-a previous merge operation.
-.It Fl s Ar source
-Specify an alternate source tree to use when building or extracting a
-.Dq current
-tree.
-The default source tree is
-.Pa /usr/src .
-.It Fl t Ar tarball
-Extract a new
-.Dq current
-tree from a tarball previously generated by the
-.Cm build
-command rather than building the tree from a source tree.
-.El
-.Sh CONFIG FILE
-The
-.Nm
-utility can also be configured by setting variables in an optional
-configuration file named
-.Pa /etc/etcupdate.conf .
-Note that command line options override settings in the configuration file.
-The configuration file is executed by
-.Xr sh 1 ,
-so it uses that syntax to set configuration variables.
-The following variables can be set:
-.Bl -tag -width ".Ev ALWAYS_INSTALL"
-.It Ev ALWAYS_INSTALL
-Always install files that match any of the patterns listed in this variable
-similar to the
-.Fl A
-option.
-.It Ev DESTDIR
-Specify an alternate destination directory similar to the
-.Fl D
-option.
-.It Ev EDITOR
-Specify a program to edit merge conflicts.
-.It Ev FREEBSD_ID
-Ignore changes in the FreeBSD ID string similar to the
-.Fl F
-option.
-This is enabled by setting the variable to a non-empty value.
-.It Ev IGNORE_FILES
-Ignore files that match any of the patterns listed in this variable
-similar to the
-.Fl I
-option.
-.It Ev LOGFILE
-Specify an alternate path for the log file similar to the
-.Fl L
-option.
-.It Ev MAKE_OPTIONS
-Pass additional options to
-.Xr make 1
-when building a
-.Dq current
-tree similar to the
-.Fl M
-option.
-.It Ev SRCDIR
-Specify an alternate source tree similar to the
-.Fl s
-option.
-.It Ev WORKDIR
-Specify an alternate work directory similar to the
-.Fl d
-option.
-.El
-.Sh ENVIRONMENT
-The
-.Nm
-utility uses the program identified in the
-.Ev EDITOR
-environment variable to edit merge conflicts.
-If
-.Ev EDITOR
-is not set,
-.Xr vi 1
-is used as the default editor.
-.Sh FILES
-.Bl -tag -width ".Pa /var/db/etcupdate/log" -compact
-.It Pa /etc/etcupdate.conf
-Optional config file.
-.It Pa /var/db/etcupdate
-Default work directory used to store trees and other data.
-.It Pa /var/db/etcupdate/log
-Default log file.
-.El
-.Sh EXIT STATUS
-.Ex -std
-.Sh EXAMPLES
-If the source tree matches the currently installed world,
-then the following can be used to bootstrap
-.Nm
-so that it can be used for future upgrades:
-.Pp
-.Dl "etcupdate extract"
-.Pp
-To merge changes after an upgrade via the buildworld and installworld process:
-.Pp
-.Dl "etcupdate"
-.Pp
-To resolve any conflicts generated during a merge:
-.Pp
-.Dl "etcupdate resolve"
-.Sh DIAGNOSTICS
-The following warning messages may be generated during a merge.
-Note that several of these warnings cover obscure cases that should occur
-rarely if at all in practice.
-For example,
-if a file changes from a file to a directory in the
-.Dq current
-tree
-and the file was modified in the destination directory,
-then a warning will be triggered.
-In general,
-when a warning references a pathname,
-the corresponding file in the destination directory is not changed by a
-merge operation.
-.Bl -diag
-.It "Directory mismatch: <path> (<type>)"
-An attempt was made to create a directory at
-.Pa path
-but an existing file of type
-.Dq type
-already exists for that path name.
-.It "Modified link changed: <file> (<old> became <new>)"
-The target of a symbolic link named
-.Pa file
-was changed from
-.Dq old
-to
-.Dq new
-in the
-.Dq current
-tree.
-The symbolic link has been modified to point to a target that is neither
-.Dq old
-nor
-.Dq new
-in the destination directory.
-.It "Modified mismatch: <file> (<new> vs <dest>)"
-A file named
-.Pa file
-of type
-.Dq new
-was modified in the
-.Dq current
-tree,
-but the file exists as a different type
-.Dq dest
-in the destination directory.
-.It "Modified <type> changed: <file> (<old> became <new>)"
-A file named
-.Pa file
-changed type from
-.Dq old
-in the
-.Dq previous
-tree to type
-.Dq new
-in the
-.Dq current
-tree.
-The file in the destination directory of type
-.Dq type
-has been modified,
-so it could not be merged automatically.
-.It "Modified <type> remains: <file>"
-The file of type
-.Dq type
-named
-.Pa file
-has been removed from the
-.Dq current
-tree,
-but it has been locally modified.
-The modified version of the file remains in the destination directory.
-.It "Needs update: /etc/localtime (required manual update via tzsetup(1))"
-The
-.Fa /var/db/zoneinfo
-file does not exist,
-so
-.Nm
-was not able to refresh
-.Fa /etc/localtime
-from its source file in
-.Fa /usr/share/zoneinfo .
-Running
-.Xr tzsetup 1
-will both refresh
-.Fa /etc/localtime
-and generate
-.Fa /var/db/zoneinfo
-permitting future updates to refresh
-.Fa /etc/localtime
-automatically.
-.It "Needs update: /etc/mail/aliases.db (required manual update via newaliases(1))"
-The file
-.Pa /etc/mail/aliases
-was updated during a merge with a non-empty destination directory.
-Due to a limitation of the
-.Xr newaliases 1
-command,
-.Nm
-was not able to automatically update the corresponding aliases database.
-.It "New file mismatch: <file> (<new> vs <dest>)"
-A new file named
-.Pa file
-of type
-.Dq new
-has been added to the
-.Dq current
-tree.
-A file of that name already exists in the destination directory,
-but it is of a different type
-.Dq dest .
-.It "New link conflict: <file> (<new> vs <dest>)"
-A symbolic link named
-.Pa file
-has been added to the
-.Dq current
-tree that links to
-.Dq new .
-A symbolic link of the same name already exists in the destination
-directory,
-but it links to a different target
-.Dq dest .
-.It "Non-empty directory remains: <file>"
-The directory
-.Pa file
-was removed from the
-.Dq current
-tree,
-but it contains additional files in the destination directory.
-These additional files as well as the directory remain.
-.It "Remove mismatch: <file> (<old> became <new>)"
-A file named
-.Pa file
-changed from type
-.Dq old
-in the
-.Dq previous
-tree to type
-.Dq new
-in the
-.Dq current
-tree,
-but it has been removed in the destination directory.
-.It "Removed file changed: <file>"
-A file named
-.Pa file
-was modified in the
-.Dq current
-tree,
-but it has been removed in the destination directory.
-.It "Removed link changed: <file> (<old> became <new>)"
-The target of a symbolic link named
-.Pa file
-was changed from
-.Dq old
-to
-.Dq new
-in the
-.Dq current
-tree,
-but it has been removed in the destination directory.
-.El
-.Sh SEE ALSO
-.Xr cap_mkdb 1 ,
-.Xr diff 1 ,
-.Xr make 1 ,
-.Xr newaliases 1 ,
-.Xr sh 1 ,
-.Xr pwd_mkdb 8
-.Sh HISTORY
-The
-.Nm
-utility first appeared in
-.Fx 10.0 .
-.Sh AUTHORS
-The
-.Nm
-utility was written by
-.An John Baldwin Aq jhb@FreeBSD.org .
-.Sh BUGS
-Rerunning a merge does not automatically delete conflicts left over from a
-previous merge.
-Any conflicts must be resolved before the merge can be rerun.
-It it is not clear if this is a feature or a bug.
-.Pp
-There is no way to easily automate conflict resolution for specific files.
-For example, one can imagine a syntax along the lines of
-.Pp
-.Dl "etcupdate resolve tf /some/file"
-.Pp
-to resolve a specific conflict in an automated fashion.
-.Pp
-It might be nice to have something like a
-.Sq revert
-command to replace a locally modified version of a file with the stock
-version of the file.
-For example:
-.Pp
-.Dl "etcupdate revert /etc/mail/freebsd.cf"
-.Pp
-Bootstrapping
-.Nm
-often results in gratuitous diffs in
-.Pa /etc/mail/*.cf
-that cause conflicts in the first merge.
-If an object tree that matches the source tree is present when bootstrapping,
-then passing the
-.Fl B
-flag to the
-.Cm extract
-command can work around this.