Whitespace only: Fix lots of whitespace issues in Handbook's 'cutting-edge' chapter

This commit is contained in:
Manolis Kiagias 2008-11-01 12:06:28 +00:00
parent 44ce836674
commit 9e7b67b769
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=33141

View file

@ -14,20 +14,24 @@
</author> </author>
<!-- Mar 2000 --> <!-- Mar 2000 -->
</authorgroup> </authorgroup>
<authorgroup> <authorgroup>
<author> <author>
<firstname>Jordan</firstname> <firstname>Jordan</firstname>
<surname>Hubbard</surname> <surname>Hubbard</surname>
<contrib>Original work by </contrib> <contrib>Original work by </contrib>
</author> </author>
<author> <author>
<firstname>Poul-Henning</firstname> <firstname>Poul-Henning</firstname>
<surname>Kamp</surname> <surname>Kamp</surname>
</author> </author>
<author> <author>
<firstname>John</firstname> <firstname>John</firstname>
<surname>Polstra</surname> <surname>Polstra</surname>
</author> </author>
<author> <author>
<firstname>Nik</firstname> <firstname>Nik</firstname>
<surname>Clayton</surname> <surname>Clayton</surname>
@ -52,28 +56,36 @@
<para>After reading this chapter, you will know:</para> <para>After reading this chapter, you will know:</para>
<itemizedlist> <itemizedlist>
<listitem><para>The difference between the two development <listitem>
<para>The difference between the two development
branches: &os.stable; and &os.current;.</para> branches: &os.stable; and &os.current;.</para>
</listitem> </listitem>
<listitem><para>How to keep your system up to date with
<listitem>
<para>How to keep your system up to date with
<application>CVSup</application>, <application>CVSup</application>,
<application>CVS</application>, or <application>CVS</application>, or
<application>CTM</application>.</para> <application>CTM</application>.</para>
</listitem> </listitem>
<listitem><para>How to rebuild and reinstall the entire base
<listitem>
<para>How to rebuild and reinstall the entire base
system with <command>make buildworld</command> (etc).</para> system with <command>make buildworld</command> (etc).</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<para>Before reading this chapter, you should:</para> <para>Before reading this chapter, you should:</para>
<itemizedlist> <itemizedlist>
<listitem><para>Properly set up your network connection (<xref <listitem>
<para>Properly set up your network connection (<xref
linkend="advanced-networking">).</para> linkend="advanced-networking">).</para>
</listitem> </listitem>
<listitem><para>Know how to install additional third-party
software (<xref linkend="ports">).</para></listitem> <listitem>
<para>Know how to install additional third-party
software (<xref linkend="ports">).</para>
</listitem>
</itemizedlist> </itemizedlist>
<note> <note>
@ -104,7 +116,7 @@
&os.current; users are expected to have a high degree of &os.current; users are expected to have a high degree of
technical skill, and should be capable of solving difficult technical skill, and should be capable of solving difficult
system problems on their own. If you are new to &os;, think system problems on their own. If you are new to &os;, think
twice before installing it. </para> twice before installing it.</para>
<sect3> <sect3>
<title>What Is &os.current;?</title> <title>What Is &os.current;?</title>
@ -200,15 +212,15 @@
</indexterm> </indexterm>
<orderedlist> <orderedlist>
<listitem> <listitem>
<para>Join the &a.current.name; and the &a.svn-src-head.name; lists. This is not <para>Join the &a.current.name; and the &a.svn-src-head.name;
just a good idea, it is <emphasis>essential</emphasis>. If lists. This is not just a good idea, it is
you are not on the <emphasis>&a.current.name;</emphasis> list, <emphasis>essential</emphasis>. If you are not on the
you will not see the comments that people are <emphasis>&a.current.name;</emphasis> list, you will not see
making about the current state of the system and thus will the comments that people are making about the current state of
probably end up stumbling over a lot of problems that others the system and thus will probably end up stumbling over a lot
have already found and solved. Even more importantly, you of problems that others have already found and solved. Even
will miss out on important bulletins which may be critical more importantly, you will miss out on important bulletins
to your system's continued health.</para> which may be critical to your system's continued health.</para>
<para>The &a.svn-src-head.name; list will allow you to see the <para>The &a.svn-src-head.name; list will allow you to see the
commit log entry for each change as it is made, along with commit log entry for each change as it is made, along with
@ -240,16 +252,19 @@
<listitem> <listitem>
<para>Use the <link linkend="cvsup">cvsup</link> program <para>Use the <link linkend="cvsup">cvsup</link> program
with the <filename>supfile</filename> named <filename>standard-supfile</filename> with the <filename>supfile</filename> named
available from <filename>/usr/share/examples/cvsup</filename>. <filename>standard-supfile</filename>
This is the most recommended available from
method, since it allows you to grab the entire <filename>/usr/share/examples/cvsup</filename>.
collection once and then only what has changed from then This is the most recommended method, since it allows you to
on. Many people run <command>cvsup</command> from grab the entire collection once and then only what has
<command>cron</command> and keep their changed from then on. Many people run
sources up-to-date automatically. You have to <command>cvsup</command> from <command>cron</command> and
customize the sample <filename>supfile</filename> above, and configure keep their sources up-to-date automatically. You have to
<link linkend="cvsup">cvsup</link> for your environment.</para> customize the sample <filename>supfile</filename> above,
and configure <link
linkend="cvsup">cvsup</link> for your environment.</para>
<note> <note>
<para>The sample <filename>standard-supfile</filename> is <para>The sample <filename>standard-supfile</filename> is
intended for tracking a specific security branch of intended for tracking a specific security branch of
@ -276,14 +291,14 @@
<para>Use the <application><link <para>Use the <application><link
linkend="ctm">CTM</link></application> facility. If you linkend="ctm">CTM</link></application> facility. If you
have very bad connectivity (high price connections or have very bad connectivity (high price connections or
only email access) <application>CTM</application> is an option. only email access) <application>CTM</application> is an
However, it is a lot of hassle and can give you broken files. option. However, it is a lot of hassle and can give you
This leads to it being rarely used, which again increases broken files. This leads to it being rarely used, which
the chance of it not working for fairly long periods of again increases the chance of it not working for fairly
time. We recommend using long periods of time. We recommend using
<application><link linkend="cvsup">CVSup</link></application> <application><link linkend="cvsup">CVSup</link></application>
for anybody with a 9600&nbsp;bps modem or faster connection. for anybody with a 9600&nbsp;bps modem or faster
</para> connection.</para>
</listitem> </listitem>
</orderedlist> </orderedlist>
</listitem> </listitem>
@ -303,11 +318,12 @@
<para>Before compiling &os.current;, read the <para>Before compiling &os.current;, read the
<filename>Makefile</filename> in <filename>/usr/src</filename> <filename>Makefile</filename> in <filename>/usr/src</filename>
carefully. You should at least <link carefully. You should at least <link
linkend="makeworld">install a new kernel and rebuild the world</link> the first time through linkend="makeworld">install a new kernel and rebuild the
world</link> the first time through
as part of the upgrading process. Reading the &a.current; as part of the upgrading process. Reading the &a.current;
and <filename>/usr/src/UPDATING</filename> will keep you up-to-date on other bootstrapping procedures and <filename>/usr/src/UPDATING</filename> will keep you
that sometimes become necessary as we move toward the next up-to-date on other bootstrapping procedures that sometimes
release.</para> become necessary as we move toward the next release.</para>
</listitem> </listitem>
<listitem> <listitem>
@ -332,8 +348,8 @@
are made. Changes go into this branch at a different pace, and are made. Changes go into this branch at a different pace, and
with the general assumption that they have first gone into with the general assumption that they have first gone into
&os.current; for testing. This is <emphasis>still</emphasis> &os.current; for testing. This is <emphasis>still</emphasis>
a development branch, however, and this means that at any given time, a development branch, however, and this means that at any given
the sources for &os.stable; may or may not be suitable for any time, the sources for &os.stable; may or may not be suitable for any
particular purpose. It is simply another engineering development particular purpose. It is simply another engineering development
track, not a resource for end-users.</para> track, not a resource for end-users.</para>
</sect3> </sect3>
@ -357,8 +373,8 @@
of the current security policy for old releases of of the current security policy for old releases of
FreeBSD, please see <ulink FreeBSD, please see <ulink
url="&url.base;/security/">http://www.FreeBSD.org/security/</ulink>.</para> url="&url.base;/security/">http://www.FreeBSD.org/security/</ulink>.</para>
</footnote> </footnote>,
, and tracking an entire development branch just and tracking an entire development branch just
for security reasons is likely to bring in a lot of unwanted for security reasons is likely to bring in a lot of unwanted
changes as well.</para> changes as well.</para>
@ -389,21 +405,20 @@
</indexterm> </indexterm>
<orderedlist> <orderedlist>
<listitem> <listitem>
<para>Join the &a.stable.name; list. This will keep you informed of <para>Join the &a.stable.name; list. This will keep you informed
build-dependencies that may appear in &os.stable; of build-dependencies that may appear in &os.stable;
or any other issues requiring or any other issues requiring special attention. Developers
special attention. Developers will also make announcements will also make announcements in this mailing list when they are
in this mailing list when they are contemplating some contemplating some controversial fix or update, giving the
controversial fix or update, giving the users a chance to users a chance to respond if they have any issues to raise
respond if they have any issues to raise concerning the concerning the proposed change.</para>
proposed change.</para>
<para>Join the relevant <application>SVN</application> list for <para>Join the relevant <application>SVN</application> list for
the branch you are tracking. For example, if you are tracking the branch you are tracking. For example, if you are tracking
the 7-STABLE branch, join the &a.svn-src-stable-7.name; list. the 7-STABLE branch, join the &a.svn-src-stable-7.name; list.
This will allow you to view the This will allow you to view the commit log entry for each
commit log entry for each change as it is made, along with change as it is made, along with any pertinent information on
any pertinent information on possible side-effects.</para> possible side-effects.</para>
<para>To join these lists, or one of the others available <para>To join these lists, or one of the others available
go to &a.mailman.lists.link; and click on the list that go to &a.mailman.lists.link; and click on the list that
@ -416,9 +431,9 @@
<listitem> <listitem>
<para>If you are going to install a new system and want it <para>If you are going to install a new system and want it
to run monthly snapshot built from &os.stable;, please to run monthly snapshot built from &os.stable;, please
check the <ulink url="&url.base;/snapshots/"> check the <ulink
Snapshots</ulink> web page for more information. url="&url.base;/snapshots/">Snapshots</ulink> web page for
Alternatively, it is possible to more information. Alternatively, it is possible to
install the most recent &os.stable; release from the install the most recent &os.stable; release from the
<link linkend="mirrors">mirror sites</link> and follow <link linkend="mirrors">mirror sites</link> and follow
the instructions below to upgrade your system to the the instructions below to upgrade your system to the
@ -442,15 +457,14 @@
</indexterm> </indexterm>
<listitem> <listitem>
<para>Use the <link linkend="cvsup">cvsup</link> program <para>Use the <link linkend="cvsup">cvsup</link> program
with the <filename>supfile</filename> named <filename>stable-supfile</filename> with the <filename>supfile</filename> named
from the directory <filename>stable-supfile</filename> from the directory
<filename>/usr/share/examples/cvsup</filename>. <filename>/usr/share/examples/cvsup</filename>.
This is the most recommended This is the most recommended method, since it allows you to
method, since it allows you to grab the entire grab the entire collection once and then only what has
collection once and then only what has changed from then changed from then on. Many people run
on. Many people run <command>cvsup</command> from <command>cvsup</command> from <command>cron</command> to
<command>cron</command> to keep their keep their sources up-to-date automatically. You have to
sources up-to-date automatically. You have to
customize the sample <filename>supfile</filename> above, customize the sample <filename>supfile</filename> above,
and configure <link linkend="cvsup">cvsup</link> for your and configure <link linkend="cvsup">cvsup</link> for your
environment.</para> environment.</para>
@ -465,8 +479,7 @@
linkend="ctm">CTM</link></application> facility. If linkend="ctm">CTM</link></application> facility. If
you do not have a fast and inexpensive connection to you do not have a fast and inexpensive connection to
the Internet, this is the method you should consider the Internet, this is the method you should consider
using. using.</para>
</para>
</listitem> </listitem>
</orderedlist> </orderedlist>
</listitem> </listitem>
@ -486,11 +499,12 @@
<para>Before compiling &os.stable;, read the <para>Before compiling &os.stable;, read the
<filename>Makefile</filename> in <filename>/usr/src</filename> <filename>Makefile</filename> in <filename>/usr/src</filename>
carefully. You should at least <link carefully. You should at least <link
linkend="makeworld">install a new kernel and rebuild the world</link> the first time through linkend="makeworld">install a new kernel and rebuild the
as part of the upgrading process. Reading the &a.stable; and <filename>/usr/src/UPDATING</filename> will world</link> the first time through
keep you up-to-date on other bootstrapping procedures that as part of the upgrading process. Reading the &a.stable; and
sometimes become necessary as we move toward the next <filename>/usr/src/UPDATING</filename> will keep you up-to-date
release.</para> on other bootstrapping procedures that sometimes become
necessary as we move toward the next release.</para>
</listitem> </listitem>
</orderedlist> </orderedlist>
</sect3> </sect3>
@ -536,12 +550,11 @@
of interest to you. Updates are generated on the fly by the server, of interest to you. Updates are generated on the fly by the server,
according to what you have and what you want to have. according to what you have and what you want to have.
<application>Anonymous CVS</application> is quite a bit more <application>Anonymous CVS</application> is quite a bit more
simplistic than <application>CVSup</application> in that it is just an extension to simplistic than <application>CVSup</application> in that it is just an
<application>CVS</application> which allows it to pull changes extension to <application>CVS</application> which allows it to pull
directly from a remote CVS repository. changes directly from a remote CVS repository.
<application>CVSup</application> can do this far more efficiently, <application>CVSup</application> can do this far more efficiently,
but <application>Anonymous CVS</application> is easier to but <application>Anonymous CVS</application> is easier to use.</para>
use.</para>
<indexterm> <indexterm>
<primary><application>CTM</application></primary> <primary><application>CTM</application></primary>
@ -567,8 +580,10 @@
<application>CTM</application> will not do this, and if you wipe some <application>CTM</application> will not do this, and if you wipe some
portion of your source tree out (and do not have it backed up) then portion of your source tree out (and do not have it backed up) then
you will have to start from scratch (from the most recent CVS you will have to start from scratch (from the most recent CVS
<quote>base delta</quote>) and rebuild it all with <application>CTM</application> or, with <quote>base delta</quote>) and rebuild it all with
<application>Anonymous CVS</application>, simply delete the bad bits and resync.</para> <application>CTM</application> or, with
<application>Anonymous CVS</application>, simply delete the bad bits
and resync.</para>
</sect1> </sect1>
<sect1 id="makeworld"> <sect1 id="makeworld">
@ -579,8 +594,7 @@
</indexterm> </indexterm>
<para>Once you have synchronized your local source tree against a <para>Once you have synchronized your local source tree against a
particular version of &os; (&os.stable;, &os.current;, and so on) particular version of &os; (&os.stable;, &os.current;, and so on)
you can then use the source you can then use the source tree to rebuild the system.</para>
tree to rebuild the system.</para>
<warning> <warning>
<title>Make a Backup</title> <title>Make a Backup</title>
@ -593,9 +607,8 @@
source tree render your system unbootable.</para> source tree render your system unbootable.</para>
<para>Make sure you have taken a backup. And have a fixit floppy or <para>Make sure you have taken a backup. And have a fixit floppy or
bootable CD at bootable CD at hand. You will probably never have to use it, but it
hand. You will probably never have to use it, but it is better to be is better to be safe than sorry!</para>
safe than sorry!</para>
</warning> </warning>
<warning> <warning>
@ -619,9 +632,8 @@
solved.</para> solved.</para>
<para>If you try to track &os.stable; or &os.current; and do <para>If you try to track &os.stable; or &os.current; and do
not read the &a.stable; or the not read the &a.stable; or the &a.current; respectively, then you
&a.current; respectively, then you are are asking for trouble.</para>
asking for trouble.</para>
</warning> </warning>
<warning> <warning>
@ -693,8 +705,8 @@
<important> <important>
<para>Reading <filename>UPDATING</filename> is not an acceptable <para>Reading <filename>UPDATING</filename> is not an acceptable
substitute for subscribing to the correct mailing list, as described substitute for subscribing to the correct mailing list, as
previously. The two requirements are complementary, not described previously. The two requirements are complementary, not
exclusive.</para> exclusive.</para>
</important> </important>
</sect2> </sect2>
@ -706,8 +718,7 @@
</indexterm> </indexterm>
<para>Examine the files <para>Examine the files
<filename>/usr/share/examples/etc/make.conf</filename> <filename>/usr/share/examples/etc/make.conf</filename> and
and
<filename>/etc/make.conf</filename>. The first contains some <filename>/etc/make.conf</filename>. The first contains some
default defines &ndash; most of which are commented out. To default defines &ndash; most of which are commented out. To
make use of them when you rebuild your system from source, add make use of them when you rebuild your system from source, add
@ -720,8 +731,7 @@
<makevar>CFLAGS</makevar> and <makevar>CFLAGS</makevar> and
<makevar>NO_PROFILE</makevar> lines found in <makevar>NO_PROFILE</makevar> lines found in
<filename>/usr/share/examples/etc/make.conf</filename> <filename>/usr/share/examples/etc/make.conf</filename>
to to <filename>/etc/make.conf</filename> and uncomment them.</para>
<filename>/etc/make.conf</filename> and uncomment them.</para>
<para>Examine the other definitions (<makevar>COPTFLAGS</makevar>, <para>Examine the other definitions (<makevar>COPTFLAGS</makevar>,
<makevar>NOPORTDOCS</makevar> and so <makevar>NOPORTDOCS</makevar> and so
@ -741,15 +751,14 @@
<filename>/etc/group</filename>.</para> <filename>/etc/group</filename>.</para>
<para>There have been occasions when the installation part of <para>There have been occasions when the installation part of
<command>make installworld</command> has expected certain usernames or groups <command>make installworld</command> has expected certain usernames
to exist. When performing an upgrade it is likely that these or groups to exist. When performing an upgrade it is likely that
users or groups did not exist. This caused problems when upgrading. these users or groups did not exist. This caused problems when
In some cases <command>make buildworld</command> will check to see if upgrading. In some cases <command>make buildworld</command> will
these users or groups exist.</para> check to see if these users or groups exist.</para>
<para>An example of this is when the <para>An example of this is when the <username>smmsp</username> user
<username>smmsp</username> user was added. Users had the was added. Users had the installation process fail for them when
installation process fail for them when
&man.mtree.8; was trying to create &man.mtree.8; was trying to create
<filename>/var/spool/clientmqueue</filename>.</para> <filename>/var/spool/clientmqueue</filename>.</para>
@ -806,8 +815,8 @@
mode.</para> mode.</para>
<para>Alternatively, reboot the system, and at the boot prompt, <para>Alternatively, reboot the system, and at the boot prompt,
select the <quote>single user</quote> option. The system will then boot select the <quote>single user</quote> option. The system will then
single user. At the shell prompt you should then run:</para> boot single user. At the shell prompt you should then run:</para>
<screen>&prompt.root; <userinput>fsck -p</userinput> <screen>&prompt.root; <userinput>fsck -p</userinput>
&prompt.root; <userinput>mount -u /</userinput> &prompt.root; <userinput>mount -u /</userinput>
@ -818,20 +827,18 @@
read/write, mounts all the other UFS file systems referenced in read/write, mounts all the other UFS file systems referenced in
<filename>/etc/fstab</filename> and then turns swapping on.</para> <filename>/etc/fstab</filename> and then turns swapping on.</para>
<note> <note>
<para>If your CMOS clock is set to local time and not to GMT <para>If your CMOS clock is set to local time and not to GMT
(this is true if the output of the &man.date.1; command (this is true if the output of the &man.date.1; command
does not show the correct time and zone), does not show the correct time and zone),
you may also need to run the following command:</para> you may also need to run the following command:</para>
<screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen>
<screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen>
<para>This will make sure that your local time-zone settings <para>This will make sure that your local time-zone settings
get set up correctly &mdash; without this, you may later run into some get set up correctly &mdash; without this, you may later run
problems. into some problems.</para>
</para>
</note> </note>
</sect2> </sect2>
<sect2> <sect2>
@ -842,8 +849,8 @@
<filename>/usr/obj</filename>. The directories shadow those under <filename>/usr/obj</filename>. The directories shadow those under
<filename>/usr/src</filename>.</para> <filename>/usr/src</filename>.</para>
<para>You can speed up the <command>make buildworld</command> process, and <para>You can speed up the <command>make buildworld</command> process,
possibly save yourself some dependency headaches by removing this and possibly save yourself some dependency headaches by removing this
directory as well.</para> directory as well.</para>
<para>Some files below <filename>/usr/obj</filename> may have the <para>Some files below <filename>/usr/obj</filename> may have the
@ -953,25 +960,26 @@ Script done, &hellip;</screen>
<para>As the names imply, <maketarget>buildworld</maketarget> <para>As the names imply, <maketarget>buildworld</maketarget>
builds a complete new tree under <filename>/usr/obj</filename>, builds a complete new tree under <filename>/usr/obj</filename>,
and <maketarget>installworld</maketarget>, another target, installs this tree on and <maketarget>installworld</maketarget>, another target,
the current machine.</para> installs this tree on the current machine.</para>
<para>Having separate options is very useful for two reasons. First, it allows you <para>Having separate options is very useful for two reasons. First,
to do the build safe in the knowledge that no components of it allows you to do the build safe in the knowledge that no
your running system will be affected. The build is components of your running system will be affected. The build is
<quote>self hosted</quote>. Because of this, you can safely <quote>self hosted</quote>. Because of this, you can safely
run <maketarget>buildworld</maketarget> on a machine running run <maketarget>buildworld</maketarget> on a machine running
in multi-user mode with no fear of ill-effects. It is still in multi-user mode with no fear of ill-effects. It is still
recommended that you run the recommended that you run the <maketarget>installworld</maketarget>
<maketarget>installworld</maketarget> part in single user part in single user mode, though.</para>
mode, though.</para>
<para>Secondly, it allows you to use NFS mounts to upgrade <para>Secondly, it allows you to use NFS mounts to upgrade
multiple machines on your network. If you have three machines, multiple machines on your network. If you have three machines,
<hostid>A</hostid>, <hostid>B</hostid> and <hostid>C</hostid> that you want to upgrade, run <command>make <hostid>A</hostid>, <hostid>B</hostid> and <hostid>C</hostid> that
buildworld</command> and <command>make installworld</command> on you want to upgrade, run <command>make buildworld</command> and
<hostid>A</hostid>. <hostid>B</hostid> and <hostid>C</hostid> should then NFS mount <filename>/usr/src</filename> <command>make installworld</command> on <hostid>A</hostid>.
and <filename>/usr/obj</filename> from <hostid>A</hostid>, and you can then run <hostid>B</hostid> and <hostid>C</hostid> should then NFS mount
<filename>/usr/src</filename> and <filename>/usr/obj</filename>
from <hostid>A</hostid>, and you can then run
<command>make installworld</command> to install the results of <command>make installworld</command> to install the results of
the build on <hostid>B</hostid> and <hostid>C</hostid>.</para> the build on <hostid>B</hostid> and <hostid>C</hostid>.</para>
@ -1042,8 +1050,10 @@ Script done, &hellip;</screen>
linkend="make-buildworld">build world</link> before building a linkend="make-buildworld">build world</link> before building a
new kernel.</para> new kernel.</para>
<note><para>If you want to build a custom kernel, and already have a configuration <note>
file, just use <literal>KERNCONF=<replaceable>MYKERNEL</replaceable></literal> <para>If you want to build a custom kernel, and already have a
configuration file, just use
<literal>KERNCONF=<replaceable>MYKERNEL</replaceable></literal>
like this:</para> like this:</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput> <screen>&prompt.root; <userinput>cd /usr/src</userinput>
@ -1085,11 +1095,11 @@ Script done, &hellip;</screen>
&prompt.root; <userinput>make installworld</userinput></screen> &prompt.root; <userinput>make installworld</userinput></screen>
<note> <note>
<para>If you specified variables on the <command>make <para>If you specified variables on the
buildworld</command> command line, you must specify the same <command>make buildworld</command> command line, you must specify
variables in the <command>make installworld</command> command the same variables in the <command>make installworld</command>
line. This does not necessarily hold true for other options; command line. This does not necessarily hold true for other
for example, <option>-j</option> must never be used with options; for example, <option>-j</option> must never be used with
<maketarget>installworld</maketarget>.</para> <maketarget>installworld</maketarget>.</para>
<para>For example, if you ran:</para> <para>For example, if you ran:</para>
@ -1111,7 +1121,8 @@ Script done, &hellip;</screen>
<para>Remaking the world will not update certain directories (in <para>Remaking the world will not update certain directories (in
particular, <filename>/etc</filename>, <filename>/var</filename> and particular, <filename>/etc</filename>, <filename>/var</filename> and
<filename>/usr</filename>) with new or changed configuration files.</para> <filename>/usr</filename>) with new or changed configuration
files.</para>
<para>The simplest way to update these files is to use <para>The simplest way to update these files is to use
&man.mergemaster.8;, though it is possible to do it manually &man.mergemaster.8;, though it is possible to do it manually
@ -1133,58 +1144,64 @@ Script done, &hellip;</screen>
<indexterm><primary><command>mergemaster</command></primary></indexterm> <indexterm><primary><command>mergemaster</command></primary></indexterm>
<para>The &man.mergemaster.8; utility is a Bourne script that will <para>The &man.mergemaster.8; utility is a Bourne script that will
aid you in determining the differences between your configuration files aid you in determining the differences between your configuration
in <filename>/etc</filename>, and the configuration files in files in <filename>/etc</filename>, and the configuration files in
the source tree <filename>/usr/src/etc</filename>. This is the source tree <filename>/usr/src/etc</filename>. This is
the recommended solution for keeping the system configuration files up to date the recommended solution for keeping the system configuration files
with those located in the source tree.</para> up to date with those located in the source tree.</para>
<para>To begin simply type <command>mergemaster</command> at your prompt, and <para>To begin simply type <command>mergemaster</command> at your
watch it start going. <command>mergemaster</command> will then build a prompt, and watch it start going. <command>mergemaster</command>
temporary root environment, from <filename>/</filename> down, and populate will then build a temporary root environment, from
it with various system configuration files. Those files are then compared <filename>/</filename> down, and populate it with various system
to the ones currently installed in your system. At this point, files that configuration files. Those files are then compared to the ones
differ will be shown in &man.diff.1; format, with the <option>+</option> sign currently installed in your system. At this point, files that
representing added or modified lines, and <option>-</option> representing differ will be shown in &man.diff.1; format, with the
lines that will be either removed completely, or replaced with a new line. <option>+</option> sign representing added or modified lines, and
See the &man.diff.1; manual page for more information about the &man.diff.1; <option>-</option> representing lines that will be either removed
syntax and how file differences are shown.</para> completely, or replaced with a new line. See the &man.diff.1;
manual page for more information about the &man.diff.1; syntax and
how file differences are shown.</para>
<para>&man.mergemaster.8; will then show you each file that displays variances, <para>&man.mergemaster.8; will then show you each file that displays
and at this point you will have the option of either deleting the new file (referred variances, and at this point you will have the option of either
to as the temporary file), installing the temporary file in its unmodified state, deleting the new file (referred to as the temporary file),
merging the temporary file with the currently installed file, or viewing the installing the temporary file in its unmodified state, merging the
temporary file with the currently installed file, or viewing the
&man.diff.1; results again.</para> &man.diff.1; results again.</para>
<para>Choosing to delete the temporary file will tell &man.mergemaster.8; that we <para>Choosing to delete the temporary file will tell
wish to keep our current file unchanged, and to delete the new version. &man.mergemaster.8; that we wish to keep our current file
This option is not recommended, unless you see no unchanged, and to delete the new version. This option is not
reason to change the current file. You can get help at any time by recommended, unless you see no reason to change the current file.
typing <keycap>?</keycap> at the &man.mergemaster.8; prompt. If the user You can get help at any time by typing <keycap>?</keycap> at the
chooses to skip a file, it will be presented again after all other files &man.mergemaster.8; prompt. If the user chooses to skip a file,
have been dealt with.</para> it will be presented again after all other files have been dealt
with.</para>
<para>Choosing to install the unmodified temporary file will replace the <para>Choosing to install the unmodified temporary file will replace
current file with the new one. For most unmodified files, this is the best the current file with the new one. For most unmodified files,
option.</para> this is the best option.</para>
<para>Choosing to merge the file will present you with a text editor, <para>Choosing to merge the file will present you with a text editor,
and the contents of both files. You can now merge them by and the contents of both files. You can now merge them by
reviewing both files side by side on the screen, and choosing parts from reviewing both files side by side on the screen, and choosing parts
both to create a finished product. When the files are compared side by side, from both to create a finished product. When the files are
the <keycap>l</keycap> key will select the left contents and the compared side by side, the <keycap>l</keycap> key will select the
<keycap>r</keycap> key will select contents from your right. left contents and the <keycap>r</keycap> key will select contents
The final output will be a file consisting of both parts, which can then be from your right. The final output will be a file consisting of
installed. This option is customarily used for files where settings have been both parts, which can then be installed. This option is
modified by the user.</para> customarily used for files where settings have been modified by
the user.</para>
<para>Choosing to view the &man.diff.1; results again will show you the file differences <para>Choosing to view the &man.diff.1; results again will show you
just like &man.mergemaster.8; did before prompting you for an option.</para> the file differences just like &man.mergemaster.8; did before
prompting you for an option.</para>
<para>After &man.mergemaster.8; is done with the system files you will be <para>After &man.mergemaster.8; is done with the system files you
prompted for other options. &man.mergemaster.8; may ask if you want to rebuild will be prompted for other options. &man.mergemaster.8; may ask
the password file and will finish up with an option to if you want to rebuild the password file and will finish up with
remove left-over temporary files.</para> an option to remove left-over temporary files.</para>
</sect3> </sect3>
<sect3> <sect3>
@ -1201,8 +1218,8 @@ Script done, &hellip;</screen>
not in <filename>/usr/src/etc</filename>.</para> not in <filename>/usr/src/etc</filename>.</para>
<para>If you are using &man.mergemaster.8; (as recommended), <para>If you are using &man.mergemaster.8; (as recommended),
you can skip forward to the <link linkend="cutting-edge-rebooting">next you can skip forward to the <link
section</link>.</para> linkend="cutting-edge-rebooting">next section</link>.</para>
<para>The simplest way to do this by hand is to install the <para>The simplest way to do this by hand is to install the
files into a new directory, and then work through them looking files into a new directory, and then work through them looking
@ -1232,8 +1249,8 @@ Script done, &hellip;</screen>
&prompt.root; <userinput>cd /usr/src/etc</userinput> &prompt.root; <userinput>cd /usr/src/etc</userinput>
&prompt.root; <userinput>make DESTDIR=/var/tmp/root distrib-dirs distribution</userinput></screen> &prompt.root; <userinput>make DESTDIR=/var/tmp/root distrib-dirs distribution</userinput></screen>
<para>This will build the necessary directory structure and install the <para>This will build the necessary directory structure and install
files. A lot of the subdirectories that have been created under the files. A lot of the subdirectories that have been created under
<filename>/var/tmp/root</filename> are empty and should be deleted. <filename>/var/tmp/root</filename> are empty and should be deleted.
The simplest way to do this is to:</para> The simplest way to do this is to:</para>
@ -1244,29 +1261,29 @@ Script done, &hellip;</screen>
redirected to <filename>/dev/null</filename> to prevent the warnings redirected to <filename>/dev/null</filename> to prevent the warnings
about the directories that are not empty.)</para> about the directories that are not empty.)</para>
<para><filename>/var/tmp/root</filename> now contains all the files that <para><filename>/var/tmp/root</filename> now contains all the files
should be placed in appropriate locations below that should be placed in appropriate locations below
<filename>/</filename>. You now have to go through each of these <filename>/</filename>. You now have to go through each of these
files, determining how they differ with your existing files.</para> files, determining how they differ with your existing files.</para>
<para>Note that some of the files that will have been installed in <para>Note that some of the files that will have been installed in
<filename>/var/tmp/root</filename> have a leading <quote>.</quote>. At the <filename>/var/tmp/root</filename> have a leading <quote>.</quote>.
time of writing the only files like this are shell startup files in At the time of writing the only files like this are shell startup
<filename>/var/tmp/root/</filename> and files in <filename>/var/tmp/root/</filename> and
<filename>/var/tmp/root/root/</filename>, although there may be others <filename>/var/tmp/root/root/</filename>, although there may be
(depending on when you are reading this). Make sure you use others (depending on when you are reading this). Make sure you use
<command>ls -a</command> to catch them.</para> <command>ls -a</command> to catch them.</para>
<para>The simplest way to do this is to use &man.diff.1; to compare the <para>The simplest way to do this is to use &man.diff.1; to compare
two files:</para> the two files:</para>
<screen>&prompt.root; <userinput>diff /etc/shells /var/tmp/root/etc/shells</userinput></screen> <screen>&prompt.root; <userinput>diff /etc/shells /var/tmp/root/etc/shells</userinput></screen>
<para>This will show you the differences between your <para>This will show you the differences between your
<filename>/etc/shells</filename> file and the new <filename>/etc/shells</filename> file and the new
<filename>/var/tmp/root/etc/shells</filename> file. Use these to decide whether to <filename>/var/tmp/root/etc/shells</filename> file. Use these to
merge in changes that you have made or whether to copy over your old decide whether to merge in changes that you have made or whether to
file.</para> copy over your old file.</para>
<tip> <tip>
<title>Name the New Root Directory <title>Name the New Root Directory
@ -1274,19 +1291,20 @@ Script done, &hellip;</screen>
Easily Compare Differences Between Versions</title> Easily Compare Differences Between Versions</title>
<para>Frequently rebuilding the world means that you have to update <para>Frequently rebuilding the world means that you have to update
<filename>/etc</filename> frequently as well, which can be a bit of <filename>/etc</filename> frequently as well, which can be a bit
a chore.</para> of a chore.</para>
<para>You can speed this process up by keeping a copy of the last set <para>You can speed this process up by keeping a copy of the last
of changed files that you merged into <filename>/etc</filename>. set of changed files that you merged into
The following procedure gives one idea of how to do this.</para> <filename>/etc</filename>. The following procedure gives one
idea of how to do this.</para>
<procedure> <procedure>
<step> <step>
<para>Make the world as normal. When you want to update <para>Make the world as normal. When you want to update
<filename>/etc</filename> and the other directories, give the <filename>/etc</filename> and the other directories, give the
target directory a name based on the current date. If you were target directory a name based on the current date. If you
doing this on the 14th of February 1998 you could do the were doing this on the 14th of February 1998 you could do the
following:</para> following:</para>
<screen>&prompt.root; <userinput>mkdir /var/tmp/root-19980214</userinput> <screen>&prompt.root; <userinput>mkdir /var/tmp/root-19980214</userinput>
@ -1308,14 +1326,14 @@ Script done, &hellip;</screen>
<para>When you have downloaded the latest version of the source <para>When you have downloaded the latest version of the source
and remade it, follow step 1. This will give you a new and remade it, follow step 1. This will give you a new
directory, which might be called directory, which might be called
<filename>/var/tmp/root-19980221</filename> (if you wait a week <filename>/var/tmp/root-19980221</filename> (if you wait a
between doing updates).</para> week between doing updates).</para>
</step> </step>
<step> <step>
<para>You can now see the differences that have been made in the <para>You can now see the differences that have been made in the
intervening week using &man.diff.1; to create a recursive diff intervening week using &man.diff.1; to create a recursive
between the two directories:</para> diff between the two directories:</para>
<screen>&prompt.root; <userinput>cd /var/tmp</userinput> <screen>&prompt.root; <userinput>cd /var/tmp</userinput>
&prompt.root; <userinput>diff -r root-19980214 root-19980221</userinput></screen> &prompt.root; <userinput>diff -r root-19980214 root-19980221</userinput></screen>
@ -1324,8 +1342,8 @@ Script done, &hellip;</screen>
than those between than those between
<filename>/var/tmp/root-19980221/etc</filename> and <filename>/var/tmp/root-19980221/etc</filename> and
<filename>/etc</filename>. Because the set of differences is <filename>/etc</filename>. Because the set of differences is
smaller, it is easier to migrate those changes across into your smaller, it is easier to migrate those changes across into
<filename>/etc</filename> directory.</para> your <filename>/etc</filename> directory.</para>
</step> </step>
<step> <step>
@ -1336,8 +1354,8 @@ Script done, &hellip;</screen>
</step> </step>
<step> <step>
<para>Repeat this process every time you need to merge in changes <para>Repeat this process every time you need to merge in
to <filename>/etc</filename>.</para> changes to <filename>/etc</filename>.</para>
</step> </step>
</procedure> </procedure>
@ -1386,8 +1404,9 @@ Script done, &hellip;</screen>
<answer> <answer>
<para>There is no easy answer to this one, as it depends on the <para>There is no easy answer to this one, as it depends on the
nature of the change. For example, if you just ran <application>CVSup</application>, and nature of the change. For example, if you just ran
it has shown the following files as being updated:</para> <application>CVSup</application>, and it has shown the
following files as being updated:</para>
<screen><filename>src/games/cribbage/instr.c</filename> <screen><filename>src/games/cribbage/instr.c</filename>
<filename>src/games/sail/pl_main.c</filename> <filename>src/games/sail/pl_main.c</filename>
@ -1424,7 +1443,6 @@ Script done, &hellip;</screen>
<indexterm><primary>signal 11</primary></indexterm> <indexterm><primary>signal 11</primary></indexterm>
<answer> <answer>
<para>This is normally indicative of hardware problems. <para>This is normally indicative of hardware problems.
(Re)making the world is an effective way to stress test your (Re)making the world is an effective way to stress test your
hardware, and will frequently throw up memory problems. These hardware, and will frequently throw up memory problems. These
@ -1451,20 +1469,20 @@ Script done, &hellip;</screen>
<para><filename>/usr/obj</filename> contains all the object files <para><filename>/usr/obj</filename> contains all the object files
that were produced during the compilation phase. Normally, one that were produced during the compilation phase. Normally, one
of the first steps in the <command>make buildworld</command> process is to of the first steps in the <command>make buildworld</command>
remove this directory and start afresh. In this case, keeping process is to remove this directory and start afresh. In this
<filename>/usr/obj</filename> around after you have finished case, keeping <filename>/usr/obj</filename> around after you
makes little sense, and will free up a large chunk of disk space have finished makes little sense, and will free up a large
(currently about 340&nbsp;MB).</para> chunk of disk space (currently about 340&nbsp;MB).</para>
<para>However, if you know what you are doing you can have <para>However, if you know what you are doing you can have
<command>make buildworld</command> skip this step. This will make subsequent <command>make buildworld</command> skip this step. This will
builds run much faster, since most of sources will not need to make subsequent builds run much faster, since most of sources
be recompiled. The flip side of this is that subtle dependency will not need to be recompiled. The flip side of this is that
problems can creep in, causing your build to fail in odd ways. subtle dependency problems can creep in, causing your build to
This frequently generates noise on the &os; mailing lists, fail in odd ways. This frequently generates noise on the &os;
when one person complains that their build has failed, not mailing lists, when one person complains that their build has
realizing that it is because they have tried to cut failed, not realizing that it is because they have tried to cut
corners.</para> corners.</para>
</answer> </answer>
</qandaentry> </qandaentry>
@ -1479,8 +1497,8 @@ Script done, &hellip;</screen>
you found a problem.</para> you found a problem.</para>
<para><emphasis>In general</emphasis> (and this is not a hard and <para><emphasis>In general</emphasis> (and this is not a hard and
fast rule) the <command>make buildworld</command> process builds new fast rule) the <command>make buildworld</command> process
copies of essential tools (such as &man.gcc.1;, and builds new copies of essential tools (such as &man.gcc.1;, and
&man.make.1;) and the system libraries. These tools and &man.make.1;) and the system libraries. These tools and
libraries are then installed. The new tools and libraries are libraries are then installed. The new tools and libraries are
then used to rebuild themselves, and are installed again. The then used to rebuild themselves, and are installed again. The
@ -1539,16 +1557,16 @@ Building everything..
</listitem> </listitem>
<listitem> <listitem>
<para>Turn off profiling (set <quote>NO_PROFILE=true</quote> in <para>Turn off profiling (set <quote>NO_PROFILE=true</quote>
<filename>/etc/make.conf</filename>). You almost certainly in <filename>/etc/make.conf</filename>). You almost
do not need it.</para> certainly do not need it.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Also in <filename>/etc/make.conf</filename>, set <para>Also in <filename>/etc/make.conf</filename>, set
<makevar>CFLAGS</makevar> to something like <option>-O <makevar>CFLAGS</makevar> to something like <option>-O
-pipe</option>. The optimization <option>-O2</option> is much -pipe</option>. The optimization <option>-O2</option>
slower, and the optimization difference between is much slower, and the optimization difference between
<option>-O</option> and <option>-O2</option> is normally <option>-O</option> and <option>-O2</option> is normally
negligible. <option>-pipe</option> lets the compiler use negligible. <option>-pipe</option> lets the compiler use
pipes rather than temporary files for communication, which pipes rather than temporary files for communication, which
@ -1556,17 +1574,19 @@ Building everything..
</listitem> </listitem>
<listitem> <listitem>
<para>Pass the <option>-j<replaceable>n</replaceable></option> option to &man.make.1; to <para>Pass the
run multiple processes in parallel. This usually helps <option>-j<replaceable>n</replaceable></option> option to
regardless of whether you have a single or a multi processor &man.make.1; to run multiple processes in parallel. This
machine.</para> usually helps regardless of whether you have a single or
a multi processor machine.</para>
</listitem> </listitem>
<listitem><para>The file system holding <listitem>
<filename>/usr/src</filename> can be mounted (or remounted) <para>The file system holding <filename>/usr/src</filename>
with the <option>noatime</option> option. This prevents the can be mounted (or remounted) with the
file system from recording the file access time. You probably <option>noatime</option> option. This prevents the
do not need this information anyway.</para> file system from recording the file access time.
You probably do not need this information anyway.</para>
<screen>&prompt.root; <userinput>mount -u -o noatime /usr/src</userinput></screen> <screen>&prompt.root; <userinput>mount -u -o noatime /usr/src</userinput></screen>
@ -1580,13 +1600,13 @@ Building everything..
</listitem> </listitem>
<listitem> <listitem>
<para>The file system holding <filename>/usr/obj</filename> can <para>The file system holding <filename>/usr/obj</filename>
be mounted (or remounted) with the <option>async</option> can be mounted (or remounted) with the
option. This causes disk writes to happen asynchronously. <option>async</option> option. This causes disk writes to
In other words, the write completes immediately, and the happen asynchronously. In other words, the write completes
data is written to the disk a few seconds later. This immediately, and the data is written to the disk a few
allows writes to be clustered together, and can be a seconds later. This allows writes to be clustered
dramatic performance boost.</para> together, and can be a dramatic performance boost.</para>
<warning> <warning>
<para>Keep in mind that this option makes your file system <para>Keep in mind that this option makes your file system
@ -1655,6 +1675,7 @@ Building everything..
</author> </author>
</authorgroup> </authorgroup>
</sect1info> </sect1info>
<title>Tracking for Multiple Machines</title> <title>Tracking for Multiple Machines</title>
<indexterm> <indexterm>
<primary>NFS</primary> <primary>NFS</primary>
@ -1765,4 +1786,3 @@ Building everything..
sgml-parent-document: ("../book.sgml" "part" "chapter") sgml-parent-document: ("../book.sgml" "part" "chapter")
End: End:
--> -->