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