diff options
author | Fukang Chen <loader@FreeBSD.org> | 2008-09-01 19:16:56 +0000 |
---|---|---|
committer | Fukang Chen <loader@FreeBSD.org> | 2008-09-01 19:16:56 +0000 |
commit | 07c879b96fac6182bfd0c6e20a2b98783d514af0 (patch) | |
tree | e0da9e93feca7cc3cdc9052361f681ea966757ba | |
parent | 755d80474b24cbee8a226e8bd0f088430e072437 (diff) |
Notes
21 files changed, 964 insertions, 1315 deletions
diff --git a/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml b/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml index 83a67fcf65..0945cd9357 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.408 + Original revision: 1.412 $FreeBSD$ --> @@ -636,7 +636,7 @@ route_net2="-net 192.168.1.0/24 192.168.1.1"</programlisting> 多播路由协议的程序主要由 &man.pim.4; 取代。相关的 &man.map-mbone.8; 和 &man.mrinfo.8 工具也被移除了。 这些程序能在 &os; 的 Ports Collection - <filename role="port">net/mrouted</filename> 中找到。</para> + <filename role="package">net/mrouted</filename> 中找到。</para> </note> </sect2> </sect1> @@ -780,8 +780,18 @@ route_net2="-net 192.168.1.0/24 192.168.1.1"</programlisting> <para>在配置好设备驱动之后, 您还需要引入驱动程序所需要的 802.11 网络支持。 对于 &man.ath.4; 驱动而言, 至少需要 &man.wlan.4; - 模块; 这个模块会自动随无线设备驱动一同加载。 - 除此之外, 您还需要提供您希望使用的安全协议所需的加密支持模块。 + <literal>wlan_scan_ap</literal> 和 + <literal>wlan_scan_sta</literal> + 模块; &man.wlan.4; 模块会自动随无线设备驱动一同加载, + 剩下的模块必须要在系统引导时加载, 就需要在 + <filename>/boot/loader.conf</filename> + 中加入下面的配置:</para> + + <programlisting>wlan_scan_ap_load="YES" +wlan_scan_sta_load="YES"</programlisting> + + + <para>除此之外, 您还需要提供您希望使用的安全协议所需的加密支持模块。 这些模块是设计来让 &man.wlan.4; 模块根据需要自动加载的, 但目前还必须手工进行配置。 您可以使用下面这些模块: &man.wlan.wep.4;、 &man.wlan.ccmp.4; 和 &man.wlan.tkip.4;。 &man.wlan.ccmp.4; 和 @@ -809,6 +819,8 @@ wlan_tkip_load="YES"</programlisting> device ath_hal # Atheros Hardware Access Layer device ath_rate_sample # John Bicket's SampleRate control algorithm. device wlan # 802.11 support (Required) +device wlan_scan_ap # 802.11 AP mode scanning +device wlan_scan_sta # 802.11 STA mode scanning device wlan_wep # WEP crypto support for 802.11 devices device wlan_ccmp # AES-CCMP crypto support for 802.11 devices device wlan_tkip # TKIP and Michael crypto support for 802.11 devices</programlisting> @@ -1508,7 +1520,10 @@ ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 <listitem> <para><literal>weptxkey</literal> 指明了使用哪个 WEP 密钥来进行数据传输。 这里我们使用第三个密钥。 - 它必须与无线访问点的配置一致。</para> + 它必须与无线接入点的配置一致。 + 如果你不清楚你的无线接入点, + 你应该尝试用 <literal>1</literal> + (就是说第一个密钥)来设置这个变量。</para> </listitem> <listitem> @@ -3332,7 +3347,7 @@ subnet 192.168.4.0 netmask 255.255.255.0 { <acronym>TFTP</acronym> 服务器配置,不过会相当典型)。 同样,<acronym>PXE</acronym> 会装载 <filename>pxeboot</filename>, 而不是内核。另外有几个很有意思的可能,如从 &os; CD-ROM - 的 <filename role="directory">/boot</filename> 目录装载 + 的 <filename class="directory">/boot</filename> 目录装载 <filename>pxeboot</filename> (因为 &man.pxeboot.8; 能够装载 <filename>GENERIC</filename> 内核,这就使得可以使用 <acronym>PXE</acronym> 从远程的 CD-ROM 里启动)。</para> diff --git a/zh_CN.GB2312/books/handbook/config/chapter.sgml b/zh_CN.GB2312/books/handbook/config/chapter.sgml index ceb84618e0..5e88d42528 100644 --- a/zh_CN.GB2312/books/handbook/config/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/config/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Chinese Documentation Project - Original Revision: 1.232 + Original Revision: 1.233 $FreeBSD$ --> @@ -1369,33 +1369,35 @@ nameserver 147.11.100.30</programlisting> <programlisting># $&os;$ # +# # Host Database -# This file should contain the addresses and aliases -# for local hosts that share this file. +# +# This file should contain the addresses and aliases for local hosts that +# share this file. Replace 'my.domain' below with the domainname of your +# machine. +# # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # -::1 localhost localhost.my.domain myname.my.domain -127.0.0.1 localhost localhost.my.domain myname.my.domain - +::1 localhost localhost.my.domain +127.0.0.1 localhost localhost.my.domain # # Imaginary network. -#10.0.0.2 myname.my.domain myname -#10.0.0.3 myfriend.my.domain myfriend +#10.0.0.2 myname.my.domain myname +#10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # -# 10.0.0.0 - 10.255.255.255 -# 172.16.0.0 - 172.31.255.255 -# 192.168.0.0 - 192.168.255.255 +# 10.0.0.0 - 10.255.255.255 +# 172.16.0.0 - 172.31.255.255 +# 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need -# real official assigned numbers. PLEASE PLEASE PLEASE do not try -# to invent your own network numbers but instead get one from your -# network provider (if any) or from the Internet Registry (ftp to -# rs.internic.net, directory `/templates'). +# real official assigned numbers. Do not try to invent your own network +# numbers but instead get one from your network provider (if any) or +# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.) #</programlisting> <para><filename>/etc/hosts</filename> 用简单的格式:</para> diff --git a/zh_CN.GB2312/books/handbook/cutting-edge/chapter.sgml b/zh_CN.GB2312/books/handbook/cutting-edge/chapter.sgml index 55068a6192..a5be2bd7e1 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.227 + Original Revision: 1.228 $FreeBSD$ --> @@ -1461,7 +1461,8 @@ Building everything.. 而在其它机器上进行 NFS 挂接。</para> <para>最后,确认<quote>构建集群</quote>里所有机器上的 - <filename>/etc/make.conf</filename> 与<quote>构建机器</quote>里的相同。 + <filename>/etc/make.conf</filename> 和 + <filename>/etc/src.conf</filename> 与<quote>构建机器</quote>里的相同。 这意味着<quote>构建机器</quote>必须构建部分基本系统用于 <quote>构建集群</quote>里所有机器的安装。同样, 每台<quote>构建机器</quote>要有它自已的内核名字,使用 diff --git a/zh_CN.GB2312/books/handbook/disks/chapter.sgml b/zh_CN.GB2312/books/handbook/disks/chapter.sgml index 06e7c9d96f..2c71f61ab7 100644 --- a/zh_CN.GB2312/books/handbook/disks/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/disks/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.285 + Original Revision: 1.286 $FreeBSD$ --> @@ -3427,7 +3427,7 @@ device crypto</programlisting> <para>下面的例子讲描述如何生成密钥文件, 它将作为主密钥 (Master Key) 的一部分, 用于挂接到 - <filename role="directory">/private</filename> 的加密 provider。 + <filename class="directory">/private</filename> 的加密 provider。 这个密钥文件将提供一些随机数据来加密主密钥。 同时, 主密钥也会使用一个口令字来保护。 Provider 的扇区尺寸为 4kB。 此外, 这里的讨论将介绍如何挂载 @@ -3493,7 +3493,7 @@ Filesystem Size Used Avail Capacity Mounted on <title>卸下卷并断开 provider</title> <para>一旦在加密分区上的工作完成, - 并且不再需要 <filename role="directory">/private</filename> 分区, + 并且不再需要 <filename class="directory">/private</filename> 分区, 就应考虑将其卸下并将 <command>geli</command> 加密分区从内核上断开。</para> <screen>&prompt.root; <userinput>umount /private</userinput> diff --git a/zh_CN.GB2312/books/handbook/eresources/chapter.sgml b/zh_CN.GB2312/books/handbook/eresources/chapter.sgml index 2381e4515e..7e61f8fbf9 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.185 + Original Revision: 1.186 $FreeBSD$ --> @@ -544,6 +544,11 @@ </row> <row> + <entry>&a.wip-status.name;</entry> + <entry>FreeBSD 项目进度状态</entry> + </row> + + <row> <entry>&a.www.name;</entry> <entry><ulink url="&url.base;/index.html">www.FreeBSD.org</ulink>的维护</entry> </row> @@ -1337,6 +1342,27 @@ </listitem> </varlistentry> + <varlistentry> + <term>&a.wip-status.name;</term> + + <listitem> + <para><emphasis>&os; 项目进度状态</emphasis></para> + + <para>这个邮件列表是用来发布 &os; 相关项目的创建和工作进度的。 + 发至这个列表的消息将会先被审核。通常建议把消息用 "To:" + 发给一个更典型的 &os; 列表,而只仅仅 "BCC:" 给这个列表。 + 这样你的工作进度就能在典型的列表上讨论, + 因为这个列表是不允许讨论问题的。</para> + + <para>查看一下归档中合适的消息作为例子。</para> + + <para>可能每隔几个月, + 会从这个列表中的消息中提取出一个评论性的消息摘要发到 + &os; 网站做为状态报告的一部分 + <footnote><para><ulink url="http://www.freebsd.org/news/status/"></ulink></para></footnote>。 + 你也能从那里找到更多的例子和以往的报告。</para> + </listitem> + </varlistentry> </variablelist> </sect2> <sect2 id="eresources-mailfiltering"> diff --git a/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml b/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml index 211edbaa4e..f10bbdb67d 100644 --- a/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.83 + Original Revision: 1.85 $FreeBSD$ --> @@ -227,9 +227,9 @@ <note> <para>从 &os; 7.0 开始,作为例子的存放在 - <filename role="directory">/etc/</filename> 的 + <filename class="directory">/etc/</filename> 的 <filename>pf.conf</filename> 被移动到了<filename - role="directory">/usr/share/examples/pf/</filename>。 + class="directory">/usr/share/examples/pf/</filename>。 &os; 7.0 以前的版本,默认仍有一份 <filename>/etc/pf.conf</filename>。</para> </note> diff --git a/zh_CN.GB2312/books/handbook/geom/chapter.sgml b/zh_CN.GB2312/books/handbook/geom/chapter.sgml index 97bb5f44a8..dc6126e49d 100644 --- a/zh_CN.GB2312/books/handbook/geom/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/geom/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.41 + Original Revision: 1.42 $FreeBSD$ --> @@ -82,7 +82,7 @@ <para>GEOM 允许访问和控制类 (classes) — 主引导记录、 <acronym>BSD</acronym> 标签 (label), 等等 — 通过使用 provider, 或在 - <filename role="directory">/dev</filename> 中的特殊文件。 + <filename class="directory">/dev</filename> 中的特殊文件。 它支持许多软件 <acronym>RAID</acronym> 配置, GEOM 能够向操作系统, 以及在其上运行的工具提供透明的访问方式。</para> </sect1> @@ -146,7 +146,7 @@ <step><para>确信存在合适的挂接点 (mount point)。 如果这个卷将成为根分区, 那么暂时把它挂接到其他位置i, 如 <filename - role="directory">/mnt</filename>:</para> + class="directory">/mnt</filename>:</para> <screen>&prompt.root; <userinput>mkdir /mnt</userinput></screen> </step> @@ -174,7 +174,7 @@ XXX: What message? Put it inside the screen output above. </step> <step><para>上述过程将在 - <filename role="directory">/dev/stripe</filename> + <filename class="directory">/dev/stripe</filename> 目录中的 <devicename>st0</devicename> 设备基础上建立两个新设备。 这包括 <devicename>st0a</devicename> 和 <devicename>st0c</devicename>。 这时, 就可以在 @@ -231,7 +231,7 @@ XXX: What message? Put it inside the screen output above. <para>首先需要把 &os; 安装到第一块磁盘上, 并建立两个分区。 第一个分区将成为交换区, 其尺寸应该是两倍的 <acronym>RAM</acronym> 尺寸, 而余下的空间, - 则作为根 (<filename role="directory">/</filename>) 文件系统来使用。 + 则作为根 (<filename class="directory">/</filename>) 文件系统来使用。 当然, 也可以为其他挂接点划分不同的分区; 但是, 这将使难度提高一个量级, 因为您将不得不手工修改 &man.bsdlabel.8; 和 &man.fdisk.8; @@ -258,7 +258,7 @@ Done.</screen> <note> <para>这个命令应该会在 - <filename role="directory">/dev/mirror</filename> + <filename class="directory">/dev/mirror</filename> 目录中创建 <devicename>gm0</devicename> 设备节点。</para> </note> @@ -287,7 +287,7 @@ Done.</screen> <para>这将让系统输出很多信息和一系列数字。 不必为此担心, 只需看看是否有错误提示就可以了, 如果没问题, 接下来把它挂到 - <filename role="directory">/mnt</filename> 挂接点上面:</para> + <filename class="directory">/mnt</filename> 挂接点上面:</para> <screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput></screen> @@ -403,7 +403,7 @@ ggate0 &prompt.root; <userinput>mount /dev/ggate0 /mnt</userinput></screen> <para>到此为止, 设备应该已经可以通过挂接点 - <filename role="directory">/mnt</filename> 访问了。</para> + <filename class="directory">/mnt</filename> 访问了。</para> <note> <para>请注意, 如果设备已经被服务器或网络上的任何其他机器挂接, diff --git a/zh_CN.GB2312/books/handbook/install/chapter.sgml b/zh_CN.GB2312/books/handbook/install/chapter.sgml index f967048324..fd18eaed6d 100644 --- a/zh_CN.GB2312/books/handbook/install/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/install/chapter.sgml @@ -3951,7 +3951,7 @@ Please press any key to reboot.</screen> <secondary>headless (serial console)</secondary> </indexterm> <indexterm><primary>serial console</primary></indexterm> - <para>这种类型的安装叫做 <quote>headless install(无关安装)</quote>, + <para>这种类型的安装叫做 <quote>headless install(无头安装)</quote>, 因您正要安装FreeBSD的机器不是没带显示器,就是没有显卡。 您可能会问那怎么安装? 可以使用一个串行控制台。 串行控制台基本上是使用另外一台机器来充当主显示设备和键盘。 diff --git a/zh_CN.GB2312/books/handbook/introduction/chapter.sgml b/zh_CN.GB2312/books/handbook/introduction/chapter.sgml index 0ef9e3bf1d..9a507b3711 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.123 + Original Revision: 1.124 $FreeBSD$ --> @@ -23,50 +23,50 @@ <sect1 id="introduction-synopsis"> <title>概述</title> - <para>非常感谢您对 FreeBSD 感兴趣! - 下面的章节涵盖了 FreeBSD 项目的各个方面, + <para>非常感谢您对 &os; 感兴趣! + 下面的章节涵盖了 &os; 项目的各个方面, 比如它的历史、目标、开发模式,等等。</para> <para>阅读完这章,您将了解:</para> <itemizedlist> <listitem> - <para>FreeBSD 与其它计算机操作系统的关系。</para> + <para>&os; 与其它计算机操作系统的关系。</para> </listitem> <listitem> - <para>FreeBSD 项目的历史。</para> + <para>&os; 项目的历史。</para> </listitem> <listitem> - <para>FreeBSD 项目的目标。</para> + <para>&os; 项目的目标。</para> </listitem> <listitem> - <para>FreeBSD 开放源代码开发模式的基础。</para> + <para>&os; 开放源代码开发模式的基础。</para> </listitem> <listitem> - <para>当然还有:<quote>FreeBSD</quote> 这个名称的由来。</para> + <para>当然还有:<quote>&os;</quote> 这个名称的由来。</para> </listitem> </itemizedlist> </sect1> <sect1 id="nutshell"> - <title>欢迎来到 FreeBSD 的世界!</title> + <title>欢迎来到 &os; 的世界!</title> <indexterm><primary>4.4BSD-Lite</primary></indexterm> - <para>FreeBSD 是一个支持 + <para>&os; 是一个支持 Intel (x86 和 &itanium;),AMD64,<trademark>Alpha</trademark>,Sun &ultrasparc; 计算机的基于 4.4BSD-Lite 的操作系统。 到其他体系结构的移植也在进行中。 - 您也可以阅读 <link linkend="history">FreeBSD 的历史</link>, + 您也可以阅读 <link linkend="history">&os; 的历史</link>, 或者<link linkend="relnotes">最新的发行版本</link>。 如果您有意捐助(代码, 硬件,基金),请看<ulink - url="&url.articles.contributing;/index.html">为 FreeBSD 提供帮助</ulink>这篇文章。</para> + url="&url.articles.contributing;/index.html">为 &os; 提供帮助</ulink>这篇文章。</para> <sect2 id="os-overview"> - <title>FreeBSD 能做些什么?</title> + <title>&os; 能做些什么?</title> - <para>FreeBSD有许多非凡的特性。其中一些是:</para> + <para>&os; 有许多非凡的特性。其中一些是:</para> <itemizedlist> <indexterm><primary>抢占式多任务</primary></indexterm> @@ -77,8 +77,9 @@ <indexterm><primary>多用户设备</primary></indexterm> <listitem> - <para><emphasis>多用户设备</emphasis> 使得许多用户能够同时使用同一 - FreeBSD 系统做各种事情。 + <para><emphasis>多用户设备</emphasis> + 使得许多用户能够同时使用同一 + &os; 系统做各种事情。 比如, 像打印机和磁带驱动器这样的系统外设, 可以完全地在系统或者网络上的所有用户之间共享, 可以对用户或者用户组进行个别的资源限制, @@ -90,7 +91,7 @@ <para>符合业界标准的强大 <emphasis>TCP/IP 网络</emphasis> 支持, 例如 SCTP、 DHCP、 NFS、 NIS、 PPP, SLIP, IPsec 以及 IPv6。 - 这意味着您的 FreeBSD 主机可以很容易地和其他系统互联, + 这意味着您的 &os; 主机可以很容易地和其他系统互联, 也可以作为企业的服务器,提供重要的功能, 比如 NFS(远程文件访问)以及 email 服务, 或将您的组织接入 Internet 并提供 WWW,FTP,路由和防火墙(安全)服务。</para> @@ -103,7 +104,7 @@ </listitem> <listitem> - <para>FreeBSD 是一个 <emphasis>32 位</emphasis>操作系统 + <para>&os; 是一个 <emphasis>32 位</emphasis>操作系统 (在 Alpha,&itanium;,AMD64,和 &ultrasparc; 上是<emphasis>64 位</emphasis>), 并且从开始就是如此设计的。</para> </listitem> @@ -145,7 +146,7 @@ <listitem> <para>数以千计的 <emphasis>ready-to-run</emphasis> - 应用程序可以从 FreeBSD + 应用程序可以从 &os; <emphasis>ports</emphasis> 和 <emphasis>packages</emphasis> 套件中找到。 您可以顺利地从这里找到, 何须搜索网络?</para> @@ -154,7 +155,7 @@ <listitem> <para>可以在 Internet 上找到成千上万其它 <emphasis>easy-to-port</emphasis> 的应用程序。 - FreeBSD 和大多数流行的商业 &unix; 代码级兼容, + &os; 和大多数流行的商业 &unix; 代码级兼容, 因此大多数应用程序不需要或者只要很少的改动就可以编译。</para> </listitem> @@ -213,31 +214,36 @@ <primary>计算机系统研究组(CSRG)</primary> </indexterm> <indexterm><primary>U.C. Berkeley</primary></indexterm> - <para>FreeBSD 基于加州大学伯克利分校计算机系统研究组(CSRG)发布的 4.4BSD-Lite, + <para>&os; 基于加州大学伯克利分校计算机系统研究组 + (CSRG) 发布的 4.4BSD-Lite, 继承了 BSD 系统开发的优良传统。 除了 CSRG 优秀的工作之外, - FreeBSD 项目花费了非常多的时间来优化调整系统, + &os; 项目花费了非常多的时间来优化调整系统, 使其在真实负载情况下拥有最好的性能和可靠性。 在现今, 许多商业巨人正为给 PC 操作系统增加新功能、 提升和改善其可靠性, 以便在其上展开激烈竞争的同时, - FreeBSD <emphasis>现在</emphasis> 已经能够提供所有这一切了!</para> + &os; <emphasis>现在</emphasis> + 已经能够提供所有这一切了!</para> - <para>FreeBSD 可以提供的应用事实上仅局限于您的想象力。 + <para>&os; 可以提供的应用事实上仅局限于您的想象力。 从软件开发到工厂自动化,从存货控制到遥远的人造卫星天线方位控制, - 如果商业的 &unix; 产品可以做到,那么就非常有可能您也可以用 FreeBSD 来做! - FreeBSD 也极大地受益于全世界的研究中心和大学开发的数以千计的高质量的应用程序, + 如果商业的 &unix; 产品可以做到, + 那么就非常有可能您也可以用 &os; 来做! + &os; 也极大地受益于全世界的研究中心和大学开发的数以千计的高质量的应用程序, 这些程序通常只需要很少的花费甚至免费。 可用的商业应用程序, 每天也都在大量地增加。</para> - <para>因为 FreeBSD 自身的源代码是完全公开的, + <para>因为 &os; 自身的源代码是完全公开的, 所以对于特定的应用程序或项目,可以对系统进行最大限度的定制。 这对于大多数主流的商业生产商的操作系统来说几乎是不可能的。 - 以下是当前人们应用 FreeBSD 的某些程序的例子:</para> + 以下是当前人们应用 &os; 的某些程序的例子:</para> <itemizedlist> <listitem> - <para><emphasis>Internet 服务:</emphasis>FreeBSD 内建的强大的 TCP/IP - 网络使它得以成为各种 Internet 服务的理想平台,比如:</para> + <para><emphasis>Internet 服务:</emphasis> + &os; 内建的强大的 TCP/IP + 网络使它得以成为各种 Internet 服务的理想平台, + 比如:</para> <itemizedlist> <indexterm><primary>FTP 服务器</primary></indexterm> @@ -283,22 +289,25 @@ </listitem> </itemizedlist> - <para>使用 FreeBSD, 您可以容易地从便宜的 + <para>使用 &os;, 您可以容易地从便宜的 386 类 PC 起步,并随着您的企业成长,一路升级到带有 RAID 存储的四路 Xeon 服务器。</para> </listitem> <listitem> - <para><emphasis>教育:</emphasis>您是一名计算机科学或者相关工程领域的学生吗? - 学习操作系统,计算机体系结构和网络没有比在 FreeBSD + <para><emphasis>教育:</emphasis> + 您是一名计算机科学或者相关工程领域的学生吗? + 学习操作系统,计算机体系结构和网络没有比在 &os; 可提供的体验下动手实践更好的办法了。许多可自由使用的 - CAD、数学和图形设计包也使它对于那些主要兴趣是在计算机上完成<emphasis>其他</emphasis>工作的人非常有帮助。</para> + CAD、数学和图形设计包也使它对于那些主要兴趣是在计算机上完成 + <emphasis>其他</emphasis>工作的人非常有帮助。</para> </listitem> <listitem> - <para><emphasis>研究:</emphasis>有完整的系统源代码, - FreeBSD 对于操作系统研究以及其他计算机科学分支都是一个极好的平台。 - FreeBSD 可自由获得的本性, + <para><emphasis>研究:</emphasis> + 有完整的系统源代码,&os; + 对于操作系统研究以及其他计算机科学分支都是一个极好的平台。 + &os; 可自由获得的本性, 同样可以使处在不同地方的开发团队在开放的论坛上讨论问题、 交流想法与合作开发成为可能, 且不必担心特别的版权协定或者限制。</para> @@ -309,7 +318,7 @@ <listitem> <para><emphasis>网络:</emphasis>需要一个新的路由器? 一台域名服务器 (DNS)? 一个隔离您的内部网络的防火墙? - FreeBSD 可以容易的把丢弃在角落不用的 386 或者 + &os; 可以容易的把丢弃在角落不用的 386 或者 486 PC 变成一台完善的带包过滤能力的高级路由器。</para> </listitem> @@ -322,36 +331,38 @@ <secondary>Accelerated-X</secondary> </indexterm> <listitem> - <para><emphasis>X Window 工作站:</emphasis> FreeBSD - 是廉价 X 终端的一种绝佳解决方案, 您可以选择使用免费的 X11 - 服务器。 与 X 终端不同,如果需要的话 - FreeBSD 能够在本地直接运行程序, 因而减少了中央服务器的负担。 - FreeBSD 甚至能够在 <quote>无盘</quote> 环境下启动, + <para><emphasis>X Window 工作站:</emphasis> &os; + 是廉价 X 终端的一种绝佳解决方案, + 您可以选择使用免费的 X11 服务器。 + 与 X 终端不同,如果需要的话 &os; + 能够在本地直接运行程序, + 因而减少了中央服务器的负担。 &os; + 甚至能够在 <quote>无盘</quote> 环境下启动, 这使得终端更为便宜和易于管理。</para> </listitem> <indexterm><primary>GNU Compiler Collection</primary></indexterm> <listitem> <para><emphasis>软件开发:</emphasis> - 基本的 FreeBSD 系统带有包括著名的 GNU C/C++ + 基本的 &os; 系统带有包括著名的 GNU C/C++ 编译器和调试工具在内的一整套开发工具。</para> </listitem> </itemizedlist> - <para>FreeBSD 可以通过 CDROM、DVD, + <para>&os; 可以通过 CDROM、DVD, 以及匿名 FTP 以源代码和二进制方式获得。请查看<xref linkend="mirrors"> - 了解获取 FreeBSD 的更多细节。</para> + 了解获取 &os; 的更多细节。</para> </sect2> <sect2> - <title>谁在使用 FreeBSD?</title> + <title>谁在使用 &os;?</title> <indexterm> <primary>用户</primary> - <secondary>运行 FreeBSD 的大型站点</secondary> + <secondary>运行 &os; 的大型站点</secondary> </indexterm> - <para>FreeBSD 已被用来支持 Internet 上一些最大的站点, + <para>&os; 已被用来支持 Internet 上一些最大的站点, 包括:</para> <itemizedlist> @@ -425,7 +436,7 @@ </sect1> <sect1 id="history"> - <title>关于 FreeBSD 项目</title> + <title>关于 &os; 项目</title> <para>下面的章节提供了项目的一些背景信息, 包括简要的历史、项目目标、以及项目开发模式。</para> @@ -441,7 +452,7 @@ </authorgroup> </sect2info> - <title>FreeBSD 的简要历史</title> + <title>&os; 的简要历史</title> <indexterm><primary>386BSD Patchkit</primary></indexterm> <indexterm><primary>Hubbard, Jordan</primary></indexterm> @@ -451,7 +462,7 @@ <primary>FreeBSD 项目</primary> <secondary>历史</secondary> </indexterm> - <para>FreeBSD 项目起源于 1993 年早期, + <para>&os; 项目起源于 1993 年早期, 部分作为 <quote>Unofficial 386BSD Patchkit</quote> 的副产物,patchkit 的最后 3 个协调维护人是:Nate Williams,Rod Grimes 和我。</para> @@ -477,16 +488,17 @@ <indexterm><primary>Walnut Creek CDROM</primary></indexterm> <para>没过多久, 我们认为即便没有 Bill 的支持, 项目仍有保留的价值, 因此,我们采用了 David Greenman 的意见,给其命名为 - <quote>FreeBSD</quote>。在和当时的几个用户商量后, + <quote>&os;</quote>。在和当时的几个用户商量后, 我们提出了最初的目标, 而这件事明朗化后, 这个项目就走上了正轨,甚至可能成为现实。 - 为了拓展 FreeBSD 的发行渠道,我抱着试试看的心态, + 为了拓展 &os; 的发行渠道,我抱着试试看的心态, 联系了光盘商 Walnut Creek CDROM, - 以便那些上网不方便的用户得到 FreeBSD。 - Walnut Creek CDROM 不仅支持发行 FreeBSD 光盘版的想法, + 以便那些上网不方便的用户得到 &os;。 + Walnut Creek CDROM 不仅支持发行 &os; 光盘版的想法, 还为这个计划提供了所需的计算机和高速网络接入。 在那时, 若没有 Walnut Creek CDROM 对一个完全未知的项目的空前信任, - FreeBSD 不太可能像它今天这样,影响如此深远,发展如此快速。</para> + &os; 不太可能像它今天这样,影响如此深远, + 发展如此快速。</para> <indexterm><primary>4.3BSD-Lite</primary></indexterm> <indexterm><primary>Net/2</primary></indexterm> @@ -494,11 +506,11 @@ <indexterm><primary>386BSD</primary></indexterm> <indexterm><primary>Free Software Foundation</primary></indexterm> <para>第一个 CDROM (以及在整个互联网范围内发行的) 发行版本是 - FreeBSD 1.0,于 1993 年 10 月发布。这个版本基于 + &os; 1.0,于 1993 年 10 月发布。这个版本基于 U.C. Berkeley 的 4.3BSD-Lite(<quote>Net/2</quote>)磁带, 也有许多组件是 386BSD 和自由软件基金会提供的。 对于第一次发行,这算是相当成功了。 - 在 1994 年 5 月,我们发布了更加成功的 FreeBSD 1.1 版。</para> + 在 1994 年 5 月,我们发布了更加成功的 &os; 1.1 版。</para> <indexterm><primary>Novell</primary></indexterm> <indexterm><primary>U.C. Berkeley</primary></indexterm> @@ -508,34 +520,35 @@ Novell 和 U.C. Berkeley 决定就 Berkeley Net/2 磁带的归属权问题打的那场马拉松式的官司达成和解。 判决的结果是, - U.C. Berkeley 承认 Net/2 很大一部分代码是<quote>侵占来的</quote> + U.C. Berkeley 承认 Net/2 很大一部分代码是 + <quote>侵占来的</quote> 且这些代码归 Novell 公司所拥有。这些代码是 Novell 不久前从 AT&T 买来的。 Berkeley 得到了来自 Novell 的 <quote>祝福</quote>: 4.4BSD-Lite 发行后,将不认为是侵权, 且要求现存的 Net/2 的用户更换新版。 - 这也包括 FreeBSD,我们的项目被要求在 1994 年 6 月底停止发行基于 + 这也包括 &os;,我们的项目被要求在 1994 年 6 月底停止发行基于 Net/2 的产品。在此协议允许的时间内, - 本项目被允许发行最后一版,也就是 FreeBSD 1.1.5.1。</para> + 本项目被允许发行最后一版,也就是 &os; 1.1.5.1。</para> - <para>于是 FreeBSD 开始艰苦的从全新的而且不完整的 4.4BSD-Lite + <para>于是 &os; 开始艰苦的从全新的而且不完整的 4.4BSD-Lite 中重新整合自己。<quote>Lite</quote> 版本是不完整的, 因为 Berkeley 的 CSRG 已经删除了大量的构建可启动运行的系统所需要的代码 (因为各种各样的版权问题),事实上 4.4 的 Intel port 是非常不完整的。 直到 1994 年 11 月项目才完成这个转换,这个时候才把 - FreeBSD 2.0 通过网络和 CDROM(在 12 月)发布出来。 + &os; 2.0 通过网络和 CDROM(在 12 月)发布出来。 尽管系统很多地方还很粗糙,这个版本还是取得了重大的成功, - 接下来在 1995 年 6 月发布了更强大和容易安装的 FreeBSD 2.0.5 + 接下来在 1995 年 6 月发布了更强大和容易安装的 &os; 2.0.5 版本。</para> - <para>我们于 1996 年 8 月发布了 FreeBSD 2.1.5 版本, + <para>我们于 1996 年 8 月发布了 &os; 2.1.5 版本, 它在 ISP 和商业团体中非常流行。 随后, 2.1-STABLE 分支的另一个版本应运而生,它就是 - FreeBSD 2.1.7.1,在 1997 年 2 月发布并停止了 + &os; 2.1.7.1,在 1997 年 2 月发布并停止了 2.1-STABLE 的主流开发。现在,它处于维护状态, 仅仅提供安全性的增强和其他严重的错误修补的维护(RELENG_2_1_0)。</para> - <para>FreeBSD 2.2 版作为 RELENG_2_2 分支,于 1996 年 11 月从开发主线 + <para>&os; 2.2 版作为 RELENG_2_2 分支,于 1996 年 11 月从开发主线 (<quote>-CURRENT</quote>)分出来。 它的第一个完整版(2.2.1)于 1997 年 4 月发布出来。 97 年夏秋之间,顺着 2.2 分支的更进一步的版本在开发。 @@ -565,16 +578,21 @@ 2004 年 2 月正式发布。</para> <para>RELENG_5 于 2004 年 8 月正式创建, 紧随其后的是 5.3-RELEASE, - 它是 5-STABLE 分支的标志性发行版。 最新的 &rel2.current;-RELEASE + 它是 5-STABLE 分支的标志性发行版。 最新的 5.5-RELEASE 是在 &rel2.current.date; 发布的。 RELENG_5 分支不会有后续的发行版了。</para> <para>其后在 2005 年 7 月又建立了 RELENG_6 分支。 而 6.X 分支上的第一个版本, 即 6.0-RELEASE, 则是在 2005 年 11 月发布的。 - 最新的 &rel.current;-RELEASE 发布于 &rel.current.date;。 + 最新的 &rel2.current;-RELEASE 发布于 &rel2.current.date;。 我们还将继续从 RELENG_6 发布新的版本。</para> + <para>RELENG_7 分支于 2007 年 10 月创建。 + 这个分支最新的发布版本是 &rel.current.date; + 的 &rel.current;-RELEASE。 RELENG_7 + 分支将会有其他后继发布版本。</para> + <para>目前, 中长期的开发项目继续在 - 7.X-CURRENT (主干, trunk) 分支中进行, 而 6.X 的 + 8.X-CURRENT (主干, trunk) 分支中进行, 而 8.X 的 CDROM (当然, 也包括网络) 快照版本可以在 <ulink url="ftp://current.FreeBSD.org/pub/FreeBSD/snapshots/"> 快照服务器</ulink> 找到。</para> @@ -591,13 +609,13 @@ </authorgroup> </sect2info> - <title>FreeBSD 项目目标</title> + <title>&os; 项目目标</title> <indexterm> <primary>FreeBSD Project</primary> <secondary>goals</secondary> </indexterm> - <para>FreeBSD 项目的目标是无附加条件地提供能够用于任何目的的软件。 + <para>&os; 项目的目标是无附加条件地提供能够用于任何目的的软件。 我们中的许多人对代码 (以及项目本身) 都有非常大的投入, 因此当然不介意偶尔有一些资金上的补偿, 但我们并没打算坚决地要求得到这类资助。 @@ -633,24 +651,24 @@ </authorgroup> </sect2info> - <title>FreeBSD 开发模式</title> + <title>&os; 开发模式</title> <indexterm> <primary>FreeBSD Project</primary> <secondary>开发模式</secondary> </indexterm> - <para>FreeBSD 的开发是一个非常开放且有有伸缩性的过程, + <para>&os; 的开发是一个非常开放且有有伸缩性的过程, 就像从我们的<ulink url="&url.articles.contributors;/article.html"> 贡献者列表</ulink>里看到的,它是完全由来自全世界的数以百计的贡献者发展起来的。 - FreeBSD 的开发基础结构允许数以百计的开发者通过互联网协同工作。 + &os; 的开发基础结构允许数以百计的开发者通过互联网协同工作。 我们也经常关注着那些对我们的计划感兴趣的新开发者和新的创意, 那些有兴趣更进一步参与项目的人只需要在 &a.hackers; 联系我们。 &a.announce; 对那些希望了解我们工作所涉及到哪些领域的人也是有用的。</para> <para>无论是独立地工作或者封闭式的团队工作, - 了解FreeBSD计划和它的开发过程都是有益的:</para> + 了解 &os; 计划和它的开发过程都是有益的:</para> <variablelist> <varlistentry> @@ -666,10 +684,10 @@ <see>CVS</see> </indexterm> <listitem> - <para>FreeBSD 的中央源代码树是由 + <para>&os; 的中央源代码树是由 <ulink url="http://ximbiot.com/cvs/wiki/">CVS</ulink> (并行版本控制系统)来维护的。CVS 是一个与 - FreeBSD 捆绑的可自由获得的源代码控制工具。 + &os; 捆绑的可自由获得的源代码控制工具。 主 <ulink url="http://www.FreeBSD.org/cgi/cvsweb.cgi">CVS 代码库</ulink>放置在美国加利福尼亚州圣克拉拉的一台机器上, 它被复制到全世界的大量镜像站上。CVS 中包括了 <link @@ -689,7 +707,7 @@ <listitem> <para><firstterm>committer</firstterm> 是那些对 CVS 树有<emphasis>写</emphasis>权限的人, - 他们被授权修改 FreeBSD 的源代码 + 他们被授权修改 &os; 的源代码 (术语 <quote>committer</quote> 来自于 &man.cvs.1; 的 <command>commit</command> 命令,这个命令用来把新的修改提交给 CVS @@ -704,8 +722,8 @@ <indexterm><primary>core team</primary></indexterm> <listitem> - <para>如果把 FreeBSD 项目看作一家公司,那么 - <firstterm>FreeBSD 核心团队</firstterm>就相当于董事会。 + <para>如果把 &os; 项目看作一家公司,那么 + <firstterm>&os; 核心团队</firstterm>就相当于董事会。 核心团队的主要任务是提出总体上的发展计划,然后确定一个正确的方向。 邀请那些富有献身精神和可靠的开发者加入到 committer 队伍中来也是核心团队的工作之一, @@ -716,17 +734,17 @@ <para>一些核心团队的成员还负责特定的责任范围, 也就是说他们必须尽力确保某个子系统能工作正常。 - FreeBSD 开发者的完整列表和他们的责任范围,请参见<ulink + &os; 开发者的完整列表和他们的责任范围,请参见<ulink url="&url.articles.contributors;/article.html"> 贡献者列表</ulink></para> <note> - <para>核心团队的大部分成员加入 FreeBSD 开发的时候都是志愿的, + <para>核心团队的大部分成员加入 &os; 开发的时候都是志愿的, 并没有从项目中获得任何财政上的资助, 所以<quote>承诺</quote>不应该被理解为<quote>支持保证</quote>。 前面所述<quote>董事会</quote>的类推并不十分准确, 或许更好的说法是,他们是一群愿意放弃他们的生活, - 投身于 FreeBSD 项目而非选择其个人更好的生活的人!</para> + 投身于 &os; 项目而非选择其个人更好的生活的人!</para> </note> </listitem> </varlistentry> @@ -737,25 +755,26 @@ <indexterm><primary>contributors</primary></indexterm> <listitem> <para>事实上,最大的开发团队正是为我们提供反馈和错误修补的用户自己。 - FreeBSD 的非集中式的开发者保持联系的主要方式就是预订 + &os; 的非集中式的开发者保持联系的主要方式就是预订 &a.hackers;,很多事情在那里讨论。查看<xref - linkend="eresources">了解众多 FreeBSD 邮件列表的更多信息。</para> + linkend="eresources">了解众多 &os; 邮件列表的更多信息。</para> <para><citetitle><ulink url="&url.articles.contributors;/article.html"> - FreeBSD 贡献者列表</ulink></citetitle> 很长并在不断增长, + &os; 贡献者列表</ulink></citetitle> 很长并在不断增长, 为什么不加入它来为 FreeBSD 做贡献呢?</para> <para>提供代码不是为这个计划做贡献的唯一方式; 有一个更完整的需要做的事情的列表,可以参见 <ulink - url="&url.base;/index.html">FreeBSD + url="&url.base;/index.html">&os; 项目网站</ulink>。</para> </listitem> </varlistentry> </variablelist> <para>总的来说,我们的开发模式好像是一组没有拘束的同心圆。 - 这种集中式的开发模式,主要是考虑到<emphasis>用户</emphasis>的方便, + 这种集中式的开发模式,主要是考虑到 &os; + <emphasis>用户</emphasis>的方便, 同时让他们能很容易地维护同一份软件, 而不会把潜在的贡献者排除在外! 我们的目标是提供一个包含有大量具有一致性 @@ -763,12 +782,12 @@ 以利于用户的安装和使用,— 这种模式在完成目标的过程中工作得非常有效。</para> - <para>我们对于那些想要加入,成为FreeBSD开发者的期待是: + <para>我们对于那些想要加入,成为 &os; 开发者的期待是: 具有如同当前其他人一样的投入,来确保持续的成功!</para> </sect2> <sect2 id="relnotes"> - <title>最新的 FreeBSD 发行版本</title> + <title>最新的 &os; 发行版本</title> <indexterm><primary>NetBSD</primary></indexterm> <indexterm><primary>OpenBSD</primary></indexterm> @@ -778,7 +797,7 @@ <indexterm> <primary>Computer Systems Research Group (CSRG)</primary> </indexterm> - <para>FreeBSD 是一个免费使用且带有完整源代码的基于 4.4BSD-Lite 的系统, + <para>&os; 是一个免费使用且带有完整源代码的基于 4.4BSD-Lite 的系统, 它广泛运行于 Intel &i386;、&i486;、&pentium;、 &pentium; Pro、 &celeron;、 @@ -791,18 +810,18 @@ CSRG 研究小组的软件为基础,并加入了 NetBSD、OpenBSD、386BSD 以及来自 自由软件基金会 的一些东西。</para> - <para>自从 1994 年末我们的 FreeBSD 2.0 发行以来, - FreeBSD 的性能,可定制性,稳定性都有了令人注目的提高。 + <para>自从 1994 年末我们的 &os; 2.0 发行以来, + &os; 的性能,可定制性,稳定性都有了令人注目的提高。 <!-- XXX is the rest of this paragraph still true ? --> - 最大的变化是通过 整合虚拟内存/文件系统 中的高速缓存改进的虚拟内存系统, - 它不仅提升了性能,而且减少了 FreeBSD 对内存的需要, + 最大的变化是通过整合虚拟内存/文件系统中的高速缓存改进的虚拟内存系统, + 它不仅提升了性能,而且减少了 &os; 对内存的需要, 使得 5 MB 内存成为可接受的最小配置。 其他的改进包括完整的 NIS 客户端和服务器端的支持, 事务式 TCP 协议支持,按需拨号的 PPP,集成的 DHCP 支持,改进的 SCSI 子系统, ISDN 的支持,ATM,FDDI,快速 Gigabit 以太网(1000 Mbit)支持, 提升了最新的 Adaptec 控制器的支持和修补了很多的错误。</para> - <para>除了最基本的系统软件,FreeBSD + <para>除了最基本的系统软件,&os; 还提供了一个拥有成千上万广受欢迎的程序组成的软件的 Ports Collection。 到本书付印时,已有超过 &os.numports; 个 ports (ports 包括从 http(WWW) 服务器到游戏、程序设计语言、编辑器以及您能想到的几乎所有的东西)。 @@ -821,8 +840,8 @@ (<command>pkg_add</command>)就可以安装。 有关 package 和 ports 的更多信息可以在<xref linkend="ports">中找到。</para> - <para>您可以在最近的 FreeBSD 主机的 <filename>/usr/share/doc</filename> - 目录下找到许多有用的文件来帮助您安装及使用 FreeBSD。 + <para>您可以在最近的 &os; 主机的 <filename>/usr/share/doc</filename> + 目录下找到许多有用的文件来帮助您安装及使用 &os;。 您也可以用一个 HTML 浏览器来查阅本地安装的手册, 使用下面的 URL:</para> diff --git a/zh_CN.GB2312/books/handbook/jails/chapter.sgml b/zh_CN.GB2312/books/handbook/jails/chapter.sgml index 6eeb2dd16a..c0bed2c015 100644 --- a/zh_CN.GB2312/books/handbook/jails/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/jails/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.15 + Original Revision: 1.16 $FreeBSD$ --> <chapter id="jails"> @@ -213,9 +213,9 @@ <callout arearefs="jailpath"> <para>第一步就是为 jail 选择一个位置。 这个路径是在宿主系统中 jail 的物理位置。 一种常用的选择是 <filename - role="directory">/usr/jail/<replaceable>jailname</replaceable></filename>, + class="directory">/usr/jail/<replaceable>jailname</replaceable></filename>, 此处 <replaceable>jailname</replaceable> 是 jail 的主机名。 <filename - role="directory">/usr/</filename> 文件系统通常会有足够的空间来保存 jail + class="directory">/usr/</filename> 文件系统通常会有足够的空间来保存 jail 文件系统, 对于 <quote>完整</quote> 的 jail 而言, 它通常包含了 &os; 默认安装的基本系统中每个文件的副本。</para> </callout> @@ -230,9 +230,9 @@ <para><maketarget>distribution</maketarget> 这个 <application>make</application> target 将安装全部配置文件, 或者换句话说, 就是将 - <filename role="directory">/usr/src/etc/</filename> 复制到 jail 环境中的 - <filename role="directory">/etc</filename>: - <filename role="directory">$D/etc/</filename>。</para> + <filename class="directory">/usr/src/etc/</filename> 复制到 jail 环境中的 + <filename class="directory">/etc</filename>: + <filename class="directory">$D/etc/</filename>。</para> </callout> <callout arearefs="jaildevfs"> @@ -497,33 +497,33 @@ jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</rep <itemizedlist> <listitem> <para>每个 jail 挂接到 <filename - role="directory">/home/j</filename> 目录下的一个目录。</para> + class="directory">/home/j</filename> 目录下的一个目录。</para> </listitem> <listitem> - <para><filename role="directory">/home/j/mroot</filename> + <para><filename class="directory">/home/j/mroot</filename> 是每个 jail 共用的模板, 对于所有的 jail 而言都是只读的。</para> </listitem> <listitem> - <para>在 <filename role="directory">/home/j</filename> + <para>在 <filename class="directory">/home/j</filename> 目录中, 每个 jail 有一个对应的空目录。</para> </listitem> <listitem> <para>每个 jail 中都有一个 <filename - role="directory">/s</filename> 目录, 这个目录将连接到系统中的可读写部分。</para> + class="directory">/s</filename> 目录, 这个目录将连接到系统中的可读写部分。</para> </listitem> <listitem> <para>每个 jail 应基于 <filename - role="directory">/home/j/skel</filename> 建立其可读写空间。</para> + class="directory">/home/j/skel</filename> 建立其可读写空间。</para> </listitem> <listitem> <para>每个 jailspace (jail 中的可读写部分) 应创建到 <filename - role="directory">/home/js</filename>。<para> + class="directory">/home/js</filename>。<para> </listitem> </itemizedlist> <note> <para>这假定所有的 jail 都放置于 - <filename role="directory">/home</filename> 分区中。 当然, + <filename class="directory">/home</filename> 分区中。 当然, 您可以根据需要将这个配置改为需要的任何样子, 但在接下来的例子中, 也应相应地加以变动。</para> </note> @@ -583,7 +583,7 @@ jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</rep </step> <step> <para>现在, 将可读写文件系统连接到只读文件系统中。 请确保您在 <filename - role="directory">s/</filename> 目录中建立了适当的符号连接。 + class="directory">s/</filename> 目录中建立了适当的符号连接。 如果没有建立目录或建立的位置不正确, 可能会导致安装失败。</para> <screen>&prompt.root; <userinput>cd /home/j/mroot</userinput> @@ -667,11 +667,11 @@ jail_www_devfs_enable="YES"</programlisting> <para>应把 <varname>jail_<replaceable>name</replaceable>_rootdir</varname> 变量设置成 <filename - role="directory">/usr/home</filename> 而不是 - <filename role="directory">/home</filename> 的原因是 - <filename role="directory">/home</filename> + class="directory">/usr/home</filename> 而不是 + <filename class="directory">/home</filename> 的原因是 + <filename class="directory">/home</filename> 目录在默认安装的 &os; 上是指向 - <filename role="directory">/usr/home</filename> + <filename class="directory">/usr/home</filename> 的一个符号连接。 而 <varname>jail_<replaceable>name</replaceable>_rootdir</varname> 变量必须是一个 <emphasis>不</emphasis> 包含符号连接的路径, @@ -738,7 +738,7 @@ jail_www_devfs_enable="YES"</programlisting> <step> <para>第一步是按通常的方法升级主机的系统。 接着, 在 <filename - role="directory">/home/j/mroot2</filename> 中建立一个新的临时模板:</para> + class="directory">/home/j/mroot2</filename> 中建立一个新的临时模板:</para> <screen>&prompt.root; <userinput>mkdir /home/j/mroot2</userinput> &prompt.root; <userinput>cd /usr/src</userinput> @@ -784,7 +784,7 @@ jail_www_devfs_enable="YES"</programlisting> <note> <para>可读写的文件系统 - (<filename role="directory">/s</filename>) + (<filename class="directory">/s</filename>) 会在只读系统之后挂接, 因此应首先卸载。</para> </note> </step> diff --git a/zh_CN.GB2312/books/handbook/kernelconfig/chapter.sgml b/zh_CN.GB2312/books/handbook/kernelconfig/chapter.sgml index 8a441b1f5b..63dfe60b0d 100644 --- a/zh_CN.GB2312/books/handbook/kernelconfig/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/kernelconfig/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Chinese Documentation Project - Original Revision: 1.184 + Original Revision: 1.186 $FreeBSD$ --> @@ -186,6 +186,48 @@ ath_hal(4) - Atheros Hardware Access Layer (HAL)</programlisting> 那么编译制定内核的过程就显得不那么困难了。</para> </sect1> + <sect1 id="kernelconfig-modules"> + <title>内核驱动,子系统和模块</title> + <indexterm> + <primary>kernel</primary> + <secondary>drivers / modules / subsystems</secondary> + </indexterm> + + <para>在编译一个制定的内核之前请三思一下这么做的理由, + 如果仅是需要某个特定的硬件支持的话, + 那么很可能已经存在一个现成的模块了。</para> + + <para>内核模块存放在目录 + <filename class="directory">/boot/kernel</filename> + 中,并能由 &man.kldload.8; 命令加载入正在运行的内核。 + 基本上所有的内核驱动都有特定的模块和手册页。比如, + 下面提到的 <devicename>ath</devicename> 无线以太网驱动。 + 在这个设备的手册页中有以下信息:</para> + + <programlisting>Alternatively, to load the driver as a module at boot time, place the + following line in &man.loader.conf.5: + + if_ath_load="YES"</programlisting> + + <para>遵照示例,在 <filename>/boot/loader.conf</filename> 中加入 + <literal>if_ath_load="YES"</literal> + 则能在机器启动的时候动态加载这个模块。</para> + + <para>某些情况下,则没有相关的模块。通常是一些子系统和非常重要的驱动, + 比如,快速文件系统 (<acronym>FFS</acronym>) 就是一个内核必需的选项。 + 同样的还有网络支持 (INET)。不幸的是, + 分辨一个驱动是否必需的唯一方法就是检查测试以下那个模块本身。</para> + + <warning> + <para>去除某个驱动的支持或某个选项会非常容易得到一个坏掉的内核。 + 举例来说,如果把 &man.ata.4; 驱动从内核配置文件中去掉, + 那么一个使用 <acronym>ATA</acronym> + 磁盘设备的系统可能就变得无法引导,除非有在 + <filename>loader.conf</filename> 中加载。当你无法确定的时候, + 请检查一下那个模块并把它留在你的内核配置中。</para> + </warning> + </sect1> + <sect1 id="kernelconfig-building"> <title>建立并安装一个定制的内核</title> <indexterm> @@ -313,7 +355,7 @@ ath_hal(4) - Atheros Hardware Access Layer (HAL)</programlisting> <step> <para>进入 <filename - role="directory">/usr/src</filename> 目录:</para> + class="directory">/usr/src</filename> 目录:</para> <screen>&prompt.root; <userinput>cd /usr/src</userinput></screen> </step> diff --git a/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml b/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml index f6c5058c0c..6410cfed54 100644 --- a/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml @@ -1,7 +1,7 @@ <!-- The FreeBSD Documentation Project - Original Revision: 1.135 + Original Revision: 1.136 $FreeBSD$ --> @@ -345,7 +345,7 @@ multi on</programlisting> <para>在安装 <application>&mathematica;</application> 的过程中所创建的脚本, 必须首先进行适当的修改才能使用。 - 如果您选择将 <filename role="directory">/usr/local/bin</filename> + 如果您选择将 <filename class="directory">/usr/local/bin</filename> 作为 <application>&mathematica;</application> 可执行文件的安装路径, 则可以在这个目录中找到一些到名为 diff --git a/zh_CN.GB2312/books/handbook/mac/chapter.sgml b/zh_CN.GB2312/books/handbook/mac/chapter.sgml index 5646a8769d..b6e076cc9b 100644 --- a/zh_CN.GB2312/books/handbook/mac/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/mac/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.71 + Original Revision: 1.73 $FreeBSD$ --> @@ -684,54 +684,54 @@ test: biba/high</screen> <para>单标签配置在整个系统中只强制一个标签的限制, 这也是 <command>tunefs</command> 选项为什么是 <option>multilabel</option> 的原因。</para> + </sect1> - <sect2 id="mac-seeotheruids"> - <title>MAC seeotheruids 模块</title> + <sect1 id="mac-seeotheruids"> + <title>MAC seeotheruids 模块</title> - <indexterm> - <primary>MAC 其他 UID 可见策略</primary> - </indexterm> - <para>模块名: <filename>mac_seeotheruids.ko</filename></para> + <indexterm> + <primary>MAC 其他 UID 可见策略</primary> + </indexterm> + <para>模块名: <filename>mac_seeotheruids.ko</filename></para> - <para>对应的内核配置: - <literal>options MAC_SEEOTHERUIDS</literal></para> + <para>对应的内核配置: + <literal>options MAC_SEEOTHERUIDS</literal></para> - <para>引导选项: - <literal>mac_seeotheruids_load="YES"</literal></para> + <para>引导选项: + <literal>mac_seeotheruids_load="YES"</literal></para> - <para>&man.mac.seeotheruids.4; 模块模仿并扩展了 - <literal>security.bsd.see_other_uids</literal> 和 - <literal>security.bsd.see_other_gids</literal> - <command>sysctl</command> 变量。 这一模块并不需要预先配置标签, - 它能够透明地与其他模块协同工作。</para> + <para>&man.mac.seeotheruids.4; 模块模仿并扩展了 + <literal>security.bsd.see_other_uids</literal> 和 + <literal>security.bsd.see_other_gids</literal> + <command>sysctl</command> 变量。 这一模块并不需要预先配置标签, + 它能够透明地与其他模块协同工作。</para> - <para>加载模块之后, 下列 - <command>sysctl</command> 变量可以用来控制其功能:</para> + <para>加载模块之后, 下列 + <command>sysctl</command> 变量可以用来控制其功能:</para> - <itemizedlist> - <listitem> - <para><literal>security.mac.seeotheruids.enabled</literal> - 将启用模块的功能, 并使用默认的配置。 - 这些默认设置将阻止用户看到其他用户的进程和 socket。</para> - </listitem> + <itemizedlist> + <listitem> + <para><literal>security.mac.seeotheruids.enabled</literal> + 将启用模块的功能, 并使用默认的配置。 + 这些默认设置将阻止用户看到其他用户的进程和 socket。</para> + </listitem> - <listitem> - <para> - <literal>security.mac.seeotheruids.specificgid_enabled</literal> - 将允许特定的组从这一策略中和面。 要将某些组排除在这一策略之外, 可以用 - <literal>security.mac.seeotheruids.specificgid=<replaceable>XXX</replaceable></literal> - <command>sysctl</command> 变量。 前述例子中, - <replaceable>XXX</replaceable> 应替换为希望不受限的组 ID 的数值形式。</para> - </listitem> + <listitem> + <para> + <literal>security.mac.seeotheruids.specificgid_enabled</literal> + 将允许特定的组从这一策略中和面。 要将某些组排除在这一策略之外, 可以用 + <literal>security.mac.seeotheruids.specificgid=<replaceable>XXX</replaceable></literal> + <command>sysctl</command> 变量。 前述例子中, + <replaceable>XXX</replaceable> 应替换为希望不受限的组 ID 的数值形式。</para> + </listitem> - <listitem> - <para> - <literal>security.mac.seeotheruids.primarygroup_enabled</literal> - 可以用来将特定的主要组排除在策略之外。 使用这一变量时, 不能同时设置 - <literal>security.mac.seeotheruids.specificgid_enabled</literal>。</para> - </listitem> - </itemizedlist> - </sect2> + <listitem> + <para> + <literal>security.mac.seeotheruids.primarygroup_enabled</literal> + 可以用来将特定的主要组排除在策略之外。 使用这一变量时, 不能同时设置 + <literal>security.mac.seeotheruids.specificgid_enabled</literal>。</para> + </listitem> + </itemizedlist> </sect1> <sect1 id="mac-bsdextended"> @@ -1375,9 +1375,9 @@ test: biba/low</screen> <literal>multilabel</literal> 选项, 这些操作在这一章开始的部分进行了介绍。 不完成这些操作, 将导致错误的结果。 首先, 请确认已经安装了 - <filename role="port">net-mngt/nagios-plugins</filename>、 - <filename role="port">net-mngt/nagios</filename>, 和 - <filename role="port">www/apache13</filename> 这些 ports, + <filename role="package">net-mngt/nagios-plugins</filename>、 + <filename role="package">net-mngt/nagios</filename>, 和 + <filename role="package">www/apache13</filename> 这些 ports, 并对其进行了配置, 且运转正常。</para> <sect2> diff --git a/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml b/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml index d897698207..f592b62a17 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.444 + Original Revision: 1.448 $FreeBSD$ --> @@ -315,23 +315,12 @@ <itemizedlist> <listitem> - <para><emphasis>奥地利</emphasis>: - :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs - (使用 <command>cvs login</command> 然后在提示输入口令时输入任意口令。)</para> - </listitem> - <listitem> <para><emphasis>法国</emphasis>: :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs (pserver (口令是 <quote>anoncvs</quote>), ssh (没有口令)) </para> </listitem> <listitem> - <para><emphasis>德国</emphasis>: - :pserver:anoncvs@anoncvs.de.FreeBSD.org:/home/ncvs - (rsh, pserver, ssh, ssh/2022) - </para> - </listitem> - <listitem> <para><emphasis>日本</emphasis>: :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs (使用 <command>cvs login</command> 并在提示输入口令时输入 @@ -2346,7 +2335,7 @@ doc/zh_*</screen> <note> <para>默认安装时, 并不会自动创建 - <filename role="directory">/usr/ports</filename> 这个目录。 + <filename class="directory">/usr/ports</filename> 这个目录。 如果您使用 &os; 6.0-RELEASE, 在首次使用 <command>portsnap</command> 之前应手工创建这个目录。 在更高版本的 &os; 和 <application>Portsnap</application> 中, @@ -3118,6 +3107,20 @@ doc/zh_*</screen> </varlistentry> <varlistentry> + <term>俄罗斯</term> + + <listitem> + <para>rsync://cvsup4.ru.FreeBSD.org/</para> + + <para>可用的 collections:</para> + <itemizedlist> + <listitem><para>FreeBSD-gnats: GNATS bug + 跟踪数据库。</para></listitem> + </itemizedlist> + </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 d0e2baf4ea..9b13e5b83d 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.104 + Original Revision: 1.108 $FreeBSD$ --> @@ -728,7 +728,8 @@ rpc_statd_enable="YES"</programlisting> <para>然后使用下述命令启动该程序:</para> - <screen>&prompt.root; <userinput>/etc/rc.d/nfslocking start</userinput></screen> + <screen>&prompt.root; <userinput>/etc/rc.d/lockd start</userinput> +&prompt.root; <userinput>/etc/rc.d/statd start</userinput></screen> <para>如果并不需要真的在 <acronym>NFS</acronym> 客户机和 <acronym>NFS</acronym> 服务器间确保上锁的语义, @@ -2744,13 +2745,11 @@ dhcpd_ifaces="dc0"</programlisting> </listitem> </itemizedlist> - <para>如您所见, 域名中越细节的部分会越靠左出现。 - 例如, <hostid + <para>如您所见, 域名中越细节的部分会越靠左出现。 例如, <hostid role="domainname">example.org.</hostid> 就比 - <hostid>org.</hostid> 范围更小, 而 <hostid>org.</hostid> 又比根域更小。 + <hostid>org.</hostid> 范围更小, 类似地 <hostid>org.</hostid> 又比根域更小。 域名各个部分的格局与文件系统十分类似: - <filename role="directory">/dev</filename> 目录在根目录中, - 等等。</para> + <filename class="directory">/dev</filename> 目录在根目录之下, 等等。</para> </sect2> <sect2> @@ -2825,8 +2824,8 @@ dhcpd_ifaces="dc0"</programlisting> </row> <row> - <entry><filename>/etc/namedb</filename></entry> - <entry>BIND 存放域名信息的位置</entry> + <entry><filename class="directory">/etc/namedb</filename></entry> + <entry>BIND 存放域名信息的位置。</entry> </row> <row> @@ -2837,12 +2836,13 @@ dhcpd_ifaces="dc0"</programlisting> </tgroup> </informaltable> - <para>随在服务器上配置的域的性质不同, 域的定义文件一般会存放到 - <filename role="directory">/etc/namedb</filename> 目录中的 <filename - role="directory">master</filename>、 <filename - role="directory">slave</filename>, 或 <filename - role="directory">dynamic</filename> 子目录里。 - 这些文件包含了在域名服务器发出回应时所需的 <acronym>DNS</acronym> 信息。</para> + <para>随在服务器上配置的域的性质不同, + 域的定义文件一般会存放到 + <filename class="directory">/etc/namedb</filename> 目录中的 <filename + class="directory">master</filename>、 <filename + class="directory">slave</filename>, 或 <filename + class="directory">dynamic</filename> 子目录中。 + 这些文件中提供了域名服务器在响应查询时所需要的 <acronym>DNS</acronym> 信息。</para> </sect2> <sect2> @@ -2884,16 +2884,16 @@ dhcpd_ifaces="dc0"</programlisting> </indexterm> <para>目前, <application>named</application> 的配置文件存放于 - <filename role="directory">/etc/namedb</filename> 目录中, - 在使用前需要根据需要进行修改, - 除非只打算用它来完成简单的域名解析任务。 - 同时这个目录也是进行绝大多数配置的地方。</para> + <filename class="directory">/etc/namedb</filename> 目录, + 在使用前应根据需要进行修改, + 除非您只打算让它完成简单的域名解析服务。 + 这个目录同时也是您进行绝大多数配置的地方。</para> <sect3> <title>使用 <command>make-localhost</command></title> - <para>要为 localhost 配置主域, 需要进入 - <filename role="directory">/etc/namedb</filename> 目录, + <para>要为 localhost 配置权威域, 需要进入 + <filename class="directory">/etc/namedb</filename> 目录, 并运行下面的命令:</para> <screen>&prompt.root; <userinput>sh make-localhost</userinput></screen> @@ -3372,8 +3372,8 @@ www IN CNAME @</programlisting> <listitem> <para><ulink - url="http://www.nominum.com/getOpenSourceResource.php?id=6"> - BIND FAQ</ulink></para> + url="http://www.isc.org/index.pl?/sw/bind/FAQ.php"> + BIND9 FAQ</ulink></para> </listitem> <listitem> @@ -4147,10 +4147,20 @@ DocumentRoot /www/someotherdomain.tld <screen>&prompt.root; <userinput>smbpasswd -a username</userinput></screen> - <para>请参见 - <ulink + <note> + <para>从 <application>Samba</application> 3.0.23c 开始, + 用于存在验证文件的实际目录变成了 + <filename class="directory">/usr/local/etc/samba</filename>。 + 目前推荐使用的后端是 <literal>tdbsam</literal>, + 您应使用下面的命令来添加用户帐号:</para> + + <screen>&prompt.root; <userinput><command>pdbedit <option>-a</option> <option>-u</option> <replaceable>username</replaceable></command></userinput></screen> + </note> + + <para>请参考 + <ulink url="http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/">官方的 Samba HOWTO</ulink> - 以了解关于配置选项的进一步信息。 按照前面给出的描述, + 以了解关于配置选项的进一步信息。 按照前面给出的基本描述, 您应该已经可以启动 <application>Samba</application> 了。</para> </sect3> diff --git a/zh_CN.GB2312/books/handbook/ports/chapter.sgml b/zh_CN.GB2312/books/handbook/ports/chapter.sgml index b25e429626..d840558956 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.281 + Original Revision: 1.282 $FreeBSD$ --> @@ -243,10 +243,10 @@ lsof: /usr/ports/sysutils/lsof</screen> /usr/ports/sysutils/lsof</screen> <para>Note that this will return any matched files downloaded into the - <filename role="directory">/usr/ports/distfiles</filename> + <filename class="directory">/usr/ports/distfiles</filename> directory.</para> <para>请注意这条命令将会返回下载到 - <filename role="directory">/usr/ports/distfiles</filename> + <filename class="directory">/usr/ports/distfiles</filename> 目录中所有符合条件的文件。</para> </listitem> @@ -530,7 +530,7 @@ docbook = </note> <para>在首次运行 <application>csup</application> 之前, - 务必确认 <filename role="directory">/usr/ports</filename> + 务必确认 <filename class="directory">/usr/ports</filename> 是空的! 如果您之前已经用其他地方安装了一份 Ports 套件, 则 <application>csup</application> 可能不会自动删除已经在上游服务器上删除掉的补丁文件。</para> @@ -607,18 +607,18 @@ docbook = <para>如果您使用 &os; 6.1-RELEASE, 或通过 port 或 package 安装了较新版本的 <application>Portsnap</application> 的话, 可以直接跳过这一步。 <filename - role="directory">/usr/ports</filename> 将在首次使用 &man.portsnap.8; + class="directory">/usr/ports</filename> 将在首次使用 &man.portsnap.8; 命令时自动创建。 而如果您使用的是较早期版本的 <application>Portsnap</application>, 就只能手工创建空的 <filename - role="directory">/usr/ports</filename> 目录了。</para> + class="directory">/usr/ports</filename> 目录了。</para> <screen>&prompt.root; <userinput>mkdir /usr/ports</userinput></screen> </step> <step> <para>下载压缩的 Ports 套件快照到 - <filename role="directory">/var/db/portsnap</filename>。 + <filename class="directory">/var/db/portsnap</filename>。 您可以根据需要在这之后关闭 Internet 连接。</para> <screen>&prompt.root; <userinput>portsnap fetch</userinput></screen> @@ -627,13 +627,13 @@ docbook = <step> <para>假如您是首次运行 <application>Portsnap</application>, 则需要将快照释放到 <filename - role="directory">/usr/ports</filename>: + class="directory">/usr/ports</filename>: </para> <screen>&prompt.root; <userinput>portsnap extract</userinput></screen> <para>如果您已经有装好的 <filename - role="directory">/usr/ports</filename> 而您只想更新, + class="directory">/usr/ports</filename> 而您只想更新, 则应执行下面的命令:</para> <screen>&prompt.root; <userinput>portsnap update</userinput></screen> @@ -1092,7 +1092,7 @@ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen> 升级操作的工具。 它可以通过 <filename role="package">ports-mgmt/portmanager</filename> port 安装:</para> - <screen>&prompt.root; <userinput>cd <filename role="directory">/usr/ports/ports-mgmt/portmanager</filename></userinput> + <screen>&prompt.root; <userinput>cd <filename class="directory">/usr/ports/ports-mgmt/portmanager</filename></userinput> &prompt.root; <userinput>make install clean</userinput></screen> <para>可以通过这个简单的命令来升级所有已安装的 port:</para> @@ -1133,7 +1133,7 @@ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen> <filename role="package">ports-mgmt/portmaster</filename> 找到它:</para> - <screen>&prompt.root; <userinput>cd <filename role="directory">/usr/ports/ports-mgmt/portmaster</filename></userinput> + <screen>&prompt.root; <userinput>cd <filename class="directory">/usr/ports/ports-mgmt/portmaster</filename></userinput> &prompt.root; <userinput>make install clean</userinput></screen> <para><application>Portmaster</application> groups ports into four 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 5d0ae2e593..80cfe83aa8 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.180 + Original Revision: 1.183 $FreeBSD$ --> @@ -178,7 +178,7 @@ </indexterm> <listitem> <para>您的登录名称和密码 (可能是一般的 UNIX 风格的登录名和密码对, - 也可能是 PAP 或 CHAP 登录名和密码对。)</para> + 也可能是 PAP 或 CHAP 登录名和密码对)。</para> </listitem> <indexterm id="ppp-nameserver"> @@ -293,8 +293,9 @@ <term>行2:</term> <listitem> - <para>启用登录参数。 工作正常后, 为避免产生过多的日志文件, 这行应该简化为: - <programlisting>set log phase tun</programlisting>。</para> + <para>启用登录参数。 工作正常后, 为避免产生过多的日志文件, 这行应该简化为:</para> + + <programlisting>set log phase tun</programlisting> </listitem> </varlistentry> @@ -343,7 +344,7 @@ <para>注意, 为了便于阅读此命令进行了换行。 任何 <filename>ppp.conf</filename> 里的命令都可以这样做, - 前提是行的最后一个字符必须是 <quote>\</quote>。</para> + 前提是行的最后一个字符必须是 <literal>\</literal>。</para> </listitem> </varlistentry> @@ -378,7 +379,7 @@ <listitem> <para>为 <quote>provider</quote>指定一个项。 可以改成 <acronym>ISP</acronym>的名字, 这样您以后就可以使用 - <option>load ISP</option> 来开启连接。</para> + <option>load <replaceable>ISP</replaceable></option> 来开启连接。</para> </listitem> </varlistentry> diff --git a/zh_CN.GB2312/books/handbook/printing/chapter.sgml b/zh_CN.GB2312/books/handbook/printing/chapter.sgml index 2dee297f03..37f65ffbbf 100644 --- a/zh_CN.GB2312/books/handbook/printing/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/printing/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.114 + Original Revision: 1.120 $FreeBSD$ --> @@ -33,20 +33,21 @@ <indexterm><primary>LPD spooling system</primary></indexterm> <indexterm><primary>printing</primary></indexterm> - <para>FreeBSD 可以支持众多种类的打印机, + <para>&os; 可以支持众多种类的打印机, 从最古老的针式打印机到最新的激光打印机以及它们之间所有类型的打印机。 您可以使运行的应用程序产生高质量的打印输出。</para> - <para>FreeBSD 也可以被设置成一个网络上的打印服务器。 它可以从包括 - FreeBSD、 &windows; 及 &macos; 在内的多种其他计算机上接收打印任务。 - FreeBSD 将保证任务在某时被打印, 并且可以把哪台机器, 哪位用户打印的最多记录在统计表中, - 生成 <quote>横幅</quote> 页, 显示哪份打印输出的是哪位用户的等等。</para> + <para>&os; 也可以被设置成一个网络上的打印服务器。 它可以从包括 + &os;、 &windows; 及 &macos; 在内的多种其他计算机上接收打印任务。 + &os; 将保证任务在某时被打印, 并且可以把哪台机器, + 哪位用户打印的最多记录在统计表中,生成 <quote>横幅</quote> 页, + 显示哪份打印输出的是哪位用户的等等。</para> <para>在读完这章后,您将知道:</para> <itemizedlist> <listitem> - <para>怎样配置FreeBSD后台打印。</para> + <para>怎样配置 &os; 后台打印。</para> </listitem> <listitem> @@ -92,10 +93,10 @@ <sect1 id="printing-intro-spooler"> <title>介绍</title> - <para>为了在 FreeBSD 中使用打印机, + <para>为了在 &os; 中使用打印机, 需要首先配置好伯克利行式打印机后台打印系统即 <application>LPD</application>。 - 它是 FreeBSD 的标准打印控制系统。 这章介绍 <application>LPD</application> + 它是 &os; 的标准打印控制系统。 这章介绍 <application>LPD</application> 后台打印系统, 在接下来将简称为 <application>LPD</application>, 并且将指导您完成其配置。</para> @@ -241,7 +242,7 @@ <para>这部分讲述了打印机连接到计算机的多种 途径。 主要讨论了多种接口和 - 连接线, 还有允许 FreeBSD 与打印机通讯所需的 + 连接线, 还有允许 &os; 与打印机通讯所需的 内核配置。</para> <para>如果您已经连接好了您的打印机而且已经 @@ -309,12 +310,12 @@ (计算机到打印机), 而串口和 USB 则可以提供双向通讯。 新的并口 (EPP 和 ECP) 及打印机在使用了 - IEEE-1284 标准的电缆之后, 可以在FreeBSD下双向通讯。</para> + IEEE-1284 标准的电缆之后, 可以在 &os; 下双向通讯。</para> <indexterm><primary>PostScript</primary></indexterm> <para>与打印机通过并口双向通讯通常由这两种方法中的一种来完成。 - 第一个方法是使用为 FreeBSD + 第一个方法是使用为 &os; 编写的可以通过打印机使用的语言与打印机通讯的驱动程序。 这通常用在喷墨打印机上, 且可以用来报告剩余墨水多少和其他状态信息。 @@ -342,10 +343,12 @@ 或者干脆两个上面都有。</para> <para>记住您用的计算机上的哪个并口。 - 第一个并口在 FreeBSD 上叫 <filename>/dev/ppc0</filename>; - 第二个叫 <filename>/dev/ppc1</filename>, 依此类推。 - 打印机设备也用同样的方法命名: - <filename>/dev/lpt0</filename> + 第一个并口在 &os; 上叫 + <filename class="devicefile">/dev/ppc0</filename>; + 第二个叫 + <filename class="devicefile">/dev/ppc1</filename>, + 依此类推。打印机设备也用同样的方法命名: + <filename class="devicefile">/dev/lpt0</filename> 是接在第一个并口上的打印机, 依此类推。</para> </sect4> @@ -406,7 +409,7 @@ <sect3 id="printing-software"> <title>软件设置</title> - <para>这部分描述了要使用FreeBSD系统中的 + <para>这部分描述了要使用 &os; 系统中的 <application>LPD</application> 后台打印系统进行打印所需的软件设置。 </para> @@ -455,7 +458,7 @@ <para>要想知道您现在使用的内核是否支持串口, 输入:</para> - <screen>&prompt.root; <userinput>grep sio<replaceable>N</replaceable> /var/run/dmesg.boot</userinput></screen> + <screen>&prompt.root; <userinput><command>grep sio<replaceable>N</replaceable> <filename>/var/run/dmesg.boot</filename></command></userinput></screen> <para>其中 <replaceable>N</replaceable> 是串口的 编号, 从0开始。 如果您看到 @@ -469,7 +472,7 @@ sio2: type 16550A</screen> <para>要想知道您现在使用的内核是否支持并口, 输入:</para> - <screen>&prompt.root; <userinput>grep ppc<replaceable>N</replaceable> /var/run/dmesg.boot</userinput></screen> + <screen>&prompt.root; <userinput><command>grep ppc<replaceable>N</replaceable> /var/run/dmesg.boot</command></userinput></screen> <para>其中 <replaceable>N</replaceable> 是并口的 编号, 同样从0开始。 如果得到类似 @@ -496,8 +499,8 @@ ppc0: FIFO with 16/16/8 bytes threshold</screen> <title>设置并口的通讯模式</title> <para>在使用并口时, 您可以选择 - 让 FreeBSD 用中断方式还是轮询方式来 - 与打印机通讯。 在 FreeBSD 上, + 让 &os; 用中断方式还是轮询方式来 + 与打印机通讯。 在 &os; 上, 通用的打印机驱动 (&man.lpt.4;) 使用 &man.ppbus.4; 系统, 它利用 &man.ppc.4; 驱动来控制端口芯片。</para> @@ -560,7 +563,7 @@ ppc0: FIFO with 16/16/8 bytes threshold</screen> <programlisting>hint.ppc.0.irq="<replaceable>N</replaceable>"</programlisting> - <para>在 FreeBSD 下, 有时上面的方法并不能使并口工作在轮询方式。 + <para>在 &os; 下, 有时上面的方法并不能使并口工作在轮询方式。 大多数情况是由于 &man.acpi.4; 驱动造成的, 它可以自动侦测到设备并将其挂载到系统上, 但也因此, 它控制着打印机端口的访问模式. 您需要检查 &man.acpi.4; @@ -583,7 +586,7 @@ ppc0: FIFO with 16/16/8 bytes threshold</screen> <step> <para>输入:</para> - <screen>&prompt.root; <userinput>lptcontrol -i -d /dev/lpt<replaceable>N</replaceable></userinput></screen> + <screen>&prompt.root; <userinput><command>lptcontrol <option>-i</option> <option>-d</option> <filename class="devicefile">/dev/lpt<replaceable>N</replaceable></filename></command></userinput></screen> <para>将 <literal>lpt<replaceable>N</replaceable></literal> 设置成中断方式。</para> @@ -592,7 +595,7 @@ ppc0: FIFO with 16/16/8 bytes threshold</screen> <step> <para>输入:</para> - <screen>&prompt.root; <userinput>lptcontrol -p -d /dev/lpt<replaceable>N</replaceable></userinput></screen> + <screen>&prompt.root; <userinput><command>lptcontrol <option>-p</option> <option>-d</option> <filename class="devicefile">/dev/lpt<replaceable>N</replaceable></filename></command></userinput></screen> <para>将 <literal>lpt<replaceable>N</replaceable></literal> 设置成轮询方式。</para> @@ -648,7 +651,7 @@ showpage</programlisting> <primary>printers</primary> <secondary>parallel</secondary> </indexterm> - <para>这部分内容将指导您怎样检测 FreeBSD + <para>这部分内容将指导您怎样检测 &os; 是否可以与一台已经连接在并口上的打印机通讯。</para> <para><emphasis>要测试并口上的打印机:</emphasis></para> @@ -666,7 +669,7 @@ showpage</programlisting> <para>如果打印机可以直接打印纯文本, 可以用 &man.lptest.1;。 输入:</para> - <screen>&prompt.root; <userinput>lptest > /dev/lpt<replaceable>N</replaceable></userinput></screen> + <screen>&prompt.root; <userinput><command>lptest > <filename class="devicefile">/dev/lpt<replaceable>N</replaceable></filename></command></userinput></screen> <para>其中 <replaceable>N</replaceable> 是并口的编号, 从0开始。</para> @@ -676,7 +679,8 @@ showpage</programlisting> <para>如果打印机支持 &postscript; 或其他打印机语言, 可以发送一段小程序到打印机。 输入:</para> - <screen>&prompt.root; <userinput>cat > /dev/lpt<replaceable>N</replaceable></userinput></screen> + <screen>&prompt.root; <userinput><command>cat > <filename class="devicefile">/dev/lpt<replaceable>N</replaceable></filename></command></userinput></screen> + <para>然后, 一行一行地 <emphasis>输入</emphasis> 输入这段程序。 因为在按下 <literal>换行</literal> 或者 @@ -688,7 +692,7 @@ showpage</programlisting> <para>另外一种办法, 您可以把这段程序写在一个文件里, 并输入:</para> - <screen>&prompt.root; <userinput>cat <replaceable>file</replaceable> > /dev/lpt<replaceable>N</replaceable></userinput></screen> + <screen>&prompt.root; <userinput><command>cat <filename><replaceable>file</replaceable></filename> > <filename class="devicefile">/dev/lpt<replaceable>N</replaceable></filename></command></userinput></screen> <para>其中 <replaceable>file</replaceable> 是包含这您要发给打印机程序的文件名。</para> @@ -709,7 +713,7 @@ showpage</programlisting> <primary>printers</primary> <secondary>serial</secondary> </indexterm> - <para>这部分将告诉您如何检测 FreeBSD + <para>这部分将告诉您如何检测 &os; 是否可以与连接在串口上的打印机通讯。</para> <para><emphasis>要测试连接在串口上的打印机:</emphasis></para> @@ -723,7 +727,7 @@ showpage</programlisting> <para>修改 <filename>/etc/remote</filename> 这个文件。 增加下面这些内容:</para> - <programlisting>printer:dv=/dev/<replaceable>port</replaceable>:br#<replaceable>bps-rate</replaceable>:pa=<replaceable>parity</replaceable></programlisting> + <programlisting>printer:dv=<filename class="devicefile">/dev/<replaceable>port</replaceable></filename>:br#<replaceable>bps-rate</replaceable>:pa=<replaceable>parity</replaceable></programlisting> <indexterm><primary>bits-per-second</primary></indexterm> <indexterm><primary>serial port</primary></indexterm> @@ -742,20 +746,20 @@ showpage</programlisting> 它连接在第三个串口上, 速度为 19200 波特, 不进行校验:</para> - <programlisting>printer:dv=/dev/ttyd2:br#19200:pa=none</programlisting> + <programlisting>printer:dv=<filename class="devicefile">/dev/ttyd2</filename>:br#19200:pa=none</programlisting> </step> <step> <para>用 &man.tip.1; 连接打印机。 输入:</para> - <screen>&prompt.root; <userinput>tip printer</userinput></screen> + <screen>&prompt.root; <userinput><command>tip</command> printer</userinput></screen> <para>如果没能成功, 则要再次修改 <filename>/etc/remote</filename> 这个文件, 并且试试用 - <filename>/dev/cuaa<replaceable>N</replaceable></filename> + <filename class="devicefile">/dev/cuaa<replaceable>N</replaceable></filename> 代替 - <filename>/dev/ttyd<replaceable>N</replaceable></filename>。</para> + <filename class="devicefile">/dev/ttyd<replaceable>N</replaceable></filename>。</para> </step> <step> @@ -853,7 +857,7 @@ showpage</programlisting> </step> <step> - <para>在 <filename>/dev</filename> 下设置打印机设备节点, + <para>在 <filename class="directory">/dev</filename> 下设置打印机设备节点, 并且在写在 <filename>/etc/printcap</filename> 文件中 <literal>lp</literal> 项目里; 参见 <link linkend="printing-device">识别打印机设备</link> @@ -991,7 +995,7 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ <para>由于后台打印队列目录的变量本质, 通常 把这些目录安排在 - <filename>/var/spool</filename> 下。 您也没有必要去 + <filename class="directory">/var/spool</filename> 下。 您也没有必要去 备份后台打印队列目录里的内容。 重新建立它们只要简单的使用 &man.mkdir.1; 命令。</para> @@ -999,7 +1003,7 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ 打印机一样的名字, 像下面 这样:</para> - <screen>&prompt.root; <userinput>mkdir /var/spool/<replaceable>printer-name</replaceable></userinput></screen> + <screen>&prompt.root; <userinput><command>mkdir <filename class="directory">/var/spool/<replaceable>printer-name</replaceable></filename></command></userinput></screen> <para>然而, 如果您有很多网络打印机, 您可能想要把这些后台打印的队列目录目录放在一个单独的专为使用 @@ -1008,9 +1012,9 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ <literal>rattan</literal> 和 <literal>bamboo</literal> 作为例子:</para> - <screen>&prompt.root; <userinput>mkdir /var/spool/lpd</userinput> -&prompt.root; <userinput>mkdir /var/spool/lpd/rattan</userinput> -&prompt.root; <userinput>mkdir /var/spool/lpd/bamboo</userinput></screen> + <screen>&prompt.root; <userinput><command>mkdir <filename class="directory">/var/spool/lpd</filename></command></userinput> +&prompt.root; <userinput><command>mkdir <filename class="directory">/var/spool/lpd/rattan</filename></command></userinput> +&prompt.root; <userinput><command>mkdir <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput></screen> <note> <para>如果担心用户任务的保密性, @@ -1020,10 +1024,10 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ 组拥有读写和搜索的权限,但其他用户没有。 接下来用我们的两台打印机作为例子:</para> - <screen>&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/rattan</userinput> -&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/bamboo</userinput> -&prompt.root; <userinput>chmod 770 /var/spool/lpd/rattan</userinput> -&prompt.root; <userinput>chmod 770 /var/spool/lpd/bamboo</userinput></screen> + <screen>&prompt.root; <userinput><command>chown daemon:daemon <filename class="directory">/var/spool/lpd/rattan</filename></command></userinput> +&prompt.root; <userinput><command>chown daemon:daemon <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput> +&prompt.root; <userinput><command>chmod 770 <filename class="directory">/var/spool/lpd/rattan</filename></command></userinput> +&prompt.root; <userinput><command>chmod 770 <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput></screen> </note> <para>最后, 您需要通过<filename>/etc/printcap</filename> 文件告诉 <application>LPD</application> @@ -1033,31 +1037,30 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ # /etc/printcap for host rose - added spooling directories # rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan: + :sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:</programlisting> <para>注意打印机的名字要从第 1 列开始, 其他记录每行都要用 TAB 键缩进一次, 写不开需要换行在最后加上反斜杠。</para> <para>如果您没用 <literal>sd</literal> 标记指定后台打印队列目录, 后台打印系统会将 - <filename>/var/spool/lpd</filename> 目录作为默认目录。</para> + <filename class="directory">/var/spool/lpd</filename> 目录作为默认目录。</para> </sect4> <sect4 id="printing-device"> <title>识别打印机设备</title> - <para>在 端口与对应的设备项 章节中, 我们确定了使用 - <filename>/dev</filename> 目录中的哪个节点来让 FreeBSD 与打印机 - 通讯。 现在, 我们来告诉 - <application>LPD</application> 这个 - 信息。 当后台打印系统有任务需要打印, 它 - 将为过滤程序(负责传送数据到打印机)打开 - 指定的设备。</para> + <para>在 <link linkend="printing-hardware">Hardware Setup</link> + 一节中,我们说明了 &os; 与打印机通讯将使用哪个端口和 + <filename class="directory">/dev</filename> 目录下的节点。 + 我们要告诉 <application>LPD</application> 这些信息。 + 当后台打印系统有任务需要打印,它将为过滤程序 + (负责传送数据到打印机) 打开指定的设备。</para> - <para>用 <literal>lp</literal> 标记在 <filename>/etc/printcap</filename> 里列出 <filename>/dev</filename> + <para>用 <literal>lp</literal> 标记在 <filename>/etc/printcap</filename> 里列出 <filename class="directory">/dev</filename> 下的设备节点。</para> <para>在我们的例子中, 假设打印机 @@ -1069,19 +1072,19 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ # /etc/printcap for host rose - identified what devices to use # rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0: + :sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\ + :lp=<filename class="devicefile">/dev/lpt0</filename>: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:\ - :lp=/dev/ttyd5:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:\ + :lp=<filename class="devicefile">/dev/ttyd5</filename>:</programlisting> <para>如果您没在您的 <filename>/etc/printcap</filename> 文件中 用 <literal>lp</literal> 标记指定设备节点, - <application>LPD</application> 将默认使用 <filename>/dev/lp</filename> + <application>LPD</application> 将默认使用 <filename class="devicefile">/dev/lp</filename> 。 - <filename>/dev/lp</filename> 目前在 - FreeBSD 中不存在。</para> + <filename class="devicefile">/dev/lp</filename> 目前在 + &os; 中不存在。</para> <para>如果您正在安装的打印机是连接在 并口上的, 请跳到 <link @@ -1166,8 +1169,8 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ 用 <literal>crtscts</literal> 设置成硬件流量控制:</para> <programlisting>bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:\ - :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:\ + :lp=<filename class="devicefile">/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:</programlisting> </sect4> <sect4 id="printing-textfilter"> @@ -1196,7 +1199,7 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ <para>对于简单的打印机设置, 文本过滤器可以仅仅是一段 执行 <command>/bin/cat</command> 的 shell 脚本来 发送任务到打印机。 - FreeBSD 还提供了一个叫做 + &os; 还提供了一个叫做 <filename>lpf</filename> 的过滤器, 它可以处理退格和下划线来 使那些可能不能很好处理这类字符流的打印机正常工作。 而且, 当然, 您可以用任何其他的 @@ -1222,7 +1225,7 @@ exit 2</programlisting> <para>使这个文件可以被执行:</para> - <screen>&prompt.root; <userinput>chmod 555 /usr/local/libexec/if-simple</userinput></screen> + <screen>&prompt.root; <userinput><command>chmod 555 <filename>/usr/local/libexec/if-simple</filename></command></userinput></screen> <para>然后用 <literal>if</literal> 标记在 @@ -1234,14 +1237,13 @@ exit 2</programlisting> # /etc/printcap for host rose - added text filter # rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: + :sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\ :lp=<filename class="devicefile">/dev/lpt0</filename>:\ + :if=<filename>/usr/local/libexec/if-simple</filename>: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:\ - :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:\ - :if=/usr/local/libexec/if-simple:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:\ + :lp=<filename class="devicefile">/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:\ + :if=<filename>/usr/local/libexec/if-simple</filename>:</programlisting> <note> <para><filename>if-simple</filename> 脚本的副本可以在 <filename @@ -1263,7 +1265,7 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ <para>到 <filename>/etc/rc.conf</filename> 文件当中, 然后既可以重启您的 机器, 也可以直接运行 &man.lpd.8;。</para> - <screen>&prompt.root; <userinput>lpd</userinput></screen> + <screen>&prompt.root; <userinput><command>lpd</command></userinput></screen> </sect4> <sect4 id="printing-trying"> @@ -1288,7 +1290,7 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ <para>输入:</para> - <screen>&prompt.root; <userinput>lptest 20 5 | lpr -P<replaceable>printer-name</replaceable></userinput></screen> + <screen>&prompt.root; <userinput><command>lptest 20 5 | lpr <option>-P</option><replaceable>printer-name</replaceable></command></userinput></screen> <para>其中 <replaceable>printer-name</replaceable> 是 在 <filename>/etc/printcap</filename> 中指定的打印机的一个名字 ( 或者一个别名) @@ -1304,11 +1306,11 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ 结果。 而如果您使用的 &man.lptest.1;, 则您得到的 结果应该看起来像下面这样:</para> - <programlisting>!"#$%&'()*+,-./01234 + <screen>!"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 $%&'()*+,-./01234567 -%&'()*+,-./012345678</programlisting> +%&'()*+,-./012345678</screen> <para>要更进一步的测试打印机, 尝试下载一些大的 程序 (为基于特定语言的打印机 ) 或者运行 @@ -1344,25 +1346,26 @@ $%&'()*+,-./01234567 工作还是由 <emphasis>过滤器</emphasis>。 过滤器是 一种与打印机通讯并且处理设备依赖和特殊需要的 程序。 在简单打印机设置这节里, - 我们安装了一个纯文本过滤器 — 一个应该可以用在大多数 - 打印机上的极简单的过滤器 ( <link - linkend="printing-textfilter">安装 - 文本过滤器</link>)。</para> + 我们安装了一个纯文本过滤器 — + 一个应该可以用在大多数打印机上的极简单的过滤器 + (<link linkend="printing-textfilter"> + 安装文本过滤器</link>)。</para> - <para>然而, 为了进行格式转换, 打印 - 记帐, 适应特殊的打印机, 等等, + <para>然而,为了进行格式转换, 打印记帐, + 适应特殊的打印机, 等等, 您需要明白过滤器是怎样工作的。 在根本上过滤器负责处理这些方面。 但坏消息是大多数时候 - <emphasis>您</emphasis> 必须自己提供过滤器。 好消息 - 是很多过滤器通常都已经有了; 当没有的时候, 它们 - 通常也是很好写的。</para> - - <para>FreeBSD 也提供了一个过滤器, - <filename>/usr/libexec/lpr/lpf</filename>, 可以让大多数可以打印纯文本的 - 打印机工作。 ( 它处理文件里的退格和 - 跳格, 并且进行记帐, 但这基本就是它所有能做的了。 ) - 这里还有几个过滤器和过滤器组件在 FreeBSD + <emphasis>您</emphasis> 必须自己提供过滤器。 + 好消息是很多过滤器通常都已经有了; 当没有的时候, + 它们通常也是很好写的。</para> + + <para>&os; 也提供了一个过滤器, + <filename>/usr/libexec/lpr/lpf</filename>, + 可以让大多数可以打印纯文本的打印机工作。 + ( 它处理文件里的退格和跳格,并且进行记帐, + 但这基本就是它所有能做的了。) + 这里还有几个过滤器和过滤器组件在 &os; Ports Collection 里。</para> <para>这是在这节里您将找到的内容:</para> @@ -1401,10 +1404,13 @@ $%&'()*+,-./01234567 linkend="printing-advanced-convfilters">转换过滤器</link> 这节讲述了一个自动把指定格式文件, 比如图像或排版数据, 转换成您打印机可以理解的格式的方法。 在阅读了这节之后, - 您就应该可以配置打印机, 让用户可以用 <command>lpr -t</command> + 您就应该可以配置打印机, 让用户可以用 + <command>lpr <option>-t</option></command> 来打印 troff 数据、 用 - <command>lpr -d</command> 来打印 &tex; DVI 数据, 或用 <command>lpr - -v</command> 来打印光栅图像数据等工作了。 建议您阅读这节。</para> + <command>lpr <option>-d</option></command> + 来打印 &tex; DVI 数据, 或用 + <command>lpr <option>-v</option></command> + 来打印光栅图像数据等工作了。 建议您阅读这节。</para> </listitem> <listitem> @@ -1417,13 +1423,12 @@ $%&'()*+,-./01234567 </listitem> <listitem> - <para><link linkend="printing-advanced-lpf">lpf: 一个文本 - 过滤器</link> 描述了 <command>lpf</command>, 一个 FreeBSD 自带的相当 - 完整而又简单的文本过滤器, 可以使用在行式打印机 (和那些担当行式打印机功能的激光 - 打印机 ) 上。 如果 - 您需要一个快速的方法来让打印机统计打印纯文本的工作量 - , 或者您有一台遇到退格字符就冒烟的打印机 - , 您应该考虑 + <para><link linkend="printing-advanced-lpf">lpf: + 一个文本过滤器</link> 描述了 <command>lpf</command>, + 一个 &os; 自带的相当完整而又简单的文本过滤器, + 可以使用在行式打印机(和那些担当行式打印机功能的激光打印机 )上。 + 如果您需要一个快速的方法来让打印机统计打印纯文本的工作量, + 或者您有一台遇到退格字符就冒烟的打印机, 您应该考虑 <command>lpf</command>。</para> </listitem> </itemizedlist> @@ -1447,23 +1452,22 @@ $%&'()*+,-./01234567 标准输出设置成打印机, 并且把错误信息定向到 错误日志文件 (在 <literal>lf</literal> 标识里指定, 默认在 <filename>/etc/printcap</filename>, 或者 - <filename>/dev/console</filename> 文件里 )。</para> + <filename class="devicefile">/dev/console</filename> 文件里 )。</para> <indexterm> <primary><command>troff</command></primary> </indexterm> - <para>过滤器被 <application>LPD</application> 启动, 并且 - 过滤器的参数依赖于 - <filename>/etc/printcap</filename> 文件中所列出的和 - 用户为任务用 + <para>过滤器被 <application>LPD</application> 启动, + 并且过滤器的参数依赖于 <filename>/etc/printcap</filename> + 文件中所列出的和用户为任务用 &man.lpr.1; 命令所指定的。 例如, 如果用户输入 - <command>lpr -t</command>, <application>LPD</application> 会 - 启动 troff 过滤器, 即在 - 目标打印机的 <literal>tf</literal> 标签里所列出的过滤器。 + <command>lpr <option>-t</option></command>, + <application>LPD</application> 会启动 troff 过滤器, + 即在目标打印机的 <literal>tf</literal> 标签里所列出的过滤器。 如果用户想要打印纯文本, 它将会启动 - <literal>if</literal> ***过滤器 ( 这是通常的情况: 参见 <link + <literal>if</literal> 过滤器 (这是通常的情况: 参见 <link linkend="printing-advanced-of">输出过滤器</link> 来得到 - 细节 )。</para> + 细节)。</para> <para>在 <filename>/etc/printcap</filename> 文件中, 您可以指定三种过滤器:</para> @@ -1502,7 +1506,7 @@ $%&'()*+,-./01234567 <listitem> <para>当任务用 <command>lpr - -l</command> 这个命令提交时出现 </para> + <option>-l</option></command> 这个命令提交时出现 </para> </listitem> </varlistentry> @@ -1529,7 +1533,7 @@ $%&'()*+,-./01234567 <listitem> <para>这里是来自 <command>lpr - -i</command> 命令的总缩进量, 默认为 0</para> + <option>-i</option></command> 命令的总缩进量, 默认为 0</para> </listitem> </varlistentry> @@ -1642,7 +1646,7 @@ $%&'()*+,-./01234567 </varlistentry> </variablelist> - <para>文本过滤器随 FreeBSD 一起发布, + <para>文本过滤器随 &os; 一起发布, 文件名为 <filename>/usr/libexec/lpr/lpf</filename>, 它利用页宽和页长参数来决定何时发送送纸指令, 并提供位打印记帐的方法。 它使用登录名、 主机名, @@ -1691,7 +1695,7 @@ $%&'()*+,-./01234567 <command>lprps</command> 提供的程序) 转换文本到 &postscript;。 然后它会用 <command>lprps</command> 将任务发送到打印机。</para> - <para><command>lprps</command> 可以在 FreeBSD Ports Collection + <para><command>lprps</command> 可以在 &os; Ports Collection (详见 <link linkend="ports">The Ports Collection</link>) 中找到。 你可以根据页面的尺寸选择安装 <filename role="package">print/lprps-a4</filename> @@ -1703,7 +1707,7 @@ $%&'()*+,-./01234567 <filename>/etc/printcap</filename> 文件中 &postscript; 打印机的记录部分中:</para> - <programlisting>:if=/usr/local/libexec/psif:</programlisting> + <programlisting>:if=<filename>/usr/local/libexec/psif</filename>:</programlisting> <para>同时还需要指定 <literal>rw</literal> 标签来告诉 <application>LPD</application> 使用读-写模式打开打印机。</para> @@ -1739,7 +1743,7 @@ fi</programlisting> <para>在上面的脚本中, <command>textps</command> 命令是一个独立安装的程序用来将纯文本转换成 &postscript;。 您可以使用任何您喜欢的文本到 &postscript; 转换程序。 - FreeBSD Ports Collection (详见 <link linkend="ports">Ports Collection</link>) + &os; Ports Collection (详见 <link linkend="ports">Ports Collection</link>) 中包含了一个功能非常完整的文本到 &postscript; 的转换程序, 它叫做 <literal>a2ps</literal>。</para> </sect3> @@ -1757,7 +1761,7 @@ fi</programlisting> 标准。 而 &postscript; 也是一个 <emphasis> 昂贵 </emphasis> 的标准。 幸好, Aladdin 开发了一个和 &postscript; 类似的叫做 - <application>Ghostscript</application> 的程序可以用在 FreeBSD 上。 + <application>Ghostscript</application> 的程序可以用在 &os; 上。 <application>Ghostscript</application> 可以读取大多数 &postscript; 的文件并处理其中的页面交给多种设备,包括许多品牌的非 &postscript; 打印机。 通过安装 <application>Ghostscript</application> @@ -1765,7 +1769,7 @@ fi</programlisting> 打印机用起来就像真的 &postscript; 打印机一样。</para> <para><application>Ghostscript</application> 被收录在 - FreeBSD Ports Collection 中,有许多可用的版本, + &os; Ports Collection 中,有许多可用的版本, 比较常用的版本是 <filename role="package">print/ghostscript-gpl</filename>。</para> @@ -1778,7 +1782,7 @@ fi</programlisting> Hewlett Packard DeskJet 500 打印机的文本过滤器。 对于其他打印机, 替换 <command>gs</command> (<application>Ghostscript</application>) 命令中的 <option>-sDEVICE</option> 参数就可以了。 (输入 - <command>gs -h</command> 来获得当前安装的 + <command>gs <option>-h</option></command> 来获得当前安装的 <application>Ghostscript</application> 所支持的设备列表。)</para> <programlisting>#!/bin/sh @@ -1818,10 +1822,10 @@ exit 2</programlisting> <para>最后, 需要告知 <application>LPD</application> 所使用的过滤器, 通过 <literal>if</literal> 标签完成:</para> - <programlisting>:if=/usr/local/libexec/ifhp:</programlisting> + <programlisting>:if=<filename>/usr/local/libexec/ifhp</filename>:</programlisting> - <para>您可以输入 <command>lpr <replaceable>plain.text</replaceable></command> - 和 <filename>lpr <replaceable>whatever.ps</replaceable></filename>, + <para>您可以输入 <command>lpr <filename><replaceable>plain.text</replaceable></filename></command> + 和 <command>lpr <filename><replaceable>whatever.ps</replaceable></filename></command>, 它们都应该可以成功打印。</para> </sect3> @@ -1846,14 +1850,14 @@ exit 2</programlisting> 我们都不能直接打印它直到我们将 DVI 文件转换成 &postscript;。 转换的命令应该是下面的样子:</para> - <screen>&prompt.user; <userinput>dvips <replaceable>seaweed-analysis.dvi</replaceable></userinput> -&prompt.user; <userinput>lpr seaweed-analysis.ps</userinput></screen> + <screen>&prompt.user; <userinput><command>dvips <filename><replaceable>seaweed-analysis.dvi</replaceable></filename></command></userinput> +&prompt.user; <userinput><command>lpr <filename><replaceable>seaweed-analysis.ps</replaceable></filename></command></userinput></screen> <para>通过安装 DVI 文件的转换过滤器, 我们可以跳过每次手动转换这一步, 而让 <application>LPD</application> 来完成这个步骤。 现在, 每次要打印 DVI 文件, 我们只需要一步就可以打印它:</para> - <screen>&prompt.user; <userinput>lpr -d <replaceable>seaweed-analysis.dvi</replaceable></userinput></screen> + <screen>&prompt.user; <userinput><command>lpr <option>-d</option> <filename><replaceable>seaweed-analysis.dvi</replaceable></filename></command></userinput></screen> <para>我们要 <application>LPD</application> 转换 DVI 文件是通过指定 <option>-d</option> 选项完成的。 <link @@ -1946,7 +1950,7 @@ exit 2</programlisting> </tgroup> </informaltable> - <para>在例子中, <command>lpr -d</command>就是指 + <para>在例子中, <command>lpr <option>-d</option></command>就是指 打印机需要在<filename>/etc/printcap</filename>文件中 <literal>df</literal>变量所指的过滤器。</para> @@ -1959,17 +1963,17 @@ exit 2</programlisting> publishing 程序生成), 而且不打算打印 plot 文件, 就可以安装一个 Printerleaf 转换过滤器并且用 <literal>gf</literal> 变量指定它。 然后就可以告诉您的用户使用 - <command>lpr -g</command> 就可以 <quote>打印 Printerleaf + <command>lpr <option>-g</option></command> 就可以 <quote>打印 Printerleaf 文件。</quote></para> </sect4> <sect4> <title>安装转换过滤器</title> - <para>以为安装的转换过滤器不是 FreeBSD 基本系统的一部分, + <para>以为安装的转换过滤器不是 &os; 基本系统的一部分, 所以它们可能是在 - <filename>/usr/local</filename> 目录下。 通常目录 - <filename>/usr/local/libexec</filename> 是保存它们的地方, + <filename class="directory">/usr/local</filename> 目录下。 通常目录 + <filename class="directory">/usr/local/libexec</filename> 是保存它们的地方, 因为它们通常是通过 <application>LPD</application> 运行的; 普通用户应该并不需要直接运行它们。</para> @@ -1988,15 +1992,15 @@ exit 2</programlisting> # /etc/printcap for host rose - added df filter for bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: + :sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\ + :lp=<filename class="devicefile">/dev/lpt0</filename>:\ + :if=<filename>/usr/local/libexec/if-simple</filename>: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:\ - :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:\ + :lp=<filename class="devicefile">/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:rw:\ + :if=<filename>/usr/local/libexec/psif</filename>:\ + :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting> <para>这里的 DVI 过滤器是一段 shell 脚本, 名字叫做 <filename>/usr/local/libexec/psdf</filename>。 @@ -2055,9 +2059,9 @@ giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \ # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ - :if=/usr/local/libexec/hpif:\ - :vf=/usr/local/libexec/hpvf:</programlisting> + :lp=<filename class="devicefile">/dev/lpt0</filename>:sh:sd=<filename class="directory">/var/spool/lpd/teak</filename>:mx#0:\ + :if=<filename>/usr/local/libexec/hpif</filename>:\ + :vf=<filename>/usr/local/libexec/hpvf</filename>:</programlisting> <para>下面的脚本是一个在名叫 <literal>bamboo</literal> 的这台 &postscript; @@ -2084,7 +2088,7 @@ exec grops</programlisting> <para>这里是我们要启用过滤器需要在 <filename>/etc/printcap</filename> 里增加的内容:</para> - <programlisting>:tf=/usr/local/libexec/pstf:</programlisting> + <programlisting>:tf=<filename>/usr/local/libexec/pstf</filename>:</programlisting> <para>下面的例子也许会让许多 FORTRAN 老手羞愧。 它是一个 FORTRAN- 文本 的过滤器, 能在任意一台 @@ -2105,7 +2109,7 @@ exit 2</programlisting> <filename>/etc/printcap</filename> 中为打印机能够 <literal>teak</literal> 启用这个过滤器添加下面的内容:</para> - <programlisting>:rf=/usr/local/libexec/hprf:</programlisting> + <programlisting>:rf=<filename>/usr/local/libexec/hprf</filename>:</programlisting> <para>最后, 再给出一个有些复杂的例子。 我们将给以前介绍过的 <literal>teak</literal> 这台激光打印机添加一个 DVI @@ -2113,10 +2117,10 @@ exit 2</programlisting> <filename>/etc/printcap</filename> 加入 DVI 过滤器的路径:</para> - <programlisting>:df=/usr/local/libexec/hpdf:</programlisting> + <programlisting>:df=<filename>/usr/local/libexec/hpdf</filename>:</programlisting> <para>现在, 该困难的部分了: 编写过滤器。 为了实现过滤器, 我们需要一个 - DVI-到-LaserJet/PCL 转换程序。 FreeBSD Ports + DVI-到-LaserJet/PCL 转换程序。 &os; Ports Collection (详见 <link linkend="ports">Ports Collection</link> 这一节) 中有一个: <filename role="package">print/dvi2xx</filename>。 安装这个 port 就会得到我们需要的程序, @@ -2128,17 +2132,17 @@ exit 2</programlisting> <command>dvilj2p</command> 不能读取标准输入。 它需要从文件中读取数据。 更糟糕的是, 这个文件的名字必须以 <filename>.dvi</filename> 结尾。 所以使用 - <filename>/dev/fd/0</filename> 作为标准输入是有问题的。 + <filename class="devicefile">/dev/fd/0</filename> 作为标准输入是有问题的。 我们可以通过连接 (符号连接) 来解决这个问题。 连接一个临时的文件名 (一个以 <filename>.dvi</filename> 结尾的文件名) - 到 <filename>/dev/fd/0</filename>, 从而强制 + 到 <filename class="devicefile">/dev/fd/0</filename>, 从而强制 <command>dvilj2p</command> 从标准输入读取。</para> <para>现在迎面而来的是另外一个问题, 我们不能使用 - <filename>/tmp</filename> 存放临时连接。 符号连接是被用户和组 + <filename class="directory">/tmp</filename> 存放临时连接。 符号连接是被用户和组 <username>bin</username> 拥有的。 而过滤器则是以 <username>daemon</username> 用户运行的。 - 并且 <filename>/tmp</filename> 目录设置了 sticky 位。 + 并且 <filename class="directory">/tmp</filename> 目录设置了 sticky 位。 所以过滤器只能建立符号连接, 但它不能在用完之后清除掉这些连接。 因为它们属于不同的用户。</para> @@ -2149,7 +2153,7 @@ exit 2</programlisting> <filename>/etc/printcap</filename> 中指定)。 这是一个非常好的让过滤器完成它工作的地方, 特别还是因为 (有时) 这个目录比起 - <filename>/tmp</filename> 来有更多的可用磁盘空间。</para> + <filename class="directory">/tmp</filename> 来有更多的可用磁盘空间。</para> <para>最后, 给出过滤器的代码:</para> @@ -2241,7 +2245,7 @@ exit 0</programlisting> <secondary>filters</secondary> <tertiary>apsfilter</tertiary> </indexterm> - <para>FreeBSD 的 Ports 套件提供了一个可以自动进行转换的文本过滤器, + <para>&os; 的 Ports 套件提供了一个可以自动进行转换的文本过滤器, 名字叫做 <command>apsfilter</command> (<filename role="package">print/apsfilter</filename>)。 它可以检测纯文本、 &postscript;、 DVI 以及几乎任何格式的文件, 并在执行相应的转换之后完成打印工作。</para> @@ -2334,10 +2338,11 @@ exit 0</programlisting> <title><command>lpf</command>: 一个文本过滤器</title> <para><filename>/usr/libexec/lpr/lpf</filename> 这个程序包含在 - FreeBSD 的二进制程序中, 它是一个文本过滤器 (输入过滤器)。 - 它可以缩排输出 (用 <command>lpr - -i</command> 命令提交的任务), 可以打印控制字符禁止断页 - 用 <command>lpr -l</command> 提交的任务), + &os; 的二进制程序中, 它是一个文本过滤器 (输入过滤器)。 + 它可以缩排输出 (用 + <command>lpr <option>-i</option></command> 命令提交的任务), + 可以打印控制字符禁止断页用 + <command>lpr <option>-l</option></command> 提交的任务), 可以调整任务中退格和制表符打印的位置, 还可以对打印进行记帐。 它同样可以像输出过滤器一样工作。</para> @@ -2424,15 +2429,15 @@ exec /usr/libexec/lpr/lpf</programlisting> # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ - :if=/usr/local/libexec/hpif:\ - :vf=/usr/local/libexec/hpvf:\ - :of=/usr/local/libexec/hpof:</programlisting> + :lp=<filename class="devicefile">/dev/lpt0</filename>:sd=<filename class="directory">/var/spool/lpd/teak</filename>:mx#0:\ + :if=<filename>/usr/local/libexec/hpif</filename>:\ + :vf=<filename>/usr/local/libexec/hpvf</filename>:\ + :of=<filename>/usr/local/libexec/hpof</filename>:</programlisting> <para>现在, 当用户再发任务给打印机 <literal>teak</literal> 的时候, 每个任务都会有一个报头页。 如果用户想要花时间来寻找他们自己打印的文件, 那么他们可以通过 - <command>lpr -h</command> 命令来提交任务; 参考 <link + <command>lpr <option>-h</option></command> 命令来提交任务; 参考 <link linkend="printing-lpr-options-misc">报头页选项</link> 这一节来得到更多关于 &man.lpr.1; 的选项。</para> @@ -2453,7 +2458,7 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ 下面是一个例子 (<username>kelly</username> 从主机 <hostid>rose</hostid> 打印了一个叫做 <quote>outline</quote> 的任务):</para> - <programlisting> k ll ll + <screen> k ll ll k l l k l l k k eeee l l y y @@ -2499,7 +2504,7 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ Job: outline - Date: Sun Sep 17 11:04:58 1995</programlisting> + Date: Sun Sep 17 11:04:58 1995</screen> <para><application>LPD</application> 会附加一个换页符在这段文本之后, 所以任务会在新的一页上开始 @@ -2513,7 +2518,7 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ 在文件 <filename>/etc/printcap</filename> 中。 报头页就会看起来像下面这样:</para> - <programlisting>rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995</programlisting> + <screen>rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995</screen> <para>同样是默认的, <application>LPD</application> 也是先打印报头页, 然后才是任务。 @@ -2535,16 +2540,16 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ 但却没有提供给它任何 <emphasis>用户或者主机</emphasis> 的信息或者记帐文件, 所以它无法知道谁应该为打印机的使用付费。 如果仅仅是 - <quote>增加一页</quote> 给文本过滤器或者其他过滤器 - (它们有用户和主机的信息) 是不够的, 因为 - 用户可以用 <command>lpr -h</command> 命令跳过报头页。 + <quote>增加一页计数</quote> 给文本过滤器或者其他过滤器 + (它们有用户和主机的信息) 是不够的, 因为用户可以用 + <command>lpr <option>-h</option></command> 命令跳过报头页。 他还是需要为自己并没有打印的报头页付钱。 - 基本上, <command>lpr -h</command> 是明知用户的首选, + 基本上, <command>lpr <option>-h</option></command> 是明知用户的首选, 但也不能强制让别人使用它。</para> <para>让每个过滤器生成自己的报头页 (因此可以为它们计费) 是 <emphasis>仍然不够的</emphasis>。 - 如果用户想要用 <command>lpr -h</command> + 如果用户想要用 <command>lpr <option>-h</option></command> 命令禁止报头页, 它们将仍然印出报头页并且为它们付费。 因为 <application>LPD</application> 不会把 @@ -2603,8 +2608,9 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ <para>一个显而易见的方法来得到报头页就是让每个转换过滤器和文本过滤器都来生成报头页。 这些过滤器应该用用户名和主机的参数来生成一个相对应的报头页。 这种方法的缺点就是用户总是打印出报头页, - 无论他们是否用 <command>lpr - -h</command> 命令来提交的任务。</para> + 无论他们是否用 + <command>lpr <option>-h</option></command> + 命令来提交的任务。</para> <para>让我们来深入深入的研究一下这个方法。 下面的脚本输入三个参数 @@ -2746,7 +2752,7 @@ done 这节中介绍的那种技巧: 写一个输出过滤器来解释 LPD- 生成的报头页并且生成一个 &postscript; 的版本。 如果用户用 - <command>lpr -h</command> 命令提交任务, 那么 + <command>lpr <option>-h</option></command> 命令提交任务, 那么 <application>LPD</application> 将不会生成报头页, 并且输出过滤器也不会生成报头页。 否则, 输出过滤器将从 @@ -2768,7 +2774,7 @@ done <secondary>network</secondary> </indexterm> <indexterm><primary>network printing</primary></indexterm> - <para>FreeBSD 支持网络打印: 发送任务给远程打印机。 + <para>&os; 支持网络打印: 发送任务给远程打印机。 网络打印通常指两种不同的方式:</para> <itemizedlist> @@ -2829,7 +2835,7 @@ done <emphasis>本地主机</emphasis> 允许使用 <emphasis>远程主机</emphasis> 上的 <application>LPD</application> 服务 (参见 <link - linkend="printing-advanced-restricting-remote">限制远程打印机任务</link>)。</para> + linkend="printing-advanced-restricting-remote">限制远程主打印任务</link>)。</para> <indexterm> <primary>printers</primary> @@ -2905,35 +2911,35 @@ done # teak is local; it is connected directly to orchid: # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ - :if=/usr/local/libexec/ifhp:\ - :vf=/usr/local/libexec/vfhp:\ - :of=/usr/local/libexec/ofhp: + :lp=<filename class="devicefile">/dev/lpt0</filename>:sd=<filename class="directory">/var/spool/lpd/teak</filename>:mx#0:\ + :if=<filename>/usr/local/libexec/ifhp</filename>:\ + :vf=<filename>/usr/local/libexec/vfhp</filename>:\ + :of=<filename>/usr/local/libexec/ofhp</filename>: # # rattan is connected to rose; send jobs for rattan to rose: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: + :lp=:rm=rose:rp=rattan:sd=<filename class="directory">/var/spool/lpd/rattan</filename>: # # bamboo is connected to rose as well: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:</programlisting> + :lp=:rm=rose:rp=bamboo:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:</programlisting> <para>然后, 我们只需要在主机 <hostid>orchid</hostid> 上建立一个后台打印队列目录:</para> - <screen>&prompt.root; <userinput>mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput> -&prompt.root; <userinput>chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput> -&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput></screen> - + <screen>&prompt.root; <userinput><command>mkdir <option>-p</option> <filename class="directory">/var/spool/lpd/rattan</filename> <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput> +&prompt.root; <userinput><command>chmod 770 <filename class="directory">/var/spool/lpd/rattan</filename> <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput> +&prompt.root; <userinput><command>chown daemon:daemon <filename class="directory">/var/spool/lpd/rattan</filename> <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput></screen> + <para>现在, 主机 <hostid>orchid</hostid> 上的用户可以打印到 <literal>rattan</literal> 和 <literal>bamboo</literal> 了。 如果, 比如, 一个用户在主机 <hostid>orchid</hostid> 上输入了:</para> - <screen>&prompt.user; <userinput>lpr -P bamboo -d <replaceable>sushi-review.dvi</replaceable></userinput></screen> + <screen>&prompt.user; <userinput><command>lpr <option>-P</option> bamboo <option>-d</option> <filename><replaceable>sushi-review.dvi</replaceable></filename></command></userinput></screen> <para><application>LPD</application> 系统在主机 <hostid>orchid</hostid> 上会复制这个任务到后台打印队列目录 @@ -2970,7 +2976,7 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ <command>netprint</command> 将标准输入的所有数据发送到一个连在网络上的打印机。 我们将打印机的名字作为第一个参数, 端口号跟在后面作为第二个参数, 传给 <command>netprint</command>。 - 注意它只支持单向通讯 (FreeBSD 到打印机); + 注意它只支持单向通讯 (&os; 到打印机); 很多网络打印机支持双向通讯, 并且这是您可能利用到的 (得到打印机状态, 进行打印记帐, 等等的时候。)。</para> @@ -3029,7 +3035,7 @@ exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100</pro <title>限制多份副本</title> <para><application>LPD</application> 系统能够简化用户在打印多份副本时的工作。 - 用户可以用 <command>lpr -#5</command> + 用户可以用 <command>lpr <option>-#5</option></command> (举例) 来提交打印任务, 则会将任务中每个文件都打印五份副本。 这是不是一件很棒的事情呢。</para> @@ -3059,15 +3065,15 @@ exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100</pro # /etc/printcap for host rose - restrict multiple copies on bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: + :sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\ + :lp=<filename class="devicefile">/dev/lpt0</filename>:\ + :if=<filename>/usr/local/libexec/if-simple</filename>: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:sc:\ - :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:sc:\ + :lp=<filename class="devicefile">/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:rw:\ + :if=<filename>/usr/local/libexec/psif</filename>:\ + :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting> <para>现在, 我们还需要增机 <literal>sc</literal> 变量在主机 <hostid>orchid</hostid> 的 @@ -3078,24 +3084,24 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ # /etc/printcap for host orchid - no multiple copies for local # printer teak or remote printer bamboo teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\ - :if=/usr/local/libexec/ifhp:\ - :vf=/usr/local/libexec/vfhp:\ - :of=/usr/local/libexec/ofhp: + :lp=<filename class="devicefile">/dev/lpt0</filename>:sd=<filename class="directory">/var/spool/lpd/teak</filename>:mx#0:sc:\ + :if=<filename>/usr/local/libexec/ifhp</filename>:\ + :vf=<filename>/usr/local/libexec/vfhp</filename>:\ + :of=<filename>/usr/local/libexec/ofhp</filename>: rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: + :lp=:rm=rose:rp=rattan:sd=<filename class="directory">/var/spool/lpd/rattan</filename>: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:</programlisting> + :lp=:rm=rose:rp=bamboo:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:sc:</programlisting> <para>通过使用 <literal>sc</literal> 变量, 我们阻止了 - <command>lpr -#</command> 命令的使用, 但仍然没有禁止用户多次运行 + <command>lpr <option>-#</option></command> 命令的使用, 但仍然没有禁止用户多次运行 &man.lpr.1; , 或者多次提交任务中同样的文件, 像下面这样:</para> - <screen>&prompt.user; <userinput>lpr <replaceable>forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign</replaceable></userinput></screen> + <screen>&prompt.user; <userinput>lpr <filename><replaceable>forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign</replaceable></filename></userinput></screen> <para>这里有很多种方法可以阻止这种行为 (包括忽略它), 并且是免费的。</para> @@ -3131,15 +3137,15 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ # /etc/printcap for host rose - restricted group for bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: + :sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\ + :lp=<filename class="devicefile">/dev/lpt0</filename>:\ + :if=<filename>/usr/local/libexec/if-simple</filename>: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\ - :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:sc:rg=artists:\ + :lp=<filename class="devicefile">/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:rw:\ + :if=<filename>/usr/local/libexec/psif</filename>:\ + :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting> <para>Let us leave the other example <filename>/etc/printcap</filename> file (for the host @@ -3199,18 +3205,18 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ # No limit on job size: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:mx#0:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: + :sh:mx#0:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\ + :lp=<filename class="devicefile">/dev/lpt0</filename>:\ + :if=<filename>/usr/local/libexec/if-simple</filename>: # # Limit of five megabytes: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ - :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:sc:rg=artists:mx#5000:\ + :lp=<filename class="devicefile">/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:rw:\ + :if=<filename>/usr/local/libexec/psif</filename>:\ + :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting> <para>同样, 限制只对本地用户起作用。 如果设置了允许远程用户使用您的打印机, 远程用户将不会受到这些限制。 @@ -3222,11 +3228,11 @@ bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ <para>除此之外, 还有另一种限制远程任务大小的方法; 参见 <link - linkend="printing-advanced-restricting-remote">限制远程打印机任务</link>。</para> + linkend="printing-advanced-restricting-remote">限制远程主机打印任务</link>。</para> </sect3> <sect3 id="printing-advanced-restricting-remote"> - <title>限制远程打印机任务</title> + <title>限制远程主机打印任务</title> <para><application>LPD</application> 后台打印系统提供了多种方法来限制从远程主机提交的任务:</para> @@ -3288,17 +3294,17 @@ madrigal.fishbaum.de</programlisting> 的记录:</para> <programlisting>bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ - :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf:</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:sc:rg=artists:mx#5000:\ + :lp=<filename class="devicefile">/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\ + :if=<filename>/usr/local/libexec/psif</filename>:\ + :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting> <para>后台打印队列目录在 <literal>sd</literal> 变量中给出。 我们设置 3 兆字节 (6144 磁盘块) 为文件系统上必须存在的总共剩余空间, 让 <application>LPD</application> 可以接受远程任务:</para> - <screen>&prompt.root; <userinput>echo 6144 > /var/spool/lpd/bamboo/minfree + <screen>&prompt.root; <userinput><command>echo 6144 > <filename>/var/spool/lpd/bamboo/minfree</filename></command> </userinput></screen> </listitem> </varlistentry> @@ -3393,7 +3399,7 @@ madrigal.fishbaum.de</programlisting> <sect3> <title>快速并且混乱的打印记帐</title> - <para>FreeBSD 包含两个可以让您立刻可以建立起简单的阶段记帐的程序。 + <para>&os; 包含两个可以让您立刻可以建立起简单的阶段记帐的程序。 它们是文本过滤器 <command>lpf</command>, 在 <link linkend="printing-advanced-lpf">lpf: 一个文本过滤器</link> 这节中描述, 和 @@ -3526,7 +3532,7 @@ total 337.00 154 $ 6.74</screen> <para>在 &man.pac.8; 默认产生的摘要中, 可以看到在不同主机上的每个用户打印了多少页。 如果在您这里, 主机不考虑 (因为用户可以使用任何主机), - 运行 <command>pac -m</command>, + 运行 <command>pac <option>-m</option></command>, 来得到下面的摘要:</para> <screen> Login pages/feet runs price @@ -3549,12 +3555,12 @@ total 337.00 154 $ 6.74</screen> 的单位是美元, 而不是百分之一分。 例如,</para> - <screen>&prompt.root; <userinput>pac -p1.50</userinput></screen> + <screen>&prompt.root; <userinput><command>pac <option>-p1.50</option></command></userinput></screen> <para>设定每页的价格是 1 美元 5 美分。 您可以通过这个选项来达到目标利润。</para> - <para>最终, 运行 <command>pac -s</command> 将存储这些信息在一个记帐文件里, + <para>最终, 运行 <command>pac <option>-s</option></command> 将存储这些信息在一个记帐文件里, 文件名和打印机帐户的名字相同, 但是带着 <literal>_sum</literal> 的后缀。 然后截短记帐文件。 @@ -3615,7 +3621,7 @@ total 337.00 154 $ 6.74</screen> <secondary>usage</secondary> </indexterm> <para>这节将讲述如何使用在 - FreeBSD 下设置好的打印机。 下面是一个用户级命令的总览:</para> + &os; 下设置好的打印机。 下面是一个用户级命令的总览:</para> <variablelist> <varlistentry> @@ -3668,28 +3674,28 @@ total 337.00 154 $ 6.74</screen> <para>要打印文件, 输入:</para> - <screen>&prompt.user; <userinput>lpr <replaceable>filename</replaceable> <replaceable>...</replaceable></userinput></screen> + <screen>&prompt.user; <userinput><command>lpr <filename><replaceable>filename</replaceable></filename> <replaceable>...</replaceable></command></userinput></screen> <indexterm><primary>printing</primary></indexterm> <para>这个命令会打印所有列出的文件到默认打印机。 如果没有列出文件, &man.lpr.1; 会从标准输入读取打印数据。 比如, 这个命令打印一些重要的系统文件:</para> - <screen>&prompt.user; <userinput>lpr /etc/host.conf /etc/hosts.equiv</userinput></screen> + <screen>&prompt.user; <userinput><command>lpr <filename>/etc/host.conf</filename> <filename>/etc/hosts.equiv</filename></command></userinput></screen> <para>要选择一个指定的打印机, 输入:</para> - <screen>&prompt.user; <userinput>lpr -P <replaceable>printer-name</replaceable> <replaceable>filename</replaceable> <replaceable>...</replaceable></userinput></screen> + <screen>&prompt.user; <userinput><command>lpr <option>-P</option> <replaceable>printer-name</replaceable> <filename><replaceable>filename</replaceable></filename> <replaceable>...</replaceable></command></userinput></screen> <para>这个例子打印一个当前目录的长长的列表到叫做 <literal>rattan</literal> 的这台打印机:</para> - <screen>&prompt.user; <userinput>ls -l | lpr -P rattan</userinput></screen> + <screen>&prompt.user; <userinput><command>ls <option>-l</option> | lpr <option>-P</option> rattan</command></userinput></screen> <para>因为没有为 &man.lpr.1; 命令列出文件, <command>lpr</command> 从标准输入读入数据, 在这里是 <command>ls - -l</command> 命令的输出。</para> + <option>-l</option></command> 命令的输出。</para> <para> &man.lpr.1; 命令同样可以接受多种控制格式的选项, 应用文件转换, 生成多份副本, 等等。 @@ -3712,7 +3718,7 @@ total 337.00 154 $ 6.74</screen> 要指定打印机, 使用 <option>-P</option> 选项。 例如, 命令 - <screen>&prompt.user; <userinput>lpq -P bamboo</userinput></screen> + <screen>&prompt.user; <userinput><command>lpq <option>-P</option> bamboo</command></userinput></screen> 会显示打印机 <literal>bamboo</literal> 的队列。 下面是命令 <command>lpq</command> @@ -3747,7 +3753,7 @@ active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes <para> &man.lpq.1; 命令同样支持 <option>-l</option> 选项来生成一个详细的长列表。 下面是一个 - <command>lpq -l</command> 命令的例子:</para> + <command>lpq <option>-l</option></command> 命令的例子:</para> <screen>waiting for bamboo to become ready (offline ?) kelly: 1st [job 009rose] @@ -3771,13 +3777,13 @@ mary: 3rd [job 011rose] <para>要从默认打印机中移除一个任务, 首先使用 &man.lpq.1; 找到任务编号。 然后输入:</para> - <screen>&prompt.user; <userinput>lprm <replaceable>job-number</replaceable></userinput></screen> + <screen>&prompt.user; <userinput><command>lprm <replaceable>job-number</replaceable></command></userinput></screen> <para>要从指定打印机中删除任务, 增加 <option>-P</option> 选项。 下面的命令会删除编号为 10 的任务从 <literal>bamboo</literal> 这台打印机:</para> - <screen>&prompt.user; <userinput>lprm -P bamboo 10</userinput></screen> + <screen>&prompt.user; <userinput><command>lprm <option>-P</option> bamboo 10</command></userinput></screen> <para> &man.lprm.1; 命令有一些快捷方式:</para> @@ -3815,7 +3821,7 @@ mary: 3rd [job 011rose] 例如, 下面的命令会删除当前用户在打印机 <literal>rattan</literal> 队列中的所有任务:</para> - <screen>&prompt.user; <userinput>lprm -P rattan -</userinput></screen> + <screen>&prompt.user; <userinput><command>lprm <option>-P</option> rattan -</command></userinput></screen> <note> <para>如果您正工作在一个网络环境中, &man.lprm.1; @@ -3823,16 +3829,16 @@ mary: 3rd [job 011rose] 甚至是同一台打印机也可以在其他主机上使用时。 下面的命令证明了这个:</para> - <screen>&prompt.user; <userinput>lpr -P rattan <replaceable>myfile</replaceable></userinput> -&prompt.user; <userinput>rlogin orchid</userinput> -&prompt.user; <userinput>lpq -P rattan</userinput> + <screen>&prompt.user; <userinput><command>lpr <option>-P</option> rattan <filename><replaceable>myfile</replaceable></filename></command></userinput> +&prompt.user; <userinput><command>rlogin orchid</command></userinput> +&prompt.user; <userinput><command>lpq <option>-P</option> rattan</command></userinput> Rank Owner Job Files Total Size active seeyan 12 ... 49123 bytes 2nd kelly 13 myfile 12 bytes -&prompt.user; <userinput>lprm -P rattan 13</userinput> +&prompt.user; <userinput><command>lprm <option>-P</option> rattan 13</command></userinput> rose: Permission denied -&prompt.user; <userinput>logout</userinput> -&prompt.user; <userinput>lprm -P rattan 13</userinput> +&prompt.user; <userinput><command>logout</command></userinput> +&prompt.user; <userinput><command>lprm <option>-P</option> rattan 13</command></userinput> dfA013rose dequeued cfA013rose dequeued </screen> @@ -3860,7 +3866,7 @@ cfA013rose dequeued &tex; 排版系统) 文件名为 <filename><replaceable>fish-report.dvi</replaceable></filename> 到打印 <literal>bamboo</literal>:</para> - <screen>&prompt.user; <userinput>lpr -P bamboo -d <replaceable>fish-report.dvi</replaceable></userinput></screen> + <screen>&prompt.user; <userinput><command>lpr <option>-P</option> bamboo -d <filename><replaceable>fish-report.dvi</replaceable></filename></command></userinput></screen> <para>这些选项应用到任务中的每个文件, 所以您不能混合 (说) DVI 和 ditroff 文件在同一个任务中。 替代的方法是, @@ -3979,7 +3985,7 @@ cfA013rose dequeued <para>下面是一个例子: 这个命令打印了一个很好的 &man.ls.1; 联机手册到默认打印机:</para> - <screen>&prompt.user; <userinput>zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t</userinput></screen> + <screen>&prompt.user; <userinput><command>zcat <filename>/usr/share/man/man1/ls.1.gz</filename> | troff <option>-t</option> -man | lpr <option>-t</option></command></userinput></screen> <para> &man.zcat.1; 命令解压缩 &man.ls.1; 的手册并且将内容传给 &man.troff.1; @@ -4013,7 +4019,7 @@ cfA013rose dequeued <filename><replaceable>parser.c</replaceable></filename> 跟着三份副本的文件 <filename><replaceable>parser.h</replaceable></filename> 到默认打印机:</para> - <screen>&prompt.user; <userinput>lpr -#3 <replaceable>parser.c parser.h</replaceable></userinput></screen> + <screen>&prompt.user; <userinput><command>lpr <option>-#3</option> <filename><replaceable>parser.c parser.h</replaceable></filename></command></userinput></screen> </listitem> </varlistentry> @@ -4320,7 +4326,7 @@ cfA013rose dequeued 的一切。 您可能发现了它很多的缺点, 它们很自然的让您提出这样的问题: <quote>这里还有什么后台打印系统吗 (并且可以工作在 - FreeBSD 上) ?</quote></para> + &os; 上) ?</quote></para> <variablelist> <varlistentry> @@ -4412,9 +4418,9 @@ exit 2</programlisting> <listitem> <para>您可能在纸上得到下面这些:</para> - <programlisting>!"#$%&'()*+,-./01234 + <screen>!"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 - #$%&'()*+,-./0123456</programlisting> + #$%&'()*+,-./0123456</screen> <indexterm><primary>MS-DOS</primary></indexterm> <indexterm><primary>OS/2</primary></indexterm> @@ -4428,13 +4434,13 @@ exit 2</programlisting> 13 (回车 CR)。 许多打印机使用 &ms-dos; 的习惯来代表新行。</para> - <para>当您在 FreeBSD 上打印时, 您的文本仅用了换行字符。 + <para>当您在 &os; 上打印时, 您的文本仅用了换行字符。 打印机, 打印机看到换行字符后, 走一行纸, 但还光标位置还是在这张纸上要打印的下一个字符处。 这就是回车的作用: 将下一个要打印的字符的位置移到纸张的左边缘。</para> - <para>这里是 FreeBSD 想要打印机做的:</para> + <para>这里是 &os; 想要打印机做的:</para> <informaltable frame="none" pgwide="1"> <tgroup cols="2"> @@ -4461,7 +4467,7 @@ exit 2</programlisting> <note> <para>如果您引导您的系统到其他除了 - FreeBSD 之外的操作系统, 您可能不得不 + &os; 之外的操作系统, 您可能不得不 <emphasis>重新配置</emphasis> 打印机使用 这个操作系统对 CR 和 LF 字符的解释。 您可能更喜欢下面这另一种解决方案。</para> @@ -4469,7 +4475,7 @@ exit 2</programlisting> </listitem> <listitem> - <para>让 FreeBSD 的串口驱动自动转换 LF 到 CR+LF。 + <para>让 &os; 的串口驱动自动转换 LF 到 CR+LF。 当然, 这 <emphasis>仅仅</emphasis> 工作在串口打印机上。 要开启这个功能, 定义 <literal>ms#</literal> 变量并 @@ -4512,8 +4518,8 @@ exit 2</programlisting> # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ - :if=/usr/local/libexec/hpif:</programlisting> + :lp=<filename class="devicefile">/dev/lpt0</filename>:sh:sd=<filename class="directory">/var/spool/lpd/teak</filename>:mx#0:\ + :if=<filename>/usr/local/libexec/hpif</filename>:</programlisting> </listitem> </itemizedlist> </listitem> @@ -4528,7 +4534,7 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ <para>这个问题是 <quote>相反</quote> 于楼梯效果, 像上面描述的那样, 并且更少见。 - 一些地方, LF 这个 FreeBSD 用来结束一行的字符被作为 + 一些地方, LF 这个 &os; 用来结束一行的字符被作为 CR 这个将打印位置返回到纸的左边的字符对待。 而没有向下走纸一行。</para> @@ -4575,15 +4581,16 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ <itemizedlist> <listitem> <para>如果打印机支持 XON/XOFF 流量控制, - 那就让 FreeBSD 使用它, 通过加入 <literal>ixon</literal> 模式在 + 那就让 &os; 使用它, 通过加入 <literal>ixon</literal> 模式在 <literal>ms#</literal> 变量里。</para> </listitem> <listitem> - <para>如果打印机支持载波流量控制, + <para>如果打印机支持请求/清除硬件握手信号 + (通常时 <literal>RTS/CTS</literal>), 指定 <literal>crtscts</literal> 模式在 <literal>ms#</literal> 变量里。 - 并且要确定连接打印机和计算机的线是支持载波流量控制的。</para> + 并且要确定连接打印机和计算机的线是支持硬件流量控制的。</para> </listitem> </itemizedlist> </listitem> @@ -4609,17 +4616,17 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ <listitem> <para>如果没有反应, 问题就可能出在 - FreeBSD 而不是硬件上了。 增加日志文件 + &os; 而不是硬件上了。 增加日志文件 (<literal>lf</literal>) 变量到 <filename>/etc/printcap</filename> 文件里出现问题的打印机的记录处。 比如, 下面是打印机 <literal>rattan</literal> 的记录, 使用了 <literal>lf</literal> 变量:</para> <programlisting>rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple:\ - :lf=/var/log/rattan.log</programlisting> + :sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\ + :lp=<filename class="devicefile">/dev/lpt0</filename>:\ + :if=<filename>/usr/local/libexec/if-simple</filename>:\ + :lf=<filename>/var/log/rattan.log</filename></programlisting> <para>然后, 再次打印。 检查日志文件 (在我们的例子当中, 是 <filename>/var/log/rattan.log</filename> 这个文件) 来看是否有错误信息出现。 @@ -4628,7 +4635,7 @@ teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ <para>如果您没有指定 <literal>lf</literal> 变量, <application>LPD</application> 会使用 - <filename>/dev/console</filename> 作为默认值。</para> + <filename class="devicefile">/dev/console</filename> 作为默认值。</para> </listitem> </varlistentry> </variablelist> diff --git a/zh_CN.GB2312/books/handbook/security/chapter.sgml b/zh_CN.GB2312/books/handbook/security/chapter.sgml index 46838d7fb8..b2e5af5b71 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.321 + Original Revision: 1.330 $FreeBSD$ --> @@ -1084,13 +1084,14 @@ Enter secret pass phrase: <userinput><secret password></userinput> 几乎每个人都会安装防火墙来处理网络连接, 然而虽然防火墙有非常广泛的用途, 它却不是万能的, 例如它无法处理类似向连接发起者发送一些文本这样的任务。 - 而 <acronym>TCP</acronym> 软件能够完成它以及更多的其他事情。 + 而 <acronym>TCP</acronym> Wrappers + 软件能够完成它以及更多的其他事情。 接下来的几段中将讨论许多 <acronym>TCP</acronym> Wrappers 提供的功能, 并且, 还给出了一些配置实例。</para> <para><acronym>TCP</acronym> Wrappers 软件扩展了 - <command>inetd</command> 为受其控制的服务程序实施控制的能力。 + <application>inetd</application> 为受其控制的服务程序实施控制的能力。 通过使用这种方法, 它能够提供日志支持、 返回消息给联入的连接、 使得服务程序只接受内部连接, 等等。 尽管防火墙也能够完成其中的某些功能, @@ -1103,7 +1104,7 @@ Enter secret pass phrase: <userinput><secret password></userinput> 为系统多提供一层安全防护。</para> <para>由于这些配置是对于 - <command>inetd</command> 的扩展, 因此, + <application>inetd</application> 的扩展, 因此, 读者应首先阅读 <link linkend="network-inetd">配置 inetd</link> 这节。</para> @@ -1117,7 +1118,7 @@ Enter secret pass phrase: <userinput><secret password></userinput> <title>初始配置</title> <para>在 &os; 中使用 <acronym>TCP</acronym> - Wrappers 的唯一要求是确保 <command>inetd</command> + Wrappers 的唯一要求是确保 <application>inetd</application> 在从 <filename>rc.conf</filename> 中启动时包含了 <option>-Ww</option> 选项; 这是默认的设置。 当然, 还需要对 @@ -1134,7 +1135,7 @@ Enter secret pass phrase: <userinput><secret password></userinput> <para>在最简单的配置中, 服务程序的连接策略是根据 <filename>/etc/hosts.allow</filename> 允许或阻止。 - &os; 中的默认配置是允许一切发到由 <command>inetd</command> + &os; 中的默认配置是允许一切发到由 <application>inetd</application> 所启动的服务的连接请求。 在基本配置之后将讨论更复杂的情况。</para> <para>基本配置的形式通常是 @@ -1143,7 +1144,8 @@ Enter secret pass phrase: <userinput><secret password></userinput> <command>inetd</command> 启动的服务程序的名字。 而 <literal>地址</literal> 可以是任何有效的主机名、 一个 <acronym>IP</acronym> 或由方括号 ([ ]) - 括起来的 IPv6 地址。 动作字段可以使 allow 或 deny, + 括起来的 IPv6 地址。 <literal>动作</literal> + 字段可以使 <literal>allow</literal> 或 <literal>deny</literal>, 分别用于允许和禁止相应的访问。 在配置时您需要注意所有的配置都是按照第一个匹配的规则运转的, 这表示配置文件将按照顺序查找匹配规则, 而一旦找到匹配, @@ -1159,7 +1161,7 @@ Enter secret pass phrase: <userinput><secret password></userinput> <programlisting># This line is required for POP3 connections: qpopper : ALL : allow</programlisting> - <para>增加这样之后, 需要重新启动 <command>inetd</command>。 + <para>增加这样之后, 需要重新启动 <application>inetd</application>。 可以通过使用 &man.kill.1; 命令来完成这项工作, 或使用 <filename>/etc/rc.d/inetd</filename> 的 <parameter>restart</parameter> parameter 参数。</para> @@ -1209,7 +1211,7 @@ ALL : ALL \ <para>另一种可能是针对这种情况使用 <option>spawn</option>。 类似 <option>twist</option>, - <option>spawn</option> 也暗含拒绝连接, + <option>spawn</option> 选项也暗含拒绝连接, 并可以用来执行外部命令或服务。 与 <option>twist</option> 不同的是, <option>spawn</option> 不会向连接发起者发送回应。 @@ -1228,7 +1230,7 @@ ALL : .example.com \ <filename>/var/log/connections.log</filename> 文件中。</para> <para>除了前面已经介绍过的转义字符, - 例如 %a 之外, 还有一些其它的转义符。 参考 + 例如 <literal>%a</literal> 之外, 还有一些其它的转义符。 参考 &man.hosts.access.5; 联机手册可以获得完整的列表。</para> </sect3> @@ -2326,7 +2328,7 @@ kadmind5_server_enable="YES"</programlisting> <para>这样做的原因是, <acronym>MIT</acronym> kerberos 会将可执行文件装到 - <filename role="directory">/usr/local</filename> + <filename class="directory">/usr/local</filename> 之下。</para> </sect2> @@ -2691,9 +2693,7 @@ Connection closed by foreign host.</screen> <title>理解 IPsec</title> - <para>这一节将指导您完成架设 IPsec, 并在一个包含了 - FreeBSD 和 <application>µsoft.windows; 2000/XP</application> - 机器的网络中使用它来进行安全的通讯的全过程。 为了配置 + <para>这一节将指导您完成架设 IPsec。为了配置 IPsec, 您应当熟悉如何编译一个定制的内核的一些概念 (参见 <xref linkend="kernelconfig">)。</para> @@ -2704,41 +2704,6 @@ Connection closed by foreign host.</screen> FreeBSD IPsec <quote>网络协议栈</quote> 基于 <ulink url="http://www.kame.net/">KAME</ulink> 的实现, 它支持两种协议族, IPv4 和 IPv6。</para> - - <note> - <para>FreeBSD 包括了采用 <quote>硬件加速的</quote> - IPsec 协议栈, 也称作 <quote>Fast - IPsec</quote>, 它来自 OpenBSD。 - 它能够通过 &man.crypto.4; 子系统来利用加密硬件 (只要可能) - 优化 IPSec 的性能。 - 这个子系统是新的, 暂时还不支持 KAME 版本的 IPsec - 的全部功能。 此外, 为了启用硬件加速的 - IPsec, 必须把下面的选项加入到内核配置中:</para> - - <indexterm> - <primary>内核选项</primary> - <secondary>FAST_IPSEC</secondary> - </indexterm> - - <screen> -options FAST_IPSEC # new IPsec (cannot define w/ IPSEC) - </screen> - - <para>需要注意的是, 目前还不能用 - <quote>Fast IPsec</quote> 子系统完全替代 KAME - 的 IPsec 实现。 请参见联机手册 &man.fast.ipsec.4; - 以了解进一步的详情。</para> - </note> - - <note> - <para>如果希望防火墙能够正确地跟踪到 &man.gif.4; 信道的状态, - 您还需要在内核配置中启用 - <option>IPSEC_FILTERGIF</option>:</para> - - <screen> -options IPSEC_FILTERGIF #filter ipsec packets from a tunnel - </screen> - </note> <indexterm> <primary>IPsec</primary> @@ -2795,14 +2760,9 @@ options IPSEC_FILTERGIF #filter ipsec packets from a tunnel <secondary>IPSEC</secondary> </indexterm> - <indexterm> - <primary>内核选项</primary> - <secondary>IPSEC_ESP</secondary> - </indexterm> - <screen> options IPSEC #IP security -options IPSEC_ESP #IP security (crypto; define w/ IPSEC) +device crypto </screen> <indexterm> @@ -2826,8 +2786,10 @@ options IPSEC_DEBUG #debug for IP security </sect2> <sect2> - <title>情景: 两个网络都接入了 Internet, 希望像一个网络那样工作</title> - + <title>情景: 两个网络,一个家庭的网络和一个公司的网络。 + 都接入了 Internet,并且通过这条 <acronym>VPN</acronym> + 就像在同一个网络一样。</title> + <indexterm> <primary>VPN</primary> <secondary>创建</secondary> @@ -2850,717 +2812,290 @@ options IPSEC_DEBUG #debug for IP security </listitem> <listitem> <para>网络的内部地址可以是公网或私有的 IP 地址, - 这并不是问题。 如果需要, 还可以在网关上运行 NAT。</para> - </listitem> - <listitem> - <para>两个网络上的 IP 地址 - <emphasis>不冲突</emphasis>。 虽然理论上可以通过 - VPN 和 NAT 连用来使这种情况能够正常工作, - 但那毫无疑问将是管理的噩梦。</para> + 这并不是问题。它们并不冲突,比如它们不同时使用 + <hostid role="ipaddr">192.168.1.x</hostid> + 这样的地址。</para> </listitem> </itemizedlist> - - <para>如果您发现您正打算连接两个内网使用同一私有 IP 地址范围的网络 - (例如它们都使用 <hostid - role="ipaddr">192.168.1.x</hostid>), 则其中的一个必须修改网络地址。</para> - - <para>网络的拓扑结构如下:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="security/ipsec-network" align="center"> - </imageobject> - - <textobject> -<literallayout class="monospaced"> -网络 #1 [ 内部主机 ] 私有网络,192.168.1.2-254 - [ Win9x/NT/2K ] - [ UNIX ] - | - | - .---[fxp1]---. 私有 IP, 192.168.1.1 - | FreeBSD | - `---[fxp0]---' 公网 IP, A.B.C.D - | - | - -=-=- Internet -=-=- - | - | - .---[fxp0]---. 公网 IP, W.X.Y.Z - | FreeBSD | - `---[fxp1]---' 私有 IP, 192.168.2.1 - | - | -网络 #2 [ Internal Hosts ] - [ Win9x/NT/2K ] 私有网络, 192.168.2.2-254 - [ UNIX ]</literallayout> - </textobject> - </mediaobject> - - <para>请注意两个公网 IP 地址。 在这篇文章的其余部分我将用这些字母来表示它们。 - 在文章中看到这些字母的时候, 请把它们换成自己的公网 IP 地址。 - 另外, 在内部, 两个网关都是使用的 .1 的 IP地址, - 而两个网络使用了不同的私有 IP 地址 (相应地, <hostid - role="ipaddr">192.168.1.x</hostid> 和 <hostid - role="ipaddr">192.168.2.x</hostid>)。 所有私有网络上的机器都被配置为使用 - <hostid role="ipaddr">.1</hostid> 这台机器作为它们的网关。</para> - - <para>我们希望, 从网络的观点看, - 每一个网络上的机器都应该能够像在直接连接到同一路由器上一样看到对方网络上的机器 - -- 尽管可能比路由器略慢一些, 并且有时会有丢包的现象。</para> - - <para>这意味着 (举例来说), 主机 <hostid - role="ipaddr">192.168.1.20</hostid> 应该能够运行</para> - - <programlisting>ping 192.168.2.34</programlisting> - - <para>并且这能够透明地工作。 &windows; 机器应该能够看到其他网络上的机器, - 浏览文件共享, 等等, 就像在本地网络上一样。</para> - - <para>而且这些事情必须是安全的, 也就是说两个网络之间的通讯必须加密。</para> - - <para>在两个网络之间建立 VPN 可以分为几步。 - 这些步骤包括:</para> - - <orderedlist> - <listitem> - <para>在两个网络之间, 通过 Internet 建立一个 - <quote>虚拟的</quote> 网络连接。 - 使用类似 &man.ping.8; 这样的工作来验证它是否正常工作。</para> - </listitem> - - <listitem> - <para>在两个网络之间应用安全策略以保证它们之间的通讯被透明地加密和解密。 - 可以使用 &man.tcpdump.1; 或类似的工具来验证这一点。</para> - </listitem> - - <listitem> - <para>在 FreeBSD 网关上配置其他软件, - 让 &windows; 机器能够通过 VPN 看到另一个网络中的机器。</para> - </listitem> - </orderedlist> - - <sect3> - <title>步骤 1: 建立并测试 <quote>虚拟的</quote> - 网络连接</title> - - <para>假设您目前已经登录到了网络 #1 的网关机上 - (其公网 IP 地址是 <hostid - role="ipaddr">A.B.C.D</hostid>, 私网 IP 地址是 <hostid - role="ipaddr">192.168.1.1</hostid>), 则您可以执行 <command>ping - 192.168.2.1</command>, 这是公网 IP 为 <hostid role="ipaddr">W.X.Y.Z</hostid> - 的私网地址。 需要做什么实现上述功能呢?</para> - - <orderedlist> - <listitem> - <para>作为网关的机器需要知道如何能够到达 <hostid - role="ipaddr">192.168.2.1</hostid>。 换言之, - 它需要一条通往 <hostid - role="ipaddr">192.168.2.1</hostid> 的路由。</para> - </listitem> - <listitem> - <para>私网 IP 地址, 例如 <hostid - role="ipaddr">192.168.x</hostid> 这样的地址是不应在 Internet 上面大量出现的。 - 因此, 发送到 <hostid role="ipaddr">192.168.2.1</hostid> 的数据包将会封装到另外的包中。 - 这样的包对外展现的应该是来自 <hostid role="ipaddr">A.B.C.D</hostid>, - 并被发到 <hostid - role="ipaddr">W.X.Y.Z</hostid> 去。 这个过程称为 - <firstterm>封装</firstterm>。</para> - </listitem> - <listitem> - <para>一旦包到达了 <hostid - role="ipaddr">W.X.Y.Z</hostid> 就需要对其 - <quote>拆封</quote>, 并传递给 <hostid - role="ipaddr">192.168.2.1</hostid>。</para> - </listitem> - </orderedlist> - - <para>可以把上述过程理解为在两个网络间建立了一个 <quote>隧道</quote>。 - 两个 <quote>隧道口</quote> 是 IP 地址 <hostid role="ipaddr">A.B.C.D</hostid> - 和 <hostid role="ipaddr">W.X.Y.Z</hostid>, 而隧道必须被告知哪些私有地址可以自由地在其中通过。 - 隧道被用来在公共的 Internet 上传递私有的 IP 数据。</para> - - <para>在 FreeBSD 上, 隧道可以通过一般的网络接口, 或 - <devicename>gif</devicename> 来建立。 - 您也许已经猜到了, 每一台网关机的 <devicename>gif</devicename> - 接口需要配置四个 IP 地址; 两个是公网 IP 地址, - 另两个则是私网 IP 地址。</para> - - <para>对于 gif 设备的支持必须在两台网关机上编译进 &os; 内核。 - 可以通过添加下面的设置来达到目的:</para> - - <programlisting>device gif</programlisting> - - <para>到两边的内核配置文件中, 并重新编译、 安装和启动它们。</para> - - <para>配置隧道可以分为两步来完成。 首先隧道必须被告知外部的 - (或公网的) IP 地址, 可以通过 &man.ifconfig.8; 来完成这步。 - 私网 IP 地址则必须使用 &man.ifconfig.8; 来配置。</para> - - <para>在网络 #1 的网关机上可以通过下面的这些命令来配置隧道。</para> - - <screen>&prompt.root; <userinput>ifconfig <replaceable>gif0</replaceable> create</userinput> -&prompt.root; <userinput>ifconfig <replaceable>gif0</replaceable> tunnel <replaceable>A.B.C.D</replaceable> <replaceable>W.X.Y.Z</replaceable></userinput> -&prompt.root; <userinput>ifconfig <replaceable>gif0</replaceable> inet <replaceable>192.168.1.1</replaceable> <replaceable>192.168.2.1</replaceable> netmask <replaceable>0xffffffff</replaceable></userinput> - </screen> - - <para>在另一台网关上也需要执行同样的命令, 但 IP 地址的顺序相反。</para> - - <screen>&prompt.root; <userinput>ifconfig <replaceable>gif0</replaceable> create</userinput> -&prompt.root; <userinput>ifconfig <replaceable>gif0</replaceable> tunnel <replaceable>W.X.Y.Z</replaceable> <replaceable>A.B.C.D</replaceable></userinput> -&prompt.root; <userinput>ifconfig <replaceable>gif0</replaceable> inet <replaceable>192.168.2.1</replaceable> <replaceable>192.168.1.1</replaceable> netmask <replaceable>0xffffffff</replaceable></userinput> - </screen> - - <para>随后执行:</para> - - <programlisting>ifconfig gif0</programlisting> - - <para>可以查看当前的配置情况。 例如, 在网络 #1 - 的网关上您应该能够看到:</para> - - <screen>&prompt.root; <userinput>ifconfig gif0</userinput> -gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280 - tunnel inet A.B.C.D --> W.X.Y.Z - inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff - </screen> - - <para>如您所见, 虽然到已经在物理地址 <hostid role="ipaddr">A.B.C.D</hostid> 和 - <hostid role="ipaddr">W.X.Y.Z</hostid> 之间建立起来, - 而允许通过隧道的地址则是 <hostid - role="ipaddr">192.168.1.1</hostid> 到 <hostid - role="ipaddr">192.168.2.1</hostid> 这个范围。</para> - - <para>这同时会在两边机器的路由表中加入一项, - 可以通过 <command>netstat -rn</command> 来观察。 - 来自网络 #1的网关机的输出如下。</para> - - <screen>&prompt.root; <userinput>netstat -rn</userinput> -Routing tables - -Internet: -Destination Gateway Flags Refs Use Netif Expire -... -192.168.2.1 192.168.1.1 UH 0 0 gif0 -... - </screen> - - <para>正如 <quote>Flags</quote> 的值所显示的那样, 这是一个主机路由, - 这意味着每一个网关都知道如何到达另一端的网关, - 但它们现在还不知道如何到达对方的网络。 - 我们接下来立刻解决这个问题。</para> - - <para>您很可能在两台机器上都在运行防火墙。 - 这需要作一些变动, 以便适应 VPN 的需要。 - 一般来说会希望两个网络相互传递数据包, - 或者通过防火墙来隔离两边的危险。</para> - - <para>如果您将防火墙配置为允许两边的网络传输通过, - 则测试工作会简单不少。 随后您可以随时将限制变得更严格一些。 - 假如您在网关上使用 &man.ipfw.8; 则下面的命令</para> - - <programlisting>ipfw add 1 allow ip from any to any via gif0</programlisting> - - <para>将允许两端点的 VPN 数据通过, 而不影响其他防火墙策略。 - 很显然, 您需要在两个网关上都执行上述命令。</para> - - <para>现在已经可以让两台机器相互 ping 了。 - 在 <hostid role="ipaddr">192.168.1.1</hostid> 您应该能够正常执行</para> - - <programlisting>ping 192.168.2.1</programlisting> - - <para>并得到回应。 对于另一台网关来说也是一样。</para> - - <para>然而, 到目前为止仍然还无法连上另一网络上的内部主机。 - 原因是路由 -- 尽管网关机知道如何到达对方那里, - 但它们都不知道如何到达对方后面的网络。</para> - - <para>要解决这个问题, 就必须在两边都添加一条静态路由。 - 可以在第一台网关上执行:</para> - - <programlisting>route add 192.168.2.0 192.168.2.1 netmask 0xffffff00 - </programlisting> - - <para>这相当于是说 <quote>为了到达 - <hostid role="ipaddr">192.168.2.0</hostid> 子网的机器, - 需要把包发给 <hostid - role="ipaddr">192.168.2.1</hostid></quote>。 - 您需要在另一个网关上也执行类似的命令, 但使用 - <hostid role="ipaddr">192.168.1.x</hostid> 的地址。</para> - - <para>来自一个网络上的 IP 访问现在能够抵达对面的网络了。</para> - - <para>在两个网络之间建立 VPN 的过程已经完成了三分之二, - 它现在已经是 <quote>虚拟的</quote> <quote>网络</quote>, - 然而它还不够专用。 您可以使用 - &man.ping.8; 和 &man.tcpdump.1; 来进行测试, 并记录两边收发的数据包</para> - - <programlisting>tcpdump dst host 192.168.2.1</programlisting> - - <para>接下来登录到本机的另一个会话</para> - - <programlisting>ping 192.168.2.1</programlisting> - - <para>您将在输出中发现</para> - - <programlisting> -16:10:24.018080 192.168.1.1 > 192.168.2.1: icmp: echo request -16:10:24.018109 192.168.1.1 > 192.168.2.1: icmp: echo reply -16:10:25.018814 192.168.1.1 > 192.168.2.1: icmp: echo request -16:10:25.018847 192.168.1.1 > 192.168.2.1: icmp: echo reply -16:10:26.028896 192.168.1.1 > 192.168.2.1: icmp: echo request -16:10:26.029112 192.168.1.1 > 192.168.2.1: icmp: echo reply - </programlisting> - - <para>如您所见, ICMP 消息在收发的过程中都没有加密。 - 如果使用了 <option>-s</option> 参数来运行 - &man.tcpdump.1;, 甚至可以得到包中的更多信息以及其中的数据。</para> - - <para>很明显这是不能接受的。 下一节将讨论如何让两个网络之间的连接更安全, - 这件事是通过对通讯实施加密来完成的。</para> - - <itemizedlist> - <title>小结:</title> - <listitem> - <para>在两边的内核中配置 <quote>device gif</quote>。</para> - </listitem> - <listitem> - <para>编辑网关 #1 上的 <filename>/etc/rc.conf</filename> 并将下面的行添加进去 - (根据需要改 IP )。</para> - <programlisting>gif_interfaces="gif0" -gifconfig_gif0="A.B.C.D W.X.Y.Z" -ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff" -static_routes="vpn" -route_vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00" - </programlisting> - </listitem> - - <listitem> - <para>在两台机器上编辑防火墙脚本 - (<filename>/etc/rc.firewall</filename>, 或类似的名字) - 在其中加入</para> - - <programlisting>ipfw add 1 allow ip from any to any via gif0</programlisting> - </listitem> - <listitem> - <para>在网络 #2 的网关机上也对 - <filename>/etc/rc.conf</filename> 做同样的修改, 注意把 IP 地址倒过来。</para> - </listitem> - </itemizedlist> - </sect3> - - <sect3> - <title>步骤 2: 对连接实施安全加固</title> - - <para>为了加密连接通讯将用到 IPsec。 - IPsec 提供了一种机制, 使得两台主机协商一个加密密钥, - 并使用它加密之间的通讯。</para> - - <para>在配置时有两个地方需要考虑。</para> - - <orderedlist> - <listitem> - <para>必须有能够让两台主机协商所采用的加密方式的机制。 - 一旦双方确认了这机制, 则称他们之间建立了 - <quote>安全关联</quote>。</para> - </listitem> - <listitem> - <para>必须采用某种机制来指定哪些通讯需要加密。 - 很明显地, 通常并不需要所有的发出数据都被加密 - -- 一般只需要加密在 VPN 上传输的那些数据。 - 这类决定哪些数据被加密的规则被称为 - <quote>安全策略</quote>。</para> - </listitem> - </orderedlist> - - <para>安全关联和安全策略都是由内核来维护的, - 并可以通过用户态的程序来修改。 - 在能够这样做之前, 首先需要配置内核来让它支持 - IPsec 和安全载荷封装 - (ESP) 协议。 配置下面的内核选项</para> - - <indexterm> - <primary>内核选项</primary> - <secondary>IPSEC</secondary> - </indexterm> - - <programlisting>options IPSEC -options IPSEC_ESP - </programlisting> - - <para>然后重新编译、 安装最后重新启动新的内核。 - 在继续进行设置之前, 您需要在两台网关上都进行同样的设置。</para> - - <indexterm> - <primary>IKE</primary> - </indexterm> - - <para>在建立安全关联时有两种选择。 - 一种方法是完全手工地在两台主机之间选择加密算法、 密钥等等, - 另一种方法是使用实现了 Internet 密钥交换协议 (IKE) 的服务程序来帮您完成这些任务。</para> - - <para>我们推荐后者。 不说别的, 它配置起来要容易得多。</para> - - <indexterm> - <primary>IPsec</primary> - <secondary>security policies</secondary> - </indexterm> - - <indexterm> - <primary><command>setkey</command></primary> - </indexterm> - - <para>用 &man.setkey.8; 可以编辑和显示安全策略。 - 打个比方, <command>setkey</command> 之于内核的安全策略表, - 就相当于 &man.route.8; 之于内核中的路由表。 - <command>setkey</command> 还可以显示当前的安全关联, - 这一点和 <command>netstat -r</command> - 类似。</para> - - <para>在 FreeBSD 上可供选择的用于管理安全关联的服务程序有很多。 - 这篇文章将介绍其中的一种, <application>racoon</application> —。 - 它可以从 &os; 的 Ports collection 中的 - <filename role="package">security/ipsec-tools</filename> 安装。</para> - - <indexterm> - <primary>racoon</primary> - </indexterm> - - <para><application>racoon</application> 软件, - 必须在两台网关机上都运行。 需要配置 VPN 另一端的 IP, 以及一个密钥 - (这个密钥可以任意选择, 但两个网关上的密钥必须一致)。</para> - - <para>两端的服务程序将相互通讯, 并确认它们各自的身份 (使用刚刚配置的密钥) - 然后服务程序将生成一个新的密钥, 并用它来加密 VPN 上的数据通讯。 - 它们定期地改变密钥, 因此即使供给者破解了一个密钥 (虽然这在理论上并不十分可行) - 他也得不到什么 -- 破解密钥的时候, 已经产生一组新的密钥了。</para> - - <para><application>racoon</application> 的配置文件是存放在 - <filename>${PREFIX}/etc/racoon</filename> 目录中的。 - 在那里应该能够找到一个配置文件, 不需要修改太多的设置。 - <application>raccon</application> 配置的另一部分,也就是需要修改的内容, - 是 <quote>预先配置的共享密钥</quote>。</para> - - <para>默认的 <application>racoon</application> 配置应该可以在 - <filename>${PREFIX}/etc/racoon/psk.txt</filename> 这个文件中找到。 - 需要强调的是, 这个密钥 <emphasis>并非</emphasis> 用于加密 VPN 连接的密钥, - 他们只是密钥管理服务程序用以信任对方的一种凭据。</para> - - <para><filename>psk.txt</filename> 包含了需要打交道的每一个远程站点。 - 在本例中一共有两个站点, 每一个 <filename>psk.txt</filename> 都只有一行 - (因为每个 VPN 接入点都只和一个端点连接)。</para> - - <para>在网关机 #1 上应该是:</para> - - <programlisting>W.X.Y.Z secret</programlisting> - - <para>这包括了远程站点的 <emphasis>公网</emphasis> IP 地址, - 空格, 以及提供秘密的字符串。 - 很明显不应使用 <quote>secret</quote> 作为实际的密钥 -- - 通常的口令选择策略在这里也适用。</para> - - <para>在网关 #2 上对应的配置是</para> - - <programlisting>A.B.C.D secret</programlisting> - - <para>也就是说, 对面端的公网 IP 地址, 以及同样的密钥。 - <filename>psk.txt</filename> 的权限必须是 - <literal>0600</literal> (也就是说, 只有 - <username>root</username> 能够读写) 否则 - <application>racoon</application> 将不能运行。</para> - - <para>两边的机器上都必须执行 <application>racoon</application>。 - 另外, 还需要增加一些防火墙规则来允许 IKE 通讯通过, - 它是通过 UDP 在 ISAKMP (Internet 安全关联密钥管理协议) - 端口上运行的协议。 再次强调, 这个规则应该在规则集尽可能早的位置出现。</para> - - <programlisting>ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp -ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp - </programlisting> - - <para>一旦 <application>racoon</application> 开始运行, - 就可以开始测试让网关进行相互的 ping 了。 - 此时连接还没有进行加密, 但 - racoon 将在两个主机之间建立安全关联 -- - 这可能需要一段时间, 对您来说, - 具体的现象则是在 ping 命令开始响应之前会有短暂的延迟。</para> - - <para>一旦安全关联建立之后, 就可以使用 &man.setkey.8; 来查看它了。 在两边的网关上执行</para> - - <programlisting>setkey -D</programlisting> - - <para>就可以看到安全关联的相关信息了。</para> - - <para>现在只完成了一半的工作。 另一半是设置安全策略。</para> - - <para>想要完成一个有判断力的安全策略, 首先要看我们已经完成的步骤。 - 接下来的讨论针对连接的两端。</para> - - <para>您所发出的每一个 IP 包都包括一个包头, 其内容是和这个包有关的描述性数据。 - 包头包括了包的来源和目的的 IP 地址。 - 正如我们所了解的那样, 私有 IP 地址, - 例如 <hostid role="ipaddr">192.168.x.y</hostid> - 这样的地址范围, 不应该出现在 Internet 的公网上。 - 因此, 他们必须首先封装到别的包中。 - 包的来源或目的如果是私有 IP 地址, - 则必须替换成公网 IP 地址。</para> - - <para>因此如果发出的包类似下面这样:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="security/ipsec-out-pkt" align="center"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> - .-------------------. - | Src: 192.168.1.1 | - | Dst: 192.168.2.1 | - | <其他头信息 > | - +-------------------+ - | <包数据 > | - `-------------------'</literallayout> - </textobject> - </mediaobject> - - <para>随后它将被封装进另一个包中, 像下面这样:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="security/ipsec-encap-pkt" align="center"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> - .--------------------------. - | Src: A.B.C.D | - | Dst: W.X.Y.Z | - | <附加头信息 > | - +--------------------------+ - | .----------------------. | - | | Src: 192.168.1.1 | | - | | Dst: 192.168.2.1 | | - | | <附加头信息 > | | - | +----------------------+ | - | | <包数据 > | | - | `----------------------' | - `--------------------------'</literallayout> - </textobject> - </mediaobject> - - <para>封装过程是在 - <devicename>gif</devicename> 设备上完成的。 如上图所示, - 包现在有了外部的实际 IP 地址, 而原始的包则被封装到里面作为数据。 - 这个包将通过 Internet 传递。</para> - - <para>很明显地, 我们希望 VPN 之间的通讯是加密的。 - 用于言来描述大致是:</para> - - <para><quote>如果包从 <hostid - role="ipaddr">A.B.C.D</hostid> 发出且其目的地是 <hostid - role="ipaddr">W.X.Y.Z</hostid>, 则通过必要的安全关联进行加密。</quote></para> - - <para><quote>如果包来自 <hostid - role="ipaddr">W.X.Y.Z</hostid> 且其目的地是 <hostid - role="ipaddr">A.B.C.D</hostid>, 则通过必要的安全关联进行解密。</quote></para> - - <para>这已经很接近了, 但还不够正确。 如果这么做的话, - 所有来自和发到 <hostid role="ipaddr">W.X.Y.Z</hostid> 的包, - 无论是否属于 VPN 通讯都会被加密。 这可能并不是您所希望的, - 因此正确的安全策略应该是</para> - - <para><quote>如果包从 <hostid - role="ipaddr">A.B.C.D</hostid> 发出, 且封装了其他的包, - 其目的地是 <hostid - role="ipaddr">W.X.Y.Z</hostid>, 则通过必要的安全关联进行加密。</quote></para> - - <para><quote>如果包来自 <hostid - role="ipaddr">W.X.Y.Z</hostid>, 且封装了其他的包, - 其目的地是 <hostid - role="ipaddr">A.B.C.D</hostid>, 则通过必要的安全关联进行解密。</quote></para> - - <para>一个很小, 但却必要的改动。</para> - - <para>安全策略也是通过 &man.setkey.8; 设置的。 - &man.setkey.8; 提供了一种用于配置策略的语言。 - 可以直接在 stdin 上输入策略, 或通过 <option>-f</option> - 选项来指定一个包含配置命令的文件。</para> - - <para>网关 #1 上的配置 (其 - IP 地址是 <hostid role="ipaddr">A.B.C.D</hostid>) 强制将所有到 - <hostid role="ipaddr">W.X.Y.Z</hostid> 的通讯进行加密的配置是:</para> - - <programlisting> -spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; - </programlisting> - - <para>把这些命令放到一个文件 (例如 - <filename>/etc/ipsec.conf</filename>) 然后执行</para> - - <screen>&prompt.root; <userinput>setkey -f /etc/ipsec.conf</userinput></screen> - - <para><option>spdadd</option> 会告诉 &man.setkey.8; 我们希望把规则加入到安全策略数据库中。 - 命令的其它部分指定了什么样的包能够匹配这规则。 - <hostid role="ipaddr">A.B.C.D/32</hostid> 和 <hostid - role="ipaddr">W.X.Y.Z/32</hostid> 是用于指定规则能够匹配的网络或主机的 - IP 地址和掩码。 本例中, 希望应用到两个主机之间的通讯上。 - <option>ipencap</option> 则告诉内核这规则只应被用于封装其他包的那些数据包。 - <option>-P out</option> 表示策略是针对发出的包的, 而 - <option>ipsec</option> 则表示需要对数据包进行加密。</para> - - <para>第二行指定了如何加密。 - <option>esp</option> 是将要使用的协议, - 而 <option>tunnel</option> 则表示包应该进一步封装进一个 - IPsec 包里面。 反复使用 - <hostid role="ipaddr">A.B.C.D</hostid> 和 <hostid - role="ipaddr">W.X.Y.Z</hostid> 用来选择所用的安全关联 - 而最后的 <option>require</option> 则强制所有匹配这规则的包都被加密。</para> - - <para>上面的规则只匹配了发出的包。 接下来需要配置类似的匹配进入包的规则。</para> - - <programlisting>spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;</programlisting> - - <para>请注意本例中 <option>in</option> 代替了 - <option>out</option> 并且 IP 地址的顺序也相反。</para> - - <para>在另一个网关上 (其公网 IP 地址是 - <hostid role="ipaddr">W.X.Y.Z</hostid>) 也需要类似的规则。</para> - - <programlisting>spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; -spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;</programlisting> - - <para>最后是添加允许 ESP 和 - IPENCAP 包进出的防火墙规则。 这些规则需要在两边分别设置。</para> - - <programlisting>ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z -ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D -ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z -ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D - </programlisting> - - <para>由于规则的对称性, 因此可以在两台网关上使用同样的规则。</para> - - <para>发出的包如下图所示:</para> - - <mediaobject> - <imageobject> - <imagedata fileref="security/ipsec-crypt-pkt" align="center"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> - .------------------------------. --------------------------. - | Src: A.B.C.D | | - | Dst: W.X.Y.Z | | - | <other header info> | | Encrypted - +------------------------------+ | packet. - | .--------------------------. | -------------. | contents - | | Src: A.B.C.D | | | | are - | | Dst: W.X.Y.Z | | | | completely - | | <other header info> | | | |- secure - | +--------------------------+ | | Encap'd | from third - | | .----------------------. | | -. | packet | party - | | | Src: 192.168.1.1 | | | | Original |- with real | snooping - | | | Dst: 192.168.2.1 | | | | packet, | IP addr | - | | | <other header info> | | | |- private | | - | | +----------------------+ | | | IP addr | | - | | | <packet data> | | | | | | - | | `----------------------' | | -' | | - | `--------------------------' | -------------' | - `------------------------------' --------------------------' - </literallayout> - </textobject> - </mediaobject> - - <para>当 VPN 数据被远端接到时, 它将首先被解密 - (使用 <application>racoon</application> 协商得到的安全关联)。 - 然后它们将进入 - <devicename>gif</devicename> 接口, 并在那里展开第二层, - 直到只剩下最里层的包, 并将其转发到内网上。</para> - - <para>可以通过与之前同样的 &man.ping.8; 命令来测试安全性。 - 首先登录到 - <hostid role="ipaddr">A.B.C.D</hostid> 网关上并执行:</para> - - <programlisting>tcpdump dst host 192.168.2.1</programlisting> - - <para>在同一主机上登录另一会话, 执行</para> - - <programlisting>ping 192.168.2.1</programlisting> - - <para>此时的输出应该是:</para> - - <programlisting>XXX tcpdump output</programlisting> - - <para>如您看到的, &man.tcpdump.1; 给出的将是 ESP 包。 - 假如您想查看它们的内容可以使用 <option>-s</option> option 选项, - 您将 (显然地) 看到一些乱码, 因为传输过程实施了加密。</para> - - <para>祝贺您。 您已经完成了两个远程站点之间的 VPN 的架设工作。</para> + </sect2> - <itemizedlist> - <title>小结</title> - <listitem> - <para>将两边的内核配置加入:</para> + <sect2> + <sect2info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <affiliation> + <address><email>trhodes@FreeBSD.org</email></address> + </affiliation> + <contrib>作者</contrib> + </author> + </authorgroup> + </sect2info> - <programlisting>options IPSEC -options IPSEC_ESP - </programlisting> - </listitem> - <listitem> - <para>安装 <filename - role="package">security/ipsec-tools</filename>。 编辑两台网关上的 - <filename>${PREFIX}/etc/racoon/psk.txt</filename> - 并添加远程主机的 IP 和共享的密钥。 文件的权限应该是 0600。</para> - </listitem> - <listitem> - <para>将下面的设置加入两台主机的 - <filename>/etc/rc.conf</filename> 中:</para> + <title>在 &os; 上配置 IPsec</title> + + <para>开始需先从 Ports Collection 安装 + <filename role="package">security/ipsec-tools</filename>。 + 这个第三方软件提供了一些能够帮助配置的应用程序。</para> + + <para>下一步是创建两个 &man.gif.4; + 伪设备用来在两个网络间传输数据包的 <quote>隧道</quote>。 + 使用 <username>root</username> 身份运行以下命令, + 并用真实的内部外部网关替换命令中的 + <replaceable>internal</replaceable> 和 + <replaceable>external</replaceable> 项:</para> + + <screen>&prompt.root; <userinput>ifconfig gif0 create</userinput></screen> + <screen>&prompt.root; <userinput>ifconfig gif0 <replaceable>internal1 internal2</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>ifconfig gif0 tunnel <replaceable>external1 external2</replaceable></userinput></screen> + + <para>比如,公司 <acronym>LAN</acronym> 对外的 + <acronym>IP</acronym> 地址是 + <hostid role="ipaddr">172.16.5.4</hostid>, + 内部的 <acronym>IP</acronym> 地址为 + <hostid role="ipaddr">10.246.38.1</hostid>。 + 家庭 <acronym>LAN</acronym> 对外的 + <acronym>IP</acronym> 地址是 + <hostid role="ipaddr">192.168.1.12</hostid>, + 内部的 <acronym>IP</acronym> 地址为 + <hostid role="ipaddr">10.0.0.5</hostid>。</para> + + <para>这看起来可能有些混乱,所以我们通过 + &man.ifconfig.8; 命令输出再回顾一下:</para> + + <programlisting>Gateway 1: + +gif0: flags=8051 mtu 1280 +tunnel inet 172.16.5.4 --> 192.168.1.12 +inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6 +inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00 + +Gateway 2: + +gif0: flags=8051 mtu 1280 +tunnel inet 192.168.1.12 --> 172.16.5.4 +inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00 +inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4</programlisting> + + <para>一旦完成以后,两个私有的 <acronym>IP</acronym> + 地址都应该能像下面 &man.ping.8; 命令输出那样互相访问。</para> + + <programlisting>priv-net# ping 10.0.0.5 +PING 10.0.0.5 (10.0.0.5): 56 data bytes +64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms +64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms +64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms +64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms +--- 10.0.0.5 ping statistics --- +4 packets transmitted, 4 packets received, 0% packet loss +round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms + +corp-net# ping 10.246.38.1 +PING 10.246.38.1 (10.246.38.1): 56 data bytes +64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms +64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms +64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms +64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms +64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms +--- 10.246.38.1 ping statistics --- +5 packets transmitted, 5 packets received, 0% packet loss +round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms</programlisting> + + <para>正如预期的那样,两边都有从私有地址发送和接受 + <acronym>ICMP</acronym> 数据包的能力。下面, + 两个网关都必须配置路由规则以正确传输两边的网络流量。 + 下面的命令可以实现这个:</para> + + <screen>&prompt.root; <userinput>corp-net# route add <replaceable>10.0.0.0 10.0.0.5 255.255.255.0</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>corp-net# route add net <replaceable>10.0.0.0: gateway 10.0.0.5</replaceable></userinput></screen> + + <screen>&prompt.root; <userinput>priv-net# route add <replaceable>10.246.38.0 10.246.38.1 255.255.255.0</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>priv-net# route add host <replaceable>10.246.38.0: gateway 10.246.38.1</replaceable></userinput></screen> + + <para>此刻,不论从网关还是网关后的机器都能访问内部的网络。 + 这很容易通过以下的例子确认:</para> + + <programlisting>corp-net# ping 10.0.0.8 +PING 10.0.0.8 (10.0.0.8): 56 data bytes +64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms +64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms +64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms +64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms +64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms +--- 10.0.0.8 ping statistics --- +5 packets transmitted, 5 packets received, 0% packet loss +round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms + +priv-net# ping 10.246.38.107 +PING 10.246.38.1 (10.246.38.107): 56 data bytes +64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms +64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms +64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms +64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms +64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms +--- 10.246.38.107 ping statistics --- +5 packets transmitted, 5 packets received, 0% packet loss +round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms</programlisting> + + <para>配置 <quote>隧道</quote> 是比较容易的部分。 + 配置一条安全链接则是个更加深入的过程。 + 下面的配置是使用 pre-shared (<acronym>PSK</acronym>) + <acronym>RSA</acronym> 密钥。除了 + <acronym>IP</acronym> 地址外,两边的 + <filename>/usr/local/etc/racoon/racoon.conf</filename> + 也几乎相同。</para> + + <programlisting>path pre_shared_key "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file +log debug; #log verbosity setting: set to 'notify' when testing and debugging is complete + +padding # options are not to be changed +{ + maximum_length 20; + randomize off; + strict_check off; + exclusive_tail off; +} + +timer # timing options. change as needed +{ + counter 5; + interval 20 sec; + persend 1; +# natt_keepalive 15 sec; + phase1 30 sec; + phase2 15 sec; +} + +listen # address [port] that racoon will listening on +{ + isakmp 172.16.5.4 [500]; + isakmp_natt 172.16.5.4 [4500]; +} + +remote 192.168.1.12 [500] +{ + exchange_mode main,aggressive; + doi ipsec_doi; + situation identity_only; + my_identifier address 172.16.5.4; + peers_identifier address 192.168.1.12; + lifetime time 8 hour; + passive off; + proposal_check obey; +# nat_traversal off; + generate_policy off; + + proposal { + encryption_algorithm blowfish; + hash_algorithm md5; + authentication_method pre_shared_key; + lifetime time 30 sec; + dh_group 1; + } +} + +sainfo (address 10.246.38.0/24 any address 10.0.0.0/24 any) # address $network/$netmask $type address $network/$netmask $type ( $type being any or esp) +{ # $network must be the two internal networks you are joining. + pfs_group 1; + lifetime time 36000 sec; + encryption_algorithm blowfish,3des,des; + authentication_algorithm hmac_md5,hmac_sha1; + compression_algorithm deflate; +}</programlisting> + + <para>解释所有可用的选项, + 连同这些例子里列出的都超越了这份文档的范围。 + 在 <application>racoon</application> + 配置手册页中有着丰富的相关信息。</para> + + <para><acronym>SPD</acronym> 策略也需要配置一下, + 这样 &os; 和 <application>racoon</application> + 就能够加密和解密主机间的网络流量了。</para> + + <para>这可以通过在公司的网关上运行一个类似下面简单的 + shell 脚本实现。保存到 + <filename>/usr/local/etc/racoon/setkey.conf</filename>, + 这个文件会被在系统初始化的时候用到。</para> + +<programlisting>flush; +spdflush; +# To the home network +spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use; +spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;</programlisting> + + <para>一旦完成后,便使用下面的命令在两边的网关上都启动 + <application>racoon</application>:</para> + + <screen>&prompt.root; <userinput>/usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log</userinput></screen> + + <para>输出将会类似这样的:</para> + + <programlisting>corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf +Foreground mode. +2006-01-30 01:35:47: INFO: begin Identity Protection mode. +2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon +2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon +2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a +2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0] +2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2) +2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426) +2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0] +2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b) +2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)</programlisting> + + <para>确认一下 <quote>隧道</quote> 能正常工作, + 切换到另外一个控制台用如下的 &man.tcpdump.1; + 命令查看网络流量。根据需要替换掉下面的 + <literal>em0</literal> 网卡界面。</para> + + <screen>&prompt.root; <userinput>tcpdump -i em0 host <replaceable>172.16.5.4 and dst 192.168.1.12</replaceable></userinput></screen> + + <para>控制台上能看到如下类似的输出。如果不是这样的话, + 可能就有些问题了,调试的话需要用到返回的数据。</para> + + <programlisting>01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa) +01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb) +01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)</programlisting> + + <para>此刻,两个网络就好像是同一个网络的一部分一样。 + 而且这两个网络很可能也应该有防火墙的保护。 + 要使得这两个网络能互相访问,就需要添加一些进出包的规则。 + 就 &man.ipfw.8; 来说,加入下面的几行进配置文件:</para> + + <programlisting>ipfw add 00201 allow log esp from any to any +ipfw add 00202 allow log ah from any to any +ipfw add 00203 allow log ipencap from any to any +ipfw add 00204 allow log udp from any 500 to any</programlisting> - <programlisting>ipsec_enable="YES" -ipsec_file="/etc/ipsec.conf" - </programlisting> - </listitem> - <listitem> - <para>在两个网关上都建立 <filename>/etc/ipsec.conf</filename> - 并添加必要的 spdadd。 在网关 #1 上是:</para> - - <programlisting> -spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec - esp/tunnel/A.B.C.D-W.X.Y.Z/require; -spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec - esp/tunnel/W.X.Y.Z-A.B.C.D/require; -</programlisting> - - <para>在网关 #2 上则是:</para> - -<programlisting> -spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec - esp/tunnel/W.X.Y.Z-A.B.C.D/require; -spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec - esp/tunnel/A.B.C.D-W.X.Y.Z/require; -</programlisting> - </listitem> - <listitem> - <para>添加防火墙规则以允许 IKE, ESP, 和 IPENCAP - 通讯能够到达各自的主机:</para> - - <programlisting> -ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp -ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp -ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z -ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D -ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z -ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D - </programlisting> - </listitem> - </itemizedlist> + <note> + <para>规则号可能需要根据现有机器上的配置做相应的修改。</para> + </note> - <para>前面的两步应该足以让 VPN 运转起来了。 - 两个网络上的机器都应该能通过 IP 来访问对方, - 而所有的通讯都被自动地进行加密。</para> - </sect3> - </sect2> + <para>对于 &man.pf.4; 或者 &man.ipf.8; 的用户, + 下面的几行规则应该可行:</para> + + <programlisting>pass in quick proto esp from any to any +pass in quick proto ah from any to any +pass in quick proto ipencap from any to any +pass in quick proto udp from any port = 500 to any port = 500 +pass in quick on gif0 from any to any +pass out quick proto esp from any to any +pass out quick proto ah from any to any +pass out quick proto ipencap from any to any +pass out quick proto udp from any port = 500 to any port = 500 +pass out quick on gif0 from any to any</programlisting> + + <para>最后,要允许机器初始化的时候开始 + <acronym>VPN</acronym> 支持,在 + <filename>/etc/rc.conf</filename> + 中加入以下的几行:</para> + + <programlisting>ipsec_enable="YES" +ipsec_program="/usr/local/sbin/setkey" +ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot +racoon_enable="yes"</programlisting> + </sect2> </sect1> <sect1 id="openssh"> @@ -4130,7 +3665,7 @@ drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html</programlisting> 并警告管理员存在已知的安全问题的方法也就应运而生。 名为 <application>Portaudit</application> 的 &os; 附加工具能够帮助您达成这一目的。</para> - <para><filename role="port">ports-mgmt/portaudit</filename> port + <para><filename role="package">ports-mgmt/portaudit</filename> port 会下载一个数据库, 这一数据库是由 &os; Security Team 和 ports 开发人员维护的, 其中包含了已知的安全问题。</para> diff --git a/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml b/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml index 50b6adff2e..ae4e24ea00 100644 --- a/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.128 + Original Revision: 1.130 $FreeBSD$ --> @@ -1595,7 +1595,7 @@ AT&B2&W</programlisting> 上下载一个文件。 如果您必须 FTP 一些东西, 而 PPP 断了, 使用终端会话来 FTP 它们。 然后使用 zmodem 来把它们传输到您的机器上。</para> - <sect2> + <sect2 id="hayes-unsupported"> <title>我的Stock Hayes Modem不被支持,我该怎么办?</title> <para>事实上, 联机手册对于这个的描述已经过时了。 一个通用的 @@ -1611,19 +1611,6 @@ AT&B2&W</programlisting> <para>另外,拨号的延迟是 60 秒。 您的 modem 可能使用另外的时间或提示认为有其他的通讯问题。 试试 <command>ATS7=45&W</command>。</para> - - <note> - <para>注意: 实际上 <command>tip</command> 不支持所有的 - Hayes modems。 解决方法是编辑 - <filename>/usr/src/usr.bin/tip/tip</filename> - 目录中的 <filename>tipconf.h</filename> 文件。很明显, - 您需要它的源代码才能这样做。</para> - - <para>把行<literal>#define HAYES 0</literal> 改为 - <literal>#define HAYES 1</literal>。 然后 - <command>make</command> 并 - <command>make install</command>就可以了。</para> - </note> </sect2> <sect2 id="direct-at"> @@ -1654,7 +1641,7 @@ AT&B2&W</programlisting> 之后, 按 <command>~.</command> 即可退出。</para> </sect2> - <sect2> + <sect2 id="gt-failure"> <title>现在pn <literal>@</literal>标记不能工作?</title> <para>在电话号码中的 <literal>@</literal> 标记告诉计算机在 @@ -1665,7 +1652,7 @@ AT&B2&W</programlisting> <programlisting>pn=\@</programlisting> </sect2> - <sect2> + <sect2 id="dial-command-line"> <title>我如何在命令行拨电话号码?</title> <para>在您的 <filename>/etc/remote</filename> 文件中通常放着一个叫做 @@ -1690,7 +1677,7 @@ tip57600|Dial any phone number at 57600 bps:\ <screen>&prompt.root; <userinput>cu 5551234 -s 115200</userinput></screen> </sect2> - <sect2> + <sect2 id="set-bps"> <title>这么做时是否每次都需要重新输入 bps 速率?</title> <para>添加一项 <literal>tip1200</literal> 或 @@ -1700,7 +1687,7 @@ tip57600|Dial any phone number at 57600 bps:\ 虽然您并不需要使用 1200 bps。</para> </sect2> - <sect2> + <sect2 id="terminal-server"> <title>我通过一个终端服务器访问了很多主机。</title> <para>除非每次都要等到您连接到主机然后键入 @@ -1721,7 +1708,7 @@ deep13:Gizmonics Institute terminal server:\ 连接到终端服务器。</para> </sect2> - <sect2> + <sect2 id="tip-multiline"> <title><command>tip</command>能为每个站点试用多个线路吗?</title> <para>经常有一个问题, 一个大学有几个modem线路, 几千个学生设法使用它们。</para> @@ -1746,7 +1733,7 @@ big-university 5551114</programlisting> 如果想继续测试, 隔一段时间再运行 <command>tip</command>。</para> </sect2> - <sect2> + <sect2 id="multi-controlp"> <title>为什么我必须键入 <keycombo action="simul"> <keycap>Ctrl</keycap> @@ -1788,7 +1775,7 @@ big-university 5551114</programlisting> <programlisting>force=<replaceable>single-char</replaceable></programlisting> </sect2> - <sect2> + <sect2 id="uppercase"> <title>突然我键入的每一样东西都变成了大写??</title> <para>您一定是键入了 @@ -1822,7 +1809,7 @@ raisechar=^^</programlisting> </sect2> - <sect2> + <sect2 id="tip-filetransfer"> <title>如何用 <command>tip</command> 做文件传输?</title> <para>如果您正在与另一台 &unix; 系统对话, 您可以用 @@ -1845,7 +1832,7 @@ raisechar=^^</programlisting> <para>由于没有错误校验, 所以您需要使用其他协议, 如 zmodem。</para> </sect2> - <sect2> + <sect2 id="zmodem-tip"> <title>我如何用<command>tip</command>运行zmodem?</title> <para>要接收这些文件,可以在远程终端启动发送程序。然后,键入 diff --git a/zh_CN.GB2312/books/handbook/virtualization/chapter.sgml b/zh_CN.GB2312/books/handbook/virtualization/chapter.sgml index e23a6f7a3e..cb9060aa19 100644 --- a/zh_CN.GB2312/books/handbook/virtualization/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/virtualization/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.16 + Original Revision: 1.17 $FreeBSD$ --> @@ -812,6 +812,7 @@ xenbr1 8000.feffffffffff no vif0.1 <para>在你修改完设定之后,就可以从新安装的 FreeBSD 虚拟机器启动了。</para> + </sect3> <sect3 id="virtualization-guest-vmware-configure"> <title>配置运行于 &macos; X/VMWare 上的 FreeBSD</title> |