|
Lines 247-254
Link Here
|
| 247 |
Merges are either accepted, open an editor, or cause |
247 |
Merges are either accepted, open an editor, or cause |
| 248 |
<command>freebsd-update</command> to abort. When in doubt, |
248 |
<command>freebsd-update</command> to abort. When in doubt, |
| 249 |
backup <filename>/etc</filename> and just accept the merges. |
249 |
backup <filename>/etc</filename> and just accept the merges. |
| 250 |
See <xref linkend="mergemaster"/> for more information about |
250 |
</para> |
| 251 |
<command>mergemaster</command>.</para> |
|
|
| 252 |
|
251 |
|
| 253 |
<programlisting># Directory in which to store downloaded updates and temporary |
252 |
<programlisting># Directory in which to store downloaded updates and temporary |
| 254 |
# files used by &os; Update. |
253 |
# files used by &os; Update. |
|
Lines 1279-1284
Link Here
|
| 1279 |
</step> |
1278 |
</step> |
| 1280 |
|
1279 |
|
| 1281 |
<step> |
1280 |
<step> |
|
|
1281 |
<para>If you have not previously performed an |
| 1282 |
<buildtarget>installworld</buildtarget> using the |
| 1283 |
&man.etcupdate.8; utility to perform the merging of the |
| 1284 |
configuration files in <filename>/etc/</filename>, then it |
| 1285 |
will need to be bootstrapped. For details on how to perform |
| 1286 |
the bootstrapping procedure, or how to determine whether it |
| 1287 |
is required, see <xref linkend="etcupdate-bootstrap"/>. |
| 1288 |
</para> |
| 1289 |
</step> |
| 1290 |
|
| 1291 |
<step> |
| 1282 |
<para>Read <filename>/usr/src/UPDATING</filename> for any |
1292 |
<para>Read <filename>/usr/src/UPDATING</filename> for any |
| 1283 |
extra steps necessary for that version of the source. This |
1293 |
extra steps necessary for that version of the source. This |
| 1284 |
file contains important information about potential problems |
1294 |
file contains important information about potential problems |
|
Lines 1370-1375
Link Here
|
| 1370 |
the function of each command.</para> |
1380 |
the function of each command.</para> |
| 1371 |
|
1381 |
|
| 1372 |
<step> |
1382 |
<step> |
|
|
1383 |
<para>If the &man.etcupdate.8; utility has not previously |
| 1384 |
been used during an update to perform the merging of the |
| 1385 |
configuration files in <filename>/etc/</filename>, then it |
| 1386 |
will need to be bootstrapped using a copy of the &os; |
| 1387 |
source tree which matches the <emphasis>currently</emphasis> |
| 1388 |
installed system (pre-update):</para> |
| 1389 |
|
| 1390 |
<screen>&prompt.root; <userinput>etcupdate extract -s <replaceable>/PATH/TO/PREVIOUS/SOURCE/TREE</replaceable></userinput></screen> |
| 1391 |
</step> |
| 1392 |
|
| 1393 |
<step> |
| 1373 |
<para>If the build world process has previously been run on |
1394 |
<para>If the build world process has previously been run on |
| 1374 |
this system, a copy of the previous build may still exist |
1395 |
this system, a copy of the previous build may still exist |
| 1375 |
in <filename>/usr/obj</filename>. To |
1396 |
in <filename>/usr/obj</filename>. To |
|
Lines 1462-1484
Link Here
|
| 1462 |
|
1483 |
|
| 1463 |
<step> |
1484 |
<step> |
| 1464 |
<para>Remaking the world will not update certain |
1485 |
<para>Remaking the world will not update certain |
| 1465 |
directories, such as <filename>/etc</filename>, |
1486 |
directories, such as <filename>/etc/</filename>, |
| 1466 |
<filename>/var</filename> and <filename>/usr</filename>, |
1487 |
<filename>/var/</filename> and <filename>/usr/</filename>, |
| 1467 |
with new or changed configuration files. The next step is |
1488 |
with new or changed configuration files. The next step is |
| 1468 |
to perform some initial configuration file updates |
1489 |
to perform some initial configuration file updates |
| 1469 |
to <filename>/etc</filename> in |
1490 |
to <filename>/etc/</filename> in preparation for the new |
| 1470 |
preparation for the new world. The following command |
1491 |
world. Use the <option>-n</option> option to first perform a |
| 1471 |
compares only those files that are essential for the |
1492 |
"dry-run", which will report what actions would be taken, |
| 1472 |
success of <buildtarget>installworld</buildtarget>. For |
1493 |
but will not actually make any changes. Refer to |
| 1473 |
instance, this step may add new groups, system accounts, |
1494 |
<xref linkend="etcupdate"/> for more details about this |
| 1474 |
or startup scripts which have been added to &os; since the |
1495 |
command:</para> |
| 1475 |
last update. This is necessary so that the |
|
|
| 1476 |
<buildtarget>installworld</buildtarget> step will be able |
| 1477 |
to use any new system accounts, groups, and scripts. |
| 1478 |
Refer to <xref linkend="mergemaster"/> for more detailed |
| 1479 |
instructions about this command:</para> |
| 1480 |
|
1496 |
|
| 1481 |
<screen>&prompt.root; <userinput>mergemaster -p</userinput></screen> |
1497 |
<screen>&prompt.root; <userinput>etcupdate -pn | less</userinput> |
|
|
1498 |
&prompt.root; <userinput>etcupdate -p</userinput></screen> |
| 1482 |
</step> |
1499 |
</step> |
| 1483 |
|
1500 |
|
| 1484 |
<step> |
1501 |
<step> |
|
Lines 1490-1498
Link Here
|
| 1490 |
</step> |
1507 |
</step> |
| 1491 |
|
1508 |
|
| 1492 |
<step> |
1509 |
<step> |
| 1493 |
<para>Update any remaining configuration files.</para> |
1510 |
<para>Update any remaining configuration files. |
|
|
1511 |
Use the <option>-n</option> option to first perform a |
| 1512 |
"dry-run", which will report what actions would be taken, |
| 1513 |
but will not actually make any changes.</para> |
| 1494 |
|
1514 |
|
| 1495 |
<screen>&prompt.root; <userinput>mergemaster -iF</userinput></screen> |
1515 |
<screen>&prompt.root; <userinput>etcupdate -n | less</userinput> |
|
|
1516 |
&prompt.root; <userinput>etcupdate</userinput></screen> |
| 1496 |
</step> |
1517 |
</step> |
| 1497 |
|
1518 |
|
| 1498 |
<step> |
1519 |
<step> |
|
Lines 1671-1843
Link Here
|
| 1671 |
</note> |
1692 |
</note> |
| 1672 |
</sect2> |
1693 |
</sect2> |
| 1673 |
|
1694 |
|
| 1674 |
<sect2 xml:id="mergemaster"> |
1695 |
<sect2 xml:id="etcupdate"> |
| 1675 |
<info> |
1696 |
<info> |
| 1676 |
<title>Merging Configuration Files</title> |
1697 |
<title>Merging Configuration Files</title> |
| 1677 |
|
1698 |
|
| 1678 |
<authorgroup> |
1699 |
<authorgroup> |
| 1679 |
<author> |
1700 |
<author> |
| 1680 |
<personname> |
1701 |
<personname> |
| 1681 |
<firstname>Tom</firstname> |
1702 |
<firstname>Tom</firstname> |
| 1682 |
<surname>Rhodes</surname> |
1703 |
<surname>Rhodes</surname> |
| 1683 |
</personname> |
1704 |
</personname> |
| 1684 |
<contrib>Contributed by </contrib> |
1705 |
<contrib>Originally written to describe the mergemaster(8) utility by </contrib> |
| 1685 |
</author> |
1706 |
</author> |
| 1686 |
</authorgroup> |
1707 |
</authorgroup> |
| 1687 |
</info> |
|
|
| 1688 |
|
1708 |
|
| 1689 |
<indexterm> |
1709 |
<authorgroup> |
| 1690 |
<primary> |
1710 |
<author> |
| 1691 |
<command>mergemaster</command> |
1711 |
<personname> |
| 1692 |
</primary> |
1712 |
<firstname>Ben</firstname> |
| 1693 |
</indexterm> |
1713 |
<surname>Woods</surname> |
|
|
1714 |
</personname> |
| 1715 |
<contrib>Modified to describe the etcupdate(8) utility by </contrib> |
| 1716 |
</author> |
| 1717 |
<!-- Feb 2016 --> |
| 1718 |
</authorgroup> |
| 1719 |
</info> |
| 1694 |
|
1720 |
|
| 1695 |
<para>&os; provides the &man.mergemaster.8; Bourne script to aid |
1721 |
<indexterm> |
|
|
1722 |
<primary> |
| 1723 |
<command>etcupdate</command> |
| 1724 |
</primary> |
| 1725 |
</indexterm> |
| 1726 |
|
| 1727 |
<para>&os; provides the &man.etcupdate.8; Bourne script to aid |
| 1696 |
in determining the differences between the configuration files |
1728 |
in determining the differences between the configuration files |
| 1697 |
in <filename>/etc</filename>, and the configuration files in |
1729 |
in <filename>/etc/</filename>, and the configuration files in |
| 1698 |
<filename>/usr/src/etc</filename>. This is the recommended |
1730 |
<filename>/usr/src/etc/</filename>. This is the recommended |
| 1699 |
solution for keeping the system configuration files up to date |
1731 |
solution for keeping the system configuration files up to date |
| 1700 |
with those located in the source tree.</para> |
1732 |
with those located in the source tree, as it uses a 3-way |
|
|
1733 |
merge algorithm to compare the source tree used for the |
| 1734 |
previous installworld and current installworld, and |
| 1735 |
automatically merges any updates to the installed system |
| 1736 |
without clobbering local changes which have been made to the |
| 1737 |
system.</para> |
| 1701 |
|
1738 |
|
| 1702 |
<para>Before using <command>mergemaster</command>, it is |
1739 |
<sect3 xml:id="etcupdate-bootstrap"> |
| 1703 |
recommended to first copy the existing |
1740 |
<title>Bootstrapping <command>etcupdate</command> (First time only)</title> |
| 1704 |
<filename>/etc</filename> somewhere safe. Include |
|
|
| 1705 |
<option>-R</option> which does a recursive copy and |
| 1706 |
<option>-p</option> which preserves times and the ownerships |
| 1707 |
on files:</para> |
| 1708 |
|
1741 |
|
| 1709 |
<screen>&prompt.root; <userinput>cp -Rp /etc /etc.old</userinput></screen> |
1742 |
<para>If you have not previously performed an <buildtarget>installworld</buildtarget> |
|
|
1743 |
using the &man.etcupdate.8; utility to perform the merging |
| 1744 |
of the configuration files in <filename>/etc/</filename>, |
| 1745 |
then it will need to be bootstrapped. This step essentially |
| 1746 |
involves providing <command>etcupdate</command> with a copy |
| 1747 |
of the source tree that matches the |
| 1748 |
<emphasis>currently</emphasis> installed world.</para> |
| 1710 |
|
1749 |
|
| 1711 |
<para>When run, <command>mergemaster</command> builds a |
1750 |
<important> |
| 1712 |
temporary root environment, from <filename>/</filename> down, |
1751 |
<para>This is only required the first time that |
| 1713 |
and populates it with various system configuration files. |
1752 |
<command>etcupdate</command> is used to perform an install |
| 1714 |
Those files are then compared to the ones currently installed |
1753 |
world, as it saves a copy of the new world each time it is |
| 1715 |
in the system. Files that differ will be shown in |
1754 |
used.</para> |
| 1716 |
&man.diff.1; format, with the <option>+</option> sign |
1755 |
</important> |
| 1717 |
representing added or modified lines, and <option>-</option> |
|
|
| 1718 |
representing lines that will be either removed completely or |
| 1719 |
replaced with a new file. Refer to &man.diff.1; for more |
| 1720 |
information about how file differences are shown.</para> |
| 1721 |
|
1756 |
|
| 1722 |
<para>Next, <command>mergemaster</command> will display each |
1757 |
<para>To check whether <command>etcupdate</command> |
| 1723 |
file that differs, and present options to: delete the new |
1758 |
already has a copy of the correct source tree, or if it |
| 1724 |
file, referred to as the temporary file, install the temporary |
1759 |
needs to be bootstrapped, confirm that the following command |
| 1725 |
file in its unmodified state, merge the temporary file with |
1760 |
shows only the local changes which have been made to the |
| 1726 |
the currently installed file, or view the results |
1761 |
system. Files that differ from their originally installed |
| 1727 |
again.</para> |
1762 |
state will be shown in &man.diff.1; format, with the |
|
|
1763 |
<option>+</option> sign representing added or modified |
| 1764 |
lines, and <option>-</option> representing lines that will |
| 1765 |
be either removed completely or replaced with a new file.</para> |
| 1728 |
|
1766 |
|
| 1729 |
<para>Choosing to delete the temporary file will tell |
1767 |
<screen>&prompt.root; <userinput>etcupdate diff | less</userinput></screen> |
| 1730 |
<command>mergemaster</command> to keep the current file |
|
|
| 1731 |
unchanged and to delete the new version. This option is not |
| 1732 |
recommended. To get help at any time, type |
| 1733 |
<keycap>?</keycap> at the <command>mergemaster</command> |
| 1734 |
prompt. If the user chooses to skip a file, it will be |
| 1735 |
presented again after all other files have been dealt |
| 1736 |
with.</para> |
| 1737 |
|
1768 |
|
| 1738 |
<para>Choosing to install the unmodified temporary file will |
1769 |
<para>If this command fails with an error about a missing |
| 1739 |
replace the current file with the new one. For most |
1770 |
reference tree, then <command>etcupdate</command> needs to |
| 1740 |
unmodified files, this is the best option.</para> |
1771 |
be bootstrapped. If the output shows more changes than |
|
|
1772 |
expected, it is likely that <command>etcupdate</command> |
| 1773 |
has either been bootstrapped from a source tree that doesn't |
| 1774 |
match the running system or was not run after the last |
| 1775 |
system update. In either scenario, the solution is to |
| 1776 |
repeat the bootstrap process.</para> |
| 1741 |
|
1777 |
|
| 1742 |
<para>Choosing to merge the file will present a text editor, and |
1778 |
<para>To bootstrap <command>etcupdate</command>, you must |
| 1743 |
the contents of both files. The files can be merged by |
1779 |
first obtain a copy of the source tree which matches your |
| 1744 |
reviewing both files side by side on the screen, and choosing |
1780 |
<emphasis>currently</emphasis> installed world. This is not |
| 1745 |
parts from both to create a finished product. When the files |
1781 |
referring to the updated source tree which is about to to |
| 1746 |
are compared side by side, <keycap>l</keycap> selects the left |
1782 |
be installed to the system, but a copy of the source tree |
| 1747 |
contents and <keycap>r</keycap> selects contents from the |
1783 |
which matches the <emphasis>currently</emphasis> running |
| 1748 |
right. The final output will be a file consisting of both |
1784 |
system (used during the previous install or update). |
| 1749 |
parts, which can then be installed. This option is |
1785 |
If you are running a <literal>RELEASE</literal> branch, |
| 1750 |
customarily used for files where settings have been modified |
1786 |
this must be a copy of the source tree which includes all |
| 1751 |
by the user.</para> |
1787 |
changes for security/errata updates which have been |
|
|
1788 |
installed (this applies even if you have previously been |
| 1789 |
performing binary updates using the &man.freebsd-update.8; |
| 1790 |
utility).</para> |
| 1752 |
|
1791 |
|
| 1753 |
<para>Choosing to view the results again will redisplay the file |
1792 |
<para>If you already have a copy of the &os; source tree which |
| 1754 |
differences.</para> |
1793 |
was checked-out using <application>subversion</application>, |
|
|
1794 |
but it does not match the <emphasis>currently</emphasis> |
| 1795 |
running system, it is possible to roll the tree back to the |
| 1796 |
matching version:</para> |
| 1755 |
|
1797 |
|
| 1756 |
<para>After <command>mergemaster</command> is done with the |
1798 |
<screen>&prompt.user; <userinput>uname -v</userinput> |
| 1757 |
system files, it will prompt for other options. It may prompt |
1799 |
&os; <replaceable>YOURRELEASE</replaceable> #0 <replaceable>YOURREVISION</replaceable>: <replaceable>BUILDTIMESTAMP</replaceable> <replaceable>BUILDUSER@BUILDHOST:/PATH/TO/KERNCONF</replaceable> |
| 1758 |
to rebuild the password file and will finish up with an option |
1800 |
&prompt.user; <userinput>svn update -r <replaceable>YOURREVISION</replaceable></userinput></screen> |
| 1759 |
to remove left-over temporary files.</para> |
|
|
| 1760 |
<!-- |
| 1761 |
Probably not needed as changes should be minimal and mergemaster does |
| 1762 |
a good job of merging. |
| 1763 |
<tip> |
| 1764 |
<title>Name the New Root Directory |
| 1765 |
(<filename>/var/tmp/root</filename>) |
| 1766 |
with a Time Stamp, so You Can Easily Compare Differences |
| 1767 |
Between Versions</title> |
| 1768 |
|
1801 |
|
| 1769 |
<para>Frequently rebuilding world entails frequently |
1802 |
<para>If you do not have a copy of the matching source tree |
| 1770 |
updating <filename>/etc</filename> |
1803 |
readily available, or have already updated it to a newer |
| 1771 |
as well, which can be a bit of a chore.</para> |
1804 |
version and do not want to roll it back, the easiest way to |
|
|
1805 |
obtain a new copy of the matching tree is to download it |
| 1806 |
using <application>subversion</application>. Here, |
| 1807 |
<replaceable>BRANCH</replaceable> will typically be one of |
| 1808 |
<literal>head</literal>, <literal>stable/<replaceable>MAJORVERSION</replaceable></literal> or |
| 1809 |
<literal>releng/<replaceable>MAJORVERSION</replaceable>.<replaceable>MINORVERSION</replaceable></literal> |
| 1810 |
(as listed at <link xlink:href="&url.base;/releng/">www.freebsd.org/releng</link>): |
| 1811 |
</para> |
| 1772 |
|
1812 |
|
| 1773 |
<para>To speed up this process, use the following |
1813 |
<screen>&prompt.user; <userinput>svn checkout -r <replaceable>YOURREVISION</replaceable> svn://svn.FreeBSD.org/base/<replaceable>BRANCH</replaceable>/ <replaceable>/PATH/TO/SAVE/SOURCE/TREE</replaceable></userinput></screen> |
| 1774 |
procedure to keep a copy of the last set of changed files |
|
|
| 1775 |
that were merged into <filename>/etc</filename>.</para> |
| 1776 |
|
1814 |
|
| 1777 |
<procedure> |
1815 |
<para>Once you have the source tree matching the current |
| 1778 |
<step> |
1816 |
world, use it to bootstrap <command>etcupdate</command>:</para> |
| 1779 |
<para>Make the world as normal. When updating |
|
|
| 1780 |
<filename>/etc</filename> and the |
| 1781 |
other directories, give the target directory a name |
| 1782 |
based on the current date:</para> |
| 1783 |
|
1817 |
|
| 1784 |
<screen>&prompt.root; <userinput>mkdir /var/tmp/root-20130214</userinput> |
1818 |
<screen>&prompt.root; <userinput>etcupdate extract -s <replaceable>/PATH/TO/SAVED/SOURCE/TREE</replaceable></userinput></screen> |
| 1785 |
&prompt.root; <userinput>cd /usr/src/etc</userinput> |
1819 |
</sect3> |
| 1786 |
&prompt.root; <userinput>make DESTDIR=/var/tmp/root-20130214 \ |
|
|
| 1787 |
distrib-dirs distribution</userinput></screen> |
| 1788 |
</step> |
| 1789 |
|
1820 |
|
| 1790 |
<step> |
1821 |
<sect3 xml:id="etcupdate-merge"> |
| 1791 |
<para>Merge in the changes from this directory as |
1822 |
<title>Merging Configuration Files</title> |
| 1792 |
outlined above. <emphasis>Do not</emphasis> remove |
|
|
| 1793 |
the <filename>/var/tmp/root-20130214</filename> |
| 1794 |
directory when you have finished.</para> |
| 1795 |
</step> |
| 1796 |
|
1823 |
|
| 1797 |
<step> |
1824 |
<warning> |
| 1798 |
<para>After downloading the latest version of the |
1825 |
<para><command>etcupdate</command> needs to be bootstrapped the |
| 1799 |
source and remaking it, follow step 1. Create a new |
1826 |
first time it is used to merge configuration files |
| 1800 |
directory, which reflects the new date. This example |
1827 |
during an update. See <xref linkend="etcupdate-bootstrap"/>.</para> |
| 1801 |
uses |
1828 |
</warning> |
| 1802 |
<filename>/var/tmp/root-20130221</filename>.</para> |
|
|
| 1803 |
</step> |
| 1804 |
|
1829 |
|
| 1805 |
<step> |
1830 |
<para><command>etcupdate</command> should typically be run |
| 1806 |
<para>Use &man.diff.1; to see the differences that have |
1831 |
twice in the update process. The first time should be |
| 1807 |
been made in the intervening week by creating a |
1832 |
immediately before <buildtarget>installworld</buildtarget> |
| 1808 |
recursive diff between the two directories:</para> |
1833 |
with the <option>-p</option> option, which updates only |
|
|
1834 |
those files that are essential for the success of |
| 1835 |
<buildtarget>installworld</buildtarget>. |
| 1836 |
For instance, this step may add new groups, system accounts, |
| 1837 |
or startup scripts which have been added to &os; since the |
| 1838 |
last update. This is necessary so that the <buildtarget>installworld</buildtarget> |
| 1839 |
step will be able to use any new system accounts, groups, |
| 1840 |
and scripts. The second time should be immediately after |
| 1841 |
<buildtarget>installworld</buildtarget> and without the |
| 1842 |
<option>-p</option> option, to update the remainder of the |
| 1843 |
configuration files.</para> |
| 1809 |
|
1844 |
|
| 1810 |
<screen>&prompt.root; <userinput>cd /var/tmp</userinput> |
1845 |
<para>Each time the <command>etcupdate</command> utility is |
| 1811 |
&prompt.root; <userinput>diff -r root-20130214 root-20130221</userinput></screen> |
1846 |
used, it is recommended to first perform a "dry-run" using |
|
|
1847 |
the <option>-n</option> option. This will report what |
| 1848 |
actions would be taken, but will not actually make any |
| 1849 |
changes.</para> |
| 1812 |
|
1850 |
|
| 1813 |
<para>Typically, this will be a much smaller set of |
1851 |
<para>When <command>etcupdate</command> is run after |
| 1814 |
differences than those between |
1852 |
<buildtarget>installworld</buildtarget> (with no further |
| 1815 |
<filename>/var/tmp/root-20130221/etc</filename> and |
1853 |
arguments), it first moves it's backup of the old source |
| 1816 |
<filename>/etc</filename>. Because the set of |
1854 |
tree from <filename>/var/db/etcupdate/current/</filename> to |
| 1817 |
differences is smaller, it is easier to migrate those |
1855 |
<filename>/var/db/etcupdate/previous/</filename>, and then |
| 1818 |
changes across into <filename>/etc</filename>.</para> |
1856 |
takes a copy of the new source tree from |
| 1819 |
</step> |
1857 |
<filename>/usr/src/</filename> to |
|
|
1858 |
<filename>/var/db/etcupdate/current/</filename>. |
| 1859 |
Next, <command>etcupdate</command> compares the files in |
| 1860 |
the "current" and "previous" trees, and performs a 3-way merge |
| 1861 |
to the installed system. New files will be added, removed |
| 1862 |
files will be deleted, and modified files will be updated, |
| 1863 |
only if it it will not cobber any local changes. If the merge |
| 1864 |
encounters conflicts, then a version of the offending file |
| 1865 |
will be saved with conflict markers for future resolution, and |
| 1866 |
<command>etcupdate</command> will generate a warning.</para> |
| 1820 |
|
1867 |
|
| 1821 |
<step> |
1868 |
<para>For each file that is updated a line will be output with a |
| 1822 |
<para>When finished, remove the older of the two |
1869 |
leading character to indicate the action taken:</para> |
| 1823 |
<filename>/var/tmp/root-*</filename> |
|
|
| 1824 |
directories:</para> |
| 1825 |
|
1870 |
|
| 1826 |
<screen>&prompt.root; <userinput>rm -rf /var/tmp/root-20130214</userinput></screen> |
1871 |
<informaltable> |
| 1827 |
</step> |
1872 |
<tgroup cols="2"> |
|
|
1873 |
<thead> |
| 1874 |
<row> |
| 1875 |
<entry>Leading character</entry> |
| 1876 |
<entry>Action taken</entry> |
| 1877 |
</row> |
| 1878 |
</thead> |
| 1879 |
<tbody> |
| 1880 |
<row> |
| 1881 |
<entry>A</entry> |
| 1882 |
<entry>Added</entry> |
| 1883 |
</row> |
| 1884 |
<row> |
| 1885 |
<entry>C</entry> |
| 1886 |
<entry>Conflict</entry> |
| 1887 |
</row> |
| 1888 |
<row> |
| 1889 |
<entry>D</entry> |
| 1890 |
<entry>Deleted</entry> |
| 1891 |
</row> |
| 1892 |
<row> |
| 1893 |
<entry>M</entry> |
| 1894 |
<entry>Merged</entry> |
| 1895 |
</row> |
| 1896 |
<row> |
| 1897 |
<entry>U</entry> |
| 1898 |
<entry>Updated</entry> |
| 1899 |
</row> |
| 1900 |
</tbody> |
| 1901 |
</tgroup> |
| 1902 |
</informaltable> |
| 1828 |
|
1903 |
|
| 1829 |
<step> |
1904 |
<para>Note that for certain files, <command>etcupdate</command> |
| 1830 |
<para>Repeat this process whenever merging |
1905 |
will automatically perform post-install actions any time |
| 1831 |
in changes to <filename>/etc</filename>.</para> |
1906 |
they are updated:</para> |
| 1832 |
</step> |
|
|
| 1833 |
</procedure> |
| 1834 |
|
1907 |
|
| 1835 |
<para>Use &man.date.1; to automate the generation of the |
1908 |
<informaltable> |
| 1836 |
directory names:</para> |
1909 |
<tgroup cols="2"> |
|
|
1910 |
<thead> |
| 1911 |
<row> |
| 1912 |
<entry>Modified file</entry> |
| 1913 |
<entry>Post-install action</entry> |
| 1914 |
</row> |
| 1915 |
</thead> |
| 1916 |
<tbody> |
| 1917 |
<row> |
| 1918 |
<entry><filename>/etc/master.passwd</filename></entry> |
| 1919 |
<entry>&man.pwd.mkdb.8; is invoked</entry> |
| 1920 |
</row> |
| 1921 |
<row> |
| 1922 |
<entry><filename>/etc/login.conf</filename></entry> |
| 1923 |
<entry>&man.cap.mkdb.1; is invoked to update <filename>/etc/login.conf.db</filename></entry> |
| 1924 |
</row> |
| 1925 |
<row> |
| 1926 |
<entry><filename>/etc/mail/aliases</filename></entry> |
| 1927 |
<entry>&man.newaliases.1; is invoked *</entry> |
| 1928 |
</row> |
| 1929 |
<row> |
| 1930 |
<entry><filename>/etc/services</filename></entry> |
| 1931 |
<entry>&man.services.mkdb.8; is invoked</entry> |
| 1932 |
</row> |
| 1933 |
<row> |
| 1934 |
<entry><filename>/etc/localtime</filename></entry> |
| 1935 |
<entry>&man.tzsetup.8; is invoked if <filename>/var/db/zoneinfo</filename> exists</entry> |
| 1936 |
</row> |
| 1937 |
<row> |
| 1938 |
<entry><filename>/etc/motd</filename></entry> |
| 1939 |
<entry><command>/etc/rc.d/motd</command> is invoked *</entry> |
| 1940 |
</row> |
| 1941 |
</tbody> |
| 1942 |
</tgroup> |
| 1943 |
</informaltable> |
| 1837 |
|
1944 |
|
| 1838 |
<screen>&prompt.root; <userinput>mkdir /var/tmp/root-`date "+%Y%m%d"`</userinput></screen> |
1945 |
<para>* These post-install actions only occur if |
| 1839 |
</tip> |
1946 |
<command>etcupdate</command> is updating file directly to |
| 1840 |
--> |
1947 |
<filename>/etc/</filename> (the default behaviour). Refer to |
|
|
1948 |
the &man.etcupdate.8; man page for behaviour if the |
| 1949 |
<option>-D</option> option has been used to merge |
| 1950 |
configuration files in a non-default destination directory |
| 1951 |
(for example, when using boot environments).</para> |
| 1952 |
|
| 1953 |
</sect3> |
| 1954 |
|
| 1955 |
<sect3 xml:id="etcupdate-resolve"> |
| 1956 |
<title>Resolving Conflicts After Merging Configuration Files</title> |
| 1957 |
|
| 1958 |
<para>If <command>etcupdate</command> has reported any |
| 1959 |
conflicts when updating the configuration files, it must be |
| 1960 |
run once more in "resolve" mode.</para> |
| 1961 |
|
| 1962 |
<screen>&prompt.root; <userinput>etcupdate resolve</userinput></screen> |
| 1963 |
|
| 1964 |
<para>In this mode, <command>etcupdate</command> iterates over |
| 1965 |
any existing conflicts and prompts the user for actions to |
| 1966 |
take on each conflicted file. For each file, the following |
| 1967 |
actions are available:</para> |
| 1968 |
|
| 1969 |
<informaltable> |
| 1970 |
<tgroup cols="2"> |
| 1971 |
<thead> |
| 1972 |
<row> |
| 1973 |
<entry>Prompt</entry> |
| 1974 |
<entry>Action Description</entry> |
| 1975 |
</row> |
| 1976 |
</thead> |
| 1977 |
<tbody> |
| 1978 |
<row> |
| 1979 |
<entry>(p) postpone</entry> |
| 1980 |
<entry>Ignore this conflict for now. It will remain for subsequent calls of <command>etcupdate resolve</command>.</entry> |
| 1981 |
</row> |
| 1982 |
<row> |
| 1983 |
<entry>(df) diff-full</entry> |
| 1984 |
<entry>Show all changes made to the merged file as a unified &man.diff.1;.</entry> |
| 1985 |
</row> |
| 1986 |
<row> |
| 1987 |
<entry>(e) edit</entry> |
| 1988 |
<entry>Manually edit the merged file in an editor.</entry> |
| 1989 |
</row> |
| 1990 |
<row> |
| 1991 |
<entry>(r) resolved</entry> |
| 1992 |
<entry>Install the manually edited version of the file into the destination directory. Used after the (e) edit option.</entry> |
| 1993 |
</row> |
| 1994 |
<row> |
| 1995 |
<entry>(mf) mine-full</entry> |
| 1996 |
<entry>Use the version of the file in the running system and ignore any changes made to the file in the new source tree.</entry> |
| 1997 |
</row> |
| 1998 |
<row> |
| 1999 |
<entry>(tf) theirs-full</entry> |
| 2000 |
<entry>Use the version of the file from the new source tree and discard any local changes made to the file.</entry> |
| 2001 |
</row> |
| 2002 |
<row> |
| 2003 |
<entry>(h) help</entry> |
| 2004 |
<entry>Display the list of commands.</entry> |
| 2005 |
</row> |
| 2006 |
</tbody> |
| 2007 |
</tgroup> |
| 2008 |
</informaltable> |
| 2009 |
|
| 2010 |
</sect3> |
| 1841 |
</sect2> |
2011 |
</sect2> |
| 1842 |
|
2012 |
|
| 1843 |
<sect2 xml:id="make-delete-old"> |
2013 |
<sect2 xml:id="make-delete-old"> |
|
Lines 1877-1883
Link Here
|
| 1877 |
during the system upgrade process.</para> |
2047 |
during the system upgrade process.</para> |
| 1878 |
|
2048 |
|
| 1879 |
<para>After the <command>make installworld</command> and the |
2049 |
<para>After the <command>make installworld</command> and the |
| 1880 |
subsequent <command>mergemaster</command> have finished |
2050 |
subsequent <command>etcupdate</command> have finished |
| 1881 |
successfully, check for obsolete files and libraries:</para> |
2051 |
successfully, check for obsolete files and libraries:</para> |
| 1882 |
|
2052 |
|
| 1883 |
<screen>&prompt.root; <userinput>cd /usr/src</userinput> |
2053 |
<screen>&prompt.root; <userinput>cd /usr/src</userinput> |
|
Lines 2216-2222
Link Here
|
| 2216 |
<filename>/usr/obj</filename> via <acronym>NFS</acronym>. Then, |
2386 |
<filename>/usr/obj</filename> via <acronym>NFS</acronym>. Then, |
| 2217 |
run <command>shutdown now</command> to go to single-user mode in |
2387 |
run <command>shutdown now</command> to go to single-user mode in |
| 2218 |
order to install the new kernel and world and run |
2388 |
order to install the new kernel and world and run |
| 2219 |
<command>mergemaster</command> as usual. When done, reboot to |
2389 |
<command>etcupdate</command> as usual. When done, reboot to |
| 2220 |
return to normal multi-user operations.</para> |
2390 |
return to normal multi-user operations.</para> |
| 2221 |
|
2391 |
|
| 2222 |
<para>After verifying that everything on the test machine is |
2392 |
<para>After verifying that everything on the test machine is |