diff --git a/documentation/content/en/books/handbook/cutting-edge/_index.adoc b/documentation/content/en/books/handbook/cutting-edge/_index.adoc --- a/documentation/content/en/books/handbook/cutting-edge/_index.adoc +++ b/documentation/content/en/books/handbook/cutting-edge/_index.adoc @@ -602,9 +602,10 @@ # make -j4 buildworld <.> # make -j4 kernel <.> # shutdown -r now <.> +# etcupdate -p <.> # cd /usr/src <.> # make installworld <.> -# mergemaster -Ui <.> +# etcupdate -B <.> # shutdown -r now 1<.> .... @@ -620,6 +621,8 @@ <.> Reboot the system to the new kernel. +<.> Update and merge configuraton files in [.filename]#/etc/# required before installworld. + <.> Go to the source directory. <.> Install the world. @@ -829,11 +832,65 @@ 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. +[[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 agianst the local versions. +It it also designed to minimize the amount of user intervention, in constrast 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,bash] +.... +# 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,bash] +.... +# etcupdate resolve +.... + +[WARNING] +==== +When switching from man:mergemaster[8] to man:etcupdate[8], the first run might print some bogus conflicts due to already applied changes. +In general, the following command sequence should recover from this behavior: + +[.procedure] +==== +* Bootstrapping man:etcupdate[8] ++ + +[source,bash] +.... +# etcupdate diff <.> +# etcupdate bootstrap <.> +# etcupdate diff 1<.> +.... + +<.> Check the output before updating sources and building the newworld. +If the output shows a lot of diffs that are not expected, continue with the bootstrap command. + +<.> Bootstrap the program, for more information see man:etcupdate[8]. + +<.> Check the diff again after bootstrapping. The unexpected diffs should be gone. +==== + +==== + [[updating-src-completing-merge-mergemaster]] ==== 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: [source,bash]