diff options
author | Xin LI <delphij@FreeBSD.org> | 2009-02-24 20:00:44 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2009-02-24 20:00:44 +0000 |
commit | cd9e51b0196fe04568417a7c678df62909ec3162 (patch) | |
tree | f625bdcd32673958991375b10f688cebc55234b5 | |
parent | b227896c2086858857f74cc7ff9bf8fb0f6025ca (diff) |
Notes
17 files changed, 1458 insertions, 287 deletions
diff --git a/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml b/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml index ed84ec9b24..1d96d1ffa4 100644 --- a/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Chinese Documentation Project - Original revision: 1.419 + Original revision: 1.420 $FreeBSD$ --> @@ -22,7 +22,7 @@ </listitem> <listitem> - <para>如何配置 IEEE 802.11 和 蓝牙(&bluetooth;) 设备。</para> + <para>如何配置 &ieee; 802.11 和 &bluetooth; 设备。</para> </listitem> <listitem> @@ -672,7 +672,7 @@ route_net2="-net 192.168.1.0/24 192.168.1.1"</programlisting> <sect2> <title>无线网络基础</title> - <para>绝大多数无线网络都采用了 IEEE 802.11 + <para>绝大多数无线网络都采用了 &ieee; 802.11 标准。 基本的无线网络中, 都包含多个以 2.4GHz 或 5GHz 频段的无线电波广播的站点 (不过, 随所处地域的不同, 或者为了能够更好地进行通讯, 具体的频率会在 @@ -690,7 +690,7 @@ route_net2="-net 192.168.1.0/24 192.168.1.1"</programlisting> 网络</emphasis>。</para> <para>802.11 网络最初在 2.4GHz 频段上部署, - 并采用了由 IEEE 802.11 和 802.11b + 并采用了由 &ieee; 802.11 和 802.11b 标准所定义的协议。 这些标准定义了采用的操作频率、 包括分帧和传输速率 (通讯过程中可以使用不同的速率) 在内的 MAC 层特性等。 稍后的 802.11a 标准定义了使用 @@ -706,7 +706,7 @@ route_net2="-net 192.168.1.0/24 192.168.1.1"</programlisting> 这一格局已经被证明很容易被攻破, 因此目前已经很少使用了, 采用这种方法只能让那些接入网络的用户迅速断开。 最新的安全实践是由 - IEEE 802.11i 标准给出的, 它定义了新的加密算法, + &ieee; 802.11i 标准给出的, 它定义了新的加密算法, 并通过一种附加的协议来让通讯站向无线访问点验证身份, 并交换用于进行数据通讯的密钥。 更进一步, 用于加密的密钥会定期地刷新, @@ -1264,7 +1264,7 @@ ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 </callout> <callout arearefs="co-tls-proto"> - <para>这里, 我们使用 RSN (IEEE 802.11i) 协议, 也就是 + <para>这里, 我们使用 RSN (&ieee; 802.11i) 协议, 也就是 WPA2。</para> </callout> @@ -2928,7 +2928,7 @@ BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2</screen> <variablelist> - <varlistentry><term>failover (故障转移)</term> + <varlistentry><term>Failover (故障转移)</term> <listitem> <para>只通过主网口收发数据。 如果主网口不可用, 则使用下一个激活的网口。 @@ -2937,42 +2937,42 @@ BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2</screen> </listitem> </varlistentry> - <varlistentry><term>fec</term> + <varlistentry><term>&cisco; Fast ðerchannel;</term> <listitem> - <para>用以支持 Cisco EtherChannel。 这是一种静态配置, + <para>&cisco; Fast ðerchannel; (FEC) 是一种静态配置, 并不进行节点间协商或交换以太网帧来监控链路情况。 如果交换机支持 LACP, 则应使用后者而非这种配置。</para> - <para>这种做法是将输出流量在激活的网口之间以协议头散列信息为依据分拆, + <para><acronym>FEC</acronym> 将输出流量在激活的网口之间以协议头散列信息为依据分拆, 并接收来自任意激活网口的入流量。 散列信息包含以太网源地址、 目的地址, 以及 (如果有的话) VLAN tag 和 IPv4/IPv6 源地址及目的地址信息。</para> </listitem> </varlistentry> - <varlistentry><term>lacp</term> + <varlistentry><term>LACP</term> <listitem> - <para>支持 IEEE 802.3ad 链路聚合控制协议 + <para>支持 &ieee; 802.3ad 链路聚合控制协议 (LACP) 和标记协议。 LACP 能够在节点与若干链路聚合组之间协商链路。 每一个链路聚合组 (LAG) 由一组相同速度、 以全双工模式运行的网口组成。 流量在 LAG 中的网口之间, 会以总速度最大的原则进行分摊。 当物理链路发生变化时, 链路聚合会迅速适应变动形成新的配置。</para> - <para>这种做法也是将输出流量在激活的网口之间以协议头散列信息为依据分拆, + <para><acronym>LACP</acronym> 也是将输出流量在激活的网口之间以协议头散列信息为依据分拆, 并接收来自任意激活网口的入流量。 散列信息包含以太网源地址、 目的地址, 以及 (如果有的话) VLAN tag 和 IPv4/IPv6 源地址及目的地址信息。</para> </listitem> </varlistentry> - <varlistentry><term>loadbalance (负载均衡)</term> + <varlistentry><term>Loadbalance (负载均衡)</term> <listitem> - <para>这是 <emphasis>fec</emphasis> 模式的别名。</para> + <para>这是 <emphasis>FEC</emphasis> 模式的别名。</para> </listitem> </varlistentry> - <varlistentry><term>roundrobin (轮转)</term> + <varlistentry><term>Round-robin (轮转)</term> <listitem> <para>将输出流量以轮转方式在所有激活端口之间调度, 并从任意激活端口接收进入流量。 @@ -2986,7 +2986,7 @@ BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2</screen> <title>例子</title> <example id="networking-lacp-aggregation-cisco"> - <title>与 Cisco 交换机配合完成 LACP 链路聚合</title> + <title>与 &cisco; 交换机配合完成 LACP 链路聚合</title> <para>在这个例子中, 我们将 &os; 的两个网口作为一个负载均衡和故障转移链路聚合组接到交换机上。 在此基础上, 还可以增加更多的网口, 以提高吞吐量和故障容灾能力。 @@ -2994,27 +2994,35 @@ BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2</screen> 会取决于一块网卡的最大速度。 传输算法会尽量采用更多的信息, 以便将不同的网络流量分摊到不同的网络接口上, 并平衡不同网口的负载。</para> - <para>在 Cisco 交换机上将网口添加到通道组 (channel group) 中。</para> + <para>在 &cisco; 交换机上将 + <replaceable>FastEthernet0/1</replaceable> 和 + <replaceable>FastEthernet0/2</replaceable> 这两个网口添加到 + channel-group <replaceable>1</replaceable>:</para> - <screen>interface FastEthernet0/1 - channel-group 1 mode active - channel-protocol lacp + <screen><userinput>interface <replaceable>FastEthernet0/1</replaceable> + channel-group <replaceable>1</replaceable> mode active + channel-protocol lacp</userinput> ! -interface FastEthernet0/2 - channel-group 1 mode active - channel-protocol lacp -!</screen> - - <para>在 &os; 机器上创建 lagg 接口。</para> - - <screen>&prompt.root; <userinput>ifconfig lagg0 create</userinput> -&prompt.root; <userinput>ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1</userinput></screen> - - <para>从 ifconfig 查看接口状态: 标记为 - <emphasis>ACTIVE</emphasis> 的接口属于激活的聚合组, - 并且已经完成了与交换机的协商过程, 能够收发网络流量了。 - 您可以利用 &man.ifconfig.8; - 的输出细节来检视 LAG 标识。</para> +<userinput>interface <replaceable>FastEthernet0/2</replaceable> + channel-group <replaceable>1</replaceable> mode active + channel-protocol lacp</userinput></screen> + + <para>在 &os; 使用 + <replaceable>fxp0</replaceable> 和 + <replaceable>fxp1</replaceable> 创建 &man.lagg.4; 接口:</para> + + <screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> create </userinput> +&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> up laggproto lacp laggport <replaceable>fxp0</replaceable> laggport <replaceable>fxp1</replaceable></userinput></screen> + + <para>用下面的命令查看接口状态:</para> + + <screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput></screen> + + <para>标记为 + <emphasis>ACTIVE</emphasis> 的接口是激活据合组的部分, + 这表示它们已经完成了与远程交换机的协商, + 同时, 流量将通过这些接口来收发。 在 &man.ifconfig.8; + 的详细输出中会给出 LAG 的标识。</para> <screen>lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> @@ -3025,8 +3033,8 @@ interface FastEthernet0/2 laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING></screen> - <para>交换机上会显示哪些端口是激活的。 如果需要了解更多细节, 则可以使用 - <userinput>show lacp neighbor detail</userinput>。</para> + <para>如果需要查看交换机上的端口状态, 则应使用 <userinput>show + lacp neighbor</userinput> 命令:</para> <screen>switch# show lacp neighbor Flags: S - Device is requesting Slow LACPDUs @@ -3042,16 +3050,26 @@ Port Flags Priority Dev ID Age Key Number State Fa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3D Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D</screen> + <para>如欲查看进一步的详情, 则需要使用 <userinput>show lacp neighbor + detail</userinput> 命令。</para> </example> <example id="networking-lagg-failover"> <title>故障转移模式</title> - <para>故障转移模式可以用于在主端口连接中断时切换到备用端口。</para> + <para>故障转移模式中, 当首选链路发生问题时, + 会自动切换到备用端口。 下面的命令会创建 + <replaceable>lagg0</replaceable> 接口, 并使用 + <replaceable>fxp0</replaceable> 作为首选接口, 而 + <replaceable>fxp1</replaceable> 作为备用接口:</para> - <screen>&prompt.root; <userinput>ifconfig lagg0 create</userinput> -&prompt.root; <userinput>ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1</userinput></screen> + <screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> create</userinput> +&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> up laggproto failover laggport <replaceable>fxp0</replaceable> laggport <replaceable>fxp1</replaceable></userinput></screen> - <screen>lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 + <para>创建成功之后, 接口状态会是类似下面这样, + 主要的区别是 <acronym>MAC</acronym> 地址和设备名:</para> + + <screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput> +lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:05:5d:71:8d:b8 media: Ethernet autoselect @@ -3061,8 +3079,8 @@ Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D</screen laggport: fxp0 flags=5<MASTER,ACTIVE></screen> <para>系统将在 - <devicename>fxp0</devicename> 上进行流量的收发。 如果 - <devicename>fxp0</devicename> 的连接中断, 则 <devicename>fxp1</devicename> + <replaceable>fxp0</replaceable> 上进行流量的收发。 如果 + <replaceable>fxp0</replaceable> 的连接中断, 则 <replaceable>fxp1</replaceable> 会自动成为激活连接。 如果主端口的连接恢复, 则它又会成为激活连接。</para> </example> </sect2> diff --git a/zh_CN.GB2312/books/handbook/book.sgml b/zh_CN.GB2312/books/handbook/book.sgml index dfa40d27bf..3af207f334 100644 --- a/zh_CN.GB2312/books/handbook/book.sgml +++ b/zh_CN.GB2312/books/handbook/book.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Documentation Project - Original Revision: 1.174 + Original Revision: 1.175 $FreeBSD$ --> @@ -79,6 +79,7 @@ <year>2006</year> <year>2007</year> <year>2008</year> + <year>2009</year> <holder>The FreeBSD Documentation Project</holder> </copyright> @@ -92,6 +93,7 @@ <year>2006</year> <year>2007</year> <year>2008</year> + <year>2009</year> <holder>&cnproj.freebsd.org;</holder> </copyright> diff --git a/zh_CN.GB2312/books/handbook/boot/chapter.sgml b/zh_CN.GB2312/books/handbook/boot/chapter.sgml index 0c910142c0..aa79182894 100644 --- a/zh_CN.GB2312/books/handbook/boot/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/boot/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Chinese (Simplified) Project - Original Revision: 1.68 + Original Revision: 1.70 $FreeBSD$ --> @@ -291,8 +291,10 @@ boot:</screen> <optional><replaceable>kernelname</replaceable></optional></term> <listitem> - <para>立即按照给定的选项 (如果有的话) 和内核名 - (如果是内核的) 引导内核。</para> + <para>立即按指定的选项启动指定名字的内核 (如果有指定的话)。 + 只有首先执行过 <emphasis>unload</emphasis> + 命令之后指定的内核名字才会生效, + 否则, 启动的将是先前已经加载的内核。</para> </listitem> </varlistentry> @@ -515,15 +517,15 @@ boot:</screen> 对于 X11 图形化的登录管理器无效。</para> <para>一些有关启动引导器的信息, - 包括启动选项菜单和一个定时倒数提示符都会在启动是显示, + 包括启动选项菜单和一个定时倒数提示符都会在启动时显示, 即是开启了 splash 图像功能。</para> - <para>splash 图像文件样本可以从 - <ulink url="http://www.bladwin.cx/splash/"></ulink> 下载。 - 安装了 <filename role="package">sysutils/bsd-splash-changer</filename> - port 之后, 每次启动的时候便能从集合中随机选择 - slash 图像。</para> - + <para>splash 图像文件样本可以从 <ulink + url="http://artwork.freebsdgr.org/node/3/">http://artwork.freebsdgr.org</ulink> 下载。 + 安装了 <filename + role="package">sysutils/bsd-splash-changer</filename> + port 之后, 每次启动的时候便能从集合中随机选择 + splash 图像。</para> </sect4> <sect4 id="boot-splash-enable"> diff --git a/zh_CN.GB2312/books/handbook/cutting-edge/chapter.sgml b/zh_CN.GB2312/books/handbook/cutting-edge/chapter.sgml index 51ad128bc3..9540d7d53a 100644 --- a/zh_CN.GB2312/books/handbook/cutting-edge/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/cutting-edge/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.233 + Original Revision: 1.240 $FreeBSD$ --> @@ -85,6 +85,12 @@ </listitem> <listitem> + <para>如何使用 + <application>CVSup</application><!-- 和 + <application>Docsnap</application>--> 来更新本地的文档。</para> + </listitem> + + <listitem> <para>两个开发分支 &os.stable; 和 &os.current; 的区别。</para> </listitem> @@ -168,7 +174,7 @@ <command>freebsd-update</command> 特性的部分, 那么这些在开始以下操作前必须先被禁止。</para> - <sect2> + <sect2 id="freebsdupdate-config-file"> <title>配置文件</title> <para>有些用户可能希望调整配置文件来更好的控制升级过程。 @@ -243,7 +249,7 @@ MergeChanges /etc/ /var/named/etc/</programlisting> # StrictComponents no</programlisting> <para>当设置成 <literal>yes</literal> 时, - <command>freebsd-udpate</command> 将假设这个 + <command>freebsd-update</command> 将假设这个 <literal>Components</literal> 列表时完整的, 并且对此列表以外的项目不会修改。实际上就是 <command>freebsd-update</command> 会尝试更新 @@ -251,7 +257,7 @@ MergeChanges /etc/ /var/named/etc/</programlisting> 列表里的每一个文件。</para> </sect2> - <sect2> + <sect2 id="freebsdupdate-security-patches"> <title>安全补丁</title> <para>安全补丁存储在远程的机器上, @@ -286,18 +292,43 @@ MergeChanges /etc/ /var/named/etc/</programlisting> 就需要重新启动系统。这将使 &os; 装载新的二进制程序进内存。</para> + <para><command>freebsd-update</command> 工具只能自动更新 <literal>GENERIC</literal> 内核。 + 如果您使用自行联编的内核, 则在 <command>freebsd-update</command> + 安装完更新的其余部分之后需要手工重新联编和安装内核。 不过, + <command>freebsd-update</command> 会检测并更新位于 <filename + class="directory">/boot/GENERIC</filename> (如果存在) 中的 + <literal>GENERIC</literal> 内核, 即使它不是当前 (正在运行的) + 系统的内核。</para> + <note> - <para><command>freebsd-update</command> 只能应用于 - <filename>GENERIC</filename> 内核。如果对 - <filename>GENERIC</filename> - 做了任何修改或者安装了一个自行编译的内核, - <command>freebsd-update</command> - 就无法完成升级 — 如前一个范例那样失败后 - 产生一条错误信息。</para> + <para>保存一份 <literal>GENERIC</literal> 内核的副本到 <filename + class="directory">/boot/GENERIC</filename> 是一个明智的主意。 + 在诊断许多问题, 以及在 + <xref linkend="freebsdupdate-upgrade"> 中介绍的使用 + <command>freebsd-update</command> 更新系统时会很有用。</para> + </note> + + <para>除非修改位于 + <filename>/etc/freebsd-update.conf</filename> 中的配置, + <command>freebsd-update</command> 会随其他安装一起对内核的源代码进行更新。 + 重新联编并安装定制的内核可以以通常的方式来进行。</para> + + <note> + <para>通过 <command>freebsd-update</command> 发布的更新有时并不会涉及内核。 + 如果在执行 + <command>freebsd-update install</command> 的过程中内核代码没有进行变动, + 就没有必要重新联编内核了。 不过, 由于 + <command>freebsd-update</command> 每次都会更新 + <filename>/usr/src/sys/conf/newvers.sh</filename> 文件, + 而修订版本 (<command>uname -r</command> 报告的 + <literal>-p</literal> 数字) 来自这个文件, 因此, + 即使内核没有发生变化, 重新联编内核也可以让 &man.uname.1; 报告准确的修订版本。 + 在维护许多系统时这样做会比较有帮助, + 因为这一信息可以迅速反映机器上安装的软件更新情况。</para> </note> </sect2> - <sect2> + <sect2 id="freebsdupdate-upgrade"> <title>重大和次要的更新</title> <para>这个过程会删除旧的目标文件和库, @@ -313,11 +344,58 @@ MergeChanges /etc/ /var/named/etc/</programlisting> <literal>yes</literal> 的话将在整个过程中对所有询问回答 <literal>yes</literal>,这会帮助在编译过程中免去人工的介入。</para> + <para>如果正在使用的是定制的内核, 则升级操作会复杂一些。 + 您会需要将一份 <literal>GENERIC</literal> 内核的副本放到 <filename + class="directory">/boot/GENERIC</filename>。 如果系统中没有 + <literal>GENERIC</literal> 内核, 可以用以下两种方法之一来安装:</para> + + <itemizedlist> + <listitem> + <para>如果只联编过一次内核, 则位于 + <filename class="directory">/boot/kernel.old</filename> 中的内核, + 就是 <literal>GENERIC</literal> 的那一个。 只需将这个目录改名为 + <filename class="directory">/boot/GENERIC</filename> 即可。</para> + </listitem> + + <listitem> + <para>假如能够直接接触机器, 则可以通过 CD-ROM 介质来安装 <literal>GENERIC</literal> + 内核。 将安装盘插入光驱, 并执行下列命令:</para> + + <screen>&prompt.root; <userinput>mount /cdrom</userinput> +&prompt.root; <userinput>cd /cdrom/<replaceable>X.Y-RELEASE</replaceable>/kernels</userinput> +&prompt.root; <userinput>./install.sh GENERIC</userinput></screen> + + <para>您需要将 <filename + class="directory"><replaceable>X.Y-RELEASE</replaceable></filename> + 替换为您正在使用的版本。 + <literal>GENERIC</literal> 内核默认情况下会安装到 <filename + class="directory">/boot/GENERIC</filename>。</para> + </listitem> + + <listitem> + <para>如果前面的方法都不可用, 还可以使用源代码来重新联编和安装 <literal>GENERIC</literal> + 内核:</para> + + <screen>&prompt.root; <userinput>cd /usr/src</userinput> +&prompt.root; <userinput>env DESTDIR=/boot/GENERIC make kernel</userinput> +&prompt.root; <userinput>mv /boot/GENERIC/boot/kernel/* /boot/GENERIC</userinput> +&prompt.root; <userinput>rm -rf /boot/GENERIC/boot</userinput></screen> + + <para>如果希望 <command>freebsd-update</command> 能够正确地将内核识别为 + <literal>GENERIC</literal>, 您必须确保没有对 + <literal>GENERIC</literal> 配置文件进行过任何变动。 + 此外, 建议您取消任何其他特殊的编译选项 (例如使用空的 + <filename>/etc/make.conf</filename>)。</para> + </listitem> + </itemizedlist> + + <para>上述步骤并不需要使用这个 <literal>GENERIC</literal> 内核来引导系统。</para> + <para>重大和次要的更新可以由 <command>freebsd-update</command> 命令后指定一个发行版本来执行, - 举例来说,下面的命令将帮助你升级到 &os; 6.3:</para> + 举例来说,下面的命令将帮助你升级到 &os; 6.4:</para> - <screen>&prompt.root; <userinput>freebsd-update -r 6.3-RELEASE upgrade</userinput></screen> + <screen>&prompt.root; <userinput>freebsd-update -r 6.4-RELEASE upgrade</userinput></screen> <para>在这个命令被执行后,<command>freebsd-update</command> 将会先解析配置文件和评估当前的系统以获得更新系统所需的必要信息。 @@ -325,7 +403,7 @@ MergeChanges /etc/ /var/named/etc/</programlisting> 例如:</para> <screen>Looking up update.FreeBSD.org mirrors... 1 mirrors found. -Fetching metadata signature for 6.3-BETA1 from update1.FreeBSD.org... done. +Fetching metadata signature for 6.3-RELEASE from update1.FreeBSD.org... done. Fetching metadata index... done. Inspecting system... done. @@ -345,16 +423,25 @@ Does this look reasonable (y/n)? y</screen> 将会尝试下载所有升级所需的文件。在某些情况下, 用户可能被问及需安装些什么和如何进行之类的问题。<para> - <para>下载完所有的补丁之后,它们很快就会被打上。 - 这个过程可能会持续一段时间,取决与机器的速度和当前的负载情况。 - 配置文件将会被合并 — 这一部分需要用户的参与, - 因为文件可能被合并或者屏幕上弹出了一个文本编辑器用来手工合并。 - 在处理过程中,每一个成功的合并都会给用户显示出来。 - 失败或者被忽略的合并则会引起合并程序的中止。 - 用户可能想要备份一下 <filename class="directory">/etc</filename> - 之后手工合并重要的文件,比如 - <filename>master.passwd</filename> 或 - <filename>group</filename>。</para> + <para>当使用定制内核时, 前面的步骤会产生类似下面的警告:</para> + + <screen>WARNING: This system is running a "<replaceable>MYKERNEL</replaceable>" kernel, which is not a +kernel configuration distributed as part of FreeBSD 6.3-RELEASE. +This kernel will not be updated: you MUST update the kernel manually +before running "/usr/sbin/freebsd-update install"</screen> + + <para>此时您可以暂时安全地无视这个警告。 更新的 + <literal>GENERIC</literal> 内核将在升级过程的中间步骤中使用。</para> + + <para>在下载完针对本地系统的补丁之后, 这些补丁会被应用到系统上。 + 这个过程需要消耗的时间取决于机器的速度和其负载。 + 这个过程中将会对配置文件所做的变动进行合并 — 这一部分需要用户的参与, + 文件可能会自动合并, 屏幕上也可能会给出一个编辑器, 用于手工完成合并操作。 + 在处理过程中, 合并成功的结果会显示给用户。 失败或被忽略的合并, + 则会导致这一过程的终止。 用户可能会希望备份一份 + <filename class="directory">/etc</filename> 并在这之后手工合并重要的文件, + 例如 <filename>master.passwd</filename> + 和 <filename>group</filename>。</para> <note> <para>系统至此还没有被修改,所有的补丁和合并都在另外一个目录中进行。 @@ -367,8 +454,25 @@ Does this look reasonable (y/n)? y</screen> <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> - <para>内核与内核模块会先被打上补丁。此时机器必须要重新启动。 - 使用下面的命令重启机器,这样新的内核将载入内存:</para> + <para>内核和内核模块会首先被打上补丁。 此时必须重新启动计算机。 + 如果您使用的是定制的内核, 请使用 &man.nextboot.8; + 命令来将下一次用于引导系统的内核 <filename + class="directory">/boot/GENERIC</filename> (它会被更新):</para> + + <screen>&prompt.root; <userinput>nextboot -k GENERIC</userinput></screen> + + <warning> + <para>在使用 <literal>GENERIC</literal> 内核启动之前, + 请确信它包含了用于引导系统所需的全部驱动程序 (如果您是在远程进行升级操作, + 还应确信网卡驱动也是存在的)。 特别要注意的情形是, + 如果之前的内核中静态联编了通常以内核模块形式存在的驱动程序, 一定要通过 + <filename>/boot/loader.conf</filename> 机制来将这些模块加载到 + <literal>GENERIC</literal> 内核的基础上。 此外, + 您可能也希望临时取消不重要的服务、 + 磁盘和网络挂载等等, 直到升级过程完成为止。</para> + </warning> + + <para>现在可以用更新后的内核引导系统了:</para> <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen> @@ -401,10 +505,13 @@ Does this look reasonable (y/n)? y</screen> <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> + <para>如果您临时用过 <literal>GENERIC</literal> 内核来引导系统, + 现在是按照通常的方法重新联编并安装新的定制内核的时候了。</para> + <para>重新启动机器进入新版本的 &os; 升级过程至此就完成了。</para> </sect2> - <sect2> + <sect2 id="freebsdupdate-system-comparison"> <title>系统状态对照</title> <para><command>freebsd-update</command> @@ -531,8 +638,304 @@ Fetching 133 new ports or files... done.</screen> <screen>&prompt.root; <userinput>portsnap fetch update</userinput></screen> </sect1> + <sect1 id="updating-upgrading-documentation"> + <title>更新系统附带的文档</title> + + <indexterm><primary>更新和升级</primary></indexterm> + + <indexterm> + <primary>文档</primary> + <see>更新和升级</see> + </indexterm> + + <para>除了基本系统和 Ports 套件之外, 文档也是 &os; 操作系统的一个组成部分。 + 尽管您总是可以通过 <ulink + url="http://www.freebsd.org/doc/">&os; 网站</ulink> 来访问最新的 &os; + 文档, 一些用户的网络连接可能很慢, 甚至完全没有网络连接。 + 幸运的是, 有很多方法可以用来更新随发行版本附带的 &os; 文档的本地副本。</para> + + <sect2 id="csup-doc"> + <title>使用 CVSup 来更新文档</title> + + <para>&os; 文档的源代码和安装版本都可以通过 <application>CVSup</application> + 来以与基本系统 (参考 <xref linkend="makeworld">) 类似的方法来升级。 + 这一节中将会介绍:</para> + + <itemizedlist> + <listitem> + <para>如何安装联编文档所需的工具集, 用于从源代码来联编 &os; + 文档所需的那些工具。</para> + </listitem> + + <listitem> + <para>如何使用 <application>CVSup</application> + 将文档下载到 <filename class="directory">/usr/doc</filename>。</para> + </listitem> + + <listitem> + <para>如何从源代码联编 &os; 文档, + 并将其安装到 <filename class="directory">/usr/share/doc</filename>。</para> + </listitem> + + <listitem> + <para>联编文档的过程中支持的一些编译选项, + 例如只联编某些语言的版本, 或只联编特定的输出格式。</para> + </listitem> + </itemizedlist> + </sect2> + + <sect2 id="installing-documentation-toolchain"> + <title>安装 CVSup 和文档工具集</title> + + <para>从源代码联编 &os; 文档需要大量的工具。 + 这些工具并不是 &os; 基本系统的一部分, + 因为这些工具需要占用大量的磁盘空间, + 而且并不是对所有 &os; 用户都有用; + 只有活跃地撰写 &os; 新文档, + 或经常从源代码更新文档的用户才需要这些工具。</para> + + <para>全部所需的工具, 均可通过 Ports + 套件来安装。 <filename + role="package">textproc/docproj</filename> port 是由 + &os; 文档计划开发的方便安装和更新这些工具的主 + port。</para> + + <note> + <para>如果不需要 &postscript; 或 PDF 文档的话, + 也可以考虑安装 <filename + role="package">textproc/docproj-nojadetex</filename> port。 + 这套文档工具集包含除了 <application>teTeX</application> + typesetting 引擎之外的其他全部工具。 <application>teTeX</application> + 是一个很大的工具集, 因此如果不需要 PDF 输出的话, + 排除它会节省很多时间和磁盘空间。</para> + </note> + + <para>如欲了解关于安装和使用 + <application>CVSup</application> 的进一步信息, 请参阅 <link + linkend="cvsup">使用 CVSup</link>。</para> + </sect2> + + <sect2 id="updating-documentation-sources"> + <title>更新文档源代码</title> + + <para><application>CVSup</application> 工具能够下载文档源代码的原始副本, + 您可使用 <filename>/usr/share/examples/cvsup/doc-supfile</filename> + 文件作为配置模板来修改。 在 <filename>doc-supfile</filename> + 中的默认主机名是一个无效的占位主机名, + 但 &man.cvsup.1; 能够通过命令行来指定主机名, + 因此文档源代码可以使用下面的命令从 + <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> + + <para>您应将 <replaceable>cvsup.FreeBSD.org</replaceable> + 改为最近的 <application>CVSup</application> 服务器。 参见 <xref + linkend="cvsup-mirrors"> 关于镜像站点的完整列表。</para> + + <para>初始的文档源代码下载需要一些时间, + 您需要耐心等待它完成。</para> + + <para>后续的更新可以用同样的命令来进行。 + 由于 <application>CVSup</application> 工具只下载上次运行之后所发生过的更新, + 因此在首次运行之后再运行 <application>CVSup</application> 应该是很快的。</para> + + <para>在签出源代码之后, 还可以使用另一种由 <filename + class="directory">/usr/doc</filename> 目录中的 + <filename>Makefile</filename> 支持的方法来更新它。 通过在 + <filename>/etc/make.conf</filename> 中配置 + <makevar>SUP_UPDATE</makevar>、 <makevar>SUPHOST</makevar> 和 + <makevar>DOCSUPFILE</makevar>, 可以通过运行:</para> + + <screen>&prompt.root; <userinput>cd /usr/doc</userinput> +&prompt.root; <userinput>make update</userinput></screen> + + <para>来完成更新。 典型的 <filename>/etc/make.conf</filename> + 中的 &man.make.1; 选项是:</para> + + <programlisting>SUP_UPDATE= yes +SUPHOST?= cvsup.freebsd.org +DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile</programlisting> + + <note> + <para>将 <makevar>SUPHOST</makevar> + 和 <makevar>DOCSUPFILE</makevar> 的值使用 <literal>?=</literal> + 来指定的好处是使 make 命令行能够覆盖这些选项。 + 在向 <filename>make.conf</filename> 中增加选项时推荐这样做, + 以避免在测试时反复修改这个文件。</para> + </note> + </sect2> + + <sect2 id="updating-documentation-options"> + <title>文档源代码中可调的选项</title> + + <para>&os; 文档的更新和联编系统支持一些方便只更新一部分文档, + 或只联编特定格式及译文的选项。 + 这些选项可以在 <filename>/etc/make.conf</filename> 文件中配置, + 也可以通过 &man.make.1; 工具来指定。</para> + + <para>这些选项包括:</para> + + <variablelist> + <varlistentry> + <term><makevar>DOC_LANG</makevar></term> + + <listitem> + <para>准备联编和安装的语言列表。 + 例如, 指定为 <literal>en_US.ISO8859-1</literal> 表示只联编英文版的文档。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><makevar>FORMATS</makevar></term> + + <listitem> + <para>准备输出的格式列表。 目前, + 系统支持 <literal>html</literal>、 + <literal>html-split</literal>、 <literal>txt</literal>、 + <literal>ps</literal>、 <literal>pdf</literal>、 + 和 <literal>rtf</literal>。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><makevar>SUPHOST</makevar></term> + + <listitem> + <para>用于用来更新的 <application>CVSup</application> + 服务器的主机名。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><makevar>DOCDIR</makevar></term> + + <listitem> + <para>用于安装文档的目录。 默认为 + <filename + class="directory">/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> + </sect2> + + <sect2 id="updating-installed-documentation"> + <title>从源代码安装 &os; 文档</title> + + <para>在 <filename class="directory">/usr/doc</filename> + 中下载了最新的文档源代码快照之后, + 就可以开始动手联编文档了。</para> + + <para>要更新全部 <makevar>DOC_LANG</makevar> 中定义的语言的文档, + 需要执行下面的命令:</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> 选项, + 则可以将更新源代码和安装一步完成:</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> 中与之对应的目录中运行 + &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> + + <screen>&prompt.root; <userinput>cd /usr/doc</userinput> +&prompt.root; <userinput>make FORMATS='html html-split' install clean</userinput></screen> + </sect2> + +<!-- FIXME: Waiting for a working docsnap server... --> +<![ IGNORE [ + <sect2 id="docsnap"> + <sect2info> + <authorgroup> + <author> + <firstname>Pav</firstname> + <surname>Lucistnik</surname> + <contrib>Based on information provided by </contrib> + </author> + </authorgroup> + </sect2info> + + <title>Using Docsnap</title> + + <indexterm><primary>Updating and Upgrading</primary></indexterm> + + <indexterm> + <primary>Docsnap</primary> + <see>Updating and Upgrading</see> + </indexterm> + + <para><application>Docsnap</application> is an &man.rsync.1; + repository for updating installed &os; Documentation in a + relatively easy and fast way. A + <quote><application>Docsnap</application> server</quote> tracks + the documentation sources, and builds them in HTML format every + hour. The <filename role="package">textproc/docproj</filename> + is unneeded with <application>Docsnap</application> as only + patches to the built documentation exist.</para> + + <para>The only requirement for using this technique is + the <filename role="package">net/rsync</filename> port or + package. To add it, use the following command:</para> + + <screen>&prompt.root; <userinput>pkg_add -r rsync</userinput></screen> + + <note> + <para><application>Docsnap</application> has been originally + developed for updating documentation installed + to <filename class="directory">/usr/share/doc</filename>, but + the following examples could be adapted for other directories + as well. For user directories, it does not require + <username>root</username> privileges.</para> + </note> + + <para>To update the documentation set, issue the following + command:</para> + + <screen>&prompt.root; <userinput>rsync -rltvz <replaceable>docsnap.sk.FreeBSD.org</replaceable>::docsnap <replaceable>/usr/share/doc</replaceable></userinput></screen> + + <note> + <para>There is only one <application>Docsnap</application> + server at the moment; + the <hostid>docsnap.sk.FreeBSD.org</hostid> shown + above.</para> + </note> + + <para>Do not use the <option>--delete</option> flag here as there + are some items installed + into <filename class="directory">/usr/share/doc</filename> + during <command>make installworld</command>, which would + accidentally be removed. To clean up, use this command + instead:</para> + + <screen>&prompt.root; <userinput>rsync -rltvz --delete <replaceable>docsnap.sk.FreeBSD.org</replaceable>::docsnap/??_??\.\* <replaceable>/usr/share/doc</replaceable></userinput></screen> + + <para>If a subset of documentation needs to be updated, for + example, the English documentation only, the following command + should be used:</para> + + <screen>&prompt.root; <userinput>rsync -rltvz <replaceable>docsnap.sk.FreeBSD.org</replaceable>::docsnap/en_US.ISO8859-1 <replaceable>/usr/share/doc</replaceable></userinput></screen> + </sect2> +]]> + </sect1> + <sect1 id="current-stable"> - <title>追踪开发分支/title> + <title>追踪开发分支</title> <indexterm><primary>-CURRENT</primary></indexterm> <indexterm><primary>-STABLE</primary></indexterm> @@ -1012,13 +1415,167 @@ Fetching 133 new ports or files... done.</screen> <command>make world</command> 都是不应该做的事情, 您应该使用这里描述的方法。</para> </warning> - <sect2> - <title>更新系统的规范途径</title> + <sect2 id="canonical-build"> + <title>更新系统的规范方法</title> + + <para>在更新系统时, 一定要首先查看 + <filename>/usr/src/UPDATING</filename> 文件, 以便了解在 buildworld + 之前需要进行的操作, 然后按照下面列出的步骤进行操作:</para> + + <para>这些更新步骤假定您使用的是包含旧编译器、 内核以及用户态工具及配置的旧版 + &os;。 我们使用 <quote>world</quote> 来表示系统中的核心执行文件、 + 函数库和程序文件。 编译器是 <quote>world</quote> 的一部分, + 但有其特殊性。</para> + + <para>此外, 我们还假定您已经获得了较新版本操作系统的源代码。 + 如果您正更新的系统中的源代码也是旧版系统所附带的, + 您还需要参阅 <xref linkend="synching"> 来把代码同步到较新的版本。</para> + + <para>从源代码更新系统, 有时会比初看上去的时候更麻烦一些, + 另一方面, &os; 的开发人员有时会不得不修改推荐的更新步骤, + 特别是当出现了一些无法避免的依赖关系的时候。 这一节余下的部分, + 将介绍目前推荐的更新步骤背后的原理。</para> + + <para>成功的更新操作必须解决下面的这些问题:</para> + + <itemizedlist> + <listitem> + <para>旧的编译器可能无法编译新的内核。 (另一方面, + 旧的编译器很可能有 bug。) 因此, 新的内核应该以新的编译器编译。 + 更具体地说, 新的编译器应在新内核开始联编之前已经完成了联编步骤。 + 请注意, 新的编译器并不一定需要在联编新内核之前 + <emphasis>安装</emphasis> 到系统中。</para> + </listitem> + + <listitem> + <para>新的 world 有可能依赖一些新的内核特性。 + 因此, 新内核必须在新的 world 之前安装。</para> + </listitem> + </itemizedlist> + + <para>这两个问题就是为什么我们将在后面的章节中介绍的, + 需要按照 <maketarget>buildworld</maketarget>、 + <maketarget>buildkernel</maketarget>、 + <maketarget>installkernel</maketarget>、 + <maketarget>installworld</maketarget> 的顺序来更新系统的原因。 + 这并不是您需要遵守推荐的更新操作的全部原因, + 除了这两个最重要的理由之外, 还有一些并不那么显而易见的原因:</para> + + <itemizedlist> + <listitem> + <para>旧的 world 可能无法配合新的内核正常工作, + 因此, 您在安装完新内核之后, 应尽快将 world 也随之更新。</para> + </listitem> + + <listitem> + <para>有些配置文件的变动必须在安装新的 world 之前完成, + 而另一些配置文件的变动则有可能导致旧 world 工作不正常。 + 因此, 通常而言会需要两次不同的配置文件更新步骤。</para> + </listitem> + + <listitem> + <para>多数情况下, 更新步骤只会替换或增加文件; + 换言之, 现有的旧文件并不会被删除。 有时, + 这可能会导致一些其他问题。 因此, 有时安装操作会指明, + 必须在某些操作之前手工删除一些文件。 这些在未来可能会被自动化, + 也可能不会自动化。</para> + </listitem> + </itemizedlist> + + <para>由于有这些考虑, 因此一般情况下我们建议使用下列更新步骤。 + 请注意, 具体的更新操作中可能会需要一些附加的步骤, + 但核心的过程应该是不会轻易发生变化的:</para> + + <orderedlist> + <listitem> + <para><command>make <maketarget>buildworld</maketarget></command></para> + + <para>这步操作会联编新的编译器, 以及少量相关工具, + 并在随后使用新的编译器来联编 + world。 联编的结果会存放在 <filename class="directory">/usr/obj</filename>。</para> + </listitem> + + <listitem> + <para><command>make <maketarget>buildkernel</maketarget></command></para> + + <para>与旧式的、 使用 &man.config.8; 和 + &man.make.1; 的方法不同, + 这种做法会使用存放于 <filename class="directory">/usr/obj</filename> + 中的 <emphasis>新的</emphasis> 编译器。 + 这种做法使得您免去了由于编译器与内核源代码不一致导致的问题。</para> + </listitem> + + <listitem> + <para><command>make <maketarget>installkernel</maketarget></command></para> + + <para>安装新的内核及其模块, + 使系统能够以更新后的内核启动。</para> + </listitem> + + <listitem> + <para>重启系统并进入单用户模式。</para> + + <para>单用户模式使得更新正在运行的软件可能导致的问题减到最少。 + 此外, 它也使配合新内核运行旧 world 可能出现的问题减到最少。</para> + </listitem> + + <listitem> + <para><command>mergemaster <option>-p</option></command></para> + + <para>这步操作会进行完成安装新的 world 所需的配置文件更新操作。 + 例如, 它可能会在系统的密码数据库中添加新的用户组或用户。 + 这些操作通常在上次更新之后增加了新的用户组或特殊系统用户之后是需要的, + 因为 <maketarget>installworld</maketarget> 这步操作会需要这些用户或组才能顺利完成。</para> + </listitem> + + <listitem> + <para><command>make <maketarget>installworld</maketarget></command></para> + + <para>从 <filename class="directory">/usr/obj</filename> 中复制 world。 + 这步操作之后, 您在盘上的系统, 包括内核和 world 就都是新的了。</para> + </listitem> + + <listitem> + <para><command>mergemaster</command></para> + + <para>更新余下的配置文件, + 因为您的 world 已经更新完成了。</para> + </listitem> + + <listitem> + <para>重启系统。</para> + + <para>这步操作将加在新的内核, 以及新的 world 和更新过的配置文件。</para> + </listitem> + </orderedlist> + + <para>注意, 如果您正从同一 &os; 版本分支升级, 例如, 从 7.0 到 + 7.1, 则上述过程可能没有那么必要, 因为您不太可能遇到严重的编译器、 + 内核源代码、 用户态程序源代码或配置文件不匹配的情形。 + 旧式的 <command>make <maketarget>world</maketarget></command> + 然后再联编新内核的升级方法, 很可能有机会能够正常运作而完成升级工作。</para> + + <para>但是, 在大版本升级的过程中, 不按照前面所介绍的操作来进行升级时, + 便很可能遇到一些问题。</para> + + <para>此外, 还需要注意的是, 有些时候升级的过程中 + (例如从 4.<replaceable>X</replaceable> 到 5.0) 可能会需要一些额外的步骤 + (例如在 installworld 之前更名或删除一些文件)。 请仔细阅读 + <filename>/usr/src/UPDATING</filename> 这个文件, + 特别是它的结尾部分所介绍的推荐的升级操作顺序。</para> + + <para>由于开发人员发现不可能完全避免一些不匹配方面的问题, + 这个过程一直在演化过程中。 不过幸运的是, 目前推荐的这个升级步骤, + 应该能够在很长一段时间内不需要做任何调整。</para> + + <note> + <para>从 &os; 3.<replaceable>X</replaceable> 或更早的版本进行升级, + 是一件非常麻烦的事情; 请务必仔细阅读 <filename>UPDATING</filename> + 之后再开始这类升级。</para> + </note> - <para>要更新系统, 就一定要首先查看 - <filename>/usr/src/UPDATING</filename> 文件, 以了解 - buildworld 之前需要完成的步骤, - 然后使用下面的过程:</para> + <para>总结一下, 目前推荐的从源代码升级 &os; + 的方法是:</para> <screen>&prompt.root; <userinput>cd /usr/src</userinput> &prompt.root; <userinput>make buildworld</userinput> @@ -1040,7 +1597,8 @@ Fetching 133 new ports or files... done.</screen> 可以在加载器提示后输入 <command>boot -s</command>)。 接下来执行:</para> - <screen>&prompt.root; <userinput>mount -a -t ufs</userinput> + <screen>&prompt.root; <userinput>adjkerntz -i</userinput> +&prompt.root; <userinput>mount -a -t ufs</userinput> &prompt.root; <userinput>mergemaster -p</userinput> &prompt.root; <userinput>cd /usr/src</userinput> &prompt.root; <userinput>make installworld</userinput> @@ -1056,7 +1614,7 @@ Fetching 133 new ports or files... done.</screen> </warning> </sect2> - <sect2> + <sect2 id="src-updating"> <title>阅读 <filename>/usr/src/UPDATING</filename></title> <para>在您做其它事之前,请阅读 @@ -1072,7 +1630,7 @@ Fetching 133 new ports or files... done.</screen> </important> </sect2> - <sect2> + <sect2 id="make-conf"> <title>检查 <filename>/etc/make.conf</filename></title> <indexterm> <primary><filename>make.conf</filename></primary> @@ -1098,8 +1656,8 @@ Fetching 133 new ports or files... done.</screen> <makevar>NOPORTDOCS</makevar> 等等), 看看是否合用。</para> </sect2> - <sect2> - <title>更新 <filename>/etc</filename> 里边的文件</title> + <sect2 id="updating-etc"> + <title>更新 <filename>/etc</filename> 里的文件</title> <para><filename>/etc</filename> 目录包含有除了您的系统启动时执行的脚本外大部分的系统配置信息。 @@ -1187,7 +1745,7 @@ Fetching 133 new ports or files... done.</screen> </sect2> - <sect2> + <sect2 id="cleaning-usr-obj"> <title>删除 <filename>/usr/obj</filename></title> <para>随着重新构建系统的进行, 编译结果会放到 (默认情况下) @@ -1355,7 +1913,7 @@ Script done, …</screen> </sect3> </sect2> - <sect2> + <sect2 id="new-kernel"> <title>编译和安装新内核</title> <indexterm> <primary>内核</primary> @@ -1396,7 +1954,7 @@ Script done, …</screen> 的信息;查看 &man.chflags.1; 了解更多关于不同文件标识的信息。</para> </sect2> - <sect2> + <sect2 id="new-kernel-singleuser"> <title>重启到单用户模式</title> <indexterm><primary>单用户模式</primary></indexterm> @@ -1437,7 +1995,7 @@ Script done, …</screen> </note> </sect2> - <sect2> + <sect2 id="post-installworld-updates"> <title>不是由 <command>make installworld</command> 更新的更新文件</title> <para>重新编译整个系统不会使用新的或改过的配置文件更新某些目录 @@ -1665,7 +2223,7 @@ Script done, …</screen> &prompt.root; <userinput>make all install</userinput></screen> </sect2> - <sect2> + <sect2 id="updating-questions"> <title>问题</title> <qandaset> @@ -1951,7 +2509,7 @@ Building everything.. 里一定要有每台机器的内核配置文件,如果它想构建它们的内核的话。</para> </sect2> - <sect2> + <sect2 id="small-lan-base-system"> <title>基本系统</title> <para>既然所有的妥当了,就准备构建所有的东西。如<xref @@ -1969,7 +2527,7 @@ Building everything.. 就使用相同的过程在 <quote>构建集群</quote>里的其它机器里安装新的软件。</para> </sect2> - <sect2> + <sect2 id="small-lan-ports"> <title>Ports</title> <para>类似的想法是使用 ports 树。 diff --git a/zh_CN.GB2312/books/handbook/desktop/chapter.sgml b/zh_CN.GB2312/books/handbook/desktop/chapter.sgml index 4a0a753327..331182050a 100644 --- a/zh_CN.GB2312/books/handbook/desktop/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/desktop/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Chinese Project - Original Revision: 1.85 + Original Revision: 1.86 $FreeBSD$ --> @@ -265,7 +265,7 @@ <filename class="directory">/usr/compat/linux/proc</filename>。 可以通过以下的命令实现:</para> - <screen>&prompt.user; <userinput>mount -t linprocfs linproc /usr/compat/linux/proc</userinput></screen> + <screen>&prompt.root; <userinput>mount -t linprocfs linproc /usr/compat/linux/proc</userinput></screen> <para>这也可以在机器启动时自动挂载, 把以下这行加入 <filename>/etc/fstab</filename>:</para> diff --git a/zh_CN.GB2312/books/handbook/eresources/chapter.sgml b/zh_CN.GB2312/books/handbook/eresources/chapter.sgml index 7f2601bb73..71c56f5d01 100644 --- a/zh_CN.GB2312/books/handbook/eresources/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/eresources/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.196 + Original Revision: 1.197 $FreeBSD$ --> @@ -346,6 +346,11 @@ </row> <row> + <entry>&a.mono.name;</entry> + <entry>FreeBSD 上的 Mono 和 C# 应用</entry> + </row> + + <row> <entry>&a.mozilla.name;</entry> <entry>移植 <application>Mozilla</application> 到 FreeBSD 上</entry> </row> @@ -1178,6 +1183,21 @@ </varlistentry> <varlistentry> + <term>&a.mono.name;</term> + + <listitem> + <para><emphasis>FreeBSD 上的 + Mono 和 C# 应用</emphasis></para> + + <para>这是一个讨论 &os; 上的 Mono + 开发框架的邮件列表。 这是一个纯技术的邮件列表。 + 它是为将 Mono 或 C# 应用移植到 &os;, + 以及提出问题及讨论其他解决方案的人准备的。 + 此外, 也欢迎有兴趣参与讨论的其他人。</para> + </listitem> + </varlistentry> + + <varlistentry> <term>&a.openoffice.name;</term> <listitem> diff --git a/zh_CN.GB2312/books/handbook/introduction/chapter.sgml b/zh_CN.GB2312/books/handbook/introduction/chapter.sgml index 5982913295..d66788ccb0 100644 --- a/zh_CN.GB2312/books/handbook/introduction/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/introduction/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.130 + Original Revision: 1.133 $FreeBSD$ --> @@ -354,7 +354,7 @@ 了解获取 &os; 的更多细节。</para> </sect2> - <sect2> + <sect2 id="introduction-nutshell-users"> <title>谁在使用 &os;?</title> <indexterm> @@ -377,7 +377,7 @@ <indexterm><primary>Juniper</primary></indexterm> <listitem> - <para><ulink url="http://www.juniper.com/">Juniper</ulink></para> + <para><ulink url="http://www.juniper.net/">Juniper</ulink></para> </listitem> <indexterm><primary>NetApp</primary></indexterm> @@ -410,9 +410,9 @@ <para><ulink url="http://www.rambler.ru/">Rambler</ulink></para> </listitem> - <indexterm><primary>Sina</primary></indexterm> + <indexterm><primary>新浪网</primary></indexterm> <listitem> - <para><ulink url="http://www.sina.com/">Sina</ulink></para> + <para><ulink url="http://www.sina.com/">新浪网</ulink></para> </listitem> <indexterm><primary>Pair Networks</primary></indexterm> @@ -532,30 +532,27 @@ <indexterm><primary>U.C. Berkeley</primary></indexterm> <indexterm><primary>Net/2</primary></indexterm> <indexterm><primary>AT&T</primary></indexterm> - <para>然而此后不久,发生了一些意外的情况。 - Novell 和 U.C. Berkeley 决定就 Berkeley Net/2 - 磁带的归属权问题打的那场马拉松式的官司达成和解。 - 判决的结果是, - U.C. Berkeley 承认 Net/2 很大一部分代码是 - <quote>侵占来的</quote> - 且这些代码归 Novell 公司所拥有。这些代码是 Novell 不久前从 - AT&T 买来的。 - Berkeley 得到了来自 Novell 的 <quote>祝福</quote>: - 4.4BSD-Lite 发行后,将不认为是侵权, - 且要求现存的 Net/2 的用户更换新版。 - 这也包括 &os;,我们的项目被要求在 1994 年 6 月底停止发行基于 - Net/2 的产品。在此协议允许的时间内, - 本项目被允许发行最后一版,也就是 &os; 1.1.5.1。</para> - - <para>于是 &os; 开始艰苦的从全新的而且不完整的 4.4BSD-Lite - 中重新整合自己。<quote>Lite</quote> 版本是不完整的, - 因为 Berkeley 的 CSRG 已经删除了大量的构建可启动运行的系统所需要的代码 - (因为各种各样的版权问题),事实上 4.4 的 Intel port 是非常不完整的。 - 直到 1994 年 11 月项目才完成这个转换,这个时候才把 - &os; 2.0 通过网络和 CD-ROM(在 12 月)发布出来。 - 尽管系统很多地方还很粗糙,这个版本还是取得了重大的成功, - 接下来在 1995 年 6 月发布了更强大和容易安装的 &os; 2.0.5 - 版本。</para> + <para>在这段时间, 发生了一些意外的情况。 Novell 和 U.C. Berkeley 就 Berkeley Net/2 + 磁带知识产权的马拉松式的官司达成了和解。 和解中的一部分是 U.C. Berkeley + 作出的让步, 令 Net/2 中的一大部分内容成为 <quote>受限的 (encumbered)</quote> + 和属于 Novell 知识产权的代码, 而后者在不久前刚刚从 + AT&T 收购了这些产权; 作为回报, Berkeley 得到了来自 + Novell 的 <quote>许诺</quote>, 在 4.4BSD-Lite 版本正式发布时, + 可以声明为不受限的 (unencumbered), 现有的 Net/2 用户则强烈建议转移到这个版本。 + 这包括了 &os;, 而我们的项目则被允许在 + 1994 年 6 月底之前继续发行基于 Net/2 的产品。 + 根据和解协议, 在最后期限之前我们发布了一个最终版本, + 这个版本是 &os; 1.1.5.1。</para> + + <para>接下来, &os; 开始了艰苦的从全新的、 不太完整的 4.4BSD-Lite + 重新编写自己的过程。 <quote>Lite</quote> 版本中, Berkeley 的 + CSRG 删除了用于让系统能够引导的一大部分代码 + (由于各种各样的法律需求), 而当时 4.4 在 Intel + 平台的移植版本还有很多工作没有完成。 直到 1994 年 11 月, + 我们的项目才完成了这项过渡, 并通过网络以及 CD-ROM (在 12 月底) + 上发布了 &os; 2.0。 尽管系统中还有很多比较粗糙的地方, + 这个版本还是取得了巨大的成功, + 并在 1995 年 6 月发布了更强大和易于安装的 &os; 2.0.5 版本。</para> <para>我们于 1996 年 8 月发布了 &os; 2.1.5 版本, 它在 ISP 和商业团体中非常流行。 @@ -600,12 +597,12 @@ <para>其后在 2005 年 7 月又建立了 RELENG_6 分支。 而 6.X 分支上的第一个版本, 即 6.0-RELEASE, 则是在 2005 年 11 月发布的。 最新的 &rel2.current;-RELEASE 发布于 &rel2.current.date;。 - 我们还将继续从 RELENG_6 发布新的版本。</para> + 这很可能是我们发布的最后一个 RELENG_6 的发行版本。</para> <para>RELENG_7 分支于 2007 年 10 月创建。 - 这个分支最新的发布版本是 &rel.current.date; - 的 &rel.current;-RELEASE。 RELENG_7 - 分支将会有其他后继发布版本。</para> + 第一个这个分支的发行版是 7.0-RELEASE, 这个版本是 2008 年 2 月发布的。 + 最新的 &rel.current;-RELEASE 是在 &rel.current.date; 发布的。 + RELENG_7 还将会有其它后续的发布版本。</para> <para>目前, 中长期的开发项目继续在 8.X-CURRENT (主干, trunk) 分支中进行, 而 8.X 的 diff --git a/zh_CN.GB2312/books/handbook/jails/chapter.sgml b/zh_CN.GB2312/books/handbook/jails/chapter.sgml index 9df9769db8..ca014ce8a3 100644 --- a/zh_CN.GB2312/books/handbook/jails/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/jails/chapter.sgml @@ -133,7 +133,7 @@ 从而建立一个与系统中其他部分相隔离的安全环境: 在 chroot 环境中的进程, 将无法访问其外的文件或其他资源。 正是由于这种能力, 即使攻击者攻破了某一个运行于 chroot 环境的服务, 也不能攻破整个系统。 - &man.chroot.8; 对于哪些不需要很多灵活性或复杂的高级功能的简单应用而言相当好用。 + &man.chroot.8; 对于那些不需要很多灵活性或复杂的高级功能的简单应用而言相当好用。 另外, 在引入 chroot 概念的过程中, 曾经发现过许多跳出 chroot 环境的方法, 尽管这些问题在较新的 &os; 版本中已经修正, 但很明显地, &man.chroot.8; 并不是一项用于加固服务安全的理想解决方案。 diff --git a/zh_CN.GB2312/books/handbook/l10n/chapter.sgml b/zh_CN.GB2312/books/handbook/l10n/chapter.sgml index 2526d4d70f..d92911f56e 100644 --- a/zh_CN.GB2312/books/handbook/l10n/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/l10n/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Chinese Documentation Project - Original Revision: 1.126 + Original Revision: 1.128 $FreeBSD$ --> @@ -32,10 +32,9 @@ <para>FreeBSD是一个由分布于全世界的用户和贡献者支持的项目。 这章将讨论FreeBSD的国际化和本地化的问题,允许非英语用户也能使用FreeBSD很好地工作。 - 在系统和应用水平上,主要是通过执行i18N标准来实现的,所以这里我们将为读者提供详细的介绍。 - </para> + 在系统和应用水平上,主要是通过执行i18N标准来实现的,所以这里我们将为读者提供详细的介绍。</para> - <para>读完这一章,您将了解到:</para> + <para>读完这一章,您将了解:</para> <itemizedlist> <listitem><para>不同的语言和地域是如何在现代操作系统上进行编码的。 </para></listitem> @@ -750,13 +749,14 @@ Option "XkbOptions" "grp:toggle"</programlisting> <keycombo action="simul"><keycap>Shift</keycap><keycap>CapsLock</keycap></keycombo> 来模拟(只有在LAT模式的时候)。</para> - <para>使用 <literal>grp:caps_toggle</literal> + <para>使用 <literal>grp:toggle</literal> 时, RUS/LAT 切换键将是 <keycap>右 Alt</keycap>, 而使用 <literal>grp:ctrl_shift_toggle</literal> 则表示切换键是 <keycombo action="simul"><keycap>Ctrl</keycap><keycap>Shift</keycap></keycombo>。 + 使用 <literal>grp:caps_toggle</literal> + 时, RUS/LAT 切换键则是 <keycap>CapsLock</keycap>。 旧的 <keycap>CapsLock</keycap> 功能仍可通过 <keycombo action="simul"><keycap>Shift</keycap><keycap>CapsLock</keycap></keycombo> (只对 LAT - 模式有效)。 对于 <literal>grp:toggle</literal> - 而言 RUS/LAT 开关则是 <keycap>Right Alt</keycap>。 由于不明原因, + 模式有效)。 由于不明原因, <literal>grp:caps_toggle</literal> 在 <application>&xorg;</application> 中无法使用。</para> @@ -807,12 +807,25 @@ Option "XkbOptions" "grp:toggle"</programlisting> <secondary>德语</secondary> </indexterm> - <para>Slaven Rezic <email>eserte at cs.tu-berlin.de</email> - 写了一个在FreeBSD机器下如何使用日尔曼语言的德语指南。 这份德语教程可以在 + <para>Slaven Rezic <email>eserte@cs.tu-berlin.de</email> + 写了一个在 FreeBSD 机器下如何使用日尔曼语言的德语指南。 这份德语教程可以在 <ulink url="http://user.cs.tu-berlin.de/~eserte/FreeBSD/doc/umlaute/umlaute.html"></ulink> 找到。</para> </sect2> <sect2> + <title>希腊语本地化</title> + + <indexterm> + <primary>localization (本地化)</primary> + <secondary>Greek (希腊语)</secondary> + </indexterm> + <para>Nikos Kokkalis <email>nickkokkalis@gmail.com</email> + 撰写了关于在 &os; 上支持希腊语的完整文章, 在 <ulink + url="&url.doc.base;/el_GR.ISO8859-7/articles/greek-language-support/index.html">http://www.freebsd.org/doc/el_GR.ISO8859-7/articles/greek-language-support/index.html</ulink>。 + 请注意这篇文章 <emphasis>只有</emphasis> 希腊语的版本。</para> + </sect2> + + <sect2> <title>日语和韩语本地化</title> <indexterm> <primary>本地化</primary> @@ -829,10 +842,10 @@ Option "XkbOptions" "grp:toggle"</programlisting> <sect2> <title>非英语的FreeBSD文档</title> - <para>一些FreeBSD的贡献者已经将部分FreeBSD文档翻译成了其他语言。 - 可以通过<ulink - url="&url.base;/index.html">主站</ulink> 或者 - <filename>/usr/share/doc</filename> 查到。</para> + <para>一些 FreeBSD 的贡献者已经将部分 FreeBSD 文档翻译成了其他语言。 + 您可在 <ulink + url="&url.base;/index.html">主站</ulink> 以及 + <filename>/usr/share/doc</filename> 找到。</para> </sect2> </sect1> </chapter> diff --git a/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml b/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml index 198a07d11c..aa1b7e3f5c 100644 --- a/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Chinese Documentation Project - Original Revision: 1.455 + Original Revision: 1.458 $FreeBSD$ --> @@ -2303,6 +2303,15 @@ doc/zh_*</screen> </varlistentry> <varlistentry> + <term>RELENG_7_1</term> + + <listitem> + <para>FreeBSD-7.1 的发行版分支, 只用于安全公告, + 以及其他重要更新。</para> + </listitem> + </varlistentry> + + <varlistentry> <term>RELENG_7_0</term> <listitem> @@ -2552,6 +2561,14 @@ doc/zh_*</screen> <variablelist> <varlistentry> + <term>RELENG_7_1_0_RELEASE</term> + + <listitem> + <para>FreeBSD 7.1</para> + </listitem> + </varlistentry> + + <varlistentry> <term>RELENG_7_0_0_RELEASE</term> <listitem> @@ -2940,22 +2957,6 @@ doc/zh_*</screen> </varlistentry> <varlistentry> - <term>德国</term> - - <listitem> - <para>rsync://grappa.unix-ag.uni-kl.de/</para> - - <para>可用的 collection:</para> - <itemizedlist> - <listitem><para>freebsd-cvs:完整的 FreeBSD - CVS 仓库。</para></listitem> - </itemizedlist> - <para>这台服务器也镜像 NetBSD 和 OpenBSD 项目, - 还有其他的一些项目的 CVS 仓库。</para> - </listitem> - </varlistentry> - - <varlistentry> <term>荷兰</term> <listitem> diff --git a/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml index 08bb52ee63..6aef0019b9 100644 --- a/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.113 + Original Revision: 1.116 $FreeBSD$ --> @@ -2859,9 +2859,9 @@ dhcpd_ifaces="dc0"</programlisting> <para>由于 BIND 是默认安装的, 因此配置它相对而言很简单。</para> - <para>默认的 <application>named</application> 配置是在 + <para>默认的 <application>named</application> 配置, 是在 &man.chroot.8; 环境中提供基本的域名解析服务。 - 如果希望启动一下这种配置, 可以执行下面的命令:</para> + 如果希望启动这一配置, 可以使用下面的命令:</para> <screen>&prompt.root; <userinput>/etc/rc.d/named forcestart</userinput></screen> @@ -4536,6 +4536,24 @@ driftfile /var/db/ntp.drift</programlisting> 消息都会被记录到先前指定的文件 <filename>/var/log/logclient.log</filename>。</para> + <para>提供服务的机器还需要在其 + <filename>/etc/rc.conf</filename> 中配置:</para> + + <programlisting>syslogd_enable="YES" +syslogd_flags="-a logclient.example.com -vv"</programlisting> + + <para>第一个选项表示在系统启动时启用 <command>syslogd</command> + 服务, 第二个选项表示允许服务器接收来自指定日志源客户端的数据。 + 第二行配置中最后的部分, 使用 <option>-vv</option>, + 表示增加日志消息的详细程度。 在调整 facility 配置的时候, + 这个配置非常有用, 因为管理员能够看到哪些消息将作为哪个 + facility 的内容来记录。</para> + + <para>可以同时指定多个 <option>-a</option> 选项来允许多个客户机。 + 此外, 还可以指定 <acronym>IP</acronym> + 地址或网段, 请参阅 + &man.syslog.3; 联机手册以了解可用配置的完整列表。</para> + <para>最后, 日志文件应该被创建。 不论你用何种方法创建, 比如 &man.touch.1; 能很好的完成此类任务:</para> @@ -4560,7 +4578,7 @@ driftfile /var/db/ntp.drift</programlisting> <para>日志客户端是一台发送日志信息到日志服务器的机器, 并在本地保存拷贝。</para> - <para>类似于日志服务器, 客户端也必须满足一些最基本的条件。</para> + <para>类似于日志服务器, 客户端也必须满足一些最基本的条件:</para> <itemizedlist> <listitem> @@ -4569,7 +4587,7 @@ driftfile /var/db/ntp.drift</programlisting> </listitem> <listitem> - <para>防火墙必须允许 512 端口上的 <acronym>UDP</acronym> 包通过。</para> + <para>防火墙必须允许 514 端口上的 <acronym>UDP</acronym> 包通过;</para> </listitem> <listitem> @@ -4583,13 +4601,12 @@ driftfile /var/db/ntp.drift</programlisting> 中做如下的设置:</para> <programlisting>syslogd_enable="YES" -syslogd_flags="-a logclient.example.com -vv"</programlisting> +syslogd_flags="-s -vv"</programlisting> - <para>第一个选项将在机器启动的时候启用 <command>syslogd</command> - 守护进程, 第二行允许在这台服务器上接收从客户端发送来的数据。 - 后面的部分, 使用 <option>-vv</option> 增加日志消息的冗长程度。 - 这对于调整 facility 非常有用, - 因为管理能够看见何种消息被发送至哪一级 facility。</para> + <para>和前面类似, 这些选项会在系统启动过程中启用 + <command>syslogd</command> 服务, 并增加日志消息的详细程度。 + 而 <option>-s</option> + 选项则表示禁止服务接收来自其他主机的日志。</para> <para>Facility 是描述某个消息由系统的哪部分生成的。 举例来说, <acronym>ftp</acronym> 和 <acronym>ipfw</acronym> 都是 facility。 @@ -4613,13 +4630,14 @@ syslogd_flags="-a logclient.example.com -vv"</programlisting> <screen>&prompt.root; <userinput>/etc/rc.d/syslogd restart</userinput></screen> <para>测试日志消息是否能通过网络发送, - 使用 &man.logger.1; 发送一段消息至 - <command>syslogd</command>:</para> + 在准备发出消息的客户机上用 &man.logger.1; 来向 + <command>syslogd</command> 发出信息:</para> <screen>&prompt.root; <userinput>logger "Test message from logclient"</userinput></screen> - <para>这段消息现在应该出现在客户和服务端上的 - <filename>/var/log/messages</filename>。</para> + <para>这段消息现在应该同时出现在客户机的 + <filename>/var/log/messages</filename> 以及日志服务器的 + <filename>/var/log/logclient.log</filename> 中。</para> </sect2> <sect2> diff --git a/zh_CN.GB2312/books/handbook/ports/chapter.sgml b/zh_CN.GB2312/books/handbook/ports/chapter.sgml index 8dc1ce9278..21a021ef24 100644 --- a/zh_CN.GB2312/books/handbook/ports/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/ports/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Documentation Project - Original Revision: 1.286 + Original Revision: 1.289 $FreeBSD$ --> @@ -304,11 +304,11 @@ R-deps: </screen> <para>在 FreeBSD 系统上有几种不同的工具用来管理 package:</para> <itemizedlist> - <listitem><para><command>sysinstall</command> - 能够在一个运行的系统上被调用来安装, 删除和列出已安装的 package。 - 请参阅 <xref - linkend="install-post"> 安装后的配置获取更多详细信息。</para></listitem> - <listitem><para>以下章节将介绍基于命令行的 package 管理工具。</para></listitem> + <listitem><para><command>sysinstall</command> 工具可以在正在运行的系统上运行, + 以完成安装、 删除和列出可用的以及已经安装的预编译软件包的任务。 如欲了解进一步信息, + 请参阅 <xref + linkend="packages">。</para></listitem> + <listitem><para>这一节余下的部分将介绍用于管理预编译软件包的命令行工具。</para></listitem> </itemizedlist> <sect2> @@ -602,29 +602,10 @@ docbook = <procedure> <title>Portsnap 方式</title> - <para><application>Portsnap</application> 是另一种用于发布 - Ports 套件的方法。 它最早从 &os; 6.0 开始引入。 - 在较早的系统中, 您可以通过 <filename - role="package">ports-mgmt/portsnap</filename> package 来安装它:</para> - - <screen>&prompt.root; <userinput>pkg_add -r portsnap</userinput></screen> - - <para>请参见 <link linkend="updating-upgrading-portsnap">使用 Portsnap</link> - 以了解关于全部 <application>Portsnap</application> - 功能的详细描述。</para> - - <step> - <para>如果您使用 &os; 6.1-RELEASE, - 或通过 port 或 package 安装了较新版本的 <application>Portsnap</application> - 的话, 可以直接跳过这一步。 <filename - class="directory">/usr/ports</filename> 将在首次使用 &man.portsnap.8; - 命令时自动创建。 而如果您使用的是较早期版本的 - <application>Portsnap</application>, - 就只能手工创建空的 <filename - class="directory">/usr/ports</filename> 目录了。</para> - - <screen>&prompt.root; <userinput>mkdir /usr/ports</userinput></screen> - </step> + <para><application>Portsnap</application> 是用于发布 Ports 套件的另一套系统。 + 请参阅 <link linkend="updating-upgrading-portsnap">使用 Portsnap</link> + 以了解关于 <application>Portsnap</application> + 功能更详细的介绍。</para> <step> <para>下载压缩的 Ports 套件快照到 @@ -1341,7 +1322,7 @@ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen> 请在提出问题时考虑这一点。</para> <para>特别地, 由 - <email role="nolink">freebsd-ports@FreeBSD.org</email> 监护的 port, + <email role="nolink">ports@FreeBSD.org</email> 监护的 port, 实际上并没有人维护。 订阅这个邮件列表的人们会感谢您提供的修正和支持。 我们一直都需要更多志愿者!</para> </note> diff --git a/zh_CN.GB2312/books/handbook/ppp-and-slip/chapter.sgml b/zh_CN.GB2312/books/handbook/ppp-and-slip/chapter.sgml index a5d827f31e..171852d65d 100644 --- a/zh_CN.GB2312/books/handbook/ppp-and-slip/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/ppp-and-slip/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.185 + Original Revision: 1.192 $FreeBSD$ --> @@ -153,8 +153,8 @@ </listitem> <listitem> - <para>您需要一个连接到您的系统, 并做了正确配置的 modem - 或其它设备, 使您能连接到 ISP。</para> + <para>您需要有连接在系统上, 并做了正确配置的 modem, + 或其他能够连接您 ISP 的设备。</para> </listitem> <listitem> @@ -234,17 +234,19 @@ <title><application>PPP</application>自动化配置</title> <indexterm> - <primary>PPP</primary> - <secondary>configuration</secondary> - </indexterm> + <primary>PPP</primary> + <secondary>configuration (配置)</secondary> + </indexterm> <para> <command>ppp</command>和<command>pppd</command>(PPP的内核级实现) - 都使用<filename>/etc/ppp</filename>目录中的配置文件。 用户级 PPP - 的例子可以在 <filename>/usr/share/examples/ppp/</filename> 中找到。</para> + 都使用 <filename class="directory">/etc/ppp</filename> 目录中的配置文件。 用户级 PPP + 的例子可以在 + <filename class="directory">/usr/share/examples/ppp/</filename> 中找到。</para> <para>配置<command>ppp</command>要求根据您的需要编辑几个文件。 编辑哪几个文件取决于您的 - IP 是静态分配还是动态分配的。</para> + IP 是静态分配 (每次都使用同一个地址) + 还是动态分配的 (每次连接到 ISP 都会获得不同的 IP 地址)。</para> <sect4 id="userppp-staticIP"> <title>PPP和静态IP地址</title> @@ -315,9 +317,10 @@ <listitem> <para>标明modem要连接的端口号。 <devicename>COM1</devicename> 对应的设备是 - <filename>/dev/cuad0</filename> + <filename class="devicefile">/dev/cuad0</filename> 而 <devicename>COM2</devicename> - 对应的则是 <filename>/dev/cuad1</filename>。</para + 对应的则是 + <filename class="devicefile">/dev/cuad1</filename>。</para> </listitem> </varlistentry> @@ -482,7 +485,8 @@ protocol: ppp</screen> 模式运行ppp(因为在连接之前已经正确设置了路由表项), 那就不需要再向<filename>ppp.linkup</filename> 添加项。 您可能希望在连接以后创建一个项来调用程序。 这在以后的sendmail的例子中会解释。</para> - <para>示例配置文件可以在目录<filename>/usr/share/examples/ppp/</filename>中找到。</para> + <para>示例配置文件可以在目录 + <filename class="directory">/usr/share/examples/ppp/</filename> 中找到。</para> </sect4> <sect4 id="userppp-dynamicIP"> @@ -656,8 +660,8 @@ exec /usr/sbin/ppp -direct $IDENT</programlisting> <programlisting>pchilds:*:1011:300:Peter Childs PPP:/home/ppp:/etc/ppp/ppp-dialup</programlisting> - <para>创建一个名为 <filename>/home/ppp</filename>的目录作为拨入用户的主目录, - 包含以下这些空文件:</para> + <para>创建一个名为 <filename class="directory">/home/ppp</filename> + 的目录作为拨入用户的主目录, 其中包含以下这些空文件:</para> <screen>-r--r--r-- 1 root wheel 0 May 27 02:23 .hushlogin -r--r--r-- 1 root wheel 0 May 27 02:22 .rhosts</screen> @@ -1058,8 +1062,10 @@ ifconfig_tun0=</programlisting> </step> <step> - <para>确保<filename>tun<replaceable>N</replaceable></filename> - 设备文件在 <filename>/dev</filename> 目录中是可用的。</para> + <para>确保 <filename class="directory">/dev</filename> + 目录中名为 + <filename class="devicefile">tun<replaceable>N</replaceable></filename> + 的设备文件是可用的。</para> </step> <step> @@ -1090,8 +1096,10 @@ ifconfig_tun0=</programlisting> </step> <step> - <para>确保<filename>tun<replaceable>N</replaceable></filename>设备文件在 - <filename>/dev</filename>目录中是可用的。</para> + <para>确保 <filename class="directory">/dev</filename> + 目录中名为 + <filename class="devicefile">tun<replaceable>N</replaceable></filename> + 的设备文件是可用的。</para> </step> <step> @@ -1148,8 +1156,10 @@ ifconfig_tun0=</programlisting> <secondary>kernel PPP</secondary> </indexterm> - <para>在开始设置内核级PPP时, 需要确信<command>pppd</command>已经被定位在<filename>/usr/sbin</filename> 中 - 且存在<filename>/etc/ppp</filename>目录。</para> + <para>在开始配置 PPP 之前, + 请确认 <command>pppd</command> 已经存放在 + <filename class="directory">/usr/sbin</filename> 中, 并且 + <filename class="directory">/etc/ppp</filename> 目录是存在的。</para> <para><command>pppd</command>能在两种模式下工作:</para> @@ -1237,7 +1247,7 @@ defaultroute # put this if you want that PPP server will be your <step> <para>键入下面这行:</para> - <screen>&prompt.root; <userinput>/usr/src/usr.sbin/pppd.new/pppd <replaceable>/dev/tty01</replaceable> <replaceable>19200</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>/usr/sbin/pppd <replaceable>/dev/tty01</replaceable> <replaceable>19200</replaceable></userinput></screen> <para>一定要使用正确的速度和设备名。</para> </step> @@ -1617,9 +1627,14 @@ exit 1 <sect2> <title>检查设备节点</title> - <para>如果您的内核是经过重新配置的, 那么就需要检查<devicename>sio</devicename>设备。 - 如果没有配置过内核, 就没什么可担心的了。 只要查看 - <command>dmesg</command>的输出以找到modem设备:</para> + <para>如果使用的是定制内核, 确认在其编译配置中包含下列配置:</para> + + <programlisting>device sio</programlisting> + + <para>默认的 <literal>GENERIC</literal> 内核中包含了 + <devicename>sio</devicename> 设备, 因此如果您使用的是它的话, + 就不需要担心了。 只要查看 <command>dmesg</command> 输出中是否有 modem + 设备:</para> <screen>&prompt.root; <userinput>dmesg | grep sio</userinput></screen> @@ -1628,7 +1643,7 @@ exit 1 您就会在 <devicename>sio1</devicename> 或 <devicename>COM2</devicename> 上找到它。 如果 modem 设备连接在 <devicename>sio1</devicename> 接口 (在 DOS 中称为<devicename>COM2</devicename>), - 那么您的 modem 将会是 <filename>/dev/cuad1</filename>。</para> + 那么您的 modem 将会是 <filename class="devicefile">/dev/cuad1</filename>。</para> </sect2> <sect2> @@ -1645,7 +1660,7 @@ exit 1 <para>现在我们已经打开了<command>ppp</command>。</para> - <screen>ppp ON example> <userinput>set device <filename>/dev/cuad1</filename></userinput></screen> + <screen>ppp ON example> <userinput>set device <filename class="devicefile">/dev/cuad1</filename></userinput></screen> <para>设置modem设备, 在本例子中是 <devicename>cuad1</devicename>。</para> @@ -1664,7 +1679,7 @@ exit 1 <para>切换到 <quote>终端</quote>样我们就能手动地控制这台 modem 的模式。</para> - <programlisting>deflink: Entering terminal mode on <filename>/dev/cuad1</filename> + <programlisting>deflink: Entering terminal mode on <filename class="devicefile">/dev/cuad1</filename> type '~h' for help</programlisting> <screen><userinput>at</userinput> @@ -2033,13 +2048,13 @@ ppp_profile="adsl"</programlisting> <para>首先需要从 port 完成安装, 然后才能配置 <application>mpd</application> 来满足您的需要, 并完成服务商的配置。 port 会把一系列包括了详细注解的配置文件实例放到 - <filename><replaceable>PREFIX</replaceable>/etc/mpd/</filename>。 + <filename class="directory"><replaceable>PREFIX</replaceable>/etc/mpd/</filename>。 注意, 这里的 <replaceable>PREFIX</replaceable> 表示 ports 安装的目录, 默认情况下, 应该是 - <filename>/usr/local/</filename>。 + <filename class="directory">/usr/local/</filename>。 关于配置 <application>mpd</application> 的完整说明, 会以 HTML 格式随 port 一起安装。 这些文件将放在 - <filename><replaceable>PREFIX</replaceable>/share/doc/mpd/</filename>。 + <filename class="directory"><replaceable>PREFIX</replaceable>/share/doc/mpd/</filename>。 下面是通过 <application>mpd</application> 连接 ADSL 服务的一个简单例子。 配置被分别放到了两个文件中, 第一个是 <filename>mpd.conf</filename>:</para> @@ -2211,25 +2226,31 @@ tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 <indexterm><primary>SLIP</primary></indexterm> <sect2 id="slipc"> - <title>设置SLIP客户端</title> - <indexterm><primary>SLIP</primary><secondary>client</secondary></indexterm> + <title>设置 SLIP 客户端</title> + + <indexterm> + <primary>SLIP</primary> + <secondary>client (客户端)</secondary> + </indexterm> + <para>下面是在静态主机网络上配置 FreeBSD 机器使用 SLIP 的方法。 对于动态主机名分配 (您的地址会随每次拨号而不同), 您可能需要稍复杂一些的设置。</para> <para>首先, 您需要确认调制解调器所连接的串口。 许多人会设置一个符号连接, 例如 - <filename>/dev/modem</filename>, 用以指向实际的设备名, - <filename>/dev/cuadN</filename>。 - 这样您就可以对实际的设备名进行抽象, - 以备调制解调器换到其他串口时方便调整之用。 - 不然, 在系统中修改一大堆 <filename>/etc</filename> 下的文件以及 - <filename>.kermrc</filename> 将是非常麻烦的事情!</para> + <filename class="devicefile">/dev/modem</filename>, 用以指向实际的设备名, 如 + <filename class="devicefile">/dev/cuad<replaceable>N</replaceable></filename>。 + 这样您就可以对实际的设备名进行抽象, + 以备调制解调器换到其他串口时方便调整之用。 不然, 修改 + <filename class="directory">/etc</filename> 和遍布于系统中的 <filename>.kermrc</filename> + 文件将是一件很麻烦的事情!</para> <note> - <para><filename>/dev/cuad0</filename> 对应 - <devicename>COM1</devicename>, 而 <filename>cuad1</filename> - 则对应 <devicename>COM2</devicename>, 等等。</para> + <para><filename class="devicefile">/dev/cuad0</filename> 对应 + <devicename>COM1</devicename>, 而 <filename class="devicefile">/dev/cuad1</filename> + 则对应 + <devicename>COM2</devicename>, 等等。</para> </note> <para>确保您的内核文件包含以下内容:</para> @@ -2562,12 +2583,15 @@ water.CS.Example localhost.Example. UGH 34 47641234 lo0 - 0.438 <para>默认情况下, 您的 &os; 计算机不会转发包。 如果您希望将 FreeBSD SLIP 服务器作为路由器使用, 就需要修改 <filename>/etc/rc.conf</filename> 文件, - 并加入一项将 <literal>gateway_enable</literal> 变量设为 - <option>YES</option> 的设制。</para> + 将 <literal>gateway_enable</literal> 变量设为 + <option>YES</option>。 这样下次系统引导时就能够保持这一配置了。</para> + + <para>要立即应用这些配置, 可以 <username>root</username> + 的身份运行:</para> - <para>接下来需要重新启动以便使新设置生效。</para> + <screen>&prompt.root; /etc/rc.d/routing start</screen> - <para>请参见 <xref linkend="kernelconfig"> 以了解如何配置 FreeBSD + <para>请参阅 <xref linkend="kernelconfig"> 以了解如何配置 FreeBSD 内核, 并获得在重新配置内核方面的指导。</para> </sect3> @@ -2575,10 +2599,14 @@ water.CS.Example localhost.Example. UGH 34 47641234 lo0 - 0.438 <title>Sliplogin配置</title> <para>正如先前所提到的, - <filename>/etc/sliphome</filename>目录有三个文件构成<filename>/usr/sbin/sliplogin</filename>的配置 - (参考<command>sliplogin</command>的联机手册&man.sliplogin.8;):<filename>slip.hosts</filename>, - 定义SLIP用户及有关IP地址; <filename>slip.login</filename>, 一般只配置SLIP接口; 文件 - <filename>slip.logout</filename>(可选的), 串行连接终止时, 撤消<filename>slip.login</filename>所做的修改。</para> + <filename class="directory">/etc/sliphome</filename> 目录中有三个文件, + 它们共同构成 <filename>/usr/sbin/sliplogin</filename> 的配置 (参考 + <command>sliplogin</command> 的联机手册 &man.sliplogin.8;): + 用于定义 SLIP 用户和相关的 IP + 地址的 <filename>slip.hosts</filename>、 + 通常仅用于配置 SLIP 接口的 <filename>slip.login</filename>, 以及 (可选的) + <filename>slip.logout</filename>, 用以撤销由 + <filename>slip.login</filename> 所执行的动作。</para> <sect4> <title>配置 <filename>slip.hosts</filename></title> @@ -2653,10 +2681,12 @@ Shelmerg dc-slip sl-helmerg 0xfffffc00 autocomp</programlisting 路由器上配置一个指向 SLIP 子网的静态路由。</para> <indexterm><primary>Ethernet</primary></indexterm> - <para>如果您要使用 <quote>代理 ARP</quote>的方式, 您需要从SLIP服务器的以太子网中为每个SLIP客户分配IP地址, - 还必须修改<filename>/etc/sliphome/slip.login</filename> 和 + <para>如果要使用 <quote>代理 ARP</quote> + 的方式, 您还需要从 SLIP 服务器的以太子网中为每个 SLIP 客户分配IP地址, + 还必须修改<filename>/etc/sliphome/slip.login</filename> 和 <filename>/etc/sliphome/slip.logout</filename>脚本以使用 - &man.arp.8;来管理proxy-ARP在服务器ARP表中的项。</para> + &man.arp.8;来管理在 SLIP + 服务器 ARP 表中的 <quote>代理 ARP</quote> 项。</para> </sect4> <sect4> diff --git a/zh_CN.GB2312/books/handbook/security/chapter.sgml b/zh_CN.GB2312/books/handbook/security/chapter.sgml index 597be3468e..eb7e781336 100644 --- a/zh_CN.GB2312/books/handbook/security/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/security/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.332 + Original Revision: 1.334 $FreeBSD$ --> @@ -502,25 +502,61 @@ <indexterm> <primary><command>sysctl</command></primary> </indexterm> - <para>但即使已经关掉了 <devicename>bpf</devicename> - 设备,您仍然需要担心 - <filename>/dev/mem</filename> 和 <filename>/dev/kmem</filename> 。 - 就事论事地说,攻击者仍然能够通过直接访问的方式写入磁盘设备。同样地, - 还有一个被称作模块加载器, &man.kldload.8; 的机制,也会包含潜在的危险。 - 尝试入侵企业网络的入侵者会尝试在正在运行的内核上安装他自己的 - <devicename>bpf</devicename> 设备,或其他听包设备。为了防止这些问题, - 需要抬高内核安全级, 至少调整到 1。 可以通过对 <varname>kern.securelevel</varname> - 执行 <command>sysctl</command> 来完成这个任务。 一旦把安全级调整到1, - 对于直接访问设备的写入操作将被拒绝, 而特殊的 <command>chflags</command> - 标记, 如 <literal>schg</literal>, 也将强制执行。 一定要在重要的启动执行文件、 - 目录和脚本文件上设置 <literal>schg</literal> 标记 — - 不要漏过在安全级生效之前将被运行的任何文件。 这可能做得有些过火, - 并将导致在较高安全级上运行时升级系统变得困难。 您也可以略微做些妥协, - 即以较高的安全级运行, 但并不将系统文件和目录配置为 <literal>schg</literal>。 - 另一种可行的方法是把 - <filename>/</filename> 和 <filename>/usr</filename> 以只读方式挂接。 - 请注意, 如果保护措施做的过分的严苛, 则可能导致入侵检测无法进行, - 而这种检测是安全中十分重要的一环。</para> + <para>但是, 即使您关闭了 <devicename>bpf</devicename> + 设备, 仍需要关注 + <filename>/dev/mem</filename> 和 + <filename>/dev/kmem</filename>。 就事论事地说, + 入侵者仍然能通过直接访问的方式写入磁盘设备。 另外, + 还有一个称作模块加载器的内核机制, &man.kldload.8;。 + 有进取心的入侵者, 可以经由这一机制, + 在正在运行的内核中通过 KLD 模块来安装自己的 <devicename>bpf</devicename>, + 或其它听包设备。 为了避免这些问题, 您必须将内核的安全级别提高到至少 1。</para> + + <para>内核的安全级别可以通过多种方式来设置。 最简单的设置正在运行的内核安全级的方法, + 是使用 <command>sysctl</command> 来设置内核变量 + <varname>kern.securelevel</varname>:</para> + + <screen>&prompt.root; <userinput>sysctl kern.securelevel=<replaceable>1</replaceable></userinput></screen> + + <para>默认情况下, &os; 内核启动时的安全级别是 -1。 + 除非管理员或 &man.init.8; 由于启动脚本加以改变, 安全级别会继续保持为 -1。 + 在系统启动过程中, 可以在 <filename>/etc/rc.conf</filename> 文件中, + 将变量 <varname>kern_securelevel_enable</varname> 变量设置为 + <literal>YES</literal> 并将 <varname>kern_securelevel</varname> + 变量设置为希望的安全级别来提高它。</para> + + <para>默认情况下, 在启动脚本执行完之后, &os; 的安全级别设置是 -1。 + 这称作 <quote>不安全模式</quote>, 因为文件的不可修改标记 (immutable flag) + 可以改为关闭, 而且全部设备可以直接进行读写, 等等。</para> + + <para>一旦将安全级别设置为 1 或更高, 则只允许追加 (append-only) + 和不可修改标记会被执行, 而且不可以关闭。 直接访问裸设备则会被拒绝。 + 更高的安全级别会施加进一步的访问限制。 关于安全级别的完整介绍, + 请参阅联机手册 &man.security.7; (对于 &os; 7.0 之前的版本, + 则是联机手册 &man.init.8;)。</para> + + <note> + <para>将安全级别调整到 1 或更高可能会导致 X11 + (访问 <filename>/dev/io</filename> 会被阻止), 或从源代码联编 &os; + (这一过程中的 <maketarget>installworld</maketarget> + 部分需要临时取消一些文件上的只允许追加和不可修改标记) 出现一些问题, + 并导致一些其他小问题。 有些时候, 例如 X11 的情况, + 可以通过在引导过程中较早的阶段启动 &man.xdm.1; + 来绕过, 因为这时安全级别还很低。 类似这样的方法, + 对于某些安全级别或限制有可能不可用。 提前做好计划可能会是个好主意。 + 理解不同的安全级别所施加的限制非常重要, + 因为一些限制可能让系统变得很难使用。 另外, + 了解它们也有助于理性地配置默认设定。</para> + </note> + + <para>如果内核的安全级别设为 1 或更高, + 在重要的启动程序、 目录和脚本文件上设置 <literal>schg</literal> 标记 + (也就是在系统启动到设置安全级别之前运行的程序和它们的配置) 就有意义了。 + 然而, 这样做也可能有些过火, 而由于系统运行于较高的安全级别, + 升级系统也会变得困难的多。 作为妥协, 可以让系统以较高的安全级别运行, + 但并不将所有的启动文件都配置 <literal>schg</literal> 标记。 + 另一种方法是将 <filename>/</filename> 和 <filename>/usr</filename> 以只读模式挂载。 + 请注意, 过分严苛的安全配置很可能限制您检测入侵的能力。</para> </sect2> <sect2 id="security-integrity"> diff --git a/zh_CN.GB2312/books/handbook/updating/Makefile b/zh_CN.GB2312/books/handbook/updating/Makefile new file mode 100644 index 0000000000..a8d6530926 --- /dev/null +++ b/zh_CN.GB2312/books/handbook/updating/Makefile @@ -0,0 +1,18 @@ +# +# Build the Handbook with just the content from this chapter. +# +# The FreeBSD Simplified Chinese Project +# Original Revision: 1.1 +# +# $FreeBSD$ +# + +CHAPTERS= updating/chapter.sgml + +VPATH= .. + +MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX} + +DOC_PREFIX?= ${.CURDIR}/../../../.. + +.include "../Makefile" diff --git a/zh_CN.GB2312/books/handbook/updating/chapter.sgml b/zh_CN.GB2312/books/handbook/updating/chapter.sgml new file mode 100644 index 0000000000..a590ed151e --- /dev/null +++ b/zh_CN.GB2312/books/handbook/updating/chapter.sgml @@ -0,0 +1,477 @@ +<!-- + Original Revision: 1.2 + $FreeBSD$ +--> + +<chapter id="updating"> + <chapterinfo> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>Written by </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Colin</firstname> + <surname>Percival</surname> + <contrib>Based on notes provided by </contrib> + </author> + </authorgroup> + </chapterinfo> + + <title>更新 &os;</title> + + <sect1 id="updating-synopsis"> + <title>概述</title> + + <indexterm><primary>Updating FreeBSD</primary></indexterm> + <indexterm> + <primary>freebsd-update</primary> + <see>Updating</see> + </indexterm> + + <para>长久以来,&os 操作系统的一个主要方面始终没有改变, + 那就是使用应用程序和工具去获得系统各种大大小小的更新。</para> + + <para>多年来用户升级他们的系统,收集安全补丁, + 无损 Ports Collection 更新 ports 和 package + 唯一的选择是使用 <application>CVSup</application> + 工具。</para> + + <para>当然原来的 <application>CVSup</application> 仍被支持, + 现在有一个 C 语言的版本加入了 &os;, + 并且有些新的方法能用来获得系统更新。</para> + + <para>类似像 &man.portsnap.8; 和 &man.freebsd-update.8; + 这样的工具使得升级过程变得更加简便有效。 + 这些新的方法在提高效率的同时也给用户提供一个简洁的接口。 + 一些新的工具能通过 &man.cron.8; 执行, + 从而减少系统管理员的人为介入,这会有益于那些管理着成百上千台 &os; + 的人。<para> + + <para>这一章节将会介绍这些新的方法, + 以及用户跟系统管理如何从这些新方法的实用和易用中获益。</para> + + <para>在阅读了这章以后,你将了解:</para> + + <itemizedlist> + <listitem> + <para>哪些工具能被用来更新系统和 Ports Collection。<para> + </listitem> + + <listitem> + <para>如何使用 <command>freebsd-update</command> + 打安全补丁和完成主要及次要的 &os; 升级。</para> + </listitem> + + <listitem> + <para>如何比较已安装的系统与原来已知拷贝的状态。</para> + </listitem> + </itemizedlist> + + <para>在阅读这章之前,你应该:</para> + + <itemizedlist> + <listitem> + <para>了解一些 &unix; 和 &os; 的基础知识 + (<xref linkend="basics">)。</para> + </listitem> + + <listitem> + <para>熟悉基本的内核配置/编译方法 + (<xref linkend="kernelconfig">)。</para> + </listitem> + + <listitem> + <para>熟悉使用 Ports Collection 在 &os; + 上安装第三方的应用程序 + (<xref linkend="ports">)。</para> + </listitem> + + <listitem> + <para>熟悉组成 &os; 的各个部分以及使用 + &man.mergemaster.8; 工具 + (<xref linkend="cutting-edge">)。</para> + </listitem> + </itemizedlist> + </sect1> + + <sect1 id="updating-freebsdupdate"> + <title>FreeBSD 更新</title> + + <para>打安全补丁是对于维护计算机软件的一个重要部分, + 特别是对于操作系统。对于 &os; 来说, + 很长的一段时间以来这都不是一件容易的事情。 + 补丁打在源代码上,代码需要被重新编译为二进制, + 然后再重新安装编译后的程序。</para> + + <para>&os; 引入了 <command>freebsd-update</command> + 工具之后这便不再是问题了。这个工具提供了 2 种功能。 + 第一,它可以把二进制的安全和勘误更新直接应用于 &os; + 的基本系统,而不需要重新编译和安装。第二, + 这个工具还支持主要跟次要的发行版的升级。</para> + + <note> + <para>由安全小组支持的各种体系结构和发行版都可使用二进制更新。 + 然而有些特性,比如升级 &os; 操作系统需要最近的 &man.freebsd-update.8; + 和 &os; 6.3。在升级到一个新的发行版本之前, + 应先阅读一下当前发行版的声明, + 因为他们可能包含有关于你期望升级版本的重要消息。 + 这些发行声明可以通过以下链接查阅: + <ulink url="http://www.FreeBSD.org/releases/"></ulink>。</para> + </note> + + <para>如果 <command>crontab</command> 中存在有用到 + <command>freebsd-update</command> 特性的部分, + 那么这些在开始以下操作前必须先被禁止。最新版本的 + <command>freebsd-update</command> 可以通过上面的 + <acronym>URL</acronym> 下载用 <command>tar</command> + 和 <command>gzip</command> 打包的版本, + 并按照下面的命令安装:</para> + + <screen>&prompt.root; <userinput>gunzip -c freebsd-update-upgrade.tgz | tar xvf -</userinput> +&prompt.root; <userinput>mv freebsd-update.sh /usr/sbin/freebsd-update</userinput> +&prompt.root; <userinput>mv freebsd-update.conf /etc</userinput></screen> + + <para>对于所有当前流行的发行版本来说, + 并不需要下载最新版。</para> + + <sect2> + <title>配置文件</title> + + <para>有些用户可能希望调整配置文件来更好的控制升级过程。 + 可用参数的文档非常齐全, + 但下面的这些可能需要进一步的解释:</para> + + <programlisting># Components of the base system which should be kept updated. +Components src world kernel</programlisting> + + <para>这个参数是控制 &os; 的哪一部分将被保持更新。 + 默认的是更新源代码,整个基本系统还有内核。 + 这些部件跟安装时的那些相同,举例来说, + 在这里加入 “world/games” 就会允许打入游戏相关的补丁。 + 使用 “src/bin” 则是允许更新 + <filename class="directory">src/bin</filename> + 目录中的源代码。</para> + + <para>最好的选择是把这个选项保留为默认值, + 因为如果要修改它去包含一些指定的选项, + 就需要用户列出每一个想要更新的项目。 + 这可能会引起可怕的后果, + 因为部分的源代码和二进制程序得不到同步。</para> + + <programlisting># Paths which start with anything matching an entry in an IgnorePaths +# statement will be ignored. +IgnorePaths</programlisting> + + <para>添加路径,比如 + <filename class="directory">/bin</filename> 或者 + <filename class="directory">/sbin</filename> + 让这些指定的目录在更新过程中不被修改。 + 这个选项能够防止本地的修改被 + <command>freebsd-update</command> 覆盖。</para> + + <programlisting># Paths which start with anything matching an entry in an UpdateIfUnmodified +# statement will only be updated if the contents of the file have not been +# modified by the user (unless changes are merged; see below). +UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile</programlisting> + + <para>更新指定目录中的未被修改的配置文件。 + 用户的任何修改都会使这些文件的自动更新失效。 + 还有另外一个选项, + <literal>KeepModifiedMetadata</literal>, + 这个能让 <command>freebsd-update</command> + 在合并时保存修改。</para> + + <programlisting># When upgrading to a new &os; release, files which match MergeChanges +# will have any local changes merged into the version from the new release. +MergeChanges /etc/ /var/named/etc/</programlisting> + + <para>一个 <command>freebsd-update</command> + 应该尝试合并的配置文件的列表。文件合并的过程是 + 一系列的 &man.diff.1; 补丁类似于更少选项的 &man.mergemaster.8; + 合并的选项是接受,打开一个文本编辑器,或者 + <command>freebsd-update</command> 会被中止。 + 在不能确定的时候,请先备份 <filename class="directory">/etc</filename> + 然后接受合并。更多关于 <command>mergemaster</command> + 的信息请参阅 <xref linkend="cutting-edge">。</para> + + <programlisting># Directory in which to store downloaded updates and temporary +# files used by &os; Update. +# WorkDir /var/db/freebsd-update</programlisting> + + <para>这个目录是放置所有补丁和临时文件的。 + 用户做一个版本升级的话,请确认此处至少有 1 GB + 的可用磁盘空间。</para> + + <programlisting># When upgrading between releases, should the list of Components be +# read strictly (StrictComponents yes) or merely as a list of components +# which *might* be installed of which &os; Update should figure out +# which actually are installed and upgrade those (StrictComponents no)? +# StrictComponents no</programlisting> + + <para>当设置成 <literal>yes</literal> 时, + <command>freebsd-udpate</command> 将假设这个 + <literal>Components</literal> 列表时完整的, + 并且对此列表以外的项目不会修改。实际上就是 + <command>freebsd-update</command> 会尝试更新 + <literal>Componets</literal> + 列表里的每一个文件。</para> + </sect2> + + <sect2> + <title>安全补丁</title> + + <para>安全补丁存储在远程的机器上, + 可以使用如下的命令下载并安装:</para> + + <screen>&prompt.root; <userinput>freebsd-update fetch</userinput> +&prompt.root; <userinput>freebsd-update install</userinput></screen> + + <para>如果给内核打了补丁,那么系统需要重新启动。 + 如果一切都进展顺利,系统就应该被打好了补丁而且 + <command>freebsd-update</command> 可由夜间 + &man.cron.8; 执行。在 <filename>/etc/crontab</filename> + 中加入以下条目足以完成这项任务:</para> + + <programlisting>@daily root freebsd-update cron</programlisting> + + <para>这条记录是说明每天运行一次 + <command>freebsd-update</command>。用这种方法, + 使用了 <option>cron</option> 参数, + <command>freebsd-update</command> 仅检查是否存在更新。 + 如果有了新的补丁,就会自动下载到本地的磁盘, + 但不会自动给系统打上。<username>root</username> + 会收到一封电子邮件告知需手动安装补丁。</para> + + <para>如果出现了错误,可以使用下面的 + <command>freebsd-update</command> + 命令回退到上一次的修改:</para> + + <screen>&prompt.root; <userinput>freebsd-update rollback</userinput></screen> + + <para>完成以后如果内核或任何的内核模块被修改的话, + 就需要重新启动系统。这将使 &os; + 装载新的二进制程序进内存。</para> + + <note> + <para><command>freebsd-update</command> 只能应用于 + <filename>GENERIC</filename> 内核。如果对 + <filename>GENERIC</filename> + 做了任何修改或者安装了一个自行编译的内核, + <command>freebsd-update</command> + 就无法完成升级 — 如前一个范例那样失败后 + 产生一条错误信息。</para> + </note> + </sect2> + + <sect2> + <title>重大和次要的更新</title> + + <para>这个过程会删除旧的目标文件和库, + 这将使大部分的第三方应用程序无法删除。 + 建议将所有安装的 ports 先删除然后重新安装,或者稍后使用 + <filename role="package">ports-mgmt/portupgrade</filename> + 工具升级。 大多数用户将会使用如下命令尝试编译:</para> + + <screen>&prompt.root; <userinput>portupgrade -af</userinput></screen> + + <para>这将确保所有的东西都会被正确的重新安装。 + 请注意环境变量 <makevar>BATCH</makevar> 设置成 + <literal>yes</literal> 的话将在整个过程中对所有询问回答 + <literal>yes</literal>,这会帮助在编译过程中免去人工的介入。</para> + + <para>重大和次要的更新可以由 + <command>freebsd-update</command> 命令后指定一个发行版本来执行, + 举例来说,下面的命令将帮助你升级到 &os; 6.3:</para> + + <screen>&prompt.root; <userinput>freebsd-update -r 6.3-RELEASE upgrade</userinput></screen> + + <para>在这个命令被执行后,<command>freebsd-update</command> + 将会先解析配置文件和评估当前的系统以获得更新系统所需的必要信息。 + 然后便会显示出一个包含了已检测到与未检测到的组件列表。 + 例如:</para> + + <screen>Looking up update.FreeBSD.org mirrors... 1 mirrors found. +Fetching metadata signature for 6.3-BETA1 from update1.FreeBSD.org... done. +Fetching metadata index... done. +Inspecting system... done. + +The following components of FreeBSD seem to be installed: +kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games +src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue +src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin +world/base world/info world/lib32 world/manpages + +The following components of FreeBSD do not seem to be installed: +kernel/generic world/catpages world/dict world/doc world/games +world/proflibs + +Does this look reasonable (y/n)? y</screen> + + <para>此时,<command>freebsd-update</command> + 将会尝试下载所有升级所需的文件。在某些情况下, + 用户可能被问及需安装些什么和如何进行之类的问题。<para> + + <para>下载完所有的补丁之后,它们很快就会被打上。 + 这个过程可能会持续一段时间,取决与机器的速度和当前的负载情况。 + 配置文件将会被合并 — 这一部分需要用户的参与, + 因为文件可能被合并或者屏幕上弹出了一个文本编辑器用来手工合并。 + 在处理过程中,每一个成功的合并都会给用户显示出来。 + 失败或者被忽略的合并则会引起合并程序的中止。 + 用户可能想要备份一下 <filename class="directory">/etc</filename> + 之后手工合并重要的文件,比如 + <filename>master.passwd</filename> 或 + <filename>group</filename>。</para> + + <note> + <para>系统至此还没有被修改,所有的补丁和合并都在另外一个目录中进行。 + 当所有的补丁都被成功的打上了以后,所有的配置文件都被合并后, + 我们就已经完成了整个升级过程中最困难的部分, + 下面就需要用户来安装这些变更了。</para> + </note> + + <para>一旦这个步骤完成后,使用如下的命令将升级后的文件安装到磁盘上。</para> + + <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> + + <para>内核与内核模块会先被打上补丁。此时机器必须要重新启动。 + 使用下面的命令重启机器,这样新的内核将载入内存:</para> + + <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen> + + <para>在系统重新上线后,需要再次运行 <command>freebsd-update</command>。 + 升级的状态被保存着,这样 <command>freebsd-update</command> + 就无需重头开始,但是会删除所有旧的共享库和目标文件。 + 执行如下命令继续这个阶段的升级:</para> + + <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> + + <note> + <para>取决与是否有库的版本更新,通常只有 2 个而不是 + 3 个安装阶段。</para> + </note> + + <para>现在需要重新编译和安装第三方软件。 + 这么做的原因是某些已安装的软件可能依赖于在升级过程中已删除的库。 + 可使用 <filename role="package">ports-mgmt/portupgrade</filename> + 自动化这个步骤,以如下的命令开始:</para> + + <screen>&prompt.root; <userinput>portupgrade -f ruby</userinput> +&prompt.root; <userinput>rm /var/db/pkg/pkgdb.db</userinput> +&prompt.root; <userinput>portupgrade -f ruby18-bdb</userinput> +&prompt.root; <userinput>rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db</userinput> +&prompt.root; <userinput>portupgrade -af</userinput></screen> + + <para>一旦这个完成了以后,再最后一次运行 + <command>freebsd-update</command> 来结束升级过程。 + 执行如下命令处理升级中的所有细节:</para> + + <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> + + <para>重新启动机器进入新版本的 &os; 升级过程至此就完成了。</para> + </sect2> + + <sect2> + <title>系统状态对照</title> + + <para><command>freebsd-update</command> + 工具也可被用来对着一个已知完好的 &os; 拷贝测试当前的版本。 + 这个选项评估当前的系统工具,库和配置文件。 + 使用以下的命令开始对照:</para> + + <screen>&prompt.root; <userinput>freebsd-update IDS >> outfile.ids</userinput></screen> + + <warning> + <para>这个命令的名称是 <acronym>IDS</acronym>, + 它并不是一个像 + <filename role="package">security/snort</filename> + 这样的入侵检测系统的替代品。因为 + <command>freebsd-update</command> 在磁盘上存储数据, + 很显然它们有被篡改的可能。 + 当然也可以使用一些方法来降低被篡改的可能性,比如设置 + <varname>kern.securelevel</varname> 和不使用时把 + <command>freebsd-update</command> + 数据放在只读文件系统上,例如 <acronym>DVD</acronym> 或 + 安全存放的外置 <acronym>USB</acronym> 磁盘上。 + </warning> + + <para>现在系统将会被检查,生成一份包含了文件和它们的 &man.sha256.1; + 哈希值的清单,已知发行版中的值与当前系统中安装的值将会被打印到屏幕上。 + 这就是为什么输出被送到了 <filename>outfile.ids</filename> 文件。 + 它滚动的太块无法用肉眼对照,而且会很快填满控制台的缓冲区。</para> + + <para>这个文件中有非常长的行,但输出的格式很容易分析。 + 举例来说,要获得一份与发行版中不同哈希值的文件列表, + 已可使用如下的命令:</para> + + <screen>&prompt.root; <userinput>cat outfile.ids | awk '{ print $1 }' | more</userinput> +/etc/master.passwd +/etc/motd +/etc/passwd +/etc/pf.conf</screen> + + <para>这份输出时删节缩短后的,其实是有更多的文件。 + 其中有些文件并非人为修改,比如 + <filename>/etc/passwd</filename> + 被修改是因为添加了用户进系统。在某些情况下, + 还有另外的一些文件,诸如内核模块与 + <command>freebsd-update</command> 的不同是因为它们被更新过了。 + 为了指定的文件或目录排除在外,把它们加到 + <filename>/etc/freebsd-update.conf</filename> 的 + <literal>IDSIgnorePaths</literal> 选项中。</para> + + <para>除了前面讨论过的部分之外, + 这也能被当作是对升级方法的详细补充。</para> + </sect2> + </sect1> + + <sect1 id="updating-portsnap"> + <title>Portsnap: 一个 Ports Collection 更新工具</title> + + <para>&os; 基本系统也包括了一个更新 Ports Collection 的工具: + &man.portsnap.8;。在运行之后,它会连上一个远程网站, + 校验安全密钥,然后下载一份 Ports Collection 的拷贝。 + 密钥是用来校验所有下载文件的完整性,确保它们在传输是未被修改。 + 使用以下的命令下载最新的 Ports Collection:</para> + + <screen>&prompt.root; <userinput>portsnap fetch</userinput> +Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found. +Fetching snapshot tag from portsnap1.FreeBSD.org... done. +Fetching snapshot metadata... done. +Updating from Wed Aug 6 18:00:22 EDT 2008 to Sat Aug 30 20:24:11 EDT 2008. +Fetching 3 metadata patches.. done. +Applying metadata patches... done. +Fetching 3 metadata files... done. +Fetching 90 patches.....10....20....30....40....50....60....70....80....90. done. +Applying patches... done. +Fetching 133 new ports or files... done.</screen> + + <para>这个例子展示的是 &man.portsnap.8; + 发现并校验了几个用于当前 ports 的补丁。这还表明以前运行过, + 如果是第一次运行的话,那么仅仅只会下载 Ports Collection。</para> + + <para>在 &man.portsnap.8; 成功完成一次 + <command>fetch</command> 操作后,而且本地系统上的 Ports Collection + 和随之而来的补丁通过校验以后。键入以下命令安装更新文件:</para> + + <screen>&prompt.root; <userinput>portsnap extract</userinput> +/usr/ports/.cvsignore +/usr/ports/CHANGES +/usr/ports/COPYRIGHT +/usr/ports/GIDs +/usr/ports/KNOBS +/usr/ports/LEGAL +/usr/ports/MOVED +/usr/ports/Makefile +/usr/ports/Mk/bsd.apache.mk +/usr/ports/Mk/bsd.autotools.mk +/usr/ports/Mk/bsd.cmake.mk +<replaceable>...</replaceable></screen> + + <para>至此更新就完成了,然后便可以使用更新后的 + Ports Collection 来安装或升级应用程序。</para> + </sect1> +</chapter> diff --git a/zh_CN.GB2312/books/handbook/users/chapter.sgml b/zh_CN.GB2312/books/handbook/users/chapter.sgml index 3e650e0bd3..1e1d3d9fb1 100644 --- a/zh_CN.GB2312/books/handbook/users/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/users/chapter.sgml @@ -650,7 +650,7 @@ passwd: done</screen> <para>这是一个有关CPU消耗的<emphasis>时钟</emphasis> 限制, 不是&man.top.1; 和 &man.ps.1; 命令时屏幕上显示的CPU消耗的百分比。 在写此说明时, - 后者的限制是是不太可能和没有价值的: 编译器 — + 后者的限制是不太可能和没有价值的: 编译器 — 编译一个可能是合法的工作 — 可以在某一时刻轻易的用掉 100% 的 CPU。</para> </note> |