handbook/cutting-edge: Recommend etcupdate(8)

Since etcupdate(8) has lived in base since 10.0 and seen plenty of use
by both committers and contributors, it's time to recommend using it.

Reviewed by:	jhb (prior version)
Differential Revision:	https://reviews.freebsd.org/D27848
This commit is contained in:
Dries Michiels 2021-03-26 22:47:10 +01:00 committed by Daniel Ebdrup Jensen
parent 4d67595062
commit 7859bada69
1 changed files with 49 additions and 3 deletions

View File

@ -617,9 +617,10 @@ check /usr/src/UPDATING <.>
# make -j4 buildworld <.> # make -j4 buildworld <.>
# make -j4 kernel <.> # make -j4 kernel <.>
# shutdown -r now <.> # shutdown -r now <.>
# etcupdate -p <.>
# cd /usr/src <.> # cd /usr/src <.>
# make installworld <.> # make installworld <.>
# mergemaster -Ui <.> # etcupdate -B <.>
# shutdown -r now <.> # shutdown -r now <.>
.... ....
@ -635,6 +636,8 @@ check /usr/src/UPDATING <.>
<.> Reboot the system to the new kernel. <.> Reboot the system to the new kernel.
<.> Update and merge configuraton files in [.filename]#/etc/# required before installworld.
<.> Go to the source directory. <.> Go to the source directory.
<.> Install the world. <.> Install the world.
@ -863,11 +866,54 @@ If a custom kernel was built, `KERNCONF` must also be set to use the new custom
A few final tasks complete the update. A few final tasks complete the update.
Any modified configuration files are merged with the new versions, outdated libraries are located and removed, then the system is restarted. Any modified configuration files are merged with the new versions, outdated libraries are located and removed, then the system is restarted.
[[updating-src-completing-merge-etcupdate]]
==== Merging Configuration Files with man:etcupdate[8]
man:etcupdate[8] is a tool for managing updates to files that are not updated as part of an installworld such as files located in [.filename]#/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, in contrast to man:mergemaster[8]'s interactive prompts.
[NOTE]
====
In general, man:etcupdate[8] does not need any specific arguments for its job.
There is however a handy in between command for sanity checking what will be done the first time man:etcupdate[8] is used:
[source,shell]
....
# etcupdate diff
....
This command allows the user to audit configuration changes.
====
If man:etcupdate[8] is not able to merge a file automatically, the merge conflicts can be resolved with manual interaction by issuing:
[source,shell]
....
# etcupdate resolve
....
[WARNING]
====
When switching from man:mergemaster[8] to man:etcupdate[8], the first run might merge changes incorrectly generating spurious conflicts.
To prevent this, perform the following steps *before* updating sources and building the new world:
[source,shell]
....
# etcupdate bootstrap <.>
# etcupdate diff <.>
....
<.> Bootstrap the database of stock [.filename]#/etc# files, for more information see man:etcupdate[8].
<.> Check the diff after bootstrapping. Trim any local changes that are no longer needed to reduce the chance of conflicts in future updates.
====
[[updating-src-completing-merge-mergemaster]] [[updating-src-completing-merge-mergemaster]]
==== Merging Configuration Files with man:mergemaster[8] ==== Merging Configuration Files with man:mergemaster[8]
man:mergemaster[8] provides an easy way to merge changes that have been made to system configuration files with new versions of those files. man:mergemaster[8] provides a way to merge changes that have been made to system configuration files with new versions of those files.
man:mergemaster[8] is an alternative to the preferred man:etcupdate[8]
With `-Ui`, man:mergemaster[8] automatically updates files that have not been user-modified and installs new files that are not already present: With `-Ui`, man:mergemaster[8] automatically updates files that have not been user-modified and installs new files that are not already present:
[source,shell] [source,shell]