MFen: r36946 -> r38600

Language improvements. [1]

Merging work done by:  delphij, loader
Submitted by:          fuzhli (https://www.freebsdchina.org/forum/viewtopic.php?t=54463) [1]
Obtained from:         The FreeBSD Simplified Chinese Project
This commit is contained in:
Fukang Chen 2012-09-13 11:33:53 +00:00
parent b74de22c77
commit 65e4349dad
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=39524

View file

@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Chinese Documentation Project
Original revision: 1.436
Original revision: r38600
$FreeBSD$
-->
@ -33,6 +33,10 @@
<para>如何为无盘机上配置网络启动。</para>
</listitem>
<listitem>
<para>如何配置从网络 PXE 启动一个 NFS 根文件系统。</para>
</listitem>
<listitem>
<para>如何配置网络地址转换 (NAT)。</para>
</listitem>
@ -325,7 +329,7 @@ host2.example.com link#1 UC 0 0
的局域网里的,用于您那边的连接,对于 ISP
的局域网里的其它机子,其路由会自动产生。
因此,您就已经知道了如何到达机子 <hostid>T1-GW</hostid>
那么也就没必要中那一步了——发送通信给 ISP 服务器。</para>
那么也就没必要中那一步了——发送通信给 ISP 服务器。</para>
<para>通常使用地址 <hostid
role="ipaddr">X.X.X.1</hostid> 做为一个局域网的网关。
@ -507,8 +511,8 @@ Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.0.0.1 UGS 0 49378 xl0
127.0.0.1 127.0.0.1 UH 0 6 lo0
10.0.0/24 link#1 UC 0 0 xl0
192.168.1/24 link#2 UC 0 0 xl1</screen>
10.0.0.0/24 link#1 UC 0 0 xl0
192.168.1.0/24 link#2 UC 0 0 xl1</screen>
<para>使用当前的路由表,<hostid>RouterA</hostid>
是不能到达我们的内网——Internal Net 2 的。它没有到 <hostid
@ -903,55 +907,54 @@ freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPA</screen>
而 <literal>CAPS</literal> 字段则给出了网络类型及其提供的功能,
其中包括:</para>
<variablelist>
<varlistentry>
<term><literal>E</literal></term>
<table frame="none" pgwide="0">
<title>通讯站功能代码</title>
<listitem>
<para>Extended Service Set (ESS)。 表示通讯站是
infrastructure 网络 (相对于 IBSS/ad-hoc 网络) 的成员。</para>
</listitem>
</varlistentry>
<tgroup cols="2">
<thead>
<row>
<entry>功能代码</entry>
<entry>含义</entry>
</row>
</thead>
<varlistentry>
<term><literal>I</literal></term>
<listitem>
<para>IBSS/ad-hoc 网络。 表示通讯站是 ad-hoc
网络 (相对于 ESS 网络) 的成员。</para>
</listitem>
</varlistentry>
<tbody>
<row>
<entry><literal>E</literal></entry>
<entry>Extended Service Set (ESS)。 表示通讯站是
infrastructure 网络 (相对于 IBSS/ad-hoc 网络) 的成员。</entry>
</row>
<varlistentry>
<term><literal>P</literal></term>
<row>
<entry><literal>I</literal></entry>
<entry>IBSS/ad-hoc 网络。 表示通讯站是 ad-hoc
网络 (相对于 ESS 网络) 的成员。</entry>
</row>
<listitem>
<para>私密。 在 BSS 中交换的全部数据帧均需保证数据保密性。
<row>
<entry><literal>P</literal></entry>
<entry>私密。 在 BSS 中交换的全部数据帧均需保证数据保密性。
这表示 BSS 需要通讯站使用加密算法,
例如 WEP、 TKIP 或 AES-CCMP 来加密/解密与其他通讯站交换的数据帧。</para>
</listitem>
</varlistentry>
例如 WEP、 TKIP 或 AES-CCMP 来加密/解密与其他通讯站交换的数据帧。</entry>
</row>
<varlistentry>
<term><literal>S</literal></term>
<listitem>
<para>短前导码 (Short Preamble)。 表示网络采用的是短前导码
<row>
<entry><literal>S</literal></entry>
<entry>短前导码 (Short Preamble)。 表示网络采用的是短前导码
(由 802.11b High
Rate/DSSS PHY 定义, 短前导码采用 56-位 同步字段,
而不是在长前导码模式中所采用的 128-位 字段)。</para>
</listitem>
</varlistentry>
而不是在长前导码模式中所采用的 128-位 字段)。</entry>
</row>
<varlistentry>
<term><literal>s</literal></term>
<listitem>
<para>短碰撞槽时间 (Short slot time)。 表示由于不存在旧式 (802.11b)
通讯站, 802.11g 网络正使用短碰撞槽时间。</para>
</listitem>
</varlistentry>
</variablelist>
<row>
<entry><literal>s</literal></entry>
<entry>短碰撞槽时间 (Short slot time)。 表示由于不存在旧式 (802.11b)
通讯站, 802.11g 网络正使用短碰撞槽时间。</entry>
</row>
</tbody>
</tgroup>
</table>
<para>要显示目前已知的网络, 可以使用下面的命令:</para>
@ -1067,7 +1070,7 @@ ifconfig_wlan0="authmode shared wepmode on weptxkey <replaceable>1</replaceable>
<para>在您选定了无线访问点, 并配置了验证参数之后,
还必须获得 IP 地址才能真正开始通讯。 多数时候,
您会通过 DHCP 来获得无线 IP 地址。 要达到这个目的,
只需简单地编辑 <filename>/etc/rc.conf</filename> 并在配置中加入
需要编辑 <filename>/etc/rc.conf</filename> 并在配置中加入
<literal>DHCP</literal></para>
<programlisting>wlans_ath0="wlan0"
@ -1123,7 +1126,7 @@ ifconfig_wlan0="inet <replaceable>192.168.1.100</replaceable> netmask <replaceab
以及一些其它的安全弱点。 WPA 采用了 802.1X 认证协议,
并采用从多种与 WEP 不同的加密算法中选择一种来保证数据保密性。
WPA 支持的唯一一种加密算法是 TKIP (临时密钥完整性协议)
是一种对 WEP 所采用的基本 RC4 加密算法的扩展,
TKIP 是一种对 WEP 所采用的基本 RC4 加密算法的扩展,
除此之外还提供了对检测到的入侵的响应机制。 TKIP
被设计用来与旧式硬件一同工作, 只需要进行部分软件修改;
它提供了一种改善安全性的折衷方案,
@ -1177,7 +1180,7 @@ ifconfig_wlan0="inet <replaceable>192.168.1.100</replaceable> netmask <replaceab
<programlisting>wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"</programlisting>
<para>下面 启用无线网络接口:</para>
<para>下面启用无线网络接口:</para>
<screen>&prompt.root; <userinput><filename>/etc/rc.d/netif</filename> start</userinput>
Starting wpa_supplicant.
@ -1229,15 +1232,16 @@ wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
wme burst roaming MANUAL</screen>
<note>
<para>如果 <filename>/etc/rc.conf</filename> 的配置中,
使用了 <literal>ifconfig_wlan0="DHCP"</literal>
就不需要手工运行
<command>dhclient</command> 命令了, 因为
<command>dhclient</command> 将在
<command>wpa_supplicant</command> 探测到密钥之后执行。</para>
<para>如果在 <filename>/etc/rc.conf</filename> 中把
<literal>ifconfig_wlan0</literal>
设置成了 <literal>DHCP</literal>
(像 <literal>ifconfig_wlan0="DHCP"</literal> 这样)
那么在 <command>wpa_supplicant</command>
连上了无线接入点 (AP) 之后,则会自动运行
<command>dhclient</command>。</para>
</note>
<para>在这个例子中, DHCP 并不可用, 您可以在
<para>如果不打算使用 DHCP 或者 DHCP 不可用, 您可以在
<command>wpa_supplicant</command> 为通讯站完成了身份认证之后,
指定静态 IP 地址:</para>
@ -1264,15 +1268,15 @@ wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
<sect5 id="network-wireless-wpa-eap-tls">
<title>使用 EAP-TLS 的 WPA</title>
<para>使用 WPA 的第二种方式是使用 802.1X 后端验证服务器
<para>使用 WPA 的第二种方式是使用 802.1X 后端验证服务器
在这个例子中, WPA 也称作 企业-WPA
以便与安全性较差、 采用事先分发密钥的 个人-WPA 区分开来。
在 企业-WPA 中, 验证操作是采用 EAP 完成的
(可扩展认证协议)。</para>
<para>EAP 并未附带加密方法
<para>EAP 并未附带加密方法
因此设计者决定将 EAP 放在加密信道中进行传送。
为此设计了许多 EAP 验证方法,
目前有许多 EAP 验证方法,
最常用的方法是 EAP-TLS、 EAP-TTLS 和
EAP-PEAP。</para>
@ -1460,10 +1464,13 @@ wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
<sect5 id="network-wireless-wpa-eap-peap">
<title>使用 EAP-PEAP 的 WPA</title>
<para>PEAP (受保护的 EAP) 被设计用以替代 EAP-TTLS。
有两种类型的 PEAP 方法, 最常用的是 PEAPv0/EAP-MSCHAPv2。
在这篇文档余下的部分中, 术语 PEAP 是指这种 EAP 方法。
PEAP 是在 EAP-TLS 之后最为常用的 EAP 标准,
<note>
<para>PEAPv0/EAP-MSCHAPv2 是最常见的 PEAP 方法。
此文档的以下部分将使用 PEAP 指代这些方法。</para>
</note>
<para>PEAP (受保护的 EAP) 被设计用以替代 EAP-TTLS
并且是在 EAP-TLS 之后最为常用的 EAP 标准。
换言之, 如果您的网络中有多种不同的操作系统,
PEAP 将是仅次于 EAP-TLS 的支持最广的标准。</para>
@ -1575,15 +1582,15 @@ wlan0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
密钥来进行数据传输。 这里我们使用第三个密钥。
它必须与无线接入点的配置一致。
如果你不清楚你的无线接入点,
你应该尝试用 <literal>1</literal>
尝试用 <literal>1</literal>
(就是说第一个密钥)来设置这个变量。</para>
</listitem>
<listitem>
<para><literal>wepkey</literal> 表示设置所选的 WEP 密钥。
<para><literal>wepkey</literal> 用于选择 WEP 密钥。
其格式应为
<replaceable>index:key</replaceable> 如果没有给出 index 值,
则默认为 <literal>1</literal>。 因此,
<replaceable>index:key</replaceable>
key 默认为 <literal>1</literal>;
如果需要设置的密钥不是第一个, 就必需指定 index 了。</para>
<note>
@ -1696,7 +1703,7 @@ cryptocaps=1f&lt;WEP,TKIP,AES,AES_CCM,TKIPMIC&gt;</screen>
<para>这段输出显示了网卡所支持的各种功能; 其中的关键字
<literal>HOSTAP</literal> 表示这块网卡可以作为无线网络接入点来使用。
此外, 这里还会给出所支持的加密算法: WEP、 TKIP、 AES 等等
此外, 这里还会给出所支持的加密算法: WEP、 TKIP、 AES 等等
这些信息对于知道在访问接入点上使用何种安全协议非常重要。</para>
<para>只有创建网络伪设备时能够配置无线设备是否以 hostap 模式运行,
@ -2988,7 +2995,8 @@ BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2</screen>
<listitem>
<para>只通过主网口收发数据。 如果主网口不可用, 则使用下一个激活的网口。
您在这里加入的第一个网口便会被视为主网口; 此后加入的其他网口,
则会被视为故障转移的备用网口。</para>
则会被视为故障转移的备用网口。 如果发生故障转移之后,
原先的网口又恢复了可用状态, 则它仍会作为主网口使用。</para>
</listitem>
</varlistentry>
@ -3062,16 +3070,19 @@ BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2</screen>
channel-group <replaceable>1</replaceable> mode active
channel-protocol lacp</userinput></screen>
<para>在 &os; 使用
<replaceable>fxp0</replaceable> 和
<replaceable>fxp1</replaceable> 创建 &man.lagg.4; 接口:</para>
<para>使用
<replaceable>fxp0</replaceable> 和 <replaceable>fxp1</replaceable>
创建 &man.lagg.4; 接口, 启用这个接口并配置 IP 地址
<replaceable>10.0.0.3/24</replaceable></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>
<screen>&prompt.root; <userinput>ifconfig <replaceable>fxp0</replaceable> up</userinput>
&prompt.root; <userinput>ifconfig <replaceable>fxp1</replaceable> up</userinput>
&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal> create </userinput>
&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal> up laggproto lacp laggport <replaceable>fxp0</replaceable> laggport <replaceable>fxp1</replaceable> <replaceable>10.0.0.3/24</replaceable></userinput></screen>
<para>用下面的命令查看接口状态:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput></screen>
<screen>&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal></userinput></screen>
<para>标记为
<emphasis>ACTIVE</emphasis> 的接口是激活据合组的部分,
@ -3107,26 +3118,39 @@ Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D</screen
<para>如欲查看进一步的详情, 则需要使用 <userinput>show lacp neighbor
detail</userinput> 命令。</para>
<para>如果希望在系统重启时保持这些设置, 应在
<filename>/etc/rc.conf</filename> 中增加如下配置:</para>
<programlisting>ifconfig_<replaceable>fxp0</replaceable>="up"
ifconfig_<replaceable>fxp1</replaceable>="up"
cloned_interfaces="<literal>lagg<replaceable>0</replaceable></literal>"
ifconfig_<literal>lagg<replaceable>0</replaceable></literal>="laggproto lacp laggport <replaceable>fxp0</replaceable> laggport <replaceable>fxp1</replaceable> <replaceable>10.0.0.3/24</replaceable>"
</programlisting>
</example>
<example id="networking-lagg-failover">
<title>故障转移模式</title>
<para>故障转移模式中, 当首选链路发生问题时,
会自动切换到备用端口。 下面的命令会创建
<replaceable>lagg0</replaceable> 接口, 并使用
<replaceable>fxp0</replaceable> 作为首选接口, 而
<replaceable>fxp1</replaceable> 作为备用接口:</para>
会自动切换到备用端口。 首先启用成员接口,
接着是配置 &man.lagg.4; 接口, 其中, 使用
<replaceable>fxp0</replaceable> 作为首选接口,
<replaceable>fxp1</replaceable> 作为备用接口,
并在整个接口上配置 IP 地址 <replaceable>10.0.0.15/24</replaceable></para>
<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>&prompt.root; <userinput>ifconfig <replaceable>fxp0</replaceable> up</userinput>
&prompt.root; <userinput>ifconfig <replaceable>fxp1</replaceable> up</userinput>
&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal> create</userinput>
&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal> up laggproto failover laggport <replaceable>fxp0</replaceable> laggport <replaceable>fxp1</replaceable> <replaceable>10.0.0.15/24</replaceable></userinput></screen>
<para>创建成功之后, 接口状态会是类似下面这样,
主要的区别是 <acronym>MAC</acronym> 地址和设备名:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput>
<screen>&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal></userinput>
lagg0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
options=8&lt;VLAN_MTU&gt;
ether 00:05:5d:71:8d:b8
inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet autoselect
status: active
laggproto failover
@ -3137,6 +3161,15 @@ lagg0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 150
<replaceable>fxp0</replaceable> 上进行流量的收发。 如果
<replaceable>fxp0</replaceable> 的连接中断, 则 <replaceable>fxp1</replaceable>
会自动成为激活连接。 如果主端口的连接恢复, 则它又会成为激活连接。</para>
<para>如果希望在系统重启时保持这些设置, 应在
<filename>/etc/rc.conf</filename> 中增加如下配置:</para>
<programlisting>ifconfig_<replaceable>fxp0</replaceable>="up"
ifconfig_<replaceable>fxp1</replaceable>="up"
cloned_interfaces="<literal>lagg<replaceable>0</replaceable></literal>"
ifconfig_<literal>lagg<replaceable>0</replaceable></literal>="laggproto failover laggport <replaceable>fxp0</replaceable> laggport <replaceable>fxp1</replaceable> <replaceable>10.0.0.15/24</replaceable>"
</programlisting>
</example>
<example id="networking-lagg-wired-and-wireless">
<title>有线网络和无线网络接口间的自动切换</title>
@ -3181,16 +3214,18 @@ bge0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
<screen>&prompt.root; <userinput>ifconfig <replaceable>wlan0</replaceable> create wlandev <replaceable>iwn0</replaceable> ssid <replaceable>my_router</replaceable> up</userinput></screen>
<para>创建 &man.lagg.4; 接口, 其中 <replaceable>bge0</replaceable>
<para>启用 <replaceable>bge0</replaceable> 接口。 创建
&man.lagg.4; 接口, 其中 <replaceable>bge0</replaceable>
作为主网络接口, 而以 <replaceable>wlan0</replaceable> 作为备选接口:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> create</userinput>
&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> up laggproto failover laggport <replaceable>bge0</replaceable> laggport <replaceable>wlan0</replaceable></userinput></screen>
<screen>&prompt.root; <userinput>ifconfig <replaceable>bge0</replaceable> up</userinput>
&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal> create</userinput>
&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal> up laggproto failover laggport <replaceable>bge0</replaceable> laggport <replaceable>wlan0</replaceable></userinput></screen>
<para>新创建的接口的状态如下, 您系统上的 <acronym>MAC</acronym>
地址和设备名等可能会有所不同:</para>
<screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput>
<screen>&prompt.root; <userinput>ifconfig <literal>lagg<replaceable>0</replaceable></literal></userinput>
lagg0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
options=8&lt;VLAN_MTU&gt;
ether 00:21:70:da:ae:37
@ -3200,16 +3235,19 @@ lagg0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 150
laggport: wlan0 flags=0&lt;&gt;
laggport: bge0 flags=5&lt;MASTER,ACTIVE&gt;</screen>
<para>通过设置下列的
<filename>/etc/rc.conf</filename> 配置,
可以避免每次启动系统时都手工重复上面的设置操作:</para>
<para>接着用 DHCP 客户端来获取 IP 地址:</para>
<screen>&prompt.root; <userinput>dhclient <literal>lagg<replaceable>0</replaceable></literal></userinput></screen>
<para>如果希望在系统重启时保持这些设置, 应在
<filename>/etc/rc.conf</filename> 中增加如下配置:</para>
<programlisting>ifconfig_bge0="up"
ifconfig_iwn0="ether 00:21:70:da:ae:37"
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport bge0 laggport wlan0 DHCP"
cloned_interfaces="<literal>lagg<replaceable>0</replaceable></literal>"
ifconfig_<literal>lagg<replaceable>0</replaceable></literal>="laggproto failover laggport bge0 laggport wlan0 DHCP"
</programlisting>
</example>
</sect2>
@ -3421,9 +3459,9 @@ ifconfig_lagg0="laggproto failover laggport bge0 laggport wlan0 DHCP"
服务器可以回应 BOOTP 和 <acronym>DHCP</acronym>
的请求。</para>
<para><application>ISC DHCP 3.1</application>
<para><application>ISC DHCP 4.2</application>
并不属于基本系统。首先您需要安装
<filename role="package">net/isc-dhcp31-server</filename>
<filename role="package">net/isc-dhcp42-server</filename>
port 或相应的<quote>包</quote>。</para>
<para>一旦安装了 <application>ISC DHCP</application>
@ -3819,6 +3857,296 @@ cd /usr/src/etc; make distribution</programlisting>
</sect2>
</sect1>
<sect1 id="network-pxe-nfs">
<sect1info>
<authorgroup>
<author>
<firstname>Craig</firstname>
<surname>Rodrigues</surname>
<affiliation>
<address>rodrigc@FreeBSD.org</address>
</affiliation>
<contrib>原作者 </contrib>
</author>
</authorgroup>
</sect1info>
<title>从 PXE 启动一个 NFS 根文件系统</title>
<para>&intel; 预启动执行环境 <acronym>PXE</acronym>
能让操作系统从网络启动。 通常由近代主板的 <acronym>BIOS</acronym>
提供 <acronym>PXE</acronym> 支持,它可以通过在 <acronym>BIOS</acronym>
设置里选择从网络启动开启。 一个功能完整的 <acronym>PXE</acronym>
配置还需要正确地设置 <acronym>DHCP</acronym> 和 <acronym>TFTP</acronym>
服务。</para>
<para>当计算机启动的时候, 通过 <acronym>DHCP</acronym> 获取关于
从 <acronym>TFTP</acronym> 得到引导加载器boot loader的信息。
在计算机接受此信息以后, 便通过 <acronym>TFTP</acronym>
下载并执行引导加载器。 这些记载于
<ulink url="http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf">
预启动执行环境 (PXE) 规范</ulink> 的 2.2.1 章节中。
在 &os; 中, 在 <acronym>PXE</acronym> 过程中获取的引导加载器为
<filename>/boot/pxeboot</filename>。 在 <filename>/boot/pxeboot</filename>
执行之后, &os; 的内核被加载, 接着是其他的 &os; 相关引导部分依次被执行。
更多关于 &os; 启动过程的详细信息请参阅 <xref linkend="boot">。</para>
<sect2>
<title>配置用于 NFS 根文件系统的 <command>chroot</command> 环境</title>
<procedure>
<step>
<para>Choose a directory which will have a &os; installation
which will be NFS mountable. For example, a directory such
as <filename>/b/tftpboot/FreeBSD/install</filename> can be used.</para>
<para>选择一个可被用户 NFS 挂载并安装有 &os; 的目录。
比如可以使用像 <filename>/b/tftpboot/FreeBSD/install</filename>
这样的一个目录。</para>
<screen>&prompt.root; <userinput>export NFSROOTDIR=/b/tftpboot/FreeBSD/install</userinput>
&prompt.root; <userinput>mkdir -p ${NFSROOTDIR}</userinput></screen>
</step>
<step>
<para>使用如下的命令开启 NFS 服务
<xref linkend="network-configuring-nfs">.</para>
</step>
<step>
<para>将下面这行加入 <filename>/etc/exports</filename>
用以通过 NFS 导出此目录:</para>
<programlisting>/b -ro -alldirs</programlisting>
</step>
<step>
<para>重起 NFS 服务:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/nfsd restart</userinput></screen>
</step>
<step>
<para>按照 <xref linkend="network-inetd-settings">
中标明的步骤启用 &man.inetd.8;。</para>
</step>
<step>
<para>将如下这行加入到
<filename>/etc/inetd.conf</filename></para>
<programlisting>tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot</programlisting>
</step>
<step>
<para>重启 inetd</para>
<screen>&prompt.root; <userinput>/etc/rc.d/inetd restart</userinput></screen>
</step>
<step>
<para><link linkend="makeworld">重新编译 &os; 内核和用户态</link></para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make buildworld</userinput>
&prompt.root; <userinput>make buildkernel</userinput></screen>
</step>
<step>
<para>把 &os; 安装到 <acronym>NFS</acronym> 挂载目录:</para>
<screen>
&prompt.root; <userinput>make installworld DESTDIR=${NFSROOTDIR}</userinput>
&prompt.root; <userinput>make installkernel DESTDIR=${NFSROOTDIR}</userinput>
&prompt.root; <userinput>make distribution DESTDIR=${NFSROOTDIR}</userinput>
</screen>
</step>
<step>
<para>测试 <acronym>TFTP</acronym> 服务是否能下载将从
<acronym>PXE</acronym> 获取的引导加载器:</para>
<screen>
&prompt.root; <userinput>tftp localhost</userinput>
tftp> <userinput>get FreeBSD/install/boot/pxeboot</userinput>
Received 264951 bytes in 0.1 seconds
</screen>
</step>
<step>
<para>编辑 <filename>${NFSROOTDIR}/etc/fstab</filename>
并加入以下这行挂载 NFS 根文件系统:</para>
<programlisting>
# Device Mountpoint FSType Options Dump Pass
myhost.example.com:/b/tftpboot/FreeBSD/install / nfs ro 0 0
</programlisting>
<para>用你的 <acronym>NFS</acronym> 服务器主机名或者 IP 地址替换
<replaceable>myhost.example.com</replaceable>。 在此例中,
根文件系统是以“只读”的方式挂载用来防止 <acronym>NFS</acronym>
客户端可能意外删除根文件系统上的文件。</para>
</step>
<step>
<para>设置 &man.chroot.8; 环境中的 root 密码。</para>
<screen>&prompt.root; <userinput>chroot ${NFSROOTDIR}</userinput>
&prompt.root; <userinput>passwd</userinput></screen>
<para>此为设置从 <acronym>PXE</acronym>
启动的客户机的 root 密码。</para>
</step>
<step>
<para>允许 ssh root 登录从 <acronym>PXE</acronym> 启动的客户机,
编辑 <filename>${NFSROOTDIR}/etc/ssh/sshd_config</filename>
并开启 <literal>PermitRootLogin</literal> 选项。
关于此选项的说明请参阅 &man.sshd.config.5;。</para>
</step>
<step>
<para>对 ${NFSROOTDIR} 的 &man.chroot.8; 环境做些其他的定制。
这可以是像使用 &man.pkg.add.1; 安装二进制包,
使用 &man.vipw.8; 修改密码, 或者编辑 &man.amd.conf.5;
映射自动挂载等。例如:</para>
<screen>
&prompt.root; <userinput>chroot ${NFSROOTDIR}</userinput>
&prompt.root; <userinput>pkg_add -r bash</userinput></screen>
</step>
</procedure>
</sect2>
<sect2>
<title>配置 <filename>/etc/rc.initdiskless</filename> 中用到的内存文件系统</title>
<para>如果你从一个 NFS 根卷启动,
<filename>/etc/rc</filename>
如果检测到是从 NFS 启动便会运行
<filename>/etc/rc.initdiskless</filename> 脚本。
请阅读此脚本中的注释部分以便了解到底发生了什么。
我们需要把 <filename>/etc</filename> 和
<filename>/var</filename>
做成内存文件系统的原因是这些目录需要能被写入,
但 NFS 根文件系统是只读的。</para>
<screen>
&prompt.root; <userinput>chroot ${NFSROOTDIR}</userinput>
&prompt.root; <userinput>mkdir -p conf/base</userinput>
&prompt.root; <userinput>tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc</userinput>
&prompt.root; <userinput>tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var</userinput></screen>
<para>当系统启动的时候, <filename>/etc</filename> 和
<filename>/var</filename> 内存文件系统就会被创建并挂载,
<filename>cpio.gz</filename> 就会被复制进去。</para>
</sect2>
<sect2>
<title>配置 DHCP 服务</title>
<para>PXE 需要配置一个 <acronym>TFTP</acronym> 服务器和一个
<acronym>DHCP</acronym> 服务器。 <acronym>DHCP</acronym>
服务并不要求与 <acronym>TFTP</acronym> 服务在同一台机器上,
但是必须能够从你的网络访问到它。</para>
<procedure>
<step>
<para>按照此文档处 <xref linkend="network-dhcp-server">
方法安装 <acronym>DHCP</acronym> 服务。
确保 <filename>/etc/rc.conf</filename> 和
<filename>/usr/local/etc/dhcpd.conf</filename>
都配置正确。
</step>
<step>
<para>在 <filename>/usr/local/etc/dhcpd.conf</filename> 中配置
<literal>next-server</literal> <literal>filename</literal>
<literal>option root-path</literal> 选项指向你的
<acronym>TFTP</acronym> 服务器的 IP 地址,
以及 <acronym>TFTP</acronym> 上 <filename>/boot/pxeboot</filename>
文件的路径, 和 <acronym>NFS</acronym> 根文件系统的路径。
这里一份 <filename>dhcpd.conf</filename> 实例:</para>
<programlisting>
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.3 ;
option subnet-mask 255.255.255.0 ;
option routers 192.168.0.1 ;
option broadcast-address 192.168.0.255 ;
option domain-name-server 192.168.35.35, 192.168.35.36 ;
option domain-name "example.com";
# IP address of TFTP server
next-server 192.168.0.1 ;
# path of boot loader obtained
# via tftp
filename "FreeBSD/install/boot/pxeboot" ;
# pxeboot boot loader will try to NFS mount this directory for root FS
option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/" ;
}
</programlisting>
</step>
</procedure>
</sect2>
<sect2>
<title>配置 PXE 客户端与调试连接问题</title>
<procedure>
<step>
<para>当客户端启动的时候, 进入 <acronym>BIOS</acronym>
配置菜单。 设置 <acronym>BIOS</acronym> 从网络启动。
如果之前你所有的配置步骤都正确的话, 那么所有部分应该能
&quot;正常工作&quot;。</para>
</step>
<step>
<para>使用 <filename role="package">net/wireshark</filename>
port 查看 <acronym>DHCP</acronym> 和 <acronym>TFTP</acronym>
的网络流量来调试各种问题。</para>
</step>
<step>
<para>确保 <filename>pxeboot</filename> 能从
<acronym>TFTP</acronym> 获取。
在你的 <acronym>TFTP</acronym> 服务器上检查
<filename>/var/log/xferlog</filename> 日志确保
<filename>pxeboot</filename> 被从正确的位置获取。
可以这样测试上面例子 <filename>dhcpd.conf</filename>
中所设置的:</para>
<screen>&prompt.root; <userinput>tftp 192.168.0.1</userinput>
tftp> <userinput>get FreeBSD/install/boot/pxeboot</userinput>
Received 264951 bytes in 0.1 seconds</screen>
<para>请阅读 &man.tftpd.8; 和 &man.tftp.1;。
其中的 <literal>BUGS</literal> 列出了
<acronym>TFTP</acronym> 的一些限制。</para>
</step>
<step>
<para>确保根文件系统能够从 <acronym>NFS</acronym> 挂载。
可以这样测试上面例子 <filename>dhcpd.conf</filename>
中所设置的:</para>
<screen>&prompt.root; <userinput>mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt</userinput></screen>
</step>
<step>
<para>阅读 <filename>src/sys/boot/i386/libi386/pxe.c</filename>
中的代码以了解 <filename>pxeboot</filename> 加载器如何设置诸如
<literal>boot.nfsroot.server</literal> 和
<literal>boot.nfsroot.path</literal> 之类的变量。
这些变量被用在了
<filename>src/sys/nfsclient/nfs_diskless.c</filename>
的 NFS 无盘根挂载代码中。</para>
</step>
<step>
<para>Read &man.pxeboot.8; and &man.loader.8;.</para>
</step>
</procedure>
</sect2>
</sect1>
<sect1 id="network-isdn">
<title>ISDN</title>