diff options
Diffstat (limited to 'zh_CN.GB2312/books/handbook/cutting-edge/chapter.xml')
-rw-r--r-- | zh_CN.GB2312/books/handbook/cutting-edge/chapter.xml | 543 |
1 files changed, 227 insertions, 316 deletions
diff --git a/zh_CN.GB2312/books/handbook/cutting-edge/chapter.xml b/zh_CN.GB2312/books/handbook/cutting-edge/chapter.xml index 81f918a838..1e56474f26 100644 --- a/zh_CN.GB2312/books/handbook/cutting-edge/chapter.xml +++ b/zh_CN.GB2312/books/handbook/cutting-edge/chapter.xml @@ -6,55 +6,33 @@ Original Revision: 1.255 $FreeBSD$ --> - -<chapter id="updating-upgrading"> - <chapterinfo> +<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="updating-upgrading"> + <info><title>更新与升级 &os;</title> <authorgroup> - <author> - <firstname>Jim</firstname> - <surname>Mock</surname> - <contrib>重新组织和部分更新,由</contrib> - </author> + <author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>重新组织和部分更新,由</contrib></author> <!-- Mar 2000 --> </authorgroup> <authorgroup> - <author> - <firstname>Jordan</firstname> - <surname>Hubbard</surname> - <contrib>原创:</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> - </author> + <author><personname><firstname>Jordan</firstname><surname>Hubbard</surname></personname><contrib>原创:</contrib></author> + + <author><personname><firstname>Poul-Henning</firstname><surname>Kamp</surname></personname></author> + + <author><personname><firstname>John</firstname><surname>Polstra</surname></personname></author> + + <author><personname><firstname>Nik</firstname><surname>Clayton</surname></personname></author> </authorgroup> <authorgroup> - <author> - <firstname>张</firstname> - <surname>雪平</surname> - <contrib>中文翻译:</contrib> - </author> + <author><personname><firstname>张</firstname><surname>雪平</surname></personname><contrib>中文翻译:</contrib></author> </authorgroup> - <!-- with feedback from various others --> - </chapterinfo> + + </info> - <title>更新与升级 &os;</title> + - <sect1 id="updating-upgrading-synopsis"> + <sect1 xml:id="updating-upgrading-synopsis"> <title>概述</title> <para>&os; 在发行版之间始终是持续开发的。 一些人喜欢使用官方发行的版本, @@ -105,44 +83,34 @@ <para>在读本章这前,您应该了解的:</para> <itemizedlist> - <listitem><para>正确设置网络连接 (<xref - linkend="advanced-networking"/>)。</para> + <listitem><para>正确设置网络连接 (<xref linkend="advanced-networking"/>)。</para> </listitem> - <listitem><para>知道怎样安装附加的第三方软件(<xref - linkend="ports"/>)。</para></listitem> + <listitem><para>知道怎样安装附加的第三方软件(<xref linkend="ports"/>)。</para></listitem> </itemizedlist> <note> <para>整个这一章中,<command>cvsup</command> 命令都被用来获取 &os; 源代码的更新。 你需要安装 - <filename role="package">net/cvsup</filename> port + <package>net/cvsup</package> port 或者二进制包(如果你不想要安装图形界面的 <command>cvsup</command> 客户端的话, 则可以安装 - <filename role="package">net/cvsup-without-gui</filename> port)。 + <package>net/cvsup-without-gui</package> port)。 你也可以使用 &man.csup.1; 代替, 它现在已经是基本系统的一部分了。</para> </note> </sect1> - <sect1 id="updating-upgrading-freebsdupdate"> - <sect1info> + <sect1 xml:id="updating-upgrading-freebsdupdate"> + <info><title>FreeBSD 更新</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>Written by </contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Written by </contrib></author> </authorgroup> <authorgroup> - <author> - <firstname>Colin</firstname> - <surname>Percival</surname> - <contrib>Based on notes provided by </contrib> - </author> + <author><personname><firstname>Colin</firstname><surname>Percival</surname></personname><contrib>Based on notes provided by </contrib></author> </authorgroup> - </sect1info> - <title>FreeBSD 更新</title> + </info> + <indexterm><primary>Updating and Upgrading</primary></indexterm> <indexterm> @@ -167,14 +135,14 @@ 在升级到一个新的发行版本之前, 应先阅读一下当前发行版的声明, 因为它们可能包含有关于你期望升级版本的重要消息。 这些发行声明可以通过以下链接查阅: - <ulink url="http://www.FreeBSD.org/releases/"></ulink>。</para> + <uri xlink:href="http://www.FreeBSD.org/releases/">http://www.FreeBSD.org/releases/</uri>。</para> </note> <para>如果 <command>crontab</command> 中存在有用到 <command>freebsd-update</command> 特性的部分, 那么这些在开始以下操作前必须先被禁止。</para> - <sect2 id="freebsdupdate-config-file"> + <sect2 xml:id="freebsdupdate-config-file"> <title>配置文件</title> <para>有些用户可能希望通过调整配置文件 @@ -191,7 +159,7 @@ Components src world kernel</programlisting> 这些部件跟安装时的那些相同,举例来说, 在这里加入 <literal>world/games</literal> 就会允许打入游戏相关的补丁。 使用 <literal>src/bin</literal> 则是允许更新 - <filename class="directory">src/bin</filename> + <filename>src/bin</filename> 目录中的源代码。</para> <para>最好的选择是把这个选项保留为默认值, @@ -205,8 +173,8 @@ Components src world kernel</programlisting> IgnorePaths</programlisting> <para>添加路径,比如 - <filename class="directory">/bin</filename> 或者 - <filename class="directory">/sbin</filename> + <filename>/bin</filename> 或者 + <filename>/sbin</filename> 让这些指定的目录在更新过程中不被修改。 这个选项能够防止本地的修改被 <command>freebsd-update</command> 覆盖。</para> @@ -232,7 +200,7 @@ MergeChanges /etc/ /var/named/etc/</programlisting> 一系列的 &man.diff.1; 补丁类似于更少选项的 &man.mergemaster.8; 合并的选项是接受,打开一个文本编辑器,或者 <command>freebsd-update</command> 会被中止。 - 在不能确定的时候,请先备份 <filename class="directory">/etc</filename> + 在不能确定的时候,请先备份 <filename>/etc</filename> 然后接受合并。更多关于 <command>mergemaster</command> 的信息请参阅 <xref linkend="mergemaster"/>。</para> @@ -259,7 +227,7 @@ MergeChanges /etc/ /var/named/etc/</programlisting> 列表里的每一个文件。</para> </sect2> - <sect2 id="freebsdupdate-security-patches"> + <sect2 xml:id="freebsdupdate-security-patches"> <title>安全补丁</title> <para>安全补丁存储在远程的机器上, @@ -281,7 +249,7 @@ MergeChanges /etc/ /var/named/etc/</programlisting> 使用了 <option>cron</option> 参数, <command>freebsd-update</command> 仅检查是否存在更新。 如果有了新的补丁,就会自动下载到本地的磁盘, - 但不会自动给系统打上。<username>root</username> + 但不会自动给系统打上。<systemitem class="username">root</systemitem> 会收到一封电子邮件告知需手动安装补丁。</para> <para>如果出现了错误,可以使用下面的 @@ -297,14 +265,12 @@ MergeChanges /etc/ /var/named/etc/</programlisting> <para><command>freebsd-update</command> 工具只能自动更新 <filename>GENERIC</filename> 内核。 如果您使用自行联编的内核, 则在 <command>freebsd-update</command> 安装完更新的其余部分之后需要手工重新联编和安装内核。 不过, - <command>freebsd-update</command> 会检测并更新位于 <filename - class="directory">/boot/GENERIC</filename> (如果存在) 中的 + <command>freebsd-update</command> 会检测并更新位于 <filename>/boot/GENERIC</filename> (如果存在) 中的 <filename>GENERIC</filename> 内核, 即使它不是当前 (正在运行的) 系统的内核。</para> <note> - <para>保存一份 <filename>GENERIC</filename> 内核的副本到 <filename - class="directory">/boot/GENERIC</filename> 是一个明智的主意。 + <para>保存一份 <filename>GENERIC</filename> 内核的副本到 <filename>/boot/GENERIC</filename> 是一个明智的主意。 在诊断许多问题, 以及在 <xref linkend="freebsdupdate-upgrade"/> 中介绍的使用 <command>freebsd-update</command> 更新系统时会很有用。</para> @@ -330,33 +296,32 @@ MergeChanges /etc/ /var/named/etc/</programlisting> </note> </sect2> - <sect2 id="freebsdupdate-upgrade"> + <sect2 xml:id="freebsdupdate-upgrade"> <title>重大和次要的更新</title> <para>这个过程会删除旧的目标文件和库, 这将使大部分的第三方应用程序无法删除。 建议将所有安装的 ports 先删除然后重新安装,或者稍后使用 - <filename role="package">ports-mgmt/portupgrade</filename> + <package>ports-mgmt/portupgrade</package> 工具升级。 大多数用户将会使用如下命令尝试编译:</para> <screen>&prompt.root; <userinput>portupgrade -af</userinput></screen> <para>这将确保所有的东西都会被正确的重新安装。 - 请注意环境变量 <makevar>BATCH</makevar> 设置成 + 请注意环境变量 <varname>BATCH</varname> 设置成 <literal>yes</literal> 的话将在整个过程中对所有询问回答 <literal>yes</literal>,这会帮助在编译过程中免去人工的介入。</para> <para>如果正在使用的是定制的内核, 则升级操作会复杂一些。 - 您会需要将一份 <filename>GENERIC</filename> 内核的副本放到 <filename - class="directory">/boot/GENERIC</filename>。 如果系统中没有 + 您会需要将一份 <filename>GENERIC</filename> 内核的副本放到 <filename>/boot/GENERIC</filename>。 如果系统中没有 <filename>GENERIC</filename> 内核, 可以用以下两种方法之一来安装:</para> <itemizedlist> <listitem> <para>如果只联编过一次内核, 则位于 - <filename class="directory">/boot/kernel.old</filename> 中的内核, + <filename>/boot/kernel.old</filename> 中的内核, 就是 <filename>GENERIC</filename> 的那一个。 只需将这个目录改名为 - <filename class="directory">/boot/GENERIC</filename> 即可。</para> + <filename>/boot/GENERIC</filename> 即可。</para> </listitem> <listitem> @@ -364,14 +329,12 @@ MergeChanges /etc/ /var/named/etc/</programlisting> 内核。 将安装盘插入光驱, 并执行下列命令:</para> <screen>&prompt.root; <userinput>mount /cdrom</userinput> -&prompt.root; <userinput>cd /cdrom/<replaceable>X.Y-RELEASE</replaceable>/kernels</userinput> +&prompt.root; <userinput>cd /cdrom/X.Y-RELEASE/kernels</userinput> &prompt.root; <userinput>./install.sh GENERIC</userinput></screen> - <para>您需要将 <filename - class="directory"><replaceable>X.Y-RELEASE</replaceable></filename> + <para>您需要将 <filename>X.Y-RELEASE</filename> 替换为您正在使用的版本。 - <filename>GENERIC</filename> 内核默认情况下会安装到 <filename - class="directory">/boot/GENERIC</filename>。</para> + <filename>GENERIC</filename> 内核默认情况下会安装到 <filename>/boot/GENERIC</filename>。</para> </listitem> <listitem> @@ -441,7 +404,7 @@ before running "/usr/sbin/freebsd-update install"</screen> 文件可能会自动合并, 屏幕上也可能会给出一个编辑器, 用于手工完成合并操作。 在处理过程中, 合并成功的结果会显示给用户。 失败或被忽略的合并, 则会导致这一过程的终止。 用户可能会希望备份一份 - <filename class="directory">/etc</filename> 并在这之后手工合并重要的文件, + <filename>/etc</filename> 并在这之后手工合并重要的文件, 例如 <filename>master.passwd</filename> 和 <filename>group</filename>。</para> @@ -458,8 +421,7 @@ before running "/usr/sbin/freebsd-update install"</screen> <para>内核和内核模块会首先被打上补丁。 此时必须重新启动计算机。 如果您使用的是定制的内核, 请使用 &man.nextboot.8; - 命令来将下一次用于引导系统的内核 <filename - class="directory">/boot/GENERIC</filename> (它会被更新):</para> + 命令来将下一次用于引导系统的内核 <filename>/boot/GENERIC</filename> (它会被更新):</para> <screen>&prompt.root; <userinput>nextboot -k GENERIC</userinput></screen> @@ -492,7 +454,7 @@ before running "/usr/sbin/freebsd-update install"</screen> <para>现在需要重新编译和安装第三方软件。 这么做的原因是某些已安装的软件可能依赖于在升级过程中已删除的库。 - 可使用 <filename role="package">ports-mgmt/portupgrade</filename> + 可使用 <package>ports-mgmt/portupgrade</package> 自动化这个步骤,以如下的命令开始:</para> <screen>&prompt.root; <userinput>portupgrade -f ruby</userinput> @@ -513,7 +475,7 @@ before running "/usr/sbin/freebsd-update install"</screen> <para>重新启动机器进入新版本的 &os; 升级过程至此就完成了。</para> </sect2> - <sect2 id="freebsdupdate-system-comparison"> + <sect2 xml:id="freebsdupdate-system-comparison"> <title>系统状态对照</title> <para><command>freebsd-update</command> @@ -526,7 +488,7 @@ before running "/usr/sbin/freebsd-update install"</screen> <warning> <para>这个命令的名称是 <acronym>IDS</acronym>, 它并不是一个像 - <filename role="package">security/snort</filename> + <package>security/snort</package> 这样的入侵检测系统的替代品。因为 <command>freebsd-update</command> 在磁盘上存储数据, 很显然它们有被篡改的可能。 @@ -567,24 +529,16 @@ before running "/usr/sbin/freebsd-update install"</screen> </sect2> </sect1> - <sect1 id="updating-upgrading-portsnap"> - <sect1info> + <sect1 xml:id="updating-upgrading-portsnap"> + <info><title>Portsnap: 一个 Ports Collection 更新工具</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>Written by </contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Written by </contrib></author> </authorgroup> <authorgroup> - <author> - <firstname>Colin</firstname> - <surname>Percival</surname> - <contrib>Based on notes provided by </contrib> - </author> + <author><personname><firstname>Colin</firstname><surname>Percival</surname></personname><contrib>Based on notes provided by </contrib></author> </authorgroup> - </sect1info> - <title>Portsnap: 一个 Ports Collection 更新工具</title> + </info> + <indexterm><primary>Updating and Upgrading</primary></indexterm> <indexterm> @@ -649,11 +603,11 @@ Fetching 133 new ports or files... done.</screen> <screen>&prompt.root; <userinput>portsnap fetch update</userinput></screen> <para>这个命令将会下载最新版本的 Ports 并更新本地位于 - <filename class="directory">/usr/ports</filename> + <filename>/usr/ports</filename> 的拷贝。</para> </sect1> - <sect1 id="updating-upgrading-documentation"> + <sect1 xml:id="updating-upgrading-documentation"> <title>更新系统附带的文档</title> <indexterm><primary>更新和升级</primary></indexterm> @@ -664,12 +618,11 @@ Fetching 133 new ports or files... done.</screen> </indexterm> <para>除了基本系统和 Ports 套件之外, 文档也是 &os; 操作系统的一个组成部分。 - 尽管您总是可以通过 <ulink - url="http://www.freebsd.org/doc/">&os; 网站</ulink> 来访问最新的 &os; + 尽管您总是可以通过 <link xlink:href="http://www.freebsd.org/doc/">&os; 网站</link> 来访问最新的 &os; 文档, 一些用户的网络连接可能很慢, 甚至完全没有网络连接。 幸运的是, 有很多方法可以用来更新随发行版本附带的 &os; 文档的本地副本。</para> - <sect2 id="csup-doc"> + <sect2 xml:id="csup-doc"> <title>使用 CVSup 来更新文档</title> <para>&os; 文档的源代码和安装版本都可以通过 <application>CVSup</application> @@ -684,12 +637,12 @@ Fetching 133 new ports or files... done.</screen> <listitem> <para>如何使用 <application>CVSup</application> - 将文档下载到 <filename class="directory">/usr/doc</filename>。</para> + 将文档下载到 <filename>/usr/doc</filename>。</para> </listitem> <listitem> <para>如何从源代码联编 &os; 文档, - 并将其安装到 <filename class="directory">/usr/share/doc</filename>。</para> + 并将其安装到 <filename>/usr/share/doc</filename>。</para> </listitem> <listitem> @@ -699,7 +652,7 @@ Fetching 133 new ports or files... done.</screen> </itemizedlist> </sect2> - <sect2 id="installing-documentation-toolchain"> + <sect2 xml:id="installing-documentation-toolchain"> <title>安装 CVSup 和文档工具集</title> <para>从源代码联编 &os; 文档需要大量的工具。 @@ -710,15 +663,13 @@ Fetching 133 new ports or files... done.</screen> 或经常从源代码更新文档的用户才需要这些工具。</para> <para>全部所需的工具, 均可通过 Ports - 套件来安装。 <filename - role="package">textproc/docproj</filename> port 是由 + 套件来安装。 <package>textproc/docproj</package> port 是由 &os; 文档计划开发的方便安装和更新这些工具的主 port。</para> <note> <para>如果不需要 &postscript; 或 PDF 文档的话, - 也可以考虑安装 <filename - role="package">textproc/docproj-nojadetex</filename> port。 + 也可以考虑安装 <package>textproc/docproj-nojadetex</package> port。 这套文档工具集包含除了 <application>teTeX</application> typesetting 引擎之外的其他全部工具。 <application>teTeX</application> 是一个很大的工具集, 因此如果不需要 PDF 输出的话, @@ -726,11 +677,10 @@ Fetching 133 new ports or files... done.</screen> </note> <para>如欲了解关于安装和使用 - <application>CVSup</application> 的进一步信息, 请参阅 <link - linkend="cvsup">使用 CVSup</link>。</para> + <application>CVSup</application> 的进一步信息, 请参阅 <link linkend="cvsup">使用 CVSup</link>。</para> </sect2> - <sect2 id="updating-documentation-sources"> + <sect2 xml:id="updating-documentation-sources"> <title>更新文档源代码</title> <para><application>CVSup</application> 工具能够下载文档源代码的原始副本, @@ -741,11 +691,10 @@ Fetching 133 new ports or files... done.</screen> 因此文档源代码可以使用下面的命令从 <application>CVSup</application> 服务器获得:</para> - <screen>&prompt.root; <userinput>cvsup -h <replaceable>cvsup.FreeBSD.org</replaceable> -g -L 2 <filename>/usr/share/examples/cvsup/doc-supfile</filename></userinput></screen> + <screen>&prompt.root; <userinput>cvsup -h cvsup.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/doc-supfile</userinput></screen> <para>您应将 <replaceable>cvsup.FreeBSD.org</replaceable> - 改为最近的 <application>CVSup</application> 服务器。 参见 <xref - linkend="cvsup-mirrors"/> 关于镜像站点的完整列表。</para> + 改为最近的 <application>CVSup</application> 服务器。 参见 <xref linkend="cvsup-mirrors"/> 关于镜像站点的完整列表。</para> <para>初始的文档源代码下载需要一些时间, 您需要耐心等待它完成。</para> @@ -754,12 +703,11 @@ Fetching 133 new ports or files... done.</screen> 由于 <application>CVSup</application> 工具只下载上次运行之后所发生过的更新, 因此在首次运行之后再运行 <application>CVSup</application> 应该是很快的。</para> - <para>在签出源代码之后, 还可以使用另一种由 <filename - class="directory">/usr/doc</filename> 目录中的 + <para>在签出源代码之后, 还可以使用另一种由 <filename>/usr/doc</filename> 目录中的 <filename>Makefile</filename> 支持的方法来更新它。 通过在 <filename>/etc/make.conf</filename> 中配置 - <makevar>SUP_UPDATE</makevar>、 <makevar>SUPHOST</makevar> 和 - <makevar>DOCSUPFILE</makevar>, 可以通过运行:</para> + <varname>SUP_UPDATE</varname>、 <varname>SUPHOST</varname> 和 + <varname>DOCSUPFILE</varname>, 可以通过运行:</para> <screen>&prompt.root; <userinput>cd /usr/doc</userinput> &prompt.root; <userinput>make update</userinput></screen> @@ -772,15 +720,15 @@ SUPHOST?= cvsup.freebsd.org DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <note> - <para>将 <makevar>SUPHOST</makevar> - 和 <makevar>DOCSUPFILE</makevar> 的值使用 <literal>?=</literal> + <para>将 <varname>SUPHOST</varname> + 和 <varname>DOCSUPFILE</varname> 的值使用 <literal>?=</literal> 来指定的好处是使 make 命令行能够覆盖这些选项。 在向 <filename>make.conf</filename> 中增加选项时推荐这样做, 以避免在测试时反复修改这个文件。</para> </note> </sect2> - <sect2 id="updating-documentation-options"> + <sect2 xml:id="updating-documentation-options"> <title>文档源代码中可调的选项</title> <para>&os; 文档的更新和联编系统支持一些方便只更新一部分文档, @@ -792,7 +740,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <variablelist> <varlistentry> - <term><makevar>DOC_LANG</makevar></term> + <term><varname>DOC_LANG</varname></term> <listitem> <para>准备联编和安装的语言列表。 @@ -801,7 +749,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </varlistentry> <varlistentry> - <term><makevar>FORMATS</makevar></term> + <term><varname>FORMATS</varname></term> <listitem> <para>准备输出的格式列表。 目前, @@ -813,7 +761,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </varlistentry> <varlistentry> - <term><makevar>SUPHOST</makevar></term> + <term><varname>SUPHOST</varname></term> <listitem> <para>用于用来更新的 <application>CVSup</application> @@ -822,69 +770,64 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </varlistentry> <varlistentry> - <term><makevar>DOCDIR</makevar></term> + <term><varname>DOCDIR</varname></term> <listitem> <para>用于安装文档的目录。 默认为 - <filename - class="directory">/usr/share/doc</filename>。</para> + <filename>/usr/share/doc</filename>。</para> </listitem> </varlistentry> </variablelist> <para>如欲了解 &os; 中其他可供配置的全局 make 变量, 请参阅 &man.make.conf.5;。</para> - <para>关于 &os; 文档联编系统的其他详情, 请参阅 <ulink url="&url.doc.langbase;/books/fdp-primer">&os; - 文档计划入门之新手必读部分</ulink>。</para> + <para>关于 &os; 文档联编系统的其他详情, 请参阅 <link xlink:href="&url.doc.langbase;/books/fdp-primer">&os; + 文档计划入门之新手必读部分</link>。</para> </sect2> - <sect2 id="updating-installed-documentation"> + <sect2 xml:id="updating-installed-documentation"> <title>从源代码安装 &os; 文档</title> - <para>在 <filename class="directory">/usr/doc</filename> + <para>在 <filename>/usr/doc</filename> 中下载了最新的文档源代码快照之后, 就可以开始动手联编文档了。</para> - <para>要更新全部 <makevar>DOC_LANG</makevar> 中定义的语言的文档, + <para>要更新全部 <varname>DOC_LANG</varname> 中定义的语言的文档, 需要执行下面的命令:</para> <screen>&prompt.root; <userinput>cd /usr/doc</userinput> &prompt.root; <userinput>make install clean</userinput></screen> <para>如果在 <filename>make.conf</filename> 中配置了正确的 - <makevar>DOCSUPFILE</makevar>、 <makevar>SUPHOST</makevar> - 和 <makevar>SUP_UPDATE</makevar> 选项, + <varname>DOCSUPFILE</varname>、 <varname>SUPHOST</varname> + 和 <varname>SUP_UPDATE</varname> 选项, 则可以将更新源代码和安装一步完成:</para> <screen>&prompt.root; <userinput>cd /usr/doc</userinput> &prompt.root; <userinput>make update install clean</userinput></screen> <para>如果只需要更新某个特定语言的文档, 可以在 - <filename class="directory">/usr/doc</filename> 中与之对应的目录中运行 + <filename>/usr/doc</filename> 中与之对应的目录中运行 &man.make.1;:</para> <screen>&prompt.root; <userinput>cd /usr/doc/en_US.ISO8859-1</userinput> &prompt.root; <userinput>make update install clean</userinput></screen> - <para>此外, 还可以透过 make 变量 <makevar>FORMATS</makevar> 来控制输出格式, + <para>此外, 还可以透过 make 变量 <varname>FORMATS</varname> 来控制输出格式, 例如:</para> <screen>&prompt.root; <userinput>cd /usr/doc</userinput> &prompt.root; <userinput>make FORMATS='html html-split' install clean</userinput></screen> </sect2> - <sect2 id="doc-ports"> - <sect2info> + <sect2 xml:id="doc-ports"> + <info><title>使用文档 Ports</title> <authorgroup> - <author> - <firstname>Marc</firstname> - <surname>Fonvieille</surname> - <contrib>原作: </contrib> - </author> + <author><personname><firstname>Marc</firstname><surname>Fonvieille</surname></personname><contrib>原作: </contrib></author> </authorgroup> - </sect2info> + </info> - <title>使用文档 Ports</title> + <indexterm><primary>Updating and Upgrading</primary></indexterm> @@ -914,10 +857,10 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <para>这两种更新 &os; 文档的方法都由一组 &a.doceng; 每月更新的 <emphasis>文档 ports</emphasis> 提供支持。 这些都列在了 &os; - Ports <ulink url="http://www.freshports.org/docs/">docs</ulink> + Ports <link xlink:href="http://www.freshports.org/docs/">docs</link> 虚拟分类下面。</para> - <sect3 id="doc-ports-install-make"> + <sect3 xml:id="doc-ports-install-make"> <title>编译和安装文档 Ports</title> <para>文档 ports 使用 ports 的构建框架使得文档的编译变得更加容易。 @@ -936,37 +879,37 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <itemizedlist> <listitem> <para>一个 <quote>主 port</quote>, 在 - <filename role="package">misc/freebsd-doc-en</filename> + <package>misc/freebsd-doc-en</package> 下可以找到这个文档 port。 它是所有文档 ports 的基础。 在默认的情况下, 它只安装英文版文档。</para> </listitem> <listitem> <para>一个 <quote>合集 port</quote>, - <filename role="package">misc/freebsd-doc-all</filename>, + <package>misc/freebsd-doc-all</package>, 它将构建并安装所有语言版本的所有文档。</para> </listitem> <listitem> <para>最后是各种翻译的 <quote>从属 port</quote>, 比如: - <filename role="package">misc/freebsd-doc-hu</filename> + <package>misc/freebsd-doc-hu</package> 是匈牙利文版的文档。 所有这些都基于主 port 并会安装上对应语言的翻译文档。</para> </listitem> </itemizedlist> - <para>以 <username>root</username> + <para>以 <systemitem class="username">root</systemitem> 用户身份运行如下的命令安装文档:</para> <screen>&prompt.root; <userinput>cd /usr/ports/misc/freebsd-doc-en</userinput> &prompt.root; <userinput>make install clean</userinput></screen> <para>这将会安装分章节的英文版本 <acronym>HTML</acronym> 格式文档 - (与<ulink url="http://www.FreeBSD.org"></ulink> 上的相同) 到 - <filename class="directory">/usr/local/share/doc/freebsd</filename> + (与<uri xlink:href="http://www.FreeBSD.org">http://www.FreeBSD.org</uri> 上的相同) 到 + <filename>/usr/local/share/doc/freebsd</filename> 目录。</para> - <sect4 id="doc-ports-options"> + <sect4 xml:id="doc-ports-options"> <title>常见的调节选项</title> <para>文档 ports 有许多用来修改默认行为的选项。 @@ -974,7 +917,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <variablelist> <varlistentry> - <term><makevar>WITH_HTML</makevar></term> + <term><varname>WITH_HTML</varname></term> <listitem> <para>允许构建 HTML 格式: 每份文档为一个单一的 HTML 文件。 @@ -986,7 +929,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </varlistentry> <varlistentry> - <term><makevar>WITH_PDF</makevar></term> + <term><varname>WITH_PDF</varname></term> <listitem> <para>允许构建 &adobe; Portable Document Format, @@ -999,17 +942,16 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </varlistentry> <varlistentry> - <term><makevar>DOCBASE</makevar></term> + <term><varname>DOCBASE</varname></term> <listitem> - <para>文档将被安装到的目录。默认值 <filename - class="directory">/usr/local/share/doc/freebsd</filename>。</para> + <para>文档将被安装到的目录。默认值 <filename>/usr/local/share/doc/freebsd</filename>。</para> <note> <para>请注意默认的目录与 <application>CVSup</application> 方法种所使用的目录不同。 这是因为我们正在安装的是一个 port, 而 ports 通常会被安装到 - <filename class="directory">/usr/local</filename> 目录。 - 这可以指定 <makevar>PREFIX</makevar> 变量覆盖默认值。</para> + <filename>/usr/local</filename> 目录。 + 这可以指定 <varname>PREFIX</varname> 变量覆盖默认值。</para> </note> </listitem> </varlistentry> @@ -1023,7 +965,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </sect4> </sect3> - <sect3 id="doc-ports-install-package"> + <sect3 xml:id="doc-ports-install-package"> <title>使用文档 Packages</title> <para>正如上文所述, 从 ports @@ -1046,19 +988,18 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <note> <para>二进制包使用了以下与对应 ports 名称不同的命名格式: - <literal><replaceable>lang</replaceable>-freebsd-doc</literal>。 + <literal>lang-freebsd-doc</literal>。 这里的 <replaceable>lang</replaceable> 是语言代码的简短形式, 比如 <literal>hu</literal> 表示匈牙利语, 或者 <literal>zh_cn</literal> 表示简体中文。</para> </note> </sect3> - <sect3 id="doc-ports-update"> + <sect3 xml:id="doc-ports-update"> <title>更新文档 Ports</title> <para>任何用于更新 ports 的工具都可以被用来更新已安装的文档 port。 - 举例来说, 下面的命令通过 <filename - role="package">ports-mgmt/portupgrade</filename> + 举例来说, 下面的命令通过 <package>ports-mgmt/portupgrade</package> 工具来更新已安装的匈牙利语文档二进制包。</para> <screen>&prompt.root; <userinput>portupgrade -PP hu-freebsd-doc</userinput></screen> @@ -1066,7 +1007,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </sect2> </sect1> - <sect1 id="current-stable"> + <sect1 xml:id="current-stable"> <title>追踪开发分支</title> <indexterm><primary>-CURRENT</primary></indexterm> <indexterm><primary>-STABLE</primary></indexterm> @@ -1075,7 +1016,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> 这一章节将对每个分支作相应介绍与如何保持你的系统更新。 我们将先介绍 &os.current; 然后是 &os.stable;。</para> - <sect2 id="current"> + <sect2 xml:id="current"> <title>使用最新的 &os; CURRENT</title> <para>这里再次强调, &os.current; 是 &os; @@ -1182,8 +1123,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </listitem> <listitem> - <para>从&os; <link - linkend="mirrors">镜像站点</link> 获取源码。 您有两种方式选择:</para> + <para>从&os; <link linkend="mirrors">镜像站点</link> 获取源码。 您有两种方式选择:</para> <orderedlist> <listitem> @@ -1199,14 +1139,12 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </indexterm> <para>与称作 <filename>standard-supfile</filename> 的 - <filename>supfile</filename> 一起使用 <link - linkend="cvsup">cvsup</link>,这个可以从 + <filename>supfile</filename> 一起使用 <link linkend="cvsup">cvsup</link>,这个可以从 <filename>/usr/share/examples/cvsup</filename>得到。 这是最被推荐的方式,因为它允许您一次获取整个集合, 以后就只取更改过的部分。许多人从 <command>cron</command> 运行 <command>cvsup</command>,以保持他们的源码自动更新。 - 您须要定制上边的 <filename>supfile</filename> 样本,并且配置 <link - linkend="cvsup">cvsup</link> 以适应您的环境。</para> + 您须要定制上边的 <filename>supfile</filename> 样本,并且配置 <link linkend="cvsup">cvsup</link> 以适应您的环境。</para> <note> <para><filename>standard-supfile</filename> @@ -1232,14 +1170,12 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <secondary>使用 CTM 同步</secondary> </indexterm> - <para>使用工具 <application><link - linkend="ctm">CTM</link></application>。 + <para>使用工具 <application>CTM</application>。 如果您的连接性能不太好(高价连接或只能通过电子邮件存取), <application>CTM</application> 是个选择。 但这也颇有争议并且常常得到到坏文件。因此很少使用它, 这也注定了不能长期用它来工作。对于使用 9600 bps - 或更快连接的人,我们推荐使用 <application><link - linkend="cvsup">CVSup</link></application>。 + 或更快连接的人,我们推荐使用 <application>CVSup</application>。 </para> </listitem> </orderedlist> @@ -1258,8 +1194,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <para>在编译 &os.current; 之前,请仔细阅读 <filename>/usr/src</filename> 里的 <filename>Makefile</filename> 文件。 - 尽管是部分的升级过程,您至少也要首先<link - linkend="makeworld">安装新的内核和重建系统</link>。阅读 + 尽管是部分的升级过程,您至少也要首先<link linkend="makeworld">安装新的内核和重建系统</link>。阅读 &a.current; 邮件列表和 <filename>/usr/src/UPDATING</filename>, 会让您在其它循序渐进的过程中保持最新, 这对于我们向下一个发行版转移是很有必要的。</para> @@ -1275,7 +1210,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </sect3> </sect2> - <sect2 id="stable"> + <sect2 xml:id="stable"> <title>使用最新的 &os; STABLE</title> <sect3> @@ -1305,8 +1240,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <footnote><para>这也不总是正确。我们不可能永远支持 FreeBSD 的旧发行版, 尽管我们会在发布之后支持他们数年之久。 关于 FreeBSD 目前对于旧发行版的支持政策的完整描述, 请参见 - <ulink - url="&url.base;/security/">http://www.FreeBSD.org/security/</ulink>。</para> + <link xlink:href="&url.base;/security/">http://www.FreeBSD.org/security/</link>。</para> </footnote>,而因为安全原因而去采用一个开发分支显然可能会同时引入一些不希望的修改。</para> <para>尽管我们尽力确保 &os.stable; 分支在任何时候都能够正确编译和运行, @@ -1354,8 +1288,8 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <listitem> <para>如果您正安装一个新系统, 并希望它运行每月从 &os.stable; 编译的快照, - 请察看 <ulink url="&url.base;/snapshots/"> - Snapshots</ulink> 网页以了解更多信息。 + 请察看 <link xlink:href="&url.base;/snapshots/"> + Snapshots</link> 网页以了解更多信息。 另外, 也可以从 <link linkend="mirrors">镜像站点</link> 安装最新的 &os.stable; 发行版, 并按照其中的说明将系统更新到最新的 &os.stable; 源代码。</para> @@ -1378,14 +1312,12 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </indexterm> <para>与称作 <filename>stable-supfile</filename> 的 - <filename>supfile</filename> 一起使用 <link - linkend="cvsup">cvsup</link>,这个可以从 + <filename>supfile</filename> 一起使用 <link linkend="cvsup">cvsup</link>,这个可以从 <filename>/usr/share/examples/cvsup</filename> 得到。 这是最被推荐的方式,因为它允许您一次获取整个集合, 以后就只取更改过的部分。许多人从 <command>cron</command> 运行 <command>cvsup</command>,以保持他们的源码自动更新。 - 您须要定制上边的 <filename>supfile</filename> 样本,并且配置 <link - linkend="cvsup">cvsup</link> 以适应您的环境。</para> + 您须要定制上边的 <filename>supfile</filename> 样本,并且配置 <link linkend="cvsup">cvsup</link> 以适应您的环境。</para> </listitem> <listitem> @@ -1394,13 +1326,12 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <secondary>使用 CTM 同步</secondary> </indexterm> - <para>使用工具 <application><link linkend="ctm">CTM</link></application>。 + <para>使用工具 <application>CTM</application>。 如果您的连接性能不太好(高价连接或只能通过电子邮件存取), <application>CTM</application> 是个选择。 但这也颇有争议并且常常得到到坏文件。因此很少使用它, 这也注定了不能长期用它来工作。对于使用 9600 bps - 或更快连接的人,我们推荐使用 <application><link - linkend="cvsup">CVSup</link></application>。 + 或更快连接的人,我们推荐使用 <application>CVSup</application>。 </para> </listitem> </orderedlist> @@ -1431,7 +1362,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </sect2> </sect1> - <sect1 id="synching"> + <sect1 xml:id="synching"> <title>同步您的源码</title> <para>有许多方式通过互联网(或电子邮件)与 &os; @@ -1500,7 +1431,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> 进行重建,仅仅删除坏的数据并再同步。</para> </sect1> - <sect1 id="makeworld"> + <sect1 xml:id="makeworld"> <title>重新编译 <quote>world</quote></title> <indexterm> @@ -1551,7 +1482,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <command>make world</command> 都是不应该做的事情, 您应该使用这里描述的方法。</para> </warning> - <sect2 id="canonical-build"> + <sect2 xml:id="canonical-build"> <title>更新系统的规范方法</title> <para>在更新系统时, 一定要首先查看 @@ -1590,10 +1521,10 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </itemizedlist> <para>这两个问题就是为什么我们将在后面的章节中介绍的, - 需要按照 <maketarget>buildworld</maketarget>、 - <maketarget>buildkernel</maketarget>、 - <maketarget>installkernel</maketarget>、 - <maketarget>installworld</maketarget> 的顺序来更新系统的原因。 + 需要按照 <buildtarget>buildworld</buildtarget>、 + <buildtarget>buildkernel</buildtarget>、 + <buildtarget>installkernel</buildtarget>、 + <buildtarget>installworld</buildtarget> 的顺序来更新系统的原因。 这并不是您需要遵守推荐的更新操作的全部原因, 除了这两个最重要的理由之外, 还有一些并不那么显而易见的原因:</para> @@ -1624,25 +1555,25 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <orderedlist> <listitem> - <para><command>make <maketarget>buildworld</maketarget></command></para> + <para><command>make buildworld</command></para> <para>这步操作会联编新的编译器, 以及少量相关工具, 并在随后使用新的编译器来联编 - world。 联编的结果会存放在 <filename class="directory">/usr/obj</filename>。</para> + world。 联编的结果会存放在 <filename>/usr/obj</filename>。</para> </listitem> <listitem> - <para><command>make <maketarget>buildkernel</maketarget></command></para> + <para><command>make buildkernel</command></para> <para>与旧式的、 使用 &man.config.8; 和 &man.make.1; 的方法不同, - 这种做法会使用存放于 <filename class="directory">/usr/obj</filename> + 这种做法会使用存放于 <filename>/usr/obj</filename> 中的 <emphasis>新的</emphasis> 编译器。 这种做法使得您免去了由于编译器与内核源代码不一致导致的问题。</para> </listitem> <listitem> - <para><command>make <maketarget>installkernel</maketarget></command></para> + <para><command>make installkernel</command></para> <para>安装新的内核及其模块, 使系统能够以更新后的内核启动。</para> @@ -1656,18 +1587,18 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </listitem> <listitem> - <para><command>mergemaster <option>-p</option></command></para> + <para><command>mergemaster -p</command></para> <para>这步操作会进行完成安装新的 world 所需的配置文件更新操作。 例如, 它可能会在系统的密码数据库中添加新的用户组或用户。 这些操作通常在上次更新之后增加了新的用户组或特殊系统用户之后是需要的, - 因为 <maketarget>installworld</maketarget> 这步操作会需要这些用户或组才能顺利完成。</para> + 因为 <buildtarget>installworld</buildtarget> 这步操作会需要这些用户或组才能顺利完成。</para> </listitem> <listitem> - <para><command>make <maketarget>installworld</maketarget></command></para> + <para><command>make installworld</command></para> - <para>从 <filename class="directory">/usr/obj</filename> 中复制 world。 + <para>从 <filename>/usr/obj</filename> 中复制 world。 这步操作之后, 您在盘上的系统, 包括内核和 world 就都是新的了。</para> </listitem> @@ -1688,7 +1619,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <para>注意, 如果您正从同一 &os; 版本分支升级, 例如, 从 7.0 到 7.1, 则上述过程可能没有那么必要, 因为您不太可能遇到严重的编译器、 内核源代码、 用户态程序源代码或配置文件不匹配的情形。 - 旧式的 <command>make <maketarget>world</maketarget></command> + 旧式的 <command>make world</command> 然后再联编新内核的升级方法, 很可能有机会能够正常运作而完成升级工作。</para> <para>但是, 在大版本升级的过程中, 不按照前面所介绍的操作来进行升级时, @@ -1716,13 +1647,13 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <note> <para>有时, 可能需要额外地执行一次 <command>mergemaster -p</command> 才能够完成 - <maketarget>buildworld</maketarget> 步骤。 + <buildtarget>buildworld</buildtarget> 步骤。 这些要求, 会在 <filename>UPDATING</filename> 中进行描述。 一般而言, 您可以简单地跳过这一步, 只要进行的不是大跨度的 &os; 版本升级。</para> </note> - <para>在 <maketarget>installkernel</maketarget> 成功完成之后, + <para>在 <buildtarget>installkernel</buildtarget> 成功完成之后, 您需要引导到单用户模式 (举例而言, 可以在加载器提示后输入 <command>boot -s</command>)。 接下来执行:</para> @@ -1744,7 +1675,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </warning> </sect2> - <sect2 id="src-updating"> + <sect2 xml:id="src-updating"> <title>阅读 <filename>/usr/src/UPDATING</filename></title> <para>在您做其它事之前,请阅读 @@ -1760,7 +1691,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </important> </sect2> - <sect2 id="make-conf"> + <sect2 xml:id="make-conf"> <title>检查 <filename>/etc/make.conf</filename></title> <indexterm> <primary><filename>make.conf</filename></primary> @@ -1778,15 +1709,15 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <para>一般的用户通常会从 <filename>/usr/share/examples/etc/make.conf</filename> 复制 - <makevar>CFLAGS</makevar> 和 - <makevar>NO_PROFILE</makevar> 这样的设置到 + <varname>CFLAGS</varname> 和 + <varname>NO_PROFILE</varname> 这样的设置到 <filename>/etc/make.conf</filename> 中并令它们生效。</para> - <para>请考虑其他的一些选项 (例如 <makevar>COPTFLAGS</makevar>、 - <makevar>NOPORTDOCS</makevar> 等等), 看看是否合用。</para> + <para>请考虑其他的一些选项 (例如 <varname>COPTFLAGS</varname>、 + <varname>NOPORTDOCS</varname> 等等), 看看是否合用。</para> </sect2> - <sect2 id="updating-etc"> + <sect2 xml:id="updating-etc"> <title>更新 <filename>/etc</filename> 里的文件</title> <para><filename>/etc</filename> @@ -1801,14 +1732,14 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> 在进行升级时, 它们可能并不存在。 这会给升级造成问题。 有时, <command>make buildworld</command> 会检查它们是否已经存在。</para> - <para>最近就有个这样的例子, 当时新增了 <username>smmsp</username> + <para>最近就有个这样的例子, 当时新增了 <systemitem class="username">smmsp</systemitem> 用户。 当用户尝试完成安装操作时, 在 &man.mtree.8; 尝试建立 <filename>/var/spool/clientmqueue</filename> 时失败了。</para> <para>解决办法是通过使用 <option>-p</option> 选项以构建前 (pre-buildworld) 模式运行 &man.mergemaster.8;。 - 这表示只对比那些对于成功执行 <maketarget>buildworld</maketarget> - 或 <maketarget>installworld</maketarget> 起关键作用的文件。 + 这表示只对比那些对于成功执行 <buildtarget>buildworld</buildtarget> + 或 <buildtarget>installworld</buildtarget> 起关键作用的文件。 在第一次这样做时, 如果使用的是早期的不支持 <option>-p</option> 的 <command>mergemaster</command> 版本的话, 使用源码中的新版本即可。</para> @@ -1820,14 +1751,14 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <para>如果您是个偏执狂 (paranoid), 您可以检查您的系统看看哪个文件属于您已更名或删除了的那个组。</para> - <screen>&prompt.root; <userinput>find / -group <replaceable>GID</replaceable> -print</userinput></screen> + <screen>&prompt.root; <userinput>find / -group GID -print</userinput></screen> <para>将显示所有 <replaceable>GID</replaceable> 组 (可以是组名也可以是数字地组 ID)所有的文件。</para> </tip> </sect2> - <sect2 id="makeworld-singleuser"> + <sect2 xml:id="makeworld-singleuser"> <title>改为单用户模式</title> <indexterm><primary>单用户 模式</primary></indexterm> @@ -1840,8 +1771,8 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> <indexterm><primary>多用户模式</primary></indexterm> <para>另一种模式是在多用户模式下编译系统,然后转换到单用户模式下安装。 如果您喜欢这种方式,只需在建立 (build) 完成后才执行下边的步骤。 - 您推迟转换到单用户模式下直到您必须 <maketarget>installkernel</maketarget> - 或 <maketarget>installworld</maketarget>。</para> + 您推迟转换到单用户模式下直到您必须 <buildtarget>installkernel</buildtarget> + 或 <buildtarget>installworld</buildtarget>。</para> <para>从运行的系统里,以超级用户方式执行:</para> @@ -1875,7 +1806,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> </sect2> - <sect2 id="cleaning-usr-obj"> + <sect2 xml:id="cleaning-usr-obj"> <title>删除 <filename>/usr/obj</filename></title> <para>随着重新构建系统的进行, 编译结果会放到 (默认情况下) @@ -1894,7 +1825,7 @@ DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> &prompt.root; <userinput>rm -rf *</userinput></screen> </sect2> - <sect2 id="updating-upgrading-compilebase"> + <sect2 xml:id="updating-upgrading-compilebase"> <title>重新编译基本系统</title> <sect3> @@ -1920,10 +1851,10 @@ Script done, …</screen> <para>如果您这样做,就 <emphasis>不要</emphasis> 把文件存到 <filename>/tmp</filename> 里边。下次启动时,这个目录就会被清除掉。 存放的最好地方是 <filename>/var/tmp</filename> (如上个实例)或 - <username>root</username> 的主目录。</para> + <systemitem class="username">root</systemitem> 的主目录。</para> </sect3> - <sect3 id="make-buildworld"> + <sect3 xml:id="make-buildworld"> <title>编译基本系统</title> <para>您必须在<filename>/usr/src</filename>目录里边:</para> @@ -1939,7 +1870,7 @@ Script done, …</screen> <para>输入的一般命令格式如下:</para> - <screen>&prompt.root; <userinput>make -<replaceable>x</replaceable> -D<replaceable>VARIABLE</replaceable> <replaceable>target</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>make -x -DVARIABLE target</userinput></screen> <para>这个例子里,<option>-<replaceable>x</replaceable></option> 是会传递给 &man.make.1; 的一个选项。查看 &man.make.1; @@ -1951,7 +1882,7 @@ Script done, …</screen> <filename>/etc/make.conf</filename> 设置的变量一样, 只是提供了另一种设置它们的方法。</para> - <screen>&prompt.root; <userinput>make -DNO_PROFILE <replaceable>target</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>make -DNO_PROFILE target</userinput></screen> <para>是另一种指定不被建立 (built) 的先定库 (profiled libraries) 的方式,协同 @@ -1973,39 +1904,39 @@ Script done, …</screen> <para>大部分的时间不需要向 &man.make.1; 传递参数,因此您的命令看起来可能象这样:</para> - <screen>&prompt.root; <userinput>make <replaceable>target</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>make target</userinput></screen> <para>此处 <replaceable>target</replaceable> 表示的是若干编译选项。 多数情况下, 第一个 target 都应该是 - <makevar>buildworld</makevar>。</para> + <varname>buildworld</varname>。</para> - <para>正如名字所暗示的,<maketarget>buildworld</maketarget> + <para>正如名字所暗示的,<buildtarget>buildworld</buildtarget> 在 <filename>/usr/obj</filename> 下边建立了一个全新的树, 然后使用另一个 target, - <maketarget>installworld</maketarget> 在当前的机器里安装它。</para> + <buildtarget>installworld</buildtarget> 在当前的机器里安装它。</para> <para>将这些选项分开有两个优点。 首先, 它允许您安全地完成建立 (build), 而不对正在运行的系统的组件产生影响。 构建过程是 <quote>自主的 (self hosted)</quote>。 因为这样, 您可以安全地在以多用户模式运行的机器里执行 - <maketarget>buildworld</maketarget> ,而不用当心不良影响。 + <buildtarget>buildworld</buildtarget> ,而不用当心不良影响。 但是依然推荐您在单用户模式时运行 - <maketarget>installworld</maketarget>。</para> + <buildtarget>installworld</buildtarget>。</para> <para>第二,允许您使用 NFS 挂接 (NFS mounts) 升级您网络里的多台计算机。如果您有三台 - <hostid>A</hostid>、<hostid>B</hostid> 和 <hostid>C</hostid> - 想进行升级,在<hostid>A</hostid> 执行 + <systemitem>A</systemitem>、<systemitem>B</systemitem> 和 <systemitem>C</systemitem> + 想进行升级,在<systemitem>A</systemitem> 执行 <command>make buildworld</command> 和 <command>make installworld</command>。 然后将 - <hostid>A</hostid> 上的 + <systemitem>A</systemitem> 上的 <filename>/usr/src</filename> 和 <filename>/usr/obj</filename> 通过 NFS 挂接到 - <hostid>B</hostid> 和 <hostid>C</hostid> 上, 接下来, 只需在 - <hostid>B</hostid> 和 <hostid>C</hostid> 上使用 + <systemitem>B</systemitem> 和 <systemitem>C</systemitem> 上, 接下来, 只需在 + <systemitem>B</systemitem> 和 <systemitem>C</systemitem> 上使用 <command>make installworld</command> 来安装构建的结果就可以了。</para> - <para>尽管 <maketarget>world</maketarget> target + <para>尽管 <buildtarget>world</buildtarget> target 仍然存在,强烈建议您不要用它。</para> <para>运行</para> @@ -2043,7 +1974,7 @@ Script done, …</screen> </sect3> </sect2> - <sect2 id="new-kernel"> + <sect2 xml:id="new-kernel"> <title>编译和安装新内核</title> <indexterm> <primary>内核</primary> @@ -2064,39 +1995,37 @@ Script done, …</screen> <filename>GENERIC</filename> 启动、核实系统可以工作后, 您就可以建立 (build) 一个基于您的正常内核配置文件的新的内核了。</para> - <para>在 &os; 中, 首先完成 <link - linkend="make-buildworld">build world</link> 然后再编译新内核非常重要。</para> + <para>在 &os; 中, 首先完成 <link linkend="make-buildworld">build world</link> 然后再编译新内核非常重要。</para> <note><para>如果您想建立一个定制内核,而且已经有了配置文件, - 只需象这样使用 <literal>KERNCONF=<replaceable>MYKERNEL</replaceable>:</literal></para> + 只需象这样使用 <literal>KERNCONF=MYKERNEL:</literal></para> <screen>&prompt.root; <userinput>cd /usr/src</userinput> -&prompt.root; <userinput>make buildkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput> -&prompt.root; <userinput>make installkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen> +&prompt.root; <userinput>make buildkernel KERNCONF=MYKERNEL</userinput> +&prompt.root; <userinput>make installkernel KERNCONF=MYKERNEL</userinput></screen> </note> <para>注意,如果您已把 <literal>内核安全级别(kern.securelevel)</literal> 调高到了 1 以上,而且还设置了 <literal>noschg</literal> 或相似的标识到了您的内核二进制里边,您可能会发现转换到单用户模式里使用 - <maketarget>installkernel</maketarget> 是很有必要的。 + <buildtarget>installkernel</buildtarget> 是很有必要的。 如果您没有设置它, 则应该也能毫无问题地在多用户模式执行这两个命令。 请参考 &man.init.8; 以了解更多关于 <literal>内核安全级(kern.securelevel)</literal> 的信息;查看 &man.chflags.1; 了解更多关于不同文件标识的信息。</para> </sect2> - <sect2 id="new-kernel-singleuser"> + <sect2 xml:id="new-kernel-singleuser"> <title>重启到单用户模式</title> <indexterm><primary>单用户模式</primary></indexterm> - <para>您应该单用户模式测试新内核。照<xref - linkend="makeworld-singleuser"/>处的说明去做。</para> + <para>您应该单用户模式测试新内核。照<xref linkend="makeworld-singleuser"/>处的说明去做。</para> </sect2> - <sect2 id="make-installworld"> + <sect2 xml:id="make-installworld"> <title>安装编译好的新系统</title> <para>您现在应使用 - <maketarget>installworld</maketarget> 来安装新的系统二进制。</para> + <buildtarget>installworld</buildtarget> 来安装新的系统二进制。</para> <para>执行</para> @@ -2108,7 +2037,7 @@ Script done, …</screen> 的命令行指定了变量,您就必须在 <command>make installworld</command> 命令行里指定同样的变量。 对于其它的选项并不是必需的,如,<option>-j</option> - 就不能同 <maketarget>installworld</maketarget> 一起使用。</para> + 就不能同 <buildtarget>installworld</buildtarget> 一起使用。</para> <para>举例,您执行了:</para> @@ -2124,7 +2053,7 @@ Script done, …</screen> </note> </sect2> - <sect2 id="post-installworld-updates"> + <sect2 xml:id="post-installworld-updates"> <title>不是由 <command>make installworld</command> 更新的更新文件</title> <para>重新编译整个系统不会使用新的或改过的配置文件更新某些目录 @@ -2136,17 +2065,13 @@ Script done, …</screen> 不管您选择哪一种,一定记得备份 <filename>/etc</filename> 以防出错。</para> - <sect3 id="mergemaster"> - <sect3info> + <sect3 xml:id="mergemaster"> + <info><title><command>mergemaster</command></title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>贡献者:</contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>贡献者:</contrib></author> </authorgroup> - </sect3info> - <title><command>mergemaster</command></title> + </info> + <indexterm><primary><command>mergemaster</command></primary></indexterm> <para>&man.mergemaster.8; 工具是个 Bourne 脚本,用于检测 @@ -2329,7 +2254,7 @@ Script done, …</screen> </sect3> </sect2> - <sect2 id="updating-upgrading-rebooting"> + <sect2 xml:id="updating-upgrading-rebooting"> <title>重启</title> <para>现在完成了。在您检查所有内容都放置正确后, @@ -2352,7 +2277,7 @@ Script done, …</screen> &prompt.root; <userinput>make all install</userinput></screen> </sect2> - <sect2 id="updating-questions"> + <sect2 xml:id="updating-questions"> <title>问题</title> <qandaset> @@ -2500,7 +2425,7 @@ Building everything.. <listitem> <para>在 <filename>/etc/make.conf</filename> 里也为 - <makevar>CFLAGS</makevar> 设置上 <option>-O -pipe</option>。 + <varname>CFLAGS</varname> 设置上 <option>-O -pipe</option>。 最佳优化 <option>-O2</option> 会更慢,而且 <option>-O</option> 和 <option>-O2</option> 之间的优化差别基本上可以忽略。 <option>-pipe</option> 让编译器使用管道而不用临时文件进行通信, @@ -2581,17 +2506,13 @@ Building everything.. </sect2> </sect1> - <sect1 id="make-delete-old"> - <sect1info> + <sect1 xml:id="make-delete-old"> + <info><title>删除过时的文件、 目录和函数库</title> <authorgroup> - <author> - <firstname>Anton</firstname> - <surname>Shterenlikht</surname> - <contrib>Based on notes provided by </contrib> - </author> + <author><personname><firstname>Anton</firstname><surname>Shterenlikht</surname></personname><contrib>Based on notes provided by </contrib></author> </authorgroup> - </sect1info> - <title>删除过时的文件、 目录和函数库</title> + </info> + <indexterm> <primary>删除过时的文件、 目录和函数库</primary> </indexterm> @@ -2607,9 +2528,8 @@ Building everything.. <filename>/usr/src/ObsoleteFiles.inc</filename> 中。 接下来将介绍在系统更新过程中如何删去这些过时的文件。</para> - <para>我们假定您已经按照 <xref - linkend="canonical-build"/> 介绍的步骤完成了更新操作。 在 <command>make - <maketarget>installworld</maketarget></command> 和 + <para>我们假定您已经按照 <xref linkend="canonical-build"/> 介绍的步骤完成了更新操作。 在 <command>make + installworld</command> 和 <command>mergemaster</command> 命令完成之后, 您应使用下面的命令检查系统中是否存在过时的文件或库:</para> @@ -2627,7 +2547,7 @@ Building everything.. <para>在删除文件时, 系统会针对每个文件都给出提示。 您可以跳过这些提示, 并让系统自动完成删除操作, - 方法是使用 make 变量 <makevar>BATCH_DELETE_OLD_FILES</makevar>, + 方法是使用 make 变量 <varname>BATCH_DELETE_OLD_FILES</varname>, 具体做法如下:</para> <screen>&prompt.root; <userinput>make -DBATCH_DELETE_OLD_FILES delete-old</userinput></screen> @@ -2643,13 +2563,11 @@ Building everything.. 对于旧的函数库来说, 这种问题出现的可能性更大。 绝大多数情况下, 您应重新联编使用旧库的所有的程序、 port 或函数库之后再执行 <command>make - <maketarget>delete-old-libs</maketarget></command>。</para> + delete-old-libs</command>。</para> </warning> <para>在 Ports Collection 中提供了一些检测动态连接库依赖关系的工具, - 例如 <filename - role="package">sysutils/libchk</filename> 和 <filename - role="package">sysutils/bsdadminscripts</filename>。</para> + 例如 <package>sysutils/libchk</package> 和 <package>sysutils/bsdadminscripts</package>。</para> <para>过时的动态连接库可能会与新库冲突, 导致类似这样的警告消息:</para> @@ -2664,26 +2582,20 @@ Building everything.. &prompt.root; <userinput>pkg_info -W /usr/local/lib/libXext.so</userinput> /usr/local/lib/libXext.so was installed by package libXext-1.1.1,1</screen> - <para>接着卸载、 重新联编并安装 port。 您可以使用 <filename - role="package">ports-mgmt/portmaster</filename> 或 <filename - role="package">ports-mgmt/portupgrade</filename> 工具来自动完成这些操作。 + <para>接着卸载、 重新联编并安装 port。 您可以使用 <package>ports-mgmt/portmaster</package> 或 <package>ports-mgmt/portupgrade</package> 工具来自动完成这些操作。 在确认所有的 port 都重新联编, 并且不再使用旧库以后, 您就可以用下面的命令来删除它们了:</para> <screen>&prompt.root; <userinput>make delete-old-libs</userinput></screen> </sect1> - <sect1 id="small-lan"> - <sect1info> + <sect1 xml:id="small-lan"> + <info><title>跟踪多台机器</title> <authorgroup> - <author> - <firstname>Mike</firstname> - <surname>Meyer</surname> - <contrib>贡献者</contrib> - </author> + <author><personname><firstname>Mike</firstname><surname>Meyer</surname></personname><contrib>贡献者</contrib></author> </authorgroup> - </sect1info> - <title>跟踪多台机器</title> + </info> + <indexterm> <primary>NFS</primary> <secondary>安装多台机器</secondary> @@ -2695,7 +2607,7 @@ Building everything.. 解决的办法是让一台机器处理大部分的工作,而其它的机器通过 NFS 挂接 (mount) 这些工作。这部分列举了一种这样做的方法。</para> - <sect2 id="small-lan-preliminaries"> + <sect2 xml:id="small-lan-preliminaries"> <title>准备</title> <para>首先,确定一批机器,运行的二进制代码是同一套---我们称作 @@ -2723,19 +2635,18 @@ Building everything.. 这意味着<quote>构建机器</quote>必须构建部分基本系统用于 <quote>构建集群</quote>里所有机器的安装。同样, 每台<quote>构建机器</quote>要有它自已的内核名字,使用 - <filename>/etc/make.conf</filename> 里的 <makevar>KERNCONF</makevar> + <filename>/etc/make.conf</filename> 里的 <varname>KERNCONF</varname> 进行设置,并且每台<quote>构建机器</quote>应该把它们列在 - <makevar>KERNCONF</makevar> 里,同时把自已的内核列在最前。 + <varname>KERNCONF</varname> 里,同时把自已的内核列在最前。 <quote>构建机器</quote>的 - <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf</filename> + <filename>/usr/src/sys/arch/conf</filename> 里一定要有每台机器的内核配置文件,如果它想构建它们的内核的话。</para> </sect2> - <sect2 id="small-lan-base-system"> + <sect2 xml:id="small-lan-base-system"> <title>基本系统</title> - <para>既然所有的妥当了,就准备构建所有的东西。如<xref - linkend="make-buildworld"/>中描述的一样在<quote>构建机器</quote>上构建内核和系统, + <para>既然所有的妥当了,就准备构建所有的东西。如<xref linkend="make-buildworld"/>中描述的一样在<quote>构建机器</quote>上构建内核和系统, 但是什么也不安装。在构建结束后,转到<quote>测试机器</quote>上, 安装您刚构建的内核。如果这台机器通过 NFS 挂接了 <filename>/usr/src</filename> 和 <filename>/usr/obj</filename>, @@ -2749,19 +2660,19 @@ Building everything.. 就使用相同的过程在 <quote>构建集群</quote>里的其它机器里安装新的软件。</para> </sect2> - <sect2 id="small-lan-ports"> + <sect2 xml:id="small-lan-ports"> <title>Ports</title> <para>类似的想法是使用 ports 树。 第一个关键的步骤是从同一台计算机上挂接 <filename>/usr/ports</filename> 到 <quote>构建集群</quote> 里的全部计算机。 然后正确设置 <filename>/etc/make.conf</filename> 共享 - distfiles。您应把 <makevar>DISTDIR</makevar> 设置到一个共享的目录里, - 那里可以被任何一个 <username>root</username> 用户写入, 并且是由您的 - NFS 挂接映射的。 设置每一台机器的 <makevar>WRKDIRPREFIX</makevar> + distfiles。您应把 <varname>DISTDIR</varname> 设置到一个共享的目录里, + 那里可以被任何一个 <systemitem class="username">root</systemitem> 用户写入, 并且是由您的 + NFS 挂接映射的。 设置每一台机器的 <varname>WRKDIRPREFIX</varname> 到一个本地构建 (build) 目录。最后,如果您要构建和发布包 - (packages),那么您应该设置 <makevar>PACKAGES</makevar> - 到一个类似于 <makevar>DISTDIR</makevar> 的目录。</para> + (packages),那么您应该设置 <varname>PACKAGES</varname> + 到一个类似于 <varname>DISTDIR</varname> 的目录。</para> </sect2> </sect1> </chapter> |