diff options
author | Xin LI <delphij@FreeBSD.org> | 2010-02-12 23:30:09 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2010-02-12 23:30:09 +0000 |
commit | b99cff9689ba4596ab46054b9475e7a500715bfa (patch) | |
tree | 7b1011802062bbf2b221dfac8aa59a85fa6f942e /zh_CN.GB2312/books | |
parent | eec9bd9b1c2ecfca090a9e7856a42dca4ac54522 (diff) |
Notes
Diffstat (limited to 'zh_CN.GB2312/books')
27 files changed, 1849 insertions, 1100 deletions
diff --git a/zh_CN.GB2312/books/arch-handbook/boot/chapter.sgml b/zh_CN.GB2312/books/arch-handbook/boot/chapter.sgml index 2ed26afce6..45cd857e36 100644 --- a/zh_CN.GB2312/books/arch-handbook/boot/chapter.sgml +++ b/zh_CN.GB2312/books/arch-handbook/boot/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project -Original Revision: 1.27 +Original Revision: 1.28 Copyright (c) 2002 Sergey Lyubka <devnull@uptsoft.com> All rights reserved @@ -170,14 +170,14 @@ Timecounter "i8254" frequency 1193182 Hz</screen></para></entry> <sect1 id="boot-boot0"> <title><literal>boot0</literal>阶段</title> - <indexterm><primary>MBR(主引导记录)</primary></indexterm> + <indexterm><primary>MBR (主引导记录)</primary></indexterm> <para>让我们看一下文件<filename>/boot/boot0</filename>。 这是一个仅512字节的小文件。如果在FreeBSD安装过程中选择 <quote>bootmanager</quote>,这个文件中的内容将被写入硬盘MBR</para> - <para>如前所述,<literal>INT 0x19</literal>指令装载MBR, - 也就是<filename>boot0</filename>的内容,至内存地址0x7c00。 - 再看文件<filename>sys/boot/i386/boot0/boot0.s</filename>, + <para>如前所述, <literal>INT 0x19</literal> 指令装载 MBR, + 也就是 <filename>boot0</filename> 的内容至内存地址 0x7c00。 + 再看文件 <filename>sys/boot/i386/boot0/boot0.S</filename>, 可以猜想这里面发生了什么 - 这是引导管理器, 一段由 Robert Nordier书写的令人起敬的程序片段。</para> diff --git a/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml b/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml index ab189cdf54..c9d1279f06 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.425 + Original revision: 1.426 $FreeBSD$ --> @@ -1892,6 +1892,26 @@ freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPS</screen> </sect2> <sect2> + <title>同时使用有线和无线连接</title> + + <para>一般而言, 有线网络的速度更快而且更可靠, + 而无线网络则提供更好的灵活及机动性, 使用笔记本的用户, + 往往会希望结合两者的优点, 并能够在两种连接之间无缝切换。</para> + + <para>在 &os; 上可以将多个网络接口合并到一起, + 并以 <quote>故障转移</quote> 的方式自动切换, + 也就是说, 这一组网络接口有一定的优先顺序, + 而操作系统在链路状态发生变化时则自动进行切换, + 例如当同时存在有线和无线连接的时候优先使用有线网络, + 而当有线网络断开时, 则自动切换到无线网络。</para> + + <para>我们将在稍后的 <xref linkend="network-aggregation"> + 中介绍链路聚合和故障转移, 并在 + <xref linkend="networking-lagg-wired-and-wireless"> + 中对这种配置方式进行示范。</para> + </sect2> + + <sect2> <title>故障排除</title> <para>如果您在使用无线网络时遇到了麻烦, @@ -3093,6 +3113,80 @@ lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 150 <replaceable>fxp0</replaceable> 的连接中断, 则 <replaceable>fxp1</replaceable> 会自动成为激活连接。 如果主端口的连接恢复, 则它又会成为激活连接。</para> </example> + <example id="networking-lagg-wired-and-wireless"> + <title>有线网络和无线网络接口间的自动切换</title> + + <para>对于使用笔记本的用户来说, 通常会希望使用无线网络接口作为备用接口, + 以便在有线网络不可用时继续保持网络连接。 通过使用 &man.lagg.4;, 我们可以只使用一个 + IP 地址的情况下, 优先使用性能和安全性都更好的有线网络, + 同时保持通过无线网络连接来传输数据的能力。</para> + + <para>要实现这样的目的, 就需要将用于连接无线网络的物理接口的 + <acronym>MAC</acronym> 地址修改为与所配置的 &man.lagg.4; 一致, + 后者是从主网络接口, 也就是有线网络接口, 继承而来。</para> + + <para>在这个配置中, 我们将优先使用有线网络接口 + <replaceable>bge0</replaceable> 作为主网络接口, + 而将无线网络接口 + <replaceable>wlan0</replaceable> 作为备用网络接口。 这里的 + <replaceable>wlan0</replaceable> 使用的物理设备是 + <replaceable>iwn0</replaceable>, + 我们需要将它的 <acronym>MAC</acronym> 地址修改为与有线网络接口一致。 + 为了达到这个目的首先要得到有线网络接口上的 + <acronym>MAC</acronym> 地址:</para> + + <screen>&prompt.root; <userinput>ifconfig <replaceable>bge0</replaceable></userinput> +bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 + options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4> + ether 00:21:70:da:ae:37 + inet6 fe80::221:70ff:feda:ae37%bge0 prefixlen 64 scopeid 0x2 + nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> + media: Ethernet autoselect (1000baseT <full-duplex>) + status: active</screen> + + <para>您可能需要将 <replaceable>bge0</replaceable> 改为您系统上实际使用的接口, + 并从输出结果中的 <literal>ether</literal> + 这行找出有线网络的 <acronym>MAC</acronym> 地址。 接着是修改物理的无线网络接口, + <replaceable>iwn0</replaceable>:</para> + + <screen>&prompt.root; <userinput>ifconfig <replaceable>iwn0</replaceable> ether <replaceable>00:21:70:da:ae:37</replaceable></userinput></screen> + + <para>启用无线网络接口, 但不在其上配置 IP + 地址:</para> + + <screen>&prompt.root; <userinput>ifconfig create <replaceable>wlan0</replaceable> wlandev <replaceable>iwn0</replaceable> ssid <replaceable>my_router</replaceable> up</userinput></screen> + + <para>创建 &man.lagg.4; 接口, 其中 <replaceable>bge0</replaceable> + 作为主网络接口, 而以 <replaceable>wlan0</replaceable> 作为备选接口:</para> + + <screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> create</userinput> +&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable> up laggproto failover laggport <replaceable>bge0</replaceable> laggport <replaceable>wlan0</replaceable></userinput></screen> + + <para>新创建的接口的状态如下, 您系统上的 <acronym>MAC</acronym> + 地址和设备名等可能会有所不同:</para> + + <screen>&prompt.root; <userinput>ifconfig <replaceable>lagg0</replaceable></userinput> +lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 + options=8<VLAN_MTU> + ether 00:21:70:da:ae:37 + media: Ethernet autoselect + status: active + laggproto failover + laggport: wlan0 flags=0<> + laggport: bge0 flags=5<MASTER,ACTIVE></screen> + + <para>通过设置下列的 + <filename>/etc/rc.conf</filename> 配置, + 可以避免每次启动系统时都手工重复上面的设置操作:</para> + + <programlisting>ifconfig_bge0="up" +ifconfig_iwn0="ether 00:21:70:da:ae:37" +wlans_iwn0="wlan0" +ifconfig_wlan0="WPA" +cloned_interfaces="lagg0" +ifconfig_lagg0="laggproto failover laggport bge0 laggport wlan0 DHCP" +</programlisting> + </example> </sect2> </sect1> diff --git a/zh_CN.GB2312/books/handbook/audit/chapter.sgml b/zh_CN.GB2312/books/handbook/audit/chapter.sgml index bf5002cc26..4786685b88 100644 --- a/zh_CN.GB2312/books/handbook/audit/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/audit/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.33 + Original Revision: 1.34 $FreeBSD$ --> @@ -39,13 +39,13 @@ requirements. --> <see>MAC</see> </indexterm> - <para>&os; 6.2 和更高版本中包含了对于细粒度安全事件审计的支持。 + <para>&os; 中包含了对于细粒度安全事件审计的支持。 事件审计能够支持可靠的、 细粒度且可配置的, 对于各类与安全有关的系统事件, - 包括登录、 配置变更, 以及文件和网络访问等的日志记录。 - 这些日志记录对于在正在运行的系统上实施监控、 入侵检测和事后分析都十分重要。 - &os; 实现了 Sun 所发布的 - <acronym>BSM</acronym> API 和文件格式, 并且与 &sun; 的 &solaris; - 和 &apple; 的 &macos; X 审计实现兼容。</para> + 包括登录、 配置变更, 以及文件和网络访问等的日志记录。 + 这些日志记录对于在正在运行的系统上实施监控、 + 入侵检测和事后分析都十分重要。 &os; 实现了 Sun 所发布的 + <acronym>BSM</acronym> API 和文件格式, + 并且与 &sun; 的 &solaris; 和 &apple; 的 &macos; X 审计实现兼容。</para> <para>这一章的重点是安装和配置事件审计。 它介绍了事件策略, 并提供了一个审计的配置例子。</para> @@ -84,13 +84,11 @@ requirements. --> </itemizedlist> <warning> - <para>在 &os; 6.<replaceable>X</replaceable> 上的审计机制是试验性的, - 在生产环境中部署之前, 应仔细评估部署试验性软件可能带来的风险。 已知的限制是, - 并不是所有与安全有关的系统事件都是可审计的, 某些登录机制, 例如基于 X11 - 显示管理器, 以及第三方服务的登录机制, 都不会在用户的登录会话中正确配置审计。</para> - </warning> + <para>审计机制中存在一些已知的限制, + 例如并不是所有与安全有关的系统事件都可以审计, + 另外某些登录机制, 例如基于 X11 显示管理器, + 以及第三方服务的登录机制, 都不会在用户的登录会话中正确配置审计。</para> - <warning> <para>安全审计机制能够对系统活动生成非常详细的记录信息: 在繁忙的系统中, 记帐数据如果配置不当会非常的大, 并在一周内迅速超过几个 GB 的尺寸。 管理员应考虑审计配置中的导致磁盘空间需求的这些问题。 例如, @@ -168,10 +166,9 @@ requirements. --> 您应能看到一些名字以 <emphasis>audit</emphasis> 开头的文件, 例如 <filename>audit_event</filename>。</para> - <para>用户空间对事件审计的支持已经作为 &os; 基本系统的一部分被安装。 - 在 &os; 7.0 和以后的版本中,内核对于事件审计的支持已被默认编译进内核。 - 对于 &os; 6.<replaceable>X</replaceable> - 必须加入明确地把以下这行加入内核配置文件并编译。</para> + <para>对于审计功能的用户态支持目前是作为 &os; 基本系统的一部分来安装的。 + 默认内核中也包含了对于事件审计的内核支持, 但如果您使用的是定制内核, + 就必须在内核配置文件中明确指定希望添加这一支持:</para> <programlisting>options AUDIT</programlisting> diff --git a/zh_CN.GB2312/books/handbook/bibliography/chapter.sgml b/zh_CN.GB2312/books/handbook/bibliography/chapter.sgml index 3efec9995d..4e689ac5c2 100644 --- a/zh_CN.GB2312/books/handbook/bibliography/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/bibliography/chapter.sgml @@ -1,7 +1,7 @@ <!-- The FreeBSD Chinese Documentation Project - Original Revision: 1.86 + Original Revision: 1.87 $FreeBSD$ --> @@ -203,6 +203,12 @@ ISBN: 0072224096 </para> </listitem> + <listitem> + <para><ulink url="http://www.bsdmag.org">BSD Magazine</ulink>, + 出版商: Software Press Sp. z o.o. SK. + ISSN 1898-9144</para> + </listitem> + </itemizedlist> </sect1> diff --git a/zh_CN.GB2312/books/handbook/book.sgml b/zh_CN.GB2312/books/handbook/book.sgml index 3af207f334..7da9af3360 100644 --- a/zh_CN.GB2312/books/handbook/book.sgml +++ b/zh_CN.GB2312/books/handbook/book.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Documentation Project - Original Revision: 1.175 + Original Revision: 1.176 $FreeBSD$ --> @@ -80,6 +80,7 @@ <year>2007</year> <year>2008</year> <year>2009</year> + <year>2010</year> <holder>The FreeBSD Documentation Project</holder> </copyright> @@ -94,6 +95,7 @@ <year>2007</year> <year>2008</year> <year>2009</year> + <year>2010</year> <holder>&cnproj.freebsd.org;</holder> </copyright> diff --git a/zh_CN.GB2312/books/handbook/config/chapter.sgml b/zh_CN.GB2312/books/handbook/config/chapter.sgml index 0d6c81080d..f00098a179 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.238 + Original Revision: 1.239 $FreeBSD$ --> @@ -2405,12 +2405,12 @@ kern.maxvnodes: 100000</screen> 提供了一个解释器 (<acronym>ACPI-CA</acronym>), 它在 Linux 和 NetBSD 也可以使用。 <acronym>ACPI-CA</acronym> 源代码可以在 - <filename role="directory">src/sys/contrib/dev/acpica</filename> + <filename class="directory">src/sys/contrib/dev/acpica</filename> 找到。 用于在 &os; 中允许 <acronym>ACPI-CA</acronym> 正确运转的代码则在 <filename>src/sys/dev/acpica/Osd</filename>。 最后, 用于实现 <acronym>ACPI</acronym> 设备的驱动可以在 - <filename role="directory">src/sys/dev/acpica</filename> 找到。</para> + <filename class="directory">src/sys/dev/acpica</filename> 找到。</para> </sect2> <sect2 id="ACPI-comprob"> diff --git a/zh_CN.GB2312/books/handbook/cutting-edge/chapter.sgml b/zh_CN.GB2312/books/handbook/cutting-edge/chapter.sgml index 2680a8307f..90532b12ca 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.244 + Original Revision: 1.246 $FreeBSD$ --> @@ -177,8 +177,10 @@ <sect2 id="freebsdupdate-config-file"> <title>配置文件</title> - <para>有些用户可能希望调整配置文件来更好的控制升级过程。 - 可用参数的文档非常齐全, + <para>有些用户可能希望通过调整配置文件 + <filename>/etc/freebsd-update.conf</filename> + 中的默认配置来更好地控制升级的过程。 + 可用的参数在文档中介绍的很详细, 但下面的这些可能需要进一步的解释:</para> <programlisting># Components of the base system which should be kept updated. @@ -612,9 +614,11 @@ Fetching 133 new ports or files... done.</screen> 发现并校验了几个用于当前 ports 的补丁。这还表明以前运行过, 如果是第一次运行的话,那么仅仅只会下载 Ports Collection。</para> - <para>在 &man.portsnap.8; 成功完成一次 - <command>fetch</command> 操作后,而且本地系统上的 Ports Collection - 和随之而来的补丁通过校验以后。键入以下命令安装更新文件:</para> + <para>在 &man.portsnap.8; 成功地完成一次 + <command>fetch</command> 操作之后, + 会将校验过的 Ports 套件和后续的补丁保存在本地。 + 首次执行 <command>portsnap</command> 之后, + 需要用 <literal>extract</literal> 来安装这份快照中的文件:</para> <screen>&prompt.root; <userinput>portsnap extract</userinput> /usr/ports/.cvsignore @@ -630,10 +634,17 @@ Fetching 133 new ports or files... done.</screen> /usr/ports/Mk/bsd.cmake.mk <replaceable>...</replaceable></screen> + <para>以后运行 <command>portsnap fetch</command> 之后, 则只需使用 + <literal>update</literal> 安装更新即可:</para> + + <screen>&prompt.root; <userinput>portsnap update</userinput></screen> + <para>至此更新就完成了,然后便可以使用更新后的 Ports Collection 来安装或升级应用程序。</para> - <para>可以使用如下的命令让这个过程连续的运行:</para> + <para><literal>fetch</literal> 和 <literal>extract</literal> 或 + <literal>update</literal> 可以作为连续的动作执行, + 如下例所示:</para> <screen>&prompt.root; <userinput>portsnap fetch update</userinput></screen> </sect1> diff --git a/zh_CN.GB2312/books/handbook/disks/chapter.sgml b/zh_CN.GB2312/books/handbook/disks/chapter.sgml index 663d2feaac..a9f2a2ce06 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.291 + Original Revision: 1.293 $FreeBSD$ --> @@ -147,7 +147,8 @@ <secondary>添加</secondary> </indexterm> - <para>假设我们要给一台只有一个磁盘的机器增加一个新的 SCSI 磁盘。首先 + <para>下面这节将会介绍如何在一台只有一块磁盘的机器上新增一块 + <acronym>SCSI</acronym> 磁盘。 首先 需要关掉计算机,然后按操作规程来安装驱动器,控制器和驱动程序。由于 各厂家生产的产品各不相同,具体的安装细节不在此文档介绍之内。</para> @@ -1409,6 +1410,35 @@ cd0: Attempt to query device size failed: NOT READY, Medium not present - tray c 可以使用 <option>-speed=</option> 参数。更多的信息,请看 &man.growisofs.1; 联机手册。</para> + + <note> + <para>如果需要在刻录的编录中添加超过 4.38GB 的单个文件, + 就必须使用 &man.mkisofs.8; 或其他相关工具 + (例如 &man.growisofs.1;) 的 <option>-udf -iso-level + 3</option> 参数来创建 UDF/ISO-9660 混合文件系统。 + 只有在创建 ISO 映像文件或直接在盘上写数据时才需要这样做。 + 以这种方式创建的光盘必须通过 &man.mount.udf.8; 工具以 UDF + 文件系统挂载, 因此只有操作系统支持 UDF 时才可以这样做, + 否则盘上的文件数据可能会无法正确读出。</para> + + <para>要创建这样的 ISO 文件:</para> + + <screen>&prompt.user; <userinput>mkisofs -R -J -udf -iso-level 3 -o <replaceable>imagefile.iso</replaceable> <replaceable>/path/to/data</replaceable></userinput></screen> + + <para>直接将文件刻录到光盘上:</para> + + <screen>&prompt.root; <userinput>growisofs -dvd-compat -udf -iso-level 3 -Z <replaceable>/dev/cd0</replaceable> -J -R <replaceable>/path/to/data</replaceable></userinput></screen> + + <para>假如只是使用包含巨型文件的 ISO 映像文件时, 就不需要在运行 + &man.growisofs.1; 来将映像文件刻录成光盘时指定任何额外的选项了。</para> + + <para>另外, 在映像文件中增加或直接刻录巨型文件时, 还需要注意使用最新的 + <filename role="package">sysutils/cdrtools</filename> (包含了 + &man.mkisofs.8;), 因为旧版并不提供巨型文件支持。 如果您遇到问题, + 也可以尝试一下开发版本的软件包, 例如 <filename + role="package">sysutils/cdrtools-devel</filename> 并参阅 + &man.mkisofs.8; 联机手册。</para> + </note> </sect2> <indexterm> diff --git a/zh_CN.GB2312/books/handbook/eresources/chapter.sgml b/zh_CN.GB2312/books/handbook/eresources/chapter.sgml index f3ca415a49..9d20d26358 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.199 + Original Revision: 1.200 $FreeBSD$ --> @@ -675,6 +675,13 @@ </row> <row> + <entry>&a.svn-src-stable-8.name;</entry> + <entry><filename>/usr/src</filename></entry> + <entry>所有对 Subversion 源码仓库中有关 + <filename>stable/8</filename> 分支的改变记录</entry> + </row> + + <row> <entry>&a.svn-src-stable-other.name;</entry> <entry><filename>/usr/src</filename></entry> <entry>所有对 Subversion 源码仓库中早期 diff --git a/zh_CN.GB2312/books/handbook/filesystems/chapter.sgml b/zh_CN.GB2312/books/handbook/filesystems/chapter.sgml index a38c97c27c..a8560eebf8 100644 --- a/zh_CN.GB2312/books/handbook/filesystems/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/filesystems/chapter.sgml @@ -1,6 +1,6 @@ <!-- The FreeBSD Documentation Project - Original Revision: 1.8 + Original Revision: 1.9 $FreeBSD$ --> @@ -87,16 +87,6 @@ (<xref linkend="disks">)。</para> </listitem> </itemizedlist> - - <!-- - Temporary warning to avoid listing experimental versions - and production versions of FreeBSD with this technology. - --> - <warning> - <para><acronym>ZFS</acronym> 特性目前仍被认为是试验性的。 - 有些选项功能性缺失,另有一些可能还无法运行。最终, - 这个特性会适合用于生产,届时这篇文档也会做些适当的修改。</para> - </warning> </sect1> <sect1 id="filesystems-zfs"> diff --git a/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml b/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml index 4cc104167d..5abb6a09e8 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.86 + Original Revision: 1.92 $FreeBSD$ --> @@ -112,21 +112,32 @@ </indexterm> <para>建立防火墙规则集的基本方法有两种: - <quote>包容式的</quote> 或 <quote>排斥式的</quote>。 - 排斥式的防火墙, 允许除了禁止的那些数据之外的所有网络流量通过。 - 包容式的防火墙正好相反。 后者只允许符合规则的流量通过, + <quote>明示允许 (inclusive)</quote>型 或 + <quote>明示禁止 (exclusive)</quote>型。 明示禁止的防火墙规则, + 默认允许所有数据通过防火墙, 而这种规则集中定义的, + 则是不允许通过防火墙的流量, 换言之, + 与这些规则不匹配的数据, 全部是允许通过防火墙的。 + 明示允许的防火墙正好相反, 它只允许符合规则集中定义规则的流量通过, 而其他所有的流量都被阻止。</para> - <para>包容式防火墙一般说来要比排斥式防火墙安全, - 因为他们显著地降低了由于允许不希望的网络流量通过所带来的风险。</para> + <para>明示允许型防火墙能够提供对于传出流量更好的控制, + 这使其更适合那些直接对 Internet 公网提供服务的系统的需要。 + 它也能够控制来自 Internet 公网到您的私有网络的访问类型。 + 所有和规则不匹配的流量都会被阻止并记录在案。 + 一般来说明示允许防火墙要比明示禁止防火墙更安全, + 因为它们显著地减少了允许不希望的流量通过可能造成的风险。</para> - <para>如果使用了 <quote>带状态功能的防火墙 (stateful - firewall)</quote>, 则安全机制可以进一步地细化。 - 带状态功能的防火墙能够记录通过防火墙的连接, + <note> + <para>除非特别说明, + 这一章的配置和示范的规则集都是创建明示允许防火墙的。</para> + </note> + + <para>使用了 <quote>带状态功能的防火墙 (stateful + firewall)</quote>, 可以进一步地收紧安全机制。 + 这种防火墙能够记录通过防火墙的连接, 进而只允许与现有连接匹配的连接, 或创建新的连接。 - 带状态功能的防火墙的缺点, 则是在很短时间内有大量的连接请求时, - 它们可能会受到拒绝服务 - (<acronym>DoS</acronym>) 攻击。 + 带状态功能的防火墙的缺点是, 在很短时间内有大量的连接请求时, + 它们可能会受到拒绝服务 (<acronym>DoS</acronym>) 攻击。 绝大多数防火墙都提供了同时启用两种防火墙的能力, 以便为站点提供更好的保护。</para> </sect1> @@ -144,8 +155,8 @@ &man.altq.4; 和 &man.dummynet.4;。 Dummynet 在过去一直和 <acronym>IPFW</acronym> 紧密集成, 而 <acronym>ALTQ</acronym> 则需要配合 - <acronym>PF</acronym> 使用。 <acronym>IPFILTER</acronym> - 对于流量整形可以使用 <acronym>IPFILTER</acronym> 的 NAT + <acronym>PF</acronym> 使用。 IPFILTER + 的流量整形功能可以使用 IPFILTER 的 NAT 和过滤功能以及 <acronym>IPFW</acronym> 的 &man.dummynet.4; 配合, <emphasis>或者</emphasis> 使用 <acronym>PF</acronym> 跟 <acronym>ALTQ</acronym> 的组合。 @@ -161,7 +172,7 @@ <para>由于所有的防火墙都基于检查所选定的包控制字段来实现功能, 撰写防火墙规则集时, 就必须了解 - <acronym>TCP</acronym>/IP 是如何工作的, + <acronym>TCP/IP</acronym> 是如何工作的, 以及包的控制字段在正常会话交互中的作用。 您可以在这个网站找到一份很好的解释文档: <ulink @@ -210,20 +221,24 @@ url="http://pf4freebsd.love2party.net/"></ulink>。</para> <sect2> - <title>使用 PF 可装载的内核模块</title> - - <para>从 &os; 5.3;开始,PF - 作为一个单独的运行时可装载的模块被收录进基本的安装系统。 - 在 &man.rc.conf.5; 加入如下的语句能让系统能够动态装载 PF - 内核模块,<literal>pf_enable="YES"</literal>。 - 然而如果系统无法找到一份 <acronym>PF</acronym> - 防火墙规则的配置文件,<acronym>PF</acronym> 模块则不会被加载。 - 配置文件默认的位置在 <filename>/etc/pf.conf</filename>。 - 如果你的 <acronym>PF</acronym> 规则存放在其他的位置, - 那么就需要在 <filename>/etc/rc.conf</filename> - 配置文件中加入以下语句 - <literal>pf_rules="<replaceable>/path/pf.rules</replaceable>"</literal> - 来指定一份。</para> + <title>使用 PF 可加载的内核模块</title> + + <para>要加载 PF 内核模块, 可以在 + <filename>/etc/rc.conf</filename> 中加入下面的设置:</para> + + <programlisting>pf_enable="YES"</programlisting> + + <para>然后使用启动脚本来加载模块:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/pf start</userinput></screen> + + <para>需要说明的是, 如果系统中没有规则集配置文件, + 则上述操作不会加载 PF 模块。 配置文件的默认位置是 + <filename>/etc/pf.conf</filename>。 如果 PF 规则集在其他位置, + 可以用下面的 + <filename>/etc/rc.conf</filename> 配置来告诉 PF:</para> + + <programlisting>pf_rules="<replaceable>/path/to/pf.conf</replaceable>"</programlisting> <note> <para>从 &os; 7.0 开始,作为例子的存放在 @@ -234,13 +249,22 @@ <filename>/etc/pf.conf</filename>。</para> </note> - <para><acronym>PF</acronym> 模块也能从命令行手工加载:</para> + <para><acronym>PF</acronym> 模块也可以手工从命令行加载:</para> <screen>&prompt.root; <userinput>kldload pf.ko</userinput></screen> - <para>可装载的摸块默认由 &man.pflog.4; 提供日志记录。 - 如果你需要 <acronym>PF</acronym> 其他的特性, - 你可能需要把 <acronym>PF</acronym> 编译进内核。</para> + <para>PF 的日志记录功能是由 + <literal>pflog.ko</literal> 提供的, 通过在 + <filename>/etc/rc.conf</filename> 中加入下面的设置:</para> + + <programlisting>pflog_enable="YES"</programlisting> + + <para>然后使用启动脚本来加载模块:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/pflog start</userinput></screen> + + <para>如果您需要其他 <acronym>PF</acronym> 特性, + 则需要将 <acronym>PF</acronym> 支持联编进内核。</para> </sect2> <sect2> @@ -266,11 +290,11 @@ <para>虽然你不必亲自把对 <acronym>PF</acronym> 的支持编译进 &os; 内核,但是有时你仍然需要这么做来使用到 PF - 的某些没有被收录进可装载模块的高级特性,比如 &man.pfsync.4; + 的某些没有被收录进可加载模块的高级特性,比如 &man.pfsync.4; 伪设备用来发送某些改变到<acronym>PF</acronym> 状态表。 它能配合 &man.carp.4; 使用 PF 建立支持故障转移的防火墙。 - 更多有关 <acronym>CARP</acronym> 的详细信息可以参阅 - <link linkend="carp">第 29 章</link>。</para> + 更多有关 <acronym>CARP</acronym> 的详细信息可以参阅本手册的 + <xref linkend="carp">。</para> <para>The <acronym>PF</acronym> kernel options can be found in <filename>/usr/src/sys/conf/NOTES</filename> and are reproduced @@ -333,24 +357,9 @@ pflog_flags="" # 启动时传递给 pflogd 的其他选项</programlisting <warning> <para>在浏览 <ulink url="http://www.openbsd.org/faq/pf/">PF FAQ</ulink> 时, - 请时刻注意不同版本的 &os; 使用了不同版本的 PF:</para> - - <itemizedlist> - <listitem> - <para>&os; 5.<replaceable>X</replaceable> — - <acronym>PF</acronym> 相当于 OpenBSD 3.5</para> - </listitem> - - <listitem> - <para>&os; 6.<replaceable>X</replaceable> — - <acronym>PF</acronym> 相当于 OpenBSD 3.7</para> - </listitem> - - <listitem> - <para>&os; 7.<replaceable>X</replaceable> — - <acronym>PF</acronym> 相当于 OpenBSD 4.1</para> - </listitem> - </itemizedlist> + 请时刻注意不同版本的 &os; 可能会使用不同版本的 PF。 目前, + &os; 7.<replaceable>X</replaceable> 和更高版本使用的是与 + OpenBSD 4.1 相同的 <acronym>PF</acronym>版本。</para> </warning> <para>&a.pf; 是一个提有关配置使用 <acronym>PF</acronym> @@ -399,7 +408,7 @@ pflog_flags="" # 启动时传递给 pflogd 的其他选项</programlisting <row> <entry><command>pfctl <option>-vnf</option> /etc/pf.conf</command></entry> <entry>检查 <filename>/etc/pf.conf</filename> - 中的错误,但不装载相关的规则</entry> + 中的错误,但不加载相关的规则</entry> </row> </tbody> </tgroup> @@ -430,26 +439,26 @@ options ALTQ_NOPCC # 在联编 SMP 内核时必须使用,禁止读时钟</program <acronym>ALTQ</acronym> 框架的支持。</para> <para><literal>options ALTQ_CBQ</literal> - 用于启用基于分类的队列 (<acronym>CBQ</acronym>) 支持。 <acronym>CBQ</acronym> + 用于启用 <emphasis>基于分类的队列</emphasis> (<acronym>CBQ</acronym>) 支持。 <acronym>CBQ</acronym> 允许您将连接分成不同的类别, 或者说, 队列, 以便在规则中为它们指定不同的优先级。</para> <para><literal>options ALTQ_RED</literal> - 将启用随机预检测 (<acronym>RED</acronym>)。 + 将启用 <emphasis>随机预检测</emphasis> (<acronym>RED</acronym>)。 <acronym>RED</acronym> 是一种用于防止网络拥塞的技术。 <acronym>RED</acronym> 度量队列的长度, 并将其与队列的最大和最小长度阈值进行比较。 如果队列过长, 则新的包将被丢弃。 如名所示, <acronym>RED</acronym> 从不同的连接中随机地丢弃数据包。</para> - <para><literal>options ALTQ_RIO</literal> 将启用出入的随机预检测。</para> + <para><literal>options ALTQ_RIO</literal> 将启用 <emphasis>出入的随机预检测</emphasis>。</para> <para><literal>options ALTQ_HFSC</literal> - 启用层次式公平服务平滑包调度器。 + 启用 <emphasis>层次式公平服务平滑包调度器</emphasis>。 要了解关于 <acronym>HFSC</acronym> 进一步的信息, 请参见 <ulink url="http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html"></ulink>。</para> - <para><literal>options ALTQ_PRIQ</literal> 启用优先队列 + <para><literal>options ALTQ_PRIQ</literal> 启用 <emphasis>优先队列</emphasis> (<acronym>PRIQ</acronym>)。 <acronym>PRIQ</acronym> 首先允许高优先级队列中的包通过。</para> @@ -470,10 +479,6 @@ options ALTQ_NOPCC # 在联编 SMP 内核时必须使用,禁止读时钟</program <secondary>IPFILTER</secondary> </indexterm> - <note> - <para>这一节的内容正在撰写中。 其内容可能不总是十分准确。</para> - </note> - <para>IPFILTER 的作者是 Darren Reed。 IPFILTER 是独立于操作系统的: 它是一个开放源代码的应用, 并且已经被移植到了 &os;、 NetBSD、 OpenBSD、 SunOS、 HP/UX, 以及 Solaris 操作系统上。 @@ -494,24 +499,13 @@ options ALTQ_NOPCC # 在联编 SMP 内核时必须使用,禁止读时钟</program IPF 被逐渐增强, 并加入了 <quote>quick</quote> 选项, 以及支持状态的 <quote>keep state</quote> 选项, 这使得规则处理逻辑变得更富有现代气息。 - IPF 的官方文档介绍了传统的规则编写方法和文件处理逻辑。 + IPF 的官方文档只介绍了传统的规则编写方法和文件处理逻辑。 新增的功能只是作为一些附加的选项出现, 如果能完全理解这些功能, 则对于建立更安全的防火墙就很有好处。</para> <para>这一节中主要是针对 <quote>quick</quote> 选项, 以及支持状态的 <quote>keep state</quote> 选项的介绍。 - 这是包容式防火墙规则集最基本的编写要素。</para> - - <!-- XXX: something like this already in - <xref linkend="firewalls-concepts"> - AND: the para below is repeated 3 times in this chapter--> - - <para>包容式防火墙只允许与规则匹配的包通过。 这样, - 您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务, - 同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。 - 所有其它的访问请求都会被阻止, 并记录下来。 - 包容式防火墙一般而言要远比排斥式的要安全, - 而且也只需要定义允许哪些访问通过。</para> + 这是明示允许防火墙规则集最基本的编写要素。</para> <para>要获得关于传统规则处理方式的详细信息, 请参考: <ulink @@ -537,13 +531,14 @@ options ALTQ_NOPCC # 在联编 SMP 内核时必须使用,禁止读时钟</program <para>IPF 作为 &os; 基本安装的一部分, 以一个独立的内核模块的形式提供。 - 如果在 rc.conf 中配置了 <literal> - ipfilter_enable="YES"</literal>, + 如果在 <filename>rc.conf</filename> 中配置了 + <literal>ipfilter_enable="YES"</literal>, 系统就会自动地动态加载 IPF 内核模块。 这个内核模块在创建时启用了日志支持, 并加入了 <literal>default pass all</literal> 选项。 如果只是需要把默认的规则设置为 - <literal>block all</literal> 的话, 并不需要把 IPF - 编译到内核中。 可以简单地通过把这条规则加入自己的规则集来达到同样的目的。</para> + <literal>block all</literal> 的话, 就不需要把 IPF 编译到内核中。 + 简单地通过把 <literal>block all</literal> + 这条规则加入自己的规则集来达到同样的目的。</para> </sect2> <sect2> @@ -596,13 +591,13 @@ options IPFILTER_DEFAULT_BLOCK</programlisting> 将改变防火墙的默认动作, 进而, 所有不匹配防火墙的 <literal>pass</literal> 规则的包都会被阻止。</para> - <para>这些选项只有在您重新编译并安装内核之后才会生效。</para> + <para>这些选项只有在您重新编译并安装了上述配置的内核之后才会生效。</para> </sect2> <sect2> <title>可用的 rc.conf 选项</title> - <para>要在启动时激活 IPF, 您需要在 <filename>/etc/rc.conf</filename> + <para>要在启动时激活 IPF, 需要在 <filename>/etc/rc.conf</filename> 中增加下面的设置:</para> <programlisting>ipfilter_enable="YES" # 启动 ipf 防火墙 @@ -613,19 +608,20 @@ ipmon_flags="-Ds" # D = 作为服务程序启动 # v = 记录 tcp 窗口大小、 ack 和顺序号(seq) # n = 将 IP 和端口映射为名字</programlisting> - <para>如果您的 LAN 在防火墙后面, 并且使用了保留的私有 IP 地址范围, - 那就需要增加下面的一些选项来启用 <acronym>NAT</acronym> 功能:</para> + <para>如果在防火墙后面有使用了保留的私有 IP 地址范围的 LAN, + 还需要增加下面的一些选项来启用 <acronym>NAT</acronym> 功能:</para> <programlisting>gateway_enable="YES" # 启用作为 LAN 网关的功能 ipnat_enable="YES" # 启动 ipnat 功能 ipnat_rules="/etc/ipnat.rules" # 用于 ipnat 的规则定义文件</programlisting> + </sect2> <sect2> <title>IPF</title> <indexterm><primary><command>ipf</command></primary></indexterm> - <para>ipf 命令可以用来加载您自己的规则文件。 一般情况下, + <para>&man.ipf.8; 命令可以用来加载您自己的规则文件。 一般情况下, 您可以建立一个包括您自定义的规则的文件, 并使用这个命令来替换掉正在运行的防火墙中的内部规则:</para> @@ -689,7 +685,7 @@ ipnat_rules="/etc/ipnat.rules" # 用于 ipnat 的规则定义文件</programlisting> <para>如果使用了 <option>-i</option> (进入流量) 或者 <option>-o</option> (输出流量), - 它就只获取并显示内核中所安装的对应过滤器规则的统计数据。</para> + 这个命令就只获取并显示内核中所安装的对应过滤器规则的统计数据。</para> <para><command>ipfstat -in</command> 以规则号的形式显示进入的内部规则表。</para> @@ -733,7 +729,8 @@ ipnat_rules="/etc/ipnat.rules" # 用于 ipnat 的规则定义文件</programlisting> </indexterm> <para>为了使 <command>ipmon</command> 能够正确工作, - 必须打开 IPFILTER_LOG 这个内核选项。 这个命令提供了两种不同的使用模式。 + 必须打开 <literal>IPFILTER_LOG</literal> 这个内核选项。 + 这个命令提供了两种不同的使用模式。 内建模式是默认的模式, 如果您不指定 <option>-D</option> 参数, 就会采用这种模式。</para> @@ -741,9 +738,9 @@ ipnat_rules="/etc/ipnat.rules" # 用于 ipnat 的规则定义文件</programlisting> 您就可以通过查看日志来了解过去曾经发生过的事情。 这种模式是 &os; 和 IPFILTER 配合工作的模式。 由于在 &os; 中提供了一个内建的系统日志自动轮转功能, - 因此, 使用 syslogd 比默认的将日志信息记录到一个普通文件要好。 - 在默认的 <filename>rc.conf</filename> 文件中, 您会看到一个 - ipmon_flags 语句, 指定了 <option>-Ds</option> 标志:</para> + 因此, 使用 &man.syslogd.8; 比默认的将日志信息记录到一个普通文件要好。 + 在默认的 <filename>rc.conf</filename> 文件中, + <literal>ipmon_flags</literal> 语句会指定 <option>-Ds</option> 标志:</para> <programlisting>ipmon_flags="-Ds" # D = 作为服务程序启动 # s = 使用 syslog 记录 @@ -760,7 +757,7 @@ ipnat_rules="/etc/ipnat.rules" # 用于 ipnat 的规则定义文件</programlisting> <para>作为惯例, 通常会有一条默认的、拒绝所有网络流量的规则, 并指定 log 关键字, 作为您的规则集的最后一条。 - 这样, 您就能够看到所有没有匹配任何规则的数据包。</para> + 这样就能够看到所有没有匹配任何规则的数据包了。</para> </sect2> <sect2> @@ -786,7 +783,7 @@ LOG_ERR - 进一步记录含不完整的包头的数据包</screen> <screen>&prompt.root; <userinput>touch /var/log/ipfilter.log</userinput></screen> - <para>syslog 功能可以通过在 <filename>/etc/syslog.conf</filename> 文件中的语句来定义。 + <para>&man.syslogd.8; 功能可以通过在 <filename>/etc/syslog.conf</filename> 文件中的语句来定义。 <filename>syslog.conf</filename> 提供了相当多的用以控制 syslog 如何处理类似 IPF 这样的用用程序所产生的系统消息的方法。</para> @@ -799,14 +796,13 @@ LOG_ERR - 进一步记录含不完整的包头的数据包</screen> 表示把所有的相关日志信息写到指定的文件中。</para> <para>要让 <filename>/etc/syslog.conf - </filename> 中的修改立即生效, 您可以重新启动计算机, 或者通过执行 + </filename> 中的修改立即生效, 可以重新启动计算机, 或者通过执行 <command>/etc/rc.d/syslogd reload</command> 来让它重新读取 <filename>/etc/syslog.conf</filename>。</para> <para>不要忘了修改 <filename>/etc/newsyslog.conf - </filename> 来让您刚创建的日志进行轮转。</para> - - </sect2> + </filename> 来让刚创建的日志进行轮转。</para> + </sect2> <sect2> <title>记录消息的格式</title> @@ -849,18 +845,18 @@ LOG_ERR - 进一步记录含不完整的包头的数据包</screen> <listitem> <para>地址。 这实际上包括三部分: 源地址和端口 (以逗号分开), 一个 -> - 符号, 以及目的地址和端口。 - 209.53.17.22,80 -> 198.73.220.17,1722.</para> + 符号, 以及目的地址和端口, 例如: + <literal>209.53.17.22,80 -> 198.73.220.17,1722</literal>。</para> </listitem> <listitem> <para><literal>PR</literal>, 后跟协议名称或编号, - 例如, PR tcp。</para> + 例如: <literal>PR tcp</literal>。</para> </listitem> <listitem> <para><literal>len</literal>, 后跟包头的长度, 以及包的总长度, - 例如 len 20 40。</para> + 例如: <literal>len 20 40</literal>。</para> </listitem> </orderedlist> @@ -878,14 +874,14 @@ LOG_ERR - 进一步记录含不完整的包头的数据包</screen> <title>构建采用符号替换的规则脚本</title> <para>一些有经验的 IPF 会创建包含规则的文件, - 并把它编写成能够与符号替换脚本兼容的方式。 这样做最大的好处是, - 它能够让您只修改符号名字所代表的值, + 并把它编写成能够与符号替换脚本兼容的方式。 + 这样做最大的好处是能够在修改时只修改符号名字所代表的值, 而在脚本执行时直接替换掉所有的名符。 - 作为脚本, 您可以使用符号替换来把那些经常使用的值直接用于多个规则。 - 下面我们将给出一个例子。</para> + 作为脚本, 可以使用符号替换来把那些经常使用的值直接用于多个规则。 + 下面将给出一个例子。</para> - <para>这个脚本所使用的语法与 sh、 csh, - 以及 tcsh 脚本。</para> + <para>这个脚本所使用的语法与 &man.sh.1;、 &man.csh.1;, + 以及 &man.tcsh.1; 脚本。</para> <para>符号替换的前缀字段是美元符号: <literal>$</literal>。</para> @@ -957,7 +953,7 @@ EOF 来禁止系统启动脚本开启 IPFILTER。</para> <para>在 - <filename>/usr/local/etc/rc.d/</filename> + <filename class="directory">/usr/local/etc/rc.d/</filename> 启动目录中增加一个类似下面的脚本。 应该给它起一个显而易见的名字, 例如 <filename>ipf.loadrules.sh</filename>。 @@ -981,20 +977,15 @@ sh /etc/ipf.rules.script</programlisting> <sect2> <title>IPF 规则集</title> - <!-- XXX: looks incorrect (and duplicated 2 times in this chapter): - 1. Packet can be processed two times depend of firewall - firewall configuration, but "return trip back" is - another packet. - 2. "Each TCP/IP service ... is predefined by its protocol ..." - - this shold be about packet and it's parameters - (source/destination address and port). --> - - <para>规则集是指一组编写好的依据包的值决策允许通过或阻止 ipf 规则。 - 包的双向交换组成了一个会话交互。 防火墙规则集对同一个包会进行两次处理, - 第一次是它从公网的 Internet 主机到达的时候, 第二次是它离开并返回初始的 - Internet 公网主机的时候。 每一个 TCP/IP 服务 (例如 telnet, www, - 邮件等等) 是由协议预先定义的源或目的 IP 地址, 以及源或目的端口。 - 这是最基本的一些可以为防火墙规则所利用的, 判别是否允许服务通过的标准。</para> + <para>规则集是指一组编写好的依据包的值决策允许通过或阻止 IPF 规则。 + 包的双向交换组成了一个会话交互。 防火墙规则集会作用于来自于 + Internet 公网的包以及由系统发出来回应这些包的数据包。 + 每一个 <acronym>TCP/IP</acronym> 服务 (例如 telnet, www, + 邮件等等) 都由协议预先定义了其特权 (监听) 端口。 + 发到特定服务的包会从源地址使用非特权 (高编号) 端口发出, + 并发到特定服务在目的地址的对应端口。 + 所有这些参数 (例如: 端口和地址) + 都是可以为防火墙规则所利用的, 判别是否允许服务通过的标准。</para> <indexterm> <primary>IPFILTER</primary> @@ -1011,17 +1002,7 @@ sh /etc/ipf.rules.script</programlisting> <para>这一节中提供的一些指导, 是基于使用包含 <quote>quick</quote> 选项和有状态的 <quote>keep state</quote> 选项来进行阐述的。 - 这些是编写包容式防火墙规则集的基本要素。</para> - - <!-- XXX: something like this already in - <xref linkend="firewalls-concepts"> - AND: the para below is repeated 3 times in this chapter--> - <para>包容式防火墙只允许与规则匹配的服务通过。 这样, - 您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务, - 同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。 - 所有其它的访问请求都会被阻止, 并记录下来。 - 包容式防火墙一般而言要远比排斥式的要安全, - 而且也只需要定义允许哪些访问通过。</para> + 这些是编写明示允许防火墙规则集的基本要素。</para> <warning> <para>当对防火墙规则进行操作时, 应该 @@ -1103,7 +1084,8 @@ sh /etc/ipf.rules.script</programlisting> <sect3> <title>IN-OUT</title> <para>每个过滤器规则都必须明确地指定是流入还是流出的规则。 - 下一个关键字必须要么是 in, 要么是 out, + 下一个关键字必须要么是 <literal>in</literal>, + 要么是 <literal>out</literal>, 否则将无法通过语法检查。</para> <para><literal>in</literal> 表示规则应被应用于刚刚从 Internet @@ -1135,20 +1117,21 @@ sh /etc/ipf.rules.script</programlisting> 则规则只会应用到某一个网络接口上的出入数据包上。 要配置新式的处理逻辑, 必须使用这个选项。</para> - <para>当记录包时, 包的头会被写入到 IPL 包日志伪设备中。 - 紧跟 log 关键字, 可以使用下面几个修饰符 + <para>当记录包时, 包的头会被写入到 <acronym>IPL</acronym> 包日志伪设备中。 + 紧跟 <literal>log</literal> 关键字, 可以使用下面几个修饰符 (按照下列顺序):</para> <para><literal>body</literal> 表示应同时记录包的前 128 字节的内容。</para> <para><literal>first</literal> 如果 <literal>log</literal> 关键字和 - <quote>keep state</quote> 选项同时使用, + <literal>keep state</literal> 选项同时使用, 则这个选项只在第一个包上触发, 这样就不用记录每一个 <quote>keep state</quote> 包信息了。</para> </sect3> <sect3> <title>SELECTION</title> + <para>这一节所介绍的关键字可以用于所检察的包的属性。 有一个关键字主题, 以及一组子选项关键字, 您必须从他们中选择一个。 以下是一些通用的属性, @@ -1174,36 +1157,38 @@ sh /etc/ipf.rules.script</programlisting> <para>使用 <literal>all</literal> 关键词, 基本上相当于 <quote>from any to any</quote> 在没有配合其他关键字的情形。</para> - <para><literal>from src to dst</literal>: from 和 to - 关键字主要是用来匹配 IP 地址。 所有的规则都必须同时给出源和目的两个参数。 + <para><literal>from src to dst</literal>: <literal>from</literal> 和 <literal>to</literal> + 关键字主要是用来匹配 IP 地址。 所有的规则都必须 + <emphasis>同时</emphasis> 给出源和目的两个参数。 <literal>any</literal> 是一个可以用于匹配任意 IP 地址的特殊关键字。 - 例如, 您可以使用 <quote>from any to any</quote> 或 <quote>from - 0.0.0.0/0 to any</quote> 或 <quote>from any to 0.0.0.0/0</quote> 或 <quote>from - 0.0.0.0 to any</quote> 以及 <quote>from any to 0.0.0.0</quote>。</para> - - <!-- XXX: Needs rewording --> - <para>IP 地址可以按句点分隔的 IP 地址/掩码长度 的方式来指定, - 也可以只指定一个句点分隔的 IP 地址。</para> + 例如, 您可以使用 <literal>from any to any</literal> 或 <literal>from + 0.0.0.0/0 to any</literal> 或 <literal>from any to 0.0.0.0/0</literal> 或 <literal>from + 0.0.0.0 to any</literal> 以及 <literal>from any to 0.0.0.0</literal>。</para> <para>如果无法使用子网掩码来表示 IP 的话, 表达地址就会很麻烦。 - 请参见下面的网页了解如何撰写掩码长度: + 使用 <filename + role="package">net-mgmt/ipcalc</filename> port 可以帮助进行计算。 + 请参见下面的网页了解如何撰写长度掩码: <ulink url="http://jodies.de/ipcalc"></ulink>。</para> </sect3> <sect3> <title>PORT</title> - <para>如果为源或目的指定了匹配端口, 规则就只能应用于 <acronym>TCP</acronym> 和 - <acronym>UDP</acronym> 包了。 当编写端口比较规则时, - 可以指定 <filename>/etc/services</filename> 中所定义的名字, + + <para>如果为源或目的指定了匹配端口, 规则就只能应用于 + <acronym>TCP</acronym> 和 <acronym>UDP</acronym> 包了。 + 当编写端口比较规则时, 可以指定 + <filename>/etc/services</filename> 中所定义的名字, 也可以直接用端口号来指定。 如果端口号出现在源对象一侧, 则被认为是源端口号; 反之, 则被认为是目的端口号。 要使用新式的规则处理逻辑, - 就必须与 <literal>to</literal> 对象配合使用这个选项。 - 使用的例子: <quote>from any to any port = 80</quote>。</para> + 就必须与 <literal>to</literal> 对象配合使用这个选项。 使用的例子: + <literal>from any to any port = 80</literal></para> - <!-- XXX: Needs rewriting --> - <para>端口的比较是以数字的形式进行的, 可以使用比较算符来指定, - 也可以指定一个范围。</para> + <!-- XXX: Rewritten, but probably needs more changes --> + + <para>对单个端口的比较可以多种方式进行, 并可使用不同的比较算符。 + 此外, 还可以指定端口的范围。</para> <para>port "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq" | "ne" | "lt" | "gt" | "le" | "ge".</para> @@ -1218,11 +1203,13 @@ sh /etc/ipf.rules.script</programlisting> <sect3> <title><acronym>TCP</acronym>_FLAG</title> - <para>标志只对 <acronym>TCP</acronym> 过滤使用。 + + <para>标志只对 <acronym>TCP</acronym> 过滤有用。 这些字母用来表达 <acronym>TCP</acronym> 包头的标志。</para> - <para>新式的规则处理逻辑使用 <literal>flags - S</literal> 参数来识别 tcp 会话开始的请求。</para> + <para>新式的规则处理逻辑使用 + <literal>flags S</literal> 参数来识别 tcp + 会话开始的请求。</para> </sect3> <sect3> @@ -1245,7 +1232,9 @@ sh /etc/ipf.rules.script</programlisting> <secondary>有状态过滤</secondary> </indexterm> + <!-- XXX: duplicated --> + <para>有状态过滤将网络流量当作一种双向的包交换来处理。 如果激活它, keep-state 会动态地为每一个相关的包在双向会话交互过程中产生内部规则。 它能够确认发起者和包的目的地之间的会话是有效的双向包交换过程的一部分。 @@ -1259,14 +1248,15 @@ sh /etc/ipf.rules.script</programlisting> <para>所发生的事情是:</para> - <para>将要通过联入公网的网络接口发出的包, 首先会经过动态状态表的检查。 - 如果包与会话中预期的下一个包匹配, 则防火墙就会允许包通过, - 而会话的交互流信息也会在动态状态表中进行更新, 而其他的包, - 则将使用发出规则集来检查。</para> + <para>将要通过连入 Internet 公网的网络接口发出的包, + 首先会经过动态状态表的检查。 如果包与会话中预期的下一个包匹配, + 防火墙就会允许包通过, 并更新状态表中的会话的交互流信息。 + 不属于活跃会话的包, 则简单地交给输出规则集去检查。</para> - <para>发到联入 Internet 公网的包, 也会首先经过动态规则表的检查。 - 如果与会话中预期的下一个包匹配, 则防火墙就允许它通过, - 并更新动态状态表。 其他包仍会使用进入规则集进行检查。</para> + <para>发到连入 Internet 公网接口的包, 也会先经过动态状态表的检查。 + 如果包与会话中预期的下一个包匹配, + 防火墙就会允许包通过, 并更新状态表中的会话的交互流信息。 + 不属于活跃会话的包, 则简单地交给输入规则集去检查。</para> <para>当会话结束时, 对应的项会在动态状态表中删除。</para> @@ -1280,24 +1270,30 @@ sh /etc/ipf.rules.script</programlisting> <sect2> <!-- XXX: This section needs a rewrite --> - <title>包容式规则集的例子</title> + <title>明示允许规则集的例子</title> - <para>下面的规则集是如何编写非常安全的包容式防火墙规则集的一个范例。 - 包容式防火墙只让允许的服务通过, 而所有其他的访问都会被默认地拒绝。 - 所有的防火墙都有至少两个接口对应的默认规则, 从而使防火墙能够正常工作。</para> + <para>下面的规则集是如何编写非常安全的明示允许防火墙规则集的一个范例。 + 明示允许防火墙只让允许的服务 <literal>pass</literal> (通过), + 而所有其他的访问都会被默认地拒绝。 期望用来保护其他机器的防火墙, + 通常也叫做 <quote>网络防火墙</quote>, 应使用至少两个网络接口, + 并且通常只有一个接入到受信的一端 (<acronym>LAN</acronym>), + 而另一块则接入不受信的一端 (Internet 公网)。 另外, + 防火墙也可以配置为只保护它所运行的那个系统 — 这种类型称作 + <quote>主机防火墙</quote>, 通常在接入不受信网络的服务器上使用。</para> - <para>所有的类 &unix; 系统, 包括 &os; 都使用 + <para>包括 &os; 在内的所有类 &unix; 系统通常都会使用 <devicename>lo0</devicename> 和 IP 地址 <hostid role="ipaddr">127.0.0.1</hostid> 用于操作系统中内部的通讯。 防火墙规则必须允许这些包无阻碍地通过。</para> <para>接入 Internet 公网的网络接口, 是放置规则并允许将访问请求发到 - Internet 以及接收响应的地方。 - 这有可能是用户模式的 PPP <devicename>tun0</devicename> 接口, + Internet 以及接收响应的地方。 这有可能是用户模式的 PPP + <devicename>tun0</devicename> 接口, 如果您的网卡同 DSL 或电缆调制解调器相联的话。</para> - <para>如果有至少一个网卡与防火墙后的内网 LAN 相联, - 这些网络接口就应该有一个规则来允许来自这些 LAN 接口的包无阻碍地通过。</para> + <para>如果有网卡是直接接入私有网段的, + 这些网络接口就可能需要配置允许来自这些 LAN 的包在彼此之间, + 以及到外界 (Internet) 上的对应的通过规则。</para> <para>一般说来, 规则应被组织为三个主要的小节: 所有允许自由通过的接口规则, 发到公网接口的规则, @@ -1307,33 +1303,30 @@ sh /etc/ipf.rules.script</programlisting> 而最后一个规则应该是阻止包通过, 并记录它们。</para> <para>下面防火墙规则集中, Outbound 部分是一些使用 - 'pass' 的规则, 这些规则指定了允许访问的公网 - Internet 服务, 并且指定了 'quick'、 'on'、 - 'proto'、 'port', 以及 'keep state' 这些选项。 'proto - tcp' 规则还指定了 'flag' 这个选项, 这样会话的第一个包将出发状态机制。</para> - - <para>接下来的 Inbound 一节, 则首先阻止所有不希望的数据包。 - 这样做有两个原因, 其一是被阻止的包可能会被后面的规则允许, - 从而并不妨碍获得授权的服务正常工作; - 其二是这避免了那些不常见的包由于匹配到最后一条规则而触发日志, - 规则集中的最后一条规则是阻止并记录所有的包, - 通过这样的记录, 就比较容易找到攻击系统的人, - 并为采取法律措施收集证据。</para> - - <para>需要注意的另一件事情是, 如果收到了不希望的数据包, - 则这些包会被丢弃, 而不是给出什么响应。 这样做的好处是, - 攻击者无法了解包是否已经被您的系统收到。 - 攻击者所能了解到的信息越少, - 攻陷您的系统所需要花费的时间也就越长。 - 我们在这里记录的连入的 'nmap OS 指纹' 探测企图, - - <!-- XXX: what? --> - - 一般来说正是攻击者所做的第一件事。</para> - - <para>如果您看到了 'log first' 规则的日志, - 就应该用 <command>ipfstat -hio</command> 命令来看看那个规则被匹配的次数, - 以便了解系统是否正在或曾被攻击。</para> + <literal>pass</literal> 的规则, 这些规则指定了允许访问的公网 + Internet 服务, 并且指定了 <literal>quick</literal>、 <literal>on</literal>、 + <literal>proto</literal>、 <literal>port</literal>, 以及 <literal>keep state</literal> 这些选项。 <literal>proto + tcp</literal> 规则还指定了 <literal>flag</literal> 这个选项, 这样会话的第一个包将出发状态机制。</para> + + <para>接收部分则首先阻止所有不希望的包, 这样做有两个不同的原因。 + 其一是恶意的包可能和某些允许的流量规则存在部分匹配, 而我们希望阻止, + 而不是让这些包仅仅与 <literal>allow</literal> 规则部分匹配就允许它们进入。 + 其二是, 已经确信要阻止的包被拒绝这件事, 往往并不是我们需要关注的, + 因此只要简单地予以阻止即可。 + 防火墙规则集中的每个部分的最后一条规则都是阻止并记录包, + 这有助于为逮捕攻击者留下法律所要求的证据。</para> + + <para>另外一个需要注意的事情是确保系统对不希望的数据包不做回应。 + 无效的包应被丢弃和消失。 这样, 攻击者便无法知道包是否到达了您的系统。 + 攻击者对系统了解的越少, 攻陷系统所需的时间也就越多。 + 包含 <literal>log first</literal> 选项的规则只会记录它们第一次被触发时的包, + 在例子中这个选项被用于记录 <literal>nmap OS 指纹探测</literal> 规则。 + <filename role="package">security/nmap</filename> + 是攻击者常用的一种用于探测目标系统所用操作系统的工具。</para> + + <para>如果您看到了 <literal>log first</literal> 规则的日志, + 就应该用 <command>ipfstat -hio</command> 命令来看看那个规则被匹配的次数。 + 如果数目较大, 则表示系统正在受到洪水式攻击。</para> <para>如果记录的包的端口号并不是您所知道的, 可以在 <filename>/etc/services</filename> 或 <ulink @@ -1344,10 +1337,10 @@ sh /etc/ipf.rules.script</programlisting> url="http://www.simovits.com/trojans/trojans.html"></ulink>。</para> <para>下面是我在自己的系统中使用的完整的, 非常安全的 - '包容式' 防火墙规则集。 直接使用这个规则集不会给您造成问题, - 您所要做的只是注释掉那些您不需要的服务。</para> + <literal>明示允许</literal> 防火墙规则集。 直接使用这个规则集不会给您造成问题, + 您所要做的只是注释掉那些您不需要 <literal>pass</literal>(允许通过) 的服务。</para> - <para>如果在日志中发现了希望阻止的记录, 只需在 + <para>如果在日志中发现了希望 <literal>阻止</literal> 的记录, 只需在 inbound 小节中增加一条阻止规则集可。</para> <para>您必须将每一个规则中的 <devicename>dc0</devicename> @@ -1373,9 +1366,9 @@ pass out quick on lo0 all ################################################################# # Interface facing Public Internet (Outbound Section) -# Interrogate session start requests originating from behind the +# Match session start requests originating from behind the # firewall on the private network -# or from this gateway server destine for the public Internet. +# or from this gateway server destined for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. @@ -1410,38 +1403,38 @@ pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state # Allow out nntp news pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state -# Allow out gateway & LAN users non-secure FTP ( both passive & active modes) +# Allow out gateway & LAN users' non-secure FTP ( both passive & active modes) # This function uses the IP<acronym>NAT</acronym> built in FTP proxy function coded in # the nat rules file to make this single rule function correctly. # If you want to use the pkg_add command to install application packages # on your gateway system you need this rule. pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state -# Allow out secure FTP, Telnet, and SCP +# Allow out ssh/sftp/scp (telnet/rlogin/FTP replacements) # This function is using SSH (secure shell) pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state -# Allow out non-secure Telnet +# Allow out insecure Telnet pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state -# Allow out FBSD CVSUP function +# Allow out FreeBSD CVSup pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state # Allow out ping to public Internet pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state -# Allow out whois for LAN PC to public Internet +# Allow out whois from LAN to public Internet pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state # Block and log only the first occurrence of everything # else that's trying to get out. -# This rule enforces the block all by default logic. +# This rule implements the default block block out log first quick on dc0 all ################################################################# # Interface facing Public Internet (Inbound Section) -# Interrogate packets originating from the public Internet -# destine for this gateway server or the private network. +# Match packets originating from the public Internet +# destined for this gateway server or the private network. ################################################################# # Block all inbound traffic from non-routable or reserved address spaces @@ -1512,9 +1505,8 @@ pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state # Block and log only first occurrence of all remaining traffic # coming into the firewall. The logging of only the first -# occurrence stops a .denial of service. attack targeted -# at filling up your log file space. -# This rule enforces the block all by default logic. +# occurrence avoids filling up disk with Denial of Service logs. +# This rule implements the default block. block in log first quick on dc0 all ################### End of rules file #####################################</programlisting> </sect2> @@ -1561,17 +1553,9 @@ block in log first quick on dc0 all 在离开防火墙时转换为公网的 IP 地址。 此外, 当数据包返回时, 也将进行逆向的转换。</para> - <para><acronym>NAT</acronym> 通常是在没有向 ISP 请求许可, - 或事先知会的情况下进行的, 因而如果被发现, - 有时可能会成为 ISP 撤销您的账号的一个借口。 - 商业用户一般来说会购买昂贵得多的 Internet 线路, - 通常会获得一组长期有效的静态 IP 地址块。 ISP - 一般会希望并同意商业用户在他们的内网中使用 - <acronym>NAT</acronym>。</para> - <para>在 IP 地址空间中, 有一些特殊的范围是保留供经过 <acronym>NAT</acronym> 的内网 LAN IP 地址使用的。 根据 - RFC 1918, 您可以使用下面这些 IP 范围用于内网, + RFC 1918, 可以使用下面这些 IP 范围用于内网, 它们不会在 Internet 公网上路由:</para> <informaltable frame="none" pgwide="1"> @@ -1630,7 +1614,7 @@ block in log first quick on dc0 all <para>如果在 <acronym>NAT</acronym> 已经启动之后想要修改 <acronym>NAT</acronym> 规则, 可以修改保存 NAT 规则的那个文件, - 然后在执行 ipnat 命令时加上 <option>-CF</option> 参数, + 然后在执行 <command>ipnat</command> 命令时加上 <option>-CF</option> 参数, 以删除在用的 <acronym>NAT</acronym> 内部规则表, 以及所有地址翻译表中已有的项。</para> @@ -1691,7 +1675,7 @@ block in log first quick on dc0 all <acronym>NAT</acronym> 接下来会根据包对应的接口名字和源 IP 地址检查所有的规则。 如果包和某个 <acronym>NAT</acronym> 规则匹配, 则会检查包的 - [源 IP 地址, 例如, 内网的 IP 地址] 是否在 + (源 IP 地址, 例如, 内网的 IP 地址) 是否在 <acronym>NAT</acronym> 规则中箭头左侧指定的 IP 地址范围匹配。 如果匹配, 则包的原地址将被根据用 <literal>0/32</literal> 关键字指定的 IP 地址重写。 @@ -1742,8 +1726,8 @@ block in log first quick on dc0 all <programlisting>map dc0 192.168.1.0/24 -> 0/32</programlisting> <para>上面的规则中, 包的源端口在包通过 IP<acronym>NAT</acronym> - 时时不会发生变化的。 通过使用 portmap 关键字, 您可以要求 - IP<acronym>NAT</acronym> 只使用一定范围内的端口地址。 + 时时不会发生变化的。 通过使用 <literal>portmap</literal> 关键字, 您可以要求 + IP<acronym>NAT</acronym> 只使用指定范围内的端口地址。 比如说, 下面的规则将让 IP<acronym>NAT</acronym> 把源端口改为指定范围内的端口:</para> @@ -1862,7 +1846,7 @@ block in log first quick on dc0 all <para>如果使用了 <acronym>NAT</acronym> FTP 代理, 则只需要为 FTP 创建一个规则。</para> - <para>如果没有使用 FTP 代理, 则需要下面三个规则:</para> + <para>如果不使用 FTP 代理, 就需要下面这三个规则:</para> <programlisting># Allow out LAN PC client FTP to public Internet # Active and passive modes @@ -1886,7 +1870,7 @@ pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state</pro <secondary>IPFW</secondary> </indexterm> - <para>IPFIREWALL (IPFW) 是一个由 &os; 发起的防火墙应用软件, + <para>IPFIREWALL (<acronym>IPFW</acronym>) 是一个由 &os; 发起的防火墙应用软件, 它由 &os; 的志愿者成员编写和维护。 它使用了传统的无状态规则和规则编写方式, 以期达到简单状态逻辑所期望的目标。</para> @@ -1909,9 +1893,9 @@ pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state</pro <para>IPFW 由七个部分组成, 其主要组件是内核的防火墙过滤规则处理器, 及其集成的数据包记帐工具、 日志工具、 用以触发 - <acronym>NAT</acronym> 工具的 'divert' (转发) 规则、 + <acronym>NAT</acronym> 工具的 <literal>divert</literal> (转发) 规则、 高级特殊用途工具、 dummynet 流量整形机制, - 'fwd rule' 转发工具, 桥接工具, 以及 ipstealth 工具。 + <literal>fwd rule</literal> 转发工具, 桥接工具, 以及 ipstealth 工具。 IPFW 支持 IPv4 和 IPv6。</para> <sect2 id="firewalls-ipfw-enable"> @@ -1983,7 +1967,8 @@ net.inet.ip.fw.verbose_limit=5</programlisting> <programlisting>options IPFIREWALL_VERBOSE</programlisting> - <para>这个选项将启用记录通过 IPFW 的匹配了包含 'log' 关键字规则的每一个包的功能。</para> + <para>这个选项将启用记录通过 IPFW 的匹配了包含 + <literal>log</literal> 关键字规则的每一个包的功能。</para> <programlisting>options IPFIREWALL_VERBOSE_LIMIT=5</programlisting> @@ -2014,9 +1999,10 @@ net.inet.ip.fw.verbose_limit=5</programlisting> 功能。</para> <note> - <para>如果内核选项中没有加入 IPFIREWALL_DEFAULT_TO_ACCEPT, - 或将您的防火墙设置配置为允许所有的进入包, - 则所有发到本机或发出的包都会被阻止。</para> + <para>如果内核选项中没有加入 + <literal>IPFIREWALL_DEFAULT_TO_ACCEPT</literal>, + 而配置使用的规则集中也没有明确地指定允许连接进入的规则, + 默认情况下, 发到本机和从本机发出的所有包都会被阻止。</para> </note> </sect2> @@ -2054,7 +2040,7 @@ net.inet.ip.fw.verbose_limit=5</programlisting> <para><literal>UNKNOWN</literal> — 禁止加载防火墙规则。</para> </listitem> <listitem> - <para><filename>filename</filename> — 到防火墙规则文件的绝对路径。</para> + <para><filename><replaceable>filename</replaceable></filename> — 到防火墙规则文件的绝对路径。</para> </listitem> </itemizedlist> @@ -2063,66 +2049,22 @@ net.inet.ip.fw.verbose_limit=5</programlisting> 命令行选项的 <emphasis>防火墙规则</emphasis> 文件的完整路径。 下面是一个简单的规则集例子:</para> - <programlisting>add block in all -add block out all</programlisting> + <programlisting>add deny in +add deny out</programlisting> <para>除此之外, 也可以将 <literal>firewall_script</literal> 变量设为包含 <command>ipfw</command> 命令的可执行脚本, 这样这个脚本会在启动时自动执行。 与前面规则集文件等价的规则脚本如下:</para> - <programlisting>#!/bin/sh - -ipfw -q flush - -ipfw add block in all -ipfw add block out all</programlisting> - - <note> - <para>如果 <literal>firewall_type</literal> 设为 - <literal>client</literal> 或 <literal>simple</literal>, - 则还应查看在 <filename>/etc/rc.firewall</filename> - 中的默认规则, 以确认它们与所在机器的配置相一致。 - 此外, 请注意这一章中的例子均假定 <literal>firewall_script</literal> 是 - <filename>/etc/ipfw.rules</filename>。</para> - </note> - - <para>启用日志:</para> - - <programlisting>firewall_logging="YES"</programlisting> - - <warning> - <para>设置 - <varname>firewall_logging</varname> 的唯一作用是, - 系统将把 <varname>net.inet.ip.fw.verbose</varname> sysctl - 变量置为 <literal>1</literal> (参见 <xref - linkend="firewalls-ipfw-enable">)。 并没有能够设置日志限制的 - <filename>rc.conf</filename> 变量, 不过这种限制可以通过设置某些 sysctl - 变量来完成, 可以手工进行操作, 也可以写到 - <filename>/etc/sysctl.conf</filename> 文件中:</para> - - <programlisting>net.inet.ip.fw.verbose_limit=5</programlisting> - </warning> - - <para>如果您的计算机是作为网关使用的, 也就是它通过 &man.natd.8; - 提供网络地址翻译 (NAT), - 请参见 <xref linkend="network-natd"> 以了解需要在 - <filename>/etc/rc.conf</filename> 中配置的选项。</para> - </sect2> - - <sect2 id="firewalls-ipfw-cmd"> - <title>IPFW 命令</title> - - <indexterm><primary><command>ipfw</command></primary></indexterm> - - <para>ipfw 命令是在防火墙运行时, + <para><command>ipfw</command> 命令是在防火墙运行时, 用于在其内部规则表中手工逐条添加或删除防火墙规则的标准工具。 这一方法的问题在于, 一旦您的关闭计算机或停机, 则所有增加或删除或修改的规则也就丢掉了。 把所有的规则都写到一个文件中, 并在启动时使用这个文件来加载规则, 或一次大批量地替换防火墙规则, 那么推荐使用这里介绍的方法。</para> - <para>ipfw 的另一个非常实用的功能是将所有正在运行的防火墙规则显示出来。 + <para><command>ipfw</command> 的另一个非常实用的功能是将所有正在运行的防火墙规则显示出来。 IPFW 的记账机制会为每一个规则动态地创建计数器, 用以记录与它们匹配的包的数量。 在测试规则的过程中, 列出规则及其计数器是了解它们是否工作正常的重要手段。</para> @@ -2156,27 +2098,23 @@ ipfw add block out all</programlisting> <para>只把规则号为 <replaceable>NUM</replaceable> 的计数器清零:</para> - <screen>&prompt.root; <userinput>ipfw zero NUM</userinput></screen> + <screen>&prompt.root; <userinput>ipfw zero <replaceable>NUM</replaceable></userinput></screen> </sect2> <sect2 id="firewalls-ipfw-rules"> <title>IPFW 规则集</title> - <!-- XXX: looks incorrect (and duplicated 2 times in this chapter): - 1. Packet can be processed two times depend of firewall - firewall configuration, but "return trip back" is - another packet. - 2. "Each TCP/IP service ... is predefined by its protocol ..." - - this shold be about packet and it's parameters - (source/destination address and port). --> - - <para>规则集是一组根据包中选择的数值使用 allow 或 deny 写出的 ipfw 规则。 - 在两个主机之前的双向包交换组成了一次会话交互。 防火墙规则集, - 会对同一个包处理两次: 第一次是包从公网上到达防火墙时, - 而第二次则是包返回 Internet 公网上的主机时。 - 每一个 TCP/IP 服务 (例如 telnet, www, mail, - 等等), 都有事先定义好的协议, 以及一个端口号。 - 这可以作为建立允许或阻止规则时的基本选择依据。</para> + <!-- This has already appeared once --> + + <para>规则集是指一组编写好的依据包的值决策允许通过或阻止 IPFW 规则。 + 包的双向交换组成了一个会话交互。 防火墙规则集会作用于来自于 + Internet 公网的包以及由系统发出来回应这些包的数据包。 + 每一个 <acronym>TCP/IP</acronym> 服务 (例如 telnet, www, + 邮件等等) 都由协议预先定义了其特权 (监听) 端口。 + 发到特定服务的包会从源地址使用非特权 (高编号) 端口发出, + 并发到特定服务在目的地址的对应端口。 + 所有这些参数 (例如: 端口和地址) + 都是可以为防火墙规则所利用的, 判别是否允许服务通过的标准。</para> <indexterm> <primary>IPFW</primary> @@ -2190,7 +2128,7 @@ ipfw add block out all</programlisting> 并自顶向下地进行匹配。 当包与某个选择规则参数相匹配时, 将会执行规则所定义的动作, 并停止规则集搜索。 这种策略, 通常也被称作 <quote>最先匹配者获胜</quote> 的搜索方法。 - 如果没有任何与包相匹配的规则, 那么它就会根据强制的 ipfw + 如果没有任何与包相匹配的规则, 那么它就会根据强制的 IPFW 默认规则, 也就是 65535 号规则截获。 一般情况下这个规则是阻止包, 而且不给出任何回应。</para> @@ -2201,23 +2139,13 @@ ipfw add block out all</programlisting> </note> <para>这里所介绍的规则, 都是使用了那些包含状态功能的, - 也就是 'keep state'、 'limit'、 'in'/'out'、 - 或者 'via' 选项的规则。 这是编写包容式防火墙规则集所需的基本框架。</para> - - <!-- XXX: something like this already in - <xref linkend="firewalls-concepts"> - AND: the para below is repeated 3 times in this chapter. --> - - <para>包容式防火墙只允许与规则匹配的包通过。 这样, - 您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务, - 同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。 - 所有其它的访问请求都会被阻止, 并记录下来。 - 包容式防火墙一般而言要远比排斥式的要安全, - 而且也只需要定义允许哪些访问通过。</para> + 也就是 <literal>keep state</literal>、 <literal>limit</literal>、 <literal>in</literal>、 <literal>out</literal> + 以及 <literal>via</literal> 选项的规则。 + 这是编写明示允许防火墙规则集所需的基本框架。</para> <warning> <para>在操作防火墙规则时应谨慎行事, 如果操作不当, - 有可能将自己反锁在外面。</para> + 很容易将自己反锁在外面。</para> </warning> <sect3 id="firewalls-ipfw-rules-syntax"> @@ -2230,7 +2158,7 @@ ipfw add block out all</programlisting> </indexterm> <para>这里所介绍的规则语法已经经过了简化, - 只包括了建立标准的包容式防火墙规则集所必需的那些。 + 只包括了建立标准的明示允许防火墙规则集所必需的那些。 要了解完整的规则语法说明, 请参见 &man.ipfw.8; 联机手册。</para> @@ -2291,15 +2219,16 @@ ipfw add block out all</programlisting> <para><parameter>log</parameter> or <parameter>logamount</parameter></para> - <para>当数据包与带 log 关键字的规则匹配时, - 将通过名为 SECURITY 的 facility 来把消息记录到 syslogd。 + <para>当数据包与带 <literal>log</literal> 关键字的规则匹配时, + 将通过名为 SECURITY 的 facility 来把消息记录到 &man.syslogd.8;。 只有在记录的次数没有超过 logamount 参数所指定的次数时, - 才会记录日志。 如果没有指定 logamount, 则会以 sysctl 变量 - net.inet.ip.fw.verbose_limit 所指定的限制为准。 + 才会记录日志。 如果没有指定 <literal>logamount</literal>, + 则会以 sysctl 变量 + <literal>net.inet.ip.fw.verbose_limit</literal> 所指定的限制为准。 如果将这两种限制值之一指定为零, 则表示不作限制。 - 万一达到了限制数, + 如果达到了限制数, 可以通过将规则的日志计数或包计数清零来重新启用日志, - 请参见 ipfw reset log 命令来了解细节。</para> + 请参见 <command>ipfw reset log</command> 命令来了解细节。</para> <note> <para>日志是在所有其他匹配条件都验证成功之后, @@ -2324,25 +2253,27 @@ ipfw add block out all</programlisting> <para><parameter>from src to dst</parameter></para> - <para>from 和 to 关键字用于匹配 IP 地址。 - 规则中必须同时指定源和目的两个参数。 + <para><literal>from</literal> 和 <literal>to</literal> 关键字用于匹配 IP + 地址。 规则中必须 <emphasis>同时</emphasis> 指定源和目的两个参数。 如果需要匹配任意 IP 地址, 可以使用特殊关键字 <literal>any</literal>。 还有一个特殊关键字, 即 <literal>me</literal>, 用于匹配您的 &os; 系统上所有网络接口上所配置的 IP 地址, 它可以用于表达网络上的其他计算机到防火墙 (也就是本机), - 例如 'from me to any' 或 'from any to me' 或 'from 0.0.0.0/0 to any' 或 - 'from any to 0.0.0.0/0' 或 'from 0.0.0.0 to any' 或 'from - any to 0.0.0.0' 以及 'from me to 0.0.0.0'。 IP - 地址可以通过 带点的 IP 地址/掩码长度, - 或者一个带点的 IP 地址的形式来指定。 这是编写规则时所必需的。 - 如果不清楚如何写掩码长度, 请参见 <ulink + 例如 <literal>from me to any</literal> 或 <literal>from any to me</literal> 或 <literal>from 0.0.0.0/0 to any</literal> 或 + <literal>from any to 0.0.0.0/0</literal> 或 <literal>from 0.0.0.0 to any</literal> 或 <literal>from + any to 0.0.0.0</literal> 以及 <literal>from me to 0.0.0.0</literal>。 IP + 地址可以通过 带点的 IP 地址/掩码长度 (CIDR 记法), + 或者一个带点的 IP 地址的形式来指定。 + 这是编写规则时所必需的。 使用 <filename + role="package">net-mgmt/ipcalc</filename> port 可以用来简化计算。 + 关于这个工具的更多信息, 也可参考它的主页: <ulink url="http://jodies.de/ipcalc"></ulink>。</para> <para><parameter>port number</parameter></para> <para>这个参数主要用于那些支持端口号的协议 (例如 - <acronym>TCP</acronym> 和 UDP)。 如果要通过端口号匹配某个协议, + <acronym>TCP</acronym> 和 <acronym>UDP</acronym>)。 如果要通过端口号匹配某个协议, 就必须指定这个参数。 此外, 也可以通过服务的名字 (根据 <filename>/etc/services</filename>) 来指定服务, 这样会比使用数字指定端口号直观一些。</para> @@ -2350,7 +2281,7 @@ ipfw add block out all</programlisting> <para><parameter>in | out</parameter></para> <para>相应地, 匹配进入和发出的包。 - 这里的 in 和 out 都是关键字, 在编写匹配规则时, + 这里的 <literal>in</literal> 和 <literal>out</literal> 都是关键字, 在编写匹配规则时, 必需作为其他条件的一部分来使用。</para> <para><parameter>via IF</parameter></para> @@ -2376,8 +2307,8 @@ ipfw add block out all</programlisting> <para>防火墙只允许匹配规则时, 与指定的参数相同的 <replaceable>N</replaceable> 个连接。 可以指定至少一个源或目的地址及端口。 - 'limit' 和 'keep-state' 不能在同一规则中同时使用。 - 'limit' 提供了与 'keep-state' 相同的功能, + <literal>limit</literal> 和 <literal>keep-state</literal> 不能在同一规则中同时使用。 + <literal>limit</literal> 提供了与 <literal>keep-state</literal> 相同的功能, 并增加了一些独有的能力。</para> </sect4> </sect3> @@ -2399,7 +2330,7 @@ ipfw add block out all</programlisting> 并在遵循双向包交换的规则进行会话。 如果包与这些规则不符, 则将自动地拒绝它们。</para> - <para>'check-state' 用来识别在 IPFW + <para><literal>check-state</literal> 用来识别在 IPFW 规则集中的包是否符合动态规则机制的规则。 如果匹配, 则允许包通过, 此时防火墙将创建一个新的动态规则来匹配双向交换中的下一个包。 @@ -2407,10 +2338,11 @@ ipfw add block out all</programlisting> <para>动态规则机制在 SYN-flood 攻击下是脆弱的, 因为这种情况会产生大量的动态规则, 从而耗尽资源。 - 为了抵抗这种攻击, 从 &os; 中加入了一个叫做 limit + 为了抵抗这种攻击, 从 &os; 中加入了一个叫做 <literal>limit</literal> 的新选项。 这个选项可以用来限制符合规则的会话允许的并发连接数。 - 如果动态规则表中的规则数超过限制, 则包将被丢弃。</para> + 如果动态规则表中的规则数超过 <literal>limit</literal> 的限制数量, + 则包将被丢弃。</para> </sect3> <sect3> @@ -2428,27 +2360,28 @@ ipfw add block out all</programlisting> <para>即使启用了日志机制, IPFW 也不会自行生成任何规则的日志。 防火墙管理员需要指定规则集中的哪些规则应该记录日志, - 并在这些规则上增加 log 动作。 一般来说, 只有 + 并在这些规则上增加 <literal>log</literal> 动作。 一般来说, 只有 deny 规则应记录日志, 例如对于进入的 <acronym>ICMP</acronym> ping 的 deny 规则。 另外, - 复制默认的 ipfw 终极 deny 规则, 并加入 log + 复制 <quote>默认的 ipfw 终极 deny 规则</quote>, 并加入 <literal>log</literal> 动作来作为您的规则集的最后一条规则也是很常见的用法。 这样, 您就能看到没有匹配任何一条规则的那些数据包。</para> <para>日志是一把双刃剑, 如果不谨慎地加以利用, 则可能会陷入过多的日志数据中, 并导致磁盘被日志塞满。 将磁盘填满是 DoS 攻击最为老套的手法之一。 - 由于日志除了会写入磁盘之外, 还会输出到 root 的控制台屏幕上, + 由于 <application>syslogd</application> 除了会将日志写入磁盘之外, + 还会输出到 root 的控制台屏幕上, 因此有过多的日志信息是很让人恼火的事情。</para> <para><literal>IPFIREWALL_VERBOSE_LIMIT=5</literal> - 内核选项将限制同一个规则发到系统日志程序 syslogd 的连续消息的数量。 + 内核选项将限制同一个规则发到系统日志程序 &man.syslogd.8; 的连续消息的数量。 当内核启用了这个选项时, 某一特定规则所产生的连续消息的数量将封顶为这个数字。 一般来说, 没有办法从连续 200 条一模一样的日志信息中获取更多有用的信息。 举例来说, 如果同一个规则产生了 5 次消息并被记录到 - syslogd, 余下的相同的消息将被计数, - 并像下面这样发给 syslogd:</para> + <application>syslogd</application>, 余下的相同的消息将被计数, + 并像下面这样发给 <application>syslogd</application>:</para> <programlisting>last message repeated 45 times</programlisting> @@ -2469,8 +2402,8 @@ ipfw add block out all</programlisting> 并用同一个符号在多个规则中反复地表达它。 下面将给出一个例子。</para> - <para>这个脚本使用的语法同 'sh'、 - 'csh' 以及 'tcsh' 脚本兼容。 符号替换字段使用美元符号 $ + <para>这个脚本使用的语法同 &man.sh.1;、 + &man.csh.1; 以及 &man.tcsh.1; 脚本兼容。 符号替换字段使用美元符号 $ 作为前缀。 符号字段本身并不使用 $ 前缀。 符号替换字段的值必须使用 "双引号" 括起来。</para> @@ -2496,8 +2429,8 @@ ks="keep-state" # just too lazy to key this each time 它们主要是用来表示如何使用符号替换。</para> <para>如果把上面的例子保存到 - <filename>/etc/ipfw.rules</filename> 文件中, - 您就可以通过输入下面的命令来加载它。</para> + <filename>/etc/ipfw.rules</filename> 文件中。 + 下面的命令来会重新加载规则。</para> <screen>&prompt.root; <userinput>sh /etc/ipfw.rules</userinput></screen> @@ -2519,10 +2452,11 @@ ks="keep-state" # just too lazy to key this each time <title>带状态规则集</title> <para>以下的这组非-<acronym>NAT</acronym> 规则集, - 是如何编写非常安全的 '包容式' 防火墙的一个例子。 - 包容式防火墙只允许匹配了 pass 规则的包通过, - 而默认阻止所有的其他数据包。 必须有至少两个网络接口, - 并且在其上配置了规则才能使防火墙正常工作。</para> + 是如何编写非常安全的 '明示允许' 防火墙的一个例子。 + 明示允许防火墙只允许匹配了 pass 规则的包通过, + 而默认阻止所有的其他数据包。 + 用来保护整个网段的防火墙, 至少需要有两个网络接口, + 并且其上必须配置规则, 以便让防火墙正常工作。</para> <para>所有类 &unix; 操作系统, 也包括 &os;, 都设计为允许使用网络接口 <devicename>lo0</devicename> 和 IP @@ -2531,7 +2465,8 @@ ks="keep-state" # just too lazy to key this each time <para>接入 Internet 公网的那个网络接口上, 应该配置授权和访问控制, 来限制对外的访问, 以及来自 Internet - 公网的访问。 这个接口很可能是您的 ppp 接口, 例如 + 公网的访问。 这个接口很可能是您的用户态 + <acronym>PPP</acronym> 接口, 例如 <devicename>tun0</devicename>, 或者您接在 DSL 或电缆 modem 上的网卡。</para> @@ -2546,27 +2481,27 @@ ks="keep-state" # just too lazy to key this each time 应该是最经常用到的放在尽可能靠前的位置, 而最后一个规则, 则应该是阻止那个接口在那一方向上的包。</para> - <para>发出部分的规则只包含一些 'allow' 规则, + <para>发出部分的规则只包含一些 <literal>allow</literal> 规则, 允许选定的那些唯一区分协议的端口号所指定的协议通过, 以允许访问 Internet 公网上的这些服务。 - 所有的规则中都指定了 proto, port, - in/out, via 以及 keep state 这些选项。 'proto tcp' - 规则同时指定 'setup' 选项, 来区分开始协议会话的包, + 所有的规则中都指定了 <literal>proto</literal>、 <literal>port</literal>、 + <literal>in/out</literal>、 <literal>via</literal> 以及 <literal>keep state</literal> 这些选项。 <literal>proto tcp</literal> + 规则同时指定 <literal>setup</literal> 选项, 来区分开始协议会话的包, 以触发将包放入 keep state 规则表中的动作。</para> - <para>接收部分则首先阻止所有不希望的包, 在这里有两个目的。 - 首先是, 这些包被禁止掉之后, 就不会由于匹配了后面的某个规则而被允许。 - 其次, 明确地禁止这些包, 就不会再在日志中记录它们而形成干扰。 - 防火墙的最后一条规则是阻止并记录所有包, 这样, - 您就可以留下用于起诉攻击您的系统的人的有用记录。</para> - - <para>另一件需要注意的事情是, 不希望的数据包一般来说不会有任何响应, - 这些数据包会被丢弃并消失。 这样, - 攻击者也就无法了解他的数据包是否到达了您的系统。 - 而攻击者了解的信息越少, 它们攻陷系统所需的时间也就越长。 - 当记录的包使用的端口号不是您所熟悉的那些时, 可以看一看 - <filename>/etc/services/</filename> 或到 <ulink + <para>接收部分则首先阻止所有不希望的包, 这样做有两个不同的原因。 + 其一是恶意的包可能和某些允许的流量规则存在部分匹配, 而我们希望阻止, + 而不是让这些包仅仅与 <literal>allow</literal> 规则部分匹配就允许它们进入。 + 其二是, 已经确信要阻止的包被拒绝这件事, 往往并不是我们需要关注的, + 因此只要简单地予以阻止即可。 + 防火墙规则集中的每个部分的最后一条规则都是阻止并记录包, + 这有助于为逮捕攻击者留下法律所要求的证据。</para> + + <para>另外一个需要注意的事情是确保系统对不希望的数据包不做回应。 + 无效的包应被丢弃和消失。 这样, 攻击者便无法知道包是否到达了您的系统。 + 攻击者对系统了解的越少, 其攻击的难度也就越大。 如果不知道端口号, + 可以查阅 <filename>/etc/services/</filename> 或到 <ulink url="http://www.securitystats.com/tools/portsearch.php"></ulink> 并查找一下端口号, 以了解其用途。 另外, 您也可以在这个网页上了解常见木马所使用的端口: <ulink @@ -2574,35 +2509,37 @@ ks="keep-state" # just too lazy to key this each time </sect3> <sect3> - <title>包容式规则集的例子</title> + <title>明示允许规则集的例子</title> <para>下面是一个非-<acronym>NAT</acronym> 的规则集, - 它是一个完整的包容式规则集。 使用它作为您的规则集不会有什么问题。 + 它是一个完整的明示允许规则集。 使用它作为您的规则集不会有什么问题。 只需把那些不需要的服务对应的 pass 规则注释掉就可以了。 如果您在日志中看到消息, 而且不想再看到它们, - 只需在接收部分增加一个一个 deny 规则。 您可能需要把 'dc0' - 改为接入公网的接口的名字。 对于使用用户态 ppp 的用户而言, 应该是 - 'tun0'。</para> + 只需在接收部分增加一个一个 <literal>deny</literal> 规则。 + 您可能需要把 <devicename>dc0</devicename> 改为接入公网的接口的名字。 + 对于使用用户态 <acronym>PPP</acronym> 的用户而言, 应该是 + <devicename>tun0</devicename>。</para> - <para>您可以看出这些规则中的模式。</para> + <para>这些规则遵循一定的模式。</para> <itemizedlist> <listitem> <para>所有请求 Internet 公网上服务的会话开始包, - 都使用了 keep-state。</para> + 都使用了 <literal>keep-state</literal>。</para> </listitem> <listitem> <para>所有来自 Internet 的授权服务请求, - 都采用了 limit 选项来防止洪水式攻击。</para> + 都采用了 <literal>limit</literal> 选项来防止洪水式攻击。</para> </listitem> <listitem> - <para>所有的规则都使用了 in 或者 out 来说明方向。</para> + <para>所有的规则都使用了 <literal>in</literal> 或者 <literal>out</literal> 来说明方向。</para> </listitem> <listitem> - <para>所有的规则都使用了 via 接口名来指定应该匹配通过哪一个接口的包。</para> + <para>所有的规则都使用了 <literal>via</literal> <replaceable>接口名</replaceable> + 来指定应该匹配通过哪一个接口的包。</para> </listitem> </itemizedlist> @@ -2694,8 +2631,8 @@ pif="dc0" # public interface name of NIC ################################################################# # Interface facing Public Internet (Inbound Section) -# Interrogate packets originating from the public Internet -# destine for this gateway server or the private network. +# Check packets originating from the public Internet +# destined for this gateway server or the private network. ################################################################# # Deny all inbound traffic from non-routable reserved address spaces @@ -2770,7 +2707,7 @@ pif="dc0" # public interface name of NIC <para>要使用 IPFW 的 <acronym>NAT</acronym> 功能, 还需要进行一些额外的配置。 除了其他 IPFIREWALL 语句之外, - 还需要在内核编译配置中加上 'option IPDIVERT' 语句。</para> + 还需要在内核编译配置中加上 <literal>option IPDIVERT</literal> 语句。</para> <para>在 <filename>/etc/rc.conf</filename> 中, 除了普通的 IPFW 配置之外, @@ -2780,13 +2717,13 @@ pif="dc0" # public interface name of NIC natd_interface="rl0" # interface name of public Internet NIC natd_flags="-dynamic -m" # -m = preserve port numbers if possible</programlisting> - <para>将带状态规则与转发 natd 规则 (网络地址转换) - 会使规则集的编写变得非常复杂。 check-state 的位置, - 以及 'divert natd' 规则将变得非常关键。 这样一来, - 就不再有简单的顺序处理逻辑流程了。 提供了一种新的动作类型, - 称为 'skipto'。 要使用 skipto 命令, - 就必须给每一个规则进行编号, - 以确定 skipto 规则号是您希望跳转到的位置。</para> + <para>将带状态规则与 <literal>divert natd</literal> 规则 (网络地址转换) + 会使规则集的编写变得非常复杂。 <literal>check-state</literal> 的位置, + 以及 <literal>divert natd</literal> 规则将变得非常关键。 这样一来, + 就不再有简单的顺序处理逻辑流程了。 提供了一种新的动作类型, 称为 + <literal>skipto</literal>。 要使用 <literal>skipto</literal> 命令, + 就必须给每一个规则进行编号, 以确定 + <literal>skipto</literal> 规则号是您希望跳转到的位置。</para> <para>下面给出了一些未加注释的例子来说明如何编写这样的规则, 用以帮助您理解包处理规则集的处理顺序。</para> @@ -2800,7 +2737,7 @@ natd_flags="-dynamic -m" # -m = preserve port numbers if possible</pr LAN IP 地址关联。 另一个需要注意的是, 所有的 allow 和 deny 规则都指定了包的方向 (也就是 outbound 或 inbound) 以及网络接口。 最后, 请注意所有发出的会话请求都会请求 - skipto rule 500 以完成网络地址转换。</para> + <literal>skipto rule 500</literal> 以完成网络地址转换。</para> <para>下面以 LAN 用户使用 web 浏览器访问一个 web 页面为例。 Web 页面使用 80 来完成通讯。 当包进入防火墙时, @@ -2811,23 +2748,23 @@ natd_flags="-dynamic -m" # -m = preserve port numbers if possible</pr 最终, 它会通过接入 Internet 公网的网卡发出。 这之前, 包的源地址仍然是内网 IP 地址。 一旦匹配这个规则, 就会触发两个动作。 - keep-state 选项会把这个规则发到 keep-state 动态规则表中, + <literal>keep-state</literal> 选项会把这个规则发到 keep-state 动态规则表中, 并执行所指定的动作。 动作是发到规则表中的信息的一部分。 - 在这个例子中, 这个动作是 "skipto rule - 500"。 规则 500 <acronym>NAT</acronym> 包的 IP 地址, + 在这个例子中, 这个动作是 <literal>skipto rule + 500</literal>。 规则 500 <acronym>NAT</acronym> 包的 IP 地址, 并将其发出。 请务必牢记, 这一步非常重要。 接下来, 数据包将到达目的地, 之后返回并从规则集的第一条规则开始处理。 这一次, 它将与规则 100 匹配, 其目的 IP 地址将被映射回对应的内网 LAN IP 地址。 其后, 它会被 - check-state 规则处理, 进而在暨存会话表中找到对应项, + <literal>check-state</literal> 规则处理, 进而在暨存会话表中找到对应项, 并发到 LAN。 数据包接下来发到了内网 LAN PC 上, 而后者则会发送从远程服务器请求下一段数据的新数据包。 - 这个包会再次由 check-state 规则检查, 并找到发出的表项, - 并执行其关联的动作, 即 'skipto 500'。 包跳转到规则 500 并被 + 这个包会再次由 <literal>check-state</literal> 规则检查, 并找到发出的表项, + 并执行其关联的动作, 即 <literal>skipto 500</literal>。 包跳转到规则 500 并被 <acronym>NAT</acronym> 后发出。</para> - <para>在接收一侧, 已经存在的会话的数据包, 会被 check-state - 规则自动地处理, 并放到转发 natd 规则。 我们需要解决的问题是, + <para>在接收一侧, 已经存在的会话的数据包会被 <literal>check-state</literal> + 规则自动地处理, 并转到 <literal>divert nat</literal> 规则。 我们需要解决的问题是, 阻止所有的坏数据包, 而只允许授权的服务。 例如在防火墙上运行了 Apache 服务, 而我们希望人们在访问 Internet 公网的同时, 也能够访问本地的 web 站点。 @@ -2838,8 +2775,8 @@ natd_flags="-dynamic -m" # -m = preserve port numbers if possible</pr 数据包会被发到 keep-state 动态表, 但此时, 所有来自那个源 IP 的会话请求的数量会被限制为 2。 这一做法能够挫败针对指定端口上服务的 DoS 攻击。 - 动作同时指定了包应被发到 LAN 上。 包返回时, - check-state 规则会识别出包属于某一已经存在的会话交互, + 动作同时指定了 <literal>allow</literal> 包应被发到 LAN 上。 包返回时, + <literal>check-state</literal> 规则会识别出包属于某一已经存在的会话交互, 并直接把它发到规则 500 做 <acronym>NAT</acronym>, 并发到发出接口。</para> @@ -2933,9 +2870,9 @@ pif="rl0" # public interface name of NIC ################################################################# # Interface facing Public Internet (Outbound Section) -# Interrogate session start requests originating from behind the +# Check session start requests originating from behind the # firewall on the private network or from this gateway server -# destine for the public Internet. +# destined for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. @@ -2983,8 +2920,8 @@ pif="rl0" # public interface name of NIC ################################################################# # Interface facing Public Internet (Inbound Section) -# Interrogate packets originating from the public Internet -# destine for this gateway server or the private network. +# Check packets originating from the public Internet +# destined for this gateway server or the private network. ################################################################# # Deny all inbound traffic from non-routable reserved address spaces diff --git a/zh_CN.GB2312/books/handbook/geom/chapter.sgml b/zh_CN.GB2312/books/handbook/geom/chapter.sgml index deeb48f497..894328565f 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.47 + Original Revision: 1.48 $FreeBSD$ --> @@ -599,6 +599,35 @@ devfs on /dev (devfs, local) /dev/label/usr on /usr (ufs, local, soft-updates) /dev/label/var on /var (ufs, local, soft-updates)</screen> </example> + + <para>从 &os; 7.2 开始, &man.glabel.8; class + 新增了一种用于 <acronym>UFS</acronym> 文件系统唯一标识符, + <literal>ufsid</literal> 的标签支持。 + 这些标签可以在 <filename class="directory">/dev/ufsid</filename> + 目录中找到, 它们会在系统引导时自动创建。 + 在 <filename>/etc/fstab</filename> 机制中, + 也可以使用 <literal>ufsid</literal> 标签。 您可以使用 + <command>glabel status</command> 命令来获得与文件系统对应的 + <literal>ufsid</literal> 标签列表:</para> + + <screen>&prompt.user; <userinput>glabel status</userinput> + Name Status Components +ufsid/486b6fc38d330916 N/A ad4s1d +ufsid/486b6fc16926168e N/A ad4s1f</screen> + + <para>在上面的例子中 <devicename>ad4s1d</devicename> + 代表了 <filename class="directory">/var</filename> + 文件系统, 而 <devicename>ad4s1f</devicename> 则代表了 + <filename class="directory">/usr</filename> 文件系统。 您可以使用这些 + <literal>ufsid</literal> 值来挂载它们, 在 + <filename>/etc/fstab</filename> 中配置类似这样:</para> + + <programlisting>/dev/ufsid/486b6fc38d330916 /var ufs rw 2 2 +/dev/ufsid/486b6fc16926168e /usr ufs rw 2 2</programlisting> + + <para>所有包含了 <literal>ufsid</literal> 的标签都可以用这种方式挂载, + 从而消除了需要手工创建永久性标签的麻烦, + 而又能够提供提供与设备名无关的挂载方式的便利。</para> </sect2> </sect1> diff --git a/zh_CN.GB2312/books/handbook/introduction/chapter.sgml b/zh_CN.GB2312/books/handbook/introduction/chapter.sgml index 59cce23a31..4e8c7da492 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.135 + Original Revision: 1.137 $FreeBSD$ --> @@ -449,6 +449,12 @@ America</ulink></para> </listitem> + <indexterm><primary>Experts Exchange</primary></indexterm> + <listitem> + <para><ulink url="http://www.experts-exchange.com/">Experts + Exchange</ulink></para> + </listitem> + </itemizedlist> <para>等等许多。</para> @@ -596,21 +602,25 @@ 2004 年 2 月正式发布。</para> <para>RELENG_5 于 2004 年 8 月正式创建, 紧随其后的是 5.3-RELEASE, - 它是 5-STABLE 分支的标志性发行版。 最新的 5.5-RELEASE - 是在 &rel2.current.date; 发布的。 RELENG_5 分支不会有后续的发行版了。</para> + 它是 5-STABLE 分支的标志性发行版。 这个分支的最后一个版本, 5.5-RELEASE + 是在 2006 年 5 月发布的。 RELENG_5 分支不会有后续的发行版了。</para> <para>其后在 2005 年 7 月又建立了 RELENG_6 分支。 而 6.X 分支上的第一个版本, - 即 6.0-RELEASE, 则是在 2005 年 11 月发布的。 - 最新的 &rel2.current;-RELEASE 发布于 &rel2.current.date;。 - RELENG_6 分支上不再会有发布版本了。</para> + 即 6.0-RELEASE, 则是在 2005 年 11 月发布的。 这个分支的最后一个版本, + 6.4-RELEASE 是在 + 2008 年 11 月 发布的。 RELENG_6 分支上不再会有发布版本了。</para> <para>RELENG_7 分支于 2007 年 10 月创建。 第一个这个分支的发行版是 7.0-RELEASE, 这个版本是 2008 年 2 月发布的。 - 最新的 &rel.current;-RELEASE 是在 &rel.current.date; 发布的。 + 最新的 &rel2.current;-RELEASE 是在 &rel2.current.date; 发布的。 RELENG_7 还将会有其它后续的发布版本。</para> + <para>其后在 2009 年 8 月又建立了 RELENG_8 分支。 + 8.X 分支的第一个版本, 8.0-RELEASE 是在 &rel.current.date; + 发布的。</para> + <para>目前, 中长期的开发项目继续在 - 8.X-CURRENT (主干, trunk) 分支中进行, 而 8.X 的 + 9.X-CURRENT (主干, trunk) 分支中进行, 而 9.X 的 CD-ROM (当然, 也包括网络) 快照版本可以在 <ulink url="ftp://current.FreeBSD.org/pub/FreeBSD/snapshots/"> 快照服务器</ulink> 找到。</para> diff --git a/zh_CN.GB2312/books/handbook/jails/chapter.sgml b/zh_CN.GB2312/books/handbook/jails/chapter.sgml index 322ef202d9..35936b77f8 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.18 + Original Revision: 1.20 $FreeBSD$ --> <chapter id="jails"> @@ -71,9 +71,10 @@ <variablelist> <varlistentry> - <term>&man.chroot.2; (命令)</term> + <term>&man.chroot.8; (命令)</term> <listitem> - <para>&os; 的一个系统调用, 其作用是改变进程及其衍生进程所能看到的根目录。</para> + <para>这个工具使用 &os; 的系统调用 &man.chroot.2; &os; 来改变进程, + 以及进程的所有衍生进程所能看到的根目录。</para> </listitem> </varlistentry> @@ -205,8 +206,6 @@ &prompt.root; <userinput>cd /usr/src</userinput> &prompt.root; <userinput>make buildworld</userinput> <co id="jailbuildworld"> &prompt.root; <userinput>make installworld DESTDIR=$D</userinput> <co id="jailinstallworld"> -&prompt.root; <userinput>cd etc/</userinput> <footnote><para>在 &os; 6.0 及 -之后的版本中不必须进行这个步骤。</para></footnote> &prompt.root; <userinput>make distribution DESTDIR=$D</userinput> <co id="jaildistrib"> &prompt.root; <userinput>mount -t devfs devfs $D/dev</userinput> <co id="jaildevfs"></screen> diff --git a/zh_CN.GB2312/books/handbook/kernelconfig/chapter.sgml b/zh_CN.GB2312/books/handbook/kernelconfig/chapter.sgml index 9fbb04f8c9..8839c55dc6 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.192 + Original Revision: 1.194 $FreeBSD$ --> @@ -387,9 +387,9 @@ following line in &man.loader.conf.5: <para>这个变量的内容是所希望构建的模块列表。</para> - <programlisting>WITHOUT_MODULES = linux acpi sound/sound sound/driver/ds1 ntfs</programlisting> + <programlisting>WITHOUT_MODULES = linux acpi sound ntfs</programlisting> - <para>这个变量的内容是在联编过程中将不被编译的模块列表。 + <para>这个变量的内容是将不在联编过程中编译的顶级模块列表。 如果希望了解更多与构建内核有关的变量, 请参见 &man.make.conf.5; 联机手册。</para> </tip> @@ -556,9 +556,9 @@ cpu I686_CPU</programlisting> 由于此选项将传递给 &man.gcc.1; 表示加入调试信息, 因此会将调试符号也包含进来。</para> - <programlisting>options SCHED_4BSD # 4BSD scheduler</programlisting> + <programlisting>options SCHED_ULE # ULE scheduler</programlisting> - <para>这是 &os; 传统上使用的默认系统调度器。 请保留此选项。</para> + <para>这是 &os; 上使用的默认系统调度器。 请保留此选项。</para> <programlisting>options PREEMPTION # Enable kernel thread preemption</programlisting> diff --git a/zh_CN.GB2312/books/handbook/l10n/chapter.sgml b/zh_CN.GB2312/books/handbook/l10n/chapter.sgml index d92911f56e..87ae03a44d 100644 --- a/zh_CN.GB2312/books/handbook/l10n/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/l10n/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Chinese Documentation Project - Original Revision: 1.128 + Original Revision: 1.132 $FreeBSD$ --> @@ -266,14 +266,14 @@ me:\ <para>检查用户的登入分类在 <filename>/etc/login.conf</filename>里面是否设置了正确的语言。主要确定下面的几个设置:</para> - <programlisting><replaceable>language_name</replaceable>:<replaceable>accounts_title</replaceable>:\ + <programlisting><replaceable>language_name</replaceable>|<replaceable>Account Type Description</replaceable>:\ :charset=<replaceable>MIME_charset</replaceable>:\ :lang=<replaceable>locale_name</replaceable>:\ :tc=default:</programlisting> <para>再次使用前面的Latin-1编码的例子:</para> - <programlisting>german:German Users Accounts:\ + <programlisting>german|German Users Accounts:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1:\ :tc=default:</programlisting> @@ -398,14 +398,13 @@ font8x8=<replaceable>font_name</replaceable></programlisting> </indexterm> <indexterm><primary>keymap</primary></indexterm> <indexterm><primary>screenmap</primary></indexterm> - <para>您还需要确定正确地为您的 C 字符集配置了 keymap 和 screenmap, - 这一工作可以通过 - <command>sysinstall</command> (在 &os; 5.2 - 之前的版本是 <command>/stand/sysinstall</command>) 来完成。。 - 进入 <application>sysinstall</application> 之后, - 选择 <guimenuitem>Configure</guimenuitem>, - <guimenuitem>Console</guimenuitem>。 此外, 您也可以将下面的设置加入 - <filename>/etc/rc.conf</filename>:</para> + <para>如果需要的话, 还应通过 + <command>sysinstall</command> 来配置与单字节 C + 字符集对应的 keymap 和 screenmap。 + 在 <application>sysinstall</application> 中, + 选择 <guimenuitem>Configure</guimenuitem> 之后选择 + <guimenuitem>Console</guimenuitem> 即可进行配置。 + 除此之外, 您也可以在 <filename>/etc/rc.conf</filename> 中加入类似下面的配置:</para> <programlisting>scrnmap=<replaceable>screenmap_name</replaceable> keymap=<replaceable>keymap_name</replaceable> @@ -725,11 +724,7 @@ font8x8="cp866-8x8"</programlisting> <literal>"Files"</literal> 小节。 下面的行, 应加到任何其它 <literal>FontPath</literal> 项之前:</para> - <programlisting>FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/misc" -FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/75dpi" -FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/100dpi"</programlisting> - - <para>如果希望使用高分辨率的现实模式, 则应把 100 dpi 的配置行放在 75 dpi 前面。</para> + <programlisting>FontPath "/usr/local/lib/X11/fonts/cyrillic"</programlisting> <note> <para>请查看 ports 中的其它西里尔字体。</para></note> diff --git a/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml b/zh_CN.GB2312/books/handbook/linuxemu/chapter.sgml index f1b5c70db8..9bda7ae74f 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.139 + Original Revision: 1.140 $FreeBSD$ --> @@ -261,7 +261,9 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29</screen> ELF binary type not known Abort</screen> - <para>为了帮助FreeBSD内核分辨FreeBSD ELF程序和Linux程序,要使用&man.brandelf.1;工具:</para> + <para>为帮助 FreeBSD 内核分辨 FreeBSD ELF + 执行文件和 Linux 执行文件, 需要使用 &man.brandelf.1; + 工具。</para> <screen>&prompt.user; <userinput>brandelf -t Linux my-linux-elf-binary</userinput></screen> diff --git a/zh_CN.GB2312/books/handbook/mac/chapter.sgml b/zh_CN.GB2312/books/handbook/mac/chapter.sgml index fde94d2be2..e8ceed906a 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.74 + Original Revision: 1.75 $FreeBSD$ --> @@ -1586,7 +1586,7 @@ setpmac biba/10\(10-10\) /usr/local/etc/rc.d/nagios.sh forcestart</userinput></s <para>首先, 在 <filename>/boot/loader.conf</filename> 中加入:</para> - <programlisting>mac_seeotheruids_enabled="YES"</programlisting> + <programlisting>mac_seeotheruids_load="YES"</programlisting> <para>随后, 可以通过下述 rc.conf 变量来启用 &man.mac.bsdextended.4; 安全策略模块:</para> diff --git a/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml b/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml index d6b608210e..54f998af0d 100644 --- a/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/mirrors/chapter.sgml @@ -2,12 +2,12 @@ The FreeBSD Documentation Project The FreeBSD Chinese Documentation Project - Original Revision: 1.464 + Original Revision: 1.477 $FreeBSD$ --> <appendix id="mirrors"> - <title>获取 FreeBSD</title> + <title>获取 &os;</title> <sect1 id="mirrors-cdrom"> <title>CDROM 和 DVD 发行商</title> @@ -15,7 +15,7 @@ <sect2> <title>零售盒装产品</title> - <para>可以从下面几个零售商那里买到 FreeBSD 的盒装产品(FreeBSD CD, + <para>可以从下面几个零售商那里买到 &os; 的盒装产品 (&os; CD, 附加软件,印刷文档):</para> <itemizedlist> @@ -38,12 +38,12 @@ <sect2> <title>CD 和 DVD 光盘</title> - <para>FreeBSD CD 和 DVD 光盘可以从许多在线零售商那里买到:</para> + <para>&os; CD 和 DVD 光盘可以从许多在线零售商那里买到:</para> <itemizedlist> <listitem> <address> - <otheraddr>FreeBSD Mall, Inc.</otheraddr> + <otheraddr>&os; Mall, Inc.</otheraddr> <street>700 Harvest Park Ste F</street> <city>Brentwood</city>, <state>CA</state> <postcode>94513</postcode> <country>USA</country> @@ -142,7 +142,7 @@ <sect2> <title>发行人</title> - <para>如果您是销售商并且想销售 FreeBSD CDROM 产品, + <para>如果您是销售商并且想销售 &os; CDROM 产品, 请和发行人联系:</para> <itemizedlist> @@ -224,7 +224,7 @@ <sect1 id="mirrors-ftp"> <title>FTP 站点</title> - <para>官方的 FreeBSD 源代码可以从遍布全球的镜像站点 + <para>官方的 &os; 源代码可以从遍布全球的镜像站点 通过匿名 FTP 下载。 站点 <ulink url="ftp://ftp.FreeBSD.org/pub/FreeBSD/"></ulink> 有着良好的网络连接并且允许大量的并发连接, 但是 @@ -232,18 +232,18 @@ 镜像站点 (特别是当您想进行某种形式的镜像的时候)。</para> <para><ulink - url="http://mirrorlist.FreeBSD.org/">FreeBSD 镜像 + url="http://mirrorlist.FreeBSD.org/">&os; 镜像 站点数据库</ulink>要比使用手册中的镜像列表更加精确, 因为它从 DNS 中获取信息而不依赖于静态的主机列表。</para> - <para>FreeBSD 可以从下面这些镜像站点通过匿名 FTP - 下载。如果您选择了通过匿名 FTP 获取 FreeBSD, + <para>&os; 可以从下面这些镜像站点通过匿名 FTP + 下载。如果您选择了通过匿名 FTP 获取 &os;, 请尽量使用离您比较近的站点。被列为 - <quote>主镜像站点</quote> 的镜像站点一般都有完整的 FreeBSD 文件 + <quote>主镜像站点</quote> 的镜像站点一般都有完整的 &os; 文件 (针对每种体系结构的所有当前可用的版本), 您或许从您所在的国家或地区的站点下载会得到更快的下载速度。 每个站点提供了最流行的体系结构的最近的版本而有可能不提供完整的 - FreeBSD 存档。所有的站点都提供匿名 FTP + &os; 存档。所有的站点都提供匿名 FTP 访问而有些站点也提供其他的访问方式。对每个站点可用的访问方式 在其主机名后有所说明。</para> @@ -282,9 +282,9 @@ </indexterm> <para>匿名 CVS(或人们常说的 - <emphasis>anoncvs</emphasis>)是由和 FreeBSD 附带的 CVS 实用工具提供的用于和远程的 + <emphasis>anoncvs</emphasis>)是由和 &os; 附带的 CVS 实用工具提供的用于和远程的 CVS 代码库同步的一种特性。 - 尤其是, 它允许 FreeBSD 用户不需要特殊的权限对任何一台 FreeBSD 项目的官方 + 尤其是, 它允许 &os; 用户不需要特殊的权限对任何一台 &os; 项目的官方 anoncvs 服务器执行只读的 CVS 操作。 要使用它,简单的设置 <envar>CVSROOT</envar> 环境变量指向适当的 anoncvs 服务器, @@ -319,7 +319,7 @@ 模块名来从单个文件里检出任何东西并赋给特定的程序 (比如 <command>ls</command> 或者 <command>grep</command>)。 当然,<application>anoncvs</application> 也只适用于对 - CVS 仓库的只读操作,所以如果您是想用和 FreeBSD 项目共享的仓库提供本地开发的话, + CVS 仓库的只读操作,所以如果您是想用和 &os; 项目共享的仓库提供本地开发的话, <application>CVSup</application> 几乎是您唯一的选择。</para> </sect2> @@ -327,8 +327,8 @@ <title><anchor id="anoncvs-usage">使用匿名 CVS</title> <para>配置 &man.cvs.1; 使用匿名 CVS 仓库可以简单的设定 - <envar>CVSROOT</envar> 环境变量指向 FreeBSD 项目的 - <emphasis>anoncvs</emphasis> 服务器之一。到此书写作为止, + <envar>CVSROOT</envar> 环境变量指向 &os; 项目的 + <emphasis>anoncvs</emphasis> 服务器之一。 到此书写作为止, 下面的服务器都是可用的:</para> <itemizedlist> @@ -350,7 +350,8 @@ (pserver (使用 <command>cvs login</command> 并在提示输入口令时, 输入任意口令。), ssh (无口令))</para> - <programlisting>SSH2 HostKey: 1024 e8:3b:29:7b:ca:9f:ac:e9:45:cb:c8:17:ae:9b:eb:55 /etc/ssh/ssh_host_dsa_key.pub</programlisting> + <programlisting>SSH2 HostKey: 1024 02:ed:1b:17:d6:97:2b:58:5e:5c:e2:da:3b:89:88:26 /etc/ssh/ssh_host_rsa_key.pub +SSH2 HostKey: 1024 e8:3b:29:7b:ca:9f:ac:e9:45:cb:c8:17:ae:9b:eb:55 /etc/ssh/ssh_host_dsa_key.pub</programlisting> </listitem> <listitem> @@ -374,9 +375,9 @@ SSH2 HostKey: 1024 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65 ssh_host_dsa_ <para>因为 CVS 实际上允许 <quote>检出</quote> 曾经存在的 (或者,某种情况下将会存在) - FreeBSD 源代码的任意版本, 您需要熟悉 + &os; 源代码的任意版本, 您需要熟悉 &man.cvs.1; 的版本 (<option>-r</option>) 参数, - 以及在 FreeBSD 代码库中可用的值。</para> + 以及在 &os; 代码库中可用的值。</para> <para>有两种标签,修订标签和分支标签。 修订标签特指一个特定的修订版本。含义始终是不变的。 @@ -463,7 +464,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <itemizedlist> <listitem> <para><ulink - url="http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/cvs/">CVS 指南</ulink> 来自 Cal Poly。</para> + url="http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/cvs/">CVS 指南</ulink> 来自加州州立理工大学。</para> </listitem> <listitem> @@ -474,7 +475,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <listitem> <para><ulink url="http://www.FreeBSD.org/cgi/cvsweb.cgi">CVSweb</ulink> 是 - FreeBSD 项目的 CVS web 界面。</para> + &os; 项目的 CVS web 界面。</para> </listitem> </itemizedlist> </sect2> @@ -489,7 +490,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host </indexterm> <para><application>CTM</application> 是保持远程目录树和中央服务器目录树同步的一种方法。 - 它被开发用于 FreeBSD 的源代码树,虽然其他人随着时间推移会发现它可以用于其他目的。 + 它被开发用于 &os; 的源代码树,虽然其他人随着时间推移会发现它可以用于其他目的。 当前几乎没有,也或者只有很少的文档讲述创建 deltas 的步骤, 所以如果您希望使用 <application>CTM</application> 去做其它事情, 请联系 &a.ctm-users.name; 邮件列表了解更多信息。</para> @@ -497,11 +498,11 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <sect2> <title>为什么我该使用 <application>CTM</application>?</title> - <para><application>CTM</application> 会给您一份 FreeBSD + <para><application>CTM</application> 会给您一份 &os; 源代码树的本地副本。 代码树有很多的 <quote>flavors</quote> 可用。不管您是希望跟踪完整的 CVS 树还是只是一个分支, <application>CTM</application> 都会给您提供信息。 - 如果您是 FreeBSD 上的一个活跃的开发者,但是缺乏或者不存在 TCP/IP 连接,或者只是希望把变化自动发送给您, + 如果您是 &os; 上的一个活跃的开发者,但是缺乏或者不存在 TCP/IP 连接,或者只是希望把变化自动发送给您, <application>CTM</application> 就是适合您的。对于最积极的分支 您将会每天获得三个以上的 deltas。 然而,您应该考虑通过邮件来自动发送。 @@ -510,7 +511,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <para>您也需要让自己了解直接和开发代码而不是预发行版本打交道的各种警告。这种情况会很显著, 如果您选择了 <quote>current</quote> 代码的话。强烈建议您阅读<link linkend="current">和 - FreeBSD 保持同步</link>。</para> + &os; 保持同步</link>。</para> </sect2> <sect2> @@ -522,7 +523,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <quote>current</quote> 级别)。</para> <para><application>CTM</application> 程序从版本 2.0 发布以来 - 已经是 FreeBSD 的一部分了,如果您安装了源代码副本的话, 它位于 + 已经是 &os; 的一部分了,如果您安装了源代码副本的话, 它位于 <filename>/usr/src/usr.sbin/ctm</filename>。</para> <para>您喂给 <application>CTM</application> 的 <quote>deltas</quote> @@ -725,7 +726,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <sect2 id="mirrors-ctm"> <title>CTM 镜像</title> - <para><link linkend="ctm">CTM</link>/FreeBSD 可以在下面的镜像站点通过匿名 + <para><link linkend="ctm">CTM</link>/&os; 可以在下面的镜像站点通过匿名 FTP 下载。如果您选择通过匿名 FTP 获取 <application>CTM</application>, 请试着使用一个离您较近的站点。</para> @@ -734,7 +735,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <variablelist> <varlistentry> - <term>加利福尼亚州,海湾地区,官方源代码</term> + <term>加利福尼亚州,旧金山湾区,官方源代码</term> <listitem> <itemizedlist> @@ -791,8 +792,8 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <para><application>CVSup</application> 是一个用于从远程服务器主机上的主 CVS 仓库发布和升级源代码树的软件包。 - FreeBSD 的源代码维护在加利福尼亚州一台主开发服务器的 CVS 仓库里。 - 有了 <application>CVSup</application>,FreeBSD + &os; 的源代码维护在加利福尼亚州一台主开发服务器的 CVS 仓库里。 + 有了 <application>CVSup</application>, &os; 用户可以很容易的保持他们自己的源代码树更新。</para> <para><application>CVSup</application> 使用所谓的升级 @@ -806,15 +807,15 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <para>术语 <application>CVSup</application>用大写字母写正是表示, 代表了完整的软件包。 它的主要组件是运行在每个用户机器上的客户端 <command>cvsup</command>, - 和运行在每个 FreeBSD 镜像站点上的服务器端 <command>cvsupd</command>。</para> + 和运行在每个 &os; 镜像站点上的服务器端 <command>cvsupd</command>。</para> - <para>当您阅读 FreeBSD 文档和邮件列表时,您可能会看见 + <para>当您阅读 &os; 文档和邮件列表时,您可能会看见 <application>sup</application>。 <application>Sup</application> 是 <application>CVSup</application> 的前身,有着相似的目的。 <application>CVSup</application> 使用很多和 sup 相同的方式, 而且, 它还是用使用和 <command>sup</command> 的兼容的配置文件。 - <application>Sup</application> 已经不再被 FreeBSD 项目使用了, + <application>Sup</application> 已经不再被 &os; 项目使用了, 因为 <application>CVSup</application> 既快又有更好的灵活性。</para> <note> @@ -838,7 +839,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <title>安装</title> <para>安装 <application>CVSup</application> 最简单的方式就是使用 - FreeBSD <link linkend="ports">packages collection</link> + &os; <link linkend="ports">packages collection</link> 中预编译的 <filename role="package">net/cvsup</filename> 包。 如果您想从源代码构建 <application>CVSup</application>, 您可以使用 <filename role="package">net/cvsup</filename> @@ -855,7 +856,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host </note> <para>如果希望在 &os; 6.1 或更早版本中安装 <application>csup</application>, - 则可以从 FreeBSD 的 <link linkend="ports">packages collection</link> 中安装预编译的 + 则可以从 &os; 的 <link linkend="ports">packages collection</link> 中安装预编译的 <filename role="package">net/csup</filename> 包; 如果希望自行从源代码编译 <application>csup</application>, 也可以用 <filename role="package">net/csup</filename> @@ -940,7 +941,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <para>知道了这些,我们现在就可以开始创建一个 用于接收和升级 <link - linkend="current">FreeBSD-CURRENT</link> 主源代码树的 + linkend="current">&os;-CURRENT</link> 主源代码树的 <filename>supfile</filename> 文件了。</para> <itemizedlist> @@ -952,7 +953,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host 这些可用的 collection 在 <link linkend="cvsup-collec">随后的章节</link> 中描述。 在这个例子里, - 我们希望接收 FreeBSD 系统的完整的主代码树。 + 我们希望接收 &os; 系统的完整的主代码树。 有一个单独的大的 collection <literal>src-all</literal> 让我们完成这个。 创建我们的 @@ -1016,7 +1017,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <option>date=</option> 值字段指定一个日期来做到。 &man.cvsup.1; 手册页解释了如何来做。</para> - <para>对于我们的示例来说,我们希望接收 FreeBSD-CURRENT。 + <para>对于我们的示例来说,我们希望接收 &os;-CURRENT。 我们在我们的 <filename>supfile</filename> 的开头添加这行:</para> @@ -1040,7 +1041,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <command>cvsup</command> 从哪里获取更新。 任何一个 <link linkend="cvsup-mirrors">CVSup 镜像站点</link>都可以, 虽然您应该选择一个离您比较近的站点。 - 在这个例子里我们将使用一个虚拟的 FreeBSD 发布站点, + 在这个例子里我们将使用一个虚拟的 &os; 发布站点, <hostid role="fqdn">cvsup99.FreeBSD.org</hostid>:</para> <programlisting>*default host=cvsup99.FreeBSD.org</programlisting> @@ -1093,7 +1094,7 @@ Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known host <programlisting>*default release=cvs delete use-rel-suffix compress</programlisting> - <para><literal>release=cvs</literal> 显示服务器应该从 FreeBSD 的主 CVS 仓库中获取信息。 + <para><literal>release=cvs</literal> 显示服务器应该从 &os; 的主 CVS 仓库中获取信息。 事实上总是这样的,但是也有可能会超出这个讨论的范围。</para> <para><literal>delete</literal> 给 @@ -1193,7 +1194,7 @@ doc/zh_*</screen> <para>等等其他语言(您可以通过浏览 <ulink - url="http://www.FreeBSD.org/cgi/cvsweb.cgi/">FreeBSD + url="http://www.FreeBSD.org/cgi/cvsweb.cgi/">&os; CVS 仓库</ulink>找到完整的列表)。</para> <para>有这个非常有用的特性,那些慢速连接或者要为他们的 Internet @@ -1291,7 +1292,7 @@ doc/zh_*</screen> <term><literal>cvs-all release=cvs</literal></term> <listitem> - <para>FreeBSD 主 CVS 仓库,包含 + <para>&os; 主 CVS 仓库,包含 密码系统的代码。</para> <variablelist> @@ -1299,7 +1300,7 @@ doc/zh_*</screen> <term><literal>distrib release=cvs</literal></term> <listitem> - <para>FreeBSD 发行版本和镜像相关的 + <para>&os; 发行版本和镜像相关的 文件。</para> </listitem> </varlistentry> @@ -1307,8 +1308,8 @@ doc/zh_*</screen> <varlistentry> <term><literal>doc-all release=cvs</literal></term> <listitem> - <para>FreeBSD 使用手册和其它文档的源代码。 - 其中不包含 FreeBSD web 站点的文件。</para> + <para>&os; 使用手册和其它文档的源代码。 + 其中不包含 &os; web 站点的文件。</para> </listitem> </varlistentry> @@ -1316,7 +1317,7 @@ doc/zh_*</screen> <term><literal>ports-all release=cvs</literal></term> <listitem> - <para>FreeBSD Ports Collection。</para> + <para>&os; Ports Collection。</para> <important id="cvsup-collec-pbase-warn"> <para>如果您不想升级全部的 @@ -1409,7 +1410,7 @@ doc/zh_*</screen> 重要警告</link>:您应该 <emphasis>总是</emphasis>更新这个 子 collection,无论您更新 - FreeBSD Ports Collection 的任何部分的时候!</para> + &os; Ports Collection 的任何部分的时候!</para> </note> </listitem> </varlistentry> @@ -1935,7 +1936,7 @@ doc/zh_*</screen> <varlistentry> <term><literal>projects-all release=cvs</literal></term> <listitem> - <para>FreeBSD 内部项目的代码库。</para> + <para>&os; 内部项目的代码库。</para> </listitem> </varlistentry> @@ -1943,7 +1944,7 @@ doc/zh_*</screen> <term><literal>src-all release=cvs</literal></term> <listitem> - <para>FreeBSD 主代码,包含密码系统的代码。</para> + <para>&os; 主代码,包含密码系统的代码。</para> <variablelist> <varlistentry> @@ -1982,7 +1983,7 @@ doc/zh_*</screen> release=cvs</literal></term> <listitem> - <para>FreeBSD 项目之外的工具和库,通常在 FreeBSD 中不作修改 + <para>&os; 项目之外的工具和库,通常在 &os; 中不作修改 (<filename>/usr/src/contrib</filename>)。</para> </listitem> </varlistentry> @@ -1991,8 +1992,8 @@ doc/zh_*</screen> <term><literal>src-crypto release=cvs</literal></term> <listitem> - <para>FreeBSD 项目之外的 - 密码系统工具和库,通常在 FreeBSD 中不作修改 + <para>&os; 项目之外的 + 密码系统工具和库,通常在 &os; 中不作修改 (<filename>/usr/src/crypto</filename>)。</para> </listitem> </varlistentry> @@ -2003,7 +2004,7 @@ doc/zh_*</screen> <listitem> <para>Kerberos 和 DES (<filename>/usr/src/eBones</filename>)。 - 没有在当前的 FreeBSD 发行中使用。</para> + 目前的 &os; 中不再使用使用。</para> </listitem> </varlistentry> @@ -2092,7 +2093,7 @@ doc/zh_*</screen> release=cvs</literal></term> <listitem> - <para>生成 FreeBSD 版本必需的文件 + <para>生成 &os; 版本必需的文件 (<filename>/usr/src/release</filename>)。</para> </listitem> </varlistentry> @@ -2161,7 +2162,7 @@ doc/zh_*</screen> release=cvs</literal></term> <listitem> - <para>维护 FreeBSD 的各种各样的工具 + <para>维护 &os; 的各种各样的工具 (<filename>/usr/src/tools</filename>)。</para> </listitem> </varlistentry> @@ -2193,7 +2194,7 @@ doc/zh_*</screen> <term><literal>www release=cvs</literal></term> <listitem> - <para>FreeBSD WWW 站点的源代码。</para> + <para>&os; WWW 站点的源代码。</para> </listitem> </varlistentry> </variablelist> @@ -2222,7 +2223,7 @@ doc/zh_*</screen> <term><literal>mail-archive release=current</literal></term> <listitem> - <para>FreeBSD 邮件列表存档。</para> + <para>&os; 邮件列表存档。</para> </listitem> </varlistentry> @@ -2230,7 +2231,7 @@ doc/zh_*</screen> <term><literal>www release=current</literal></term> <listitem> - <para>预处理过的 FreeBSD WWW 站点文件(不是源文件)。 + <para>预处理过的 &os; WWW 站点文件(不是源文件)。 用于 WWW 镜像站点。</para> </listitem> </varlistentry> @@ -2244,7 +2245,7 @@ doc/zh_*</screen> <application>CVSup</application> 的其他信息, 请查看 <ulink url="http://www.cvsup.org">CVSup 主页</ulink>。</para> - <para>多数与 FreeBSD 有关的 + <para>多数与 &os; 有关的 <application>CVSup</application> 讨论会在 &a.hackers; 进行。 这个软件的新版本会在那里和 &a.announce; 公布。</para> @@ -2257,7 +2258,7 @@ doc/zh_*</screen> <sect2 id="cvsup-mirrors"> <title>CVSup 站点</title> - <para>FreeBSD 的 <link linkend="cvsup">CVSup</link> 服务器运行于 + <para>&os; 的 <link linkend="cvsup">CVSup</link> 服务器运行于 下列站点:</para> &chap.mirrors.cvsup.inc; @@ -2288,7 +2289,7 @@ doc/zh_*</screen> <term>HEAD</term> <listitem> - <para>主线的符号名,或者说 FreeBSD-CURRENT。 + <para>主线的符号名,或者说 &os;-CURRENT。 当没有指定修订版本的时候也是默认的。</para> <para>在 <application>CVSup</application> 里,这个标签通过 @@ -2305,11 +2306,38 @@ doc/zh_*</screen> </varlistentry> <varlistentry> + <term>RELENG_8</term> + + <listitem> + <para>这是 &os;-8.X 的开发分支, + 也被称作 &os; 8-STABLE。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>RELENG_8_0</term> + + <listitem> + <para>&os;-8.0 的发行版分支, 只用于安全公告, + 以及其他重要更新。</para> + </listitem> + </varlistentry> + + <varlistentry> <term>RELENG_7</term> <listitem> - <para>这是 FreeBSD-7.X 的开发分支, - 也被称作 FreeBSD 7-STABLE。</para> + <para>这是 &os;-7.X 的开发分支, + 也被称作 &os; 7-STABLE。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>RELENG_7_3</term> + + <listitem> + <para>&os;-7.3 的发行版分支, 只用于安全公告, + 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2317,7 +2345,7 @@ doc/zh_*</screen> <term>RELENG_7_2</term> <listitem> - <para>FreeBSD-7.2 的发行版分支, 只用于安全公告, + <para>&os;-7.2 的发行版分支, 只用于安全公告, 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2326,7 +2354,7 @@ doc/zh_*</screen> <term>RELENG_7_1</term> <listitem> - <para>FreeBSD-7.1 的发行版分支, 只用于安全公告, + <para>&os;-7.1 的发行版分支, 只用于安全公告, 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2335,7 +2363,7 @@ doc/zh_*</screen> <term>RELENG_7_0</term> <listitem> - <para>FreeBSD-7.0 的发行版分支, 只用于安全公告, + <para>&os;-7.0 的发行版分支, 只用于安全公告, 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2344,8 +2372,8 @@ doc/zh_*</screen> <term>RELENG_6</term> <listitem> - <para>这是 FreeBSD-6.X 的开发分支, - 也被称作 FreeBSD 6-STABLE。</para> + <para>这是 &os;-6.X 的开发分支, + 也被称作 &os; 6-STABLE。</para> </listitem> </varlistentry> @@ -2353,7 +2381,7 @@ doc/zh_*</screen> <term>RELENG_6_4</term> <listitem> - <para>FreeBSD-6.4 的发行版分支, 只用于安全公告, + <para>&os;-6.4 的发行版分支, 只用于安全公告, 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2362,7 +2390,7 @@ doc/zh_*</screen> <term>RELENG_6_3</term> <listitem> - <para>FreeBSD-6.3 的发行版分支, 只用于安全公告, + <para>&os;-6.3 的发行版分支, 只用于安全公告, 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2371,7 +2399,7 @@ doc/zh_*</screen> <term>RELENG_6_2</term> <listitem> - <para>FreeBSD-6.2 的发行版分支, 只用于安全公告, + <para>&os;-6.2 的发行版分支, 只用于安全公告, 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2380,7 +2408,7 @@ doc/zh_*</screen> <term>RELENG_6_1</term> <listitem> - <para>FreeBSD-6.1 的发行版分支, 只用于安全公告, + <para>&os;-6.1 的发行版分支, 只用于安全公告, 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2389,7 +2417,7 @@ doc/zh_*</screen> <term>RELENG_6_0</term> <listitem> - <para>FreeBSD-6.0 的发行版分支, 只用于安全公告, + <para>&os;-6.0 的发行版分支, 只用于安全公告, 以及其他重要更新。</para> </listitem> </varlistentry> @@ -2398,8 +2426,8 @@ doc/zh_*</screen> <term>RELENG_5</term> <listitem> - <para>这是 FreeBSD-5.X 的开发分支, - 也被称作 FreeBSD 5-STABLE。</para> + <para>这是 &os;-5.X 的开发分支, + 也被称作 &os; 5-STABLE。</para> </listitem> </varlistentry> @@ -2407,7 +2435,7 @@ doc/zh_*</screen> <term>RELENG_5_5</term> <listitem> - <para>FreeBSD-5.5 安全分支。 只被安全公告和其它重要更新使用。</para> + <para>&os;-5.5 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2415,7 +2443,7 @@ doc/zh_*</screen> <term>RELENG_5_4</term> <listitem> - <para>FreeBSD-5.4 安全分支。 只被安全公告和其它重要更新使用。</para> + <para>&os;-5.4 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2423,7 +2451,7 @@ doc/zh_*</screen> <term>RELENG_5_3</term> <listitem> - <para>FreeBSD-5.3 安全分支。 只被安全公告和其它重要更新使用。</para> + <para>&os;-5.3 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2431,8 +2459,8 @@ doc/zh_*</screen> <term>RELENG_5_2</term> <listitem> - <para>针对 FreeBSD-5.2 和 FreeBSD-5.2.1 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>针对 &os;-5.2 和 &os;-5.2.1 的安全分支, + 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2440,8 +2468,8 @@ doc/zh_*</screen> <term>RELENG_5_1</term> <listitem> - <para>针对 FreeBSD-5.1 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>针对 &os;-5.1 的发行版本分支, + 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2449,8 +2477,8 @@ doc/zh_*</screen> <term>RELENG_5_0</term> <listitem> - <para>针对 FreeBSD-5.0 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>针对 &os;-5.0 的发行版本分支, + 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2458,8 +2486,8 @@ doc/zh_*</screen> <term>RELENG_4</term> <listitem> - <para>FreeBSD-4.X 开发线,也被叫做 - FreeBSD-STABLE。</para> + <para>&os;-4.X 开发线,也被叫做 + &os;-STABLE。</para> </listitem> </varlistentry> @@ -2467,7 +2495,7 @@ doc/zh_*</screen> <term>RELENG_4_11</term> <listitem> - <para>FreeBSD-4.11 发行版, 只被安全公告和其它重要更新使用。</para> + <para>&os;-4.11 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2475,8 +2503,7 @@ doc/zh_*</screen> <term>RELENG_4_10</term> <listitem> - <para>针对 FreeBSD-4.10 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>&os;-4.10 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2484,8 +2511,7 @@ doc/zh_*</screen> <term>RELENG_4_9</term> <listitem> - <para>针对 FreeBSD-4.9 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>&os;-4.9 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2493,8 +2519,7 @@ doc/zh_*</screen> <term>RELENG_4_8</term> <listitem> - <para>针对 FreeBSD-4.8 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>&os;-4.8 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2502,8 +2527,7 @@ doc/zh_*</screen> <term>RELENG_4_7</term> <listitem> - <para>针对 FreeBSD-4.7 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>&os;-4.7 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2511,8 +2535,7 @@ doc/zh_*</screen> <term>RELENG_4_6</term> <listitem> - <para>针对 FreeBSD-4.6 和 FreeBSD-4.6.2 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>&os;-4.6 和 4.6.2 的安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2520,8 +2543,7 @@ doc/zh_*</screen> <term>RELENG_4_5</term> <listitem> - <para>针对 FreeBSD-4.5 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>&os;-4.5 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2529,8 +2551,7 @@ doc/zh_*</screen> <term>RELENG_4_4</term> <listitem> - <para>针对 FreeBSD-4.4 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>&os;-4.4 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2538,8 +2559,7 @@ doc/zh_*</screen> <term>RELENG_4_3</term> <listitem> - <para>针对 FreeBSD-4.3 的发行版本分支,只做 - 安全咨询和其它紧急的修正。</para> + <para>&os;-4.3 安全分支。 只被安全公告和其它重要更新使用。</para> </listitem> </varlistentry> @@ -2547,7 +2567,7 @@ doc/zh_*</screen> <term>RELENG_3</term> <listitem> - <para>FreeBSD-3.X 的开发线,也被叫做 + <para>&os;-3.X 的开发线,也被叫做 3.X-STABLE。</para> </listitem> </varlistentry> @@ -2556,8 +2576,8 @@ doc/zh_*</screen> <term>RELENG_2_2</term> <listitem> - <para>FreeBSD-2.2.X 的开发线,也被叫做 - 2.2-STABLE。这个分支过于陈旧了。</para> + <para>&os;-2.2.X 的开发线, 也被叫做 + 2.2-STABLE。 这个分支基本上已经过时了。</para> </listitem> </varlistentry> </variablelist> @@ -2581,10 +2601,26 @@ doc/zh_*</screen> <variablelist> <varlistentry> + <term>RELENG_8_0_0_RELEASE</term> + + <listitem> + <para>&os; 8.0</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>RELENG_7_3_0_RELEASE</term> + + <listitem> + <para>&os; 7.3</para> + </listitem> + </varlistentry> + + <varlistentry> <term>RELENG_7_2_0_RELEASE</term> <listitem> - <para>FreeBSD 7.2</para> + <para>&os; 7.2</para> </listitem> </varlistentry> @@ -2592,7 +2628,7 @@ doc/zh_*</screen> <term>RELENG_7_1_0_RELEASE</term> <listitem> - <para>FreeBSD 7.1</para> + <para>&os; 7.1</para> </listitem> </varlistentry> @@ -2600,7 +2636,7 @@ doc/zh_*</screen> <term>RELENG_7_0_0_RELEASE</term> <listitem> - <para>FreeBSD 7.0</para> + <para>&os; 7.0</para> </listitem> </varlistentry> @@ -2608,7 +2644,7 @@ doc/zh_*</screen> <term>RELENG_6_4_0_RELEASE</term> <listitem> - <para>FreeBSD 6.4</para> + <para>&os; 6.4</para> </listitem> </varlistentry> @@ -2616,7 +2652,7 @@ doc/zh_*</screen> <term>RELENG_6_3_0_RELEASE</term> <listitem> - <para>FreeBSD 6.3</para> + <para>&os; 6.3</para> </listitem> </varlistentry> @@ -2624,7 +2660,7 @@ doc/zh_*</screen> <term>RELENG_6_2_0_RELEASE</term> <listitem> - <para>FreeBSD 6.2</para> + <para>&os; 6.2</para> </listitem> </varlistentry> @@ -2632,7 +2668,7 @@ doc/zh_*</screen> <term>RELENG_6_1_0_RELEASE</term> <listitem> - <para>FreeBSD 6.1</para> + <para>&os; 6.1</para> </listitem> </varlistentry> @@ -2640,7 +2676,7 @@ doc/zh_*</screen> <term>RELENG_6_0_0_RELEASE</term> <listitem> - <para>FreeBSD 6.0</para> + <para>&os; 6.0</para> </listitem> </varlistentry> @@ -2648,7 +2684,7 @@ doc/zh_*</screen> <term>RELENG_5_5_0_RELEASE</term> <listitem> - <para>FreeBSD 5.5</para> + <para>&os; 5.5</para> </listitem> </varlistentry> @@ -2656,7 +2692,7 @@ doc/zh_*</screen> <term>RELENG_5_4_0_RELEASE</term> <listitem> - <para>FreeBSD 5.4</para> + <para>&os; 5.4</para> </listitem> </varlistentry> @@ -2664,7 +2700,7 @@ doc/zh_*</screen> <term>RELENG_4_11_0_RELEASE</term> <listitem> - <para>FreeBSD 4.11</para> + <para>&os; 4.11</para> </listitem> </varlistentry> @@ -2672,7 +2708,7 @@ doc/zh_*</screen> <term>RELENG_5_3_0_RELEASE</term> <listitem> - <para>FreeBSD 5.3</para> + <para>&os; 5.3</para> </listitem> </varlistentry> @@ -2680,7 +2716,7 @@ doc/zh_*</screen> <term>RELENG_4_10_0_RELEASE</term> <listitem> - <para>FreeBSD 4.10</para> + <para>&os; 4.10</para> </listitem> </varlistentry> @@ -2688,7 +2724,7 @@ doc/zh_*</screen> <term>RELENG_5_2_1_RELEASE</term> <listitem> - <para>FreeBSD 5.2.1</para> + <para>&os; 5.2.1</para> </listitem> </varlistentry> @@ -2696,7 +2732,7 @@ doc/zh_*</screen> <term>RELENG_5_2_0_RELEASE</term> <listitem> - <para>FreeBSD 5.2</para> + <para>&os; 5.2</para> </listitem> </varlistentry> @@ -2704,7 +2740,7 @@ doc/zh_*</screen> <term>RELENG_4_9_0_RELEASE</term> <listitem> - <para>FreeBSD 4.9</para> + <para>&os; 4.9</para> </listitem> </varlistentry> @@ -2712,7 +2748,7 @@ doc/zh_*</screen> <term>RELENG_5_1_0_RELEASE</term> <listitem> - <para>FreeBSD 5.1</para> + <para>&os; 5.1</para> </listitem> </varlistentry> @@ -2720,7 +2756,7 @@ doc/zh_*</screen> <term>RELENG_4_8_0_RELEASE</term> <listitem> - <para>FreeBSD 4.8</para> + <para>&os; 4.8</para> </listitem> </varlistentry> @@ -2728,7 +2764,7 @@ doc/zh_*</screen> <term>RELENG_5_0_0_RELEASE</term> <listitem> - <para>FreeBSD 5.0</para> + <para>&os; 5.0</para> </listitem> </varlistentry> @@ -2736,7 +2772,7 @@ doc/zh_*</screen> <term>RELENG_4_7_0_RELEASE</term> <listitem> - <para>FreeBSD 4.7</para> + <para>&os; 4.7</para> </listitem> </varlistentry> @@ -2744,7 +2780,7 @@ doc/zh_*</screen> <term>RELENG_4_6_2_RELEASE</term> <listitem> - <para>FreeBSD 4.6.2</para> + <para>&os; 4.6.2</para> </listitem> </varlistentry> @@ -2752,7 +2788,7 @@ doc/zh_*</screen> <term>RELENG_4_6_1_RELEASE</term> <listitem> - <para>FreeBSD 4.6.1</para> + <para>&os; 4.6.1</para> </listitem> </varlistentry> @@ -2760,7 +2796,7 @@ doc/zh_*</screen> <term>RELENG_4_6_0_RELEASE</term> <listitem> - <para>FreeBSD 4.6</para> + <para>&os; 4.6</para> </listitem> </varlistentry> @@ -2768,7 +2804,7 @@ doc/zh_*</screen> <term>RELENG_4_5_0_RELEASE</term> <listitem> - <para>FreeBSD 4.5</para> + <para>&os; 4.5</para> </listitem> </varlistentry> @@ -2776,7 +2812,7 @@ doc/zh_*</screen> <term>RELENG_4_4_0_RELEASE</term> <listitem> - <para>FreeBSD 4.4</para> + <para>&os; 4.4</para> </listitem> </varlistentry> @@ -2784,7 +2820,7 @@ doc/zh_*</screen> <term>RELENG_4_3_0_RELEASE</term> <listitem> - <para>FreeBSD 4.3</para> + <para>&os; 4.3</para> </listitem> </varlistentry> @@ -2792,7 +2828,7 @@ doc/zh_*</screen> <term>RELENG_4_2_0_RELEASE</term> <listitem> - <para>FreeBSD 4.2</para> + <para>&os; 4.2</para> </listitem> </varlistentry> @@ -2800,7 +2836,7 @@ doc/zh_*</screen> <term>RELENG_4_1_1_RELEASE</term> <listitem> - <para>FreeBSD 4.1.1</para> + <para>&os; 4.1.1</para> </listitem> </varlistentry> @@ -2808,7 +2844,7 @@ doc/zh_*</screen> <term>RELENG_4_1_0_RELEASE</term> <listitem> - <para>FreeBSD 4.1</para> + <para>&os; 4.1</para> </listitem> </varlistentry> @@ -2816,7 +2852,7 @@ doc/zh_*</screen> <term>RELENG_4_0_0_RELEASE</term> <listitem> - <para>FreeBSD 4.0</para> + <para>&os; 4.0</para> </listitem> </varlistentry> @@ -2824,7 +2860,7 @@ doc/zh_*</screen> <term>RELENG_3_5_0_RELEASE</term> <listitem> - <para>FreeBSD-3.5</para> + <para>&os;-3.5</para> </listitem> </varlistentry> @@ -2832,7 +2868,7 @@ doc/zh_*</screen> <term>RELENG_3_4_0_RELEASE</term> <listitem> - <para>FreeBSD-3.4</para> + <para>&os;-3.4</para> </listitem> </varlistentry> @@ -2840,7 +2876,7 @@ doc/zh_*</screen> <term>RELENG_3_3_0_RELEASE</term> <listitem> - <para>FreeBSD-3.3</para> + <para>&os;-3.3</para> </listitem> </varlistentry> @@ -2848,7 +2884,7 @@ doc/zh_*</screen> <term>RELENG_3_2_0_RELEASE</term> <listitem> - <para>FreeBSD-3.2</para> + <para>&os;-3.2</para> </listitem> </varlistentry> @@ -2856,7 +2892,7 @@ doc/zh_*</screen> <term>RELENG_3_1_0_RELEASE</term> <listitem> - <para>FreeBSD-3.1</para> + <para>&os;-3.1</para> </listitem> </varlistentry> @@ -2864,7 +2900,7 @@ doc/zh_*</screen> <term>RELENG_3_0_0_RELEASE</term> <listitem> - <para>FreeBSD-3.0</para> + <para>&os;-3.0</para> </listitem> </varlistentry> @@ -2872,7 +2908,7 @@ doc/zh_*</screen> <term>RELENG_2_2_8_RELEASE</term> <listitem> - <para>FreeBSD-2.2.8</para> + <para>&os;-2.2.8</para> </listitem> </varlistentry> @@ -2880,7 +2916,7 @@ doc/zh_*</screen> <term>RELENG_2_2_7_RELEASE</term> <listitem> - <para>FreeBSD-2.2.7</para> + <para>&os;-2.2.7</para> </listitem> </varlistentry> @@ -2888,7 +2924,7 @@ doc/zh_*</screen> <term>RELENG_2_2_6_RELEASE</term> <listitem> - <para>FreeBSD-2.2.6</para> + <para>&os;-2.2.6</para> </listitem> </varlistentry> @@ -2896,7 +2932,7 @@ doc/zh_*</screen> <term>RELENG_2_2_5_RELEASE</term> <listitem> - <para>FreeBSD-2.2.5</para> + <para>&os;-2.2.5</para> </listitem> </varlistentry> @@ -2904,7 +2940,7 @@ doc/zh_*</screen> <term>RELENG_2_2_2_RELEASE</term> <listitem> - <para>FreeBSD-2.2.2</para> + <para>&os;-2.2.2</para> </listitem> </varlistentry> @@ -2912,7 +2948,7 @@ doc/zh_*</screen> <term>RELENG_2_2_1_RELEASE</term> <listitem> - <para>FreeBSD-2.2.1</para> + <para>&os;-2.2.1</para> </listitem> </varlistentry> @@ -2920,7 +2956,7 @@ doc/zh_*</screen> <term>RELENG_2_2_0_RELEASE</term> <listitem> - <para>FreeBSD-2.2.0</para> + <para>&os;-2.2.0</para> </listitem> </varlistentry> </variablelist> @@ -2930,7 +2966,7 @@ doc/zh_*</screen> <sect1 id="mirrors-afs"> <title>AFS 站点</title> - <para>FreeBSD 的 AFS 服务器运行于下面的站点:</para> + <para>&os; 的 AFS 服务器运行于下面的站点:</para> <variablelist> <varlistentry> @@ -2954,16 +2990,16 @@ doc/zh_*</screen> <sect1 id="mirrors-rsync"> <title>rsync 站点</title> - <para>下面的站点让 FreeBSD 可以通过 rsync 协议下载。 + <para>下面的站点让 &os; 可以通过 rsync 协议下载。 <application>rsync</application> 实用程序和 &man.rcp.1; 的工作方式很相像, 但是有更多的选项,使用 rsync 远程更新协议只传输 两份文件的不同之处, 因此能够大幅度的提高网络同步速率。 - 如果您是 FreeBSD FTP 服务器或者 CVS 仓库的镜像站点, + 如果您是 &os; FTP 服务器或者 CVS 仓库的镜像站点, 这一点非常有用。 <application>rsync</application> 套件可以工作在许多种 - 操作系统上,在 FreeBSD 上,查看 + 操作系统上,在 &os; 上,查看 <filename role="package">net/rsync</filename> port 或者使用 package。</para> @@ -2976,9 +3012,9 @@ doc/zh_*</screen> <para>可用的 collection:</para> <itemizedlist> - <listitem><para>ftp:FreeBSD FTP 服务器的 + <listitem><para>ftp: &os; FTP 服务器的 部分镜像。</para></listitem> - <listitem><para>FreeBSD:FreeBSD FTP 服务器的 + <listitem><para>&os;: &os; FTP 服务器的 完整镜像。</para></listitem> </itemizedlist> </listitem> @@ -2992,8 +3028,8 @@ doc/zh_*</screen> <para>可用的 collection:</para> <itemizedlist> - <listitem><para>FreeBSD: 对于 - FreeBSD FTP 服务器的完整镜像。</para></listitem> + <listitem><para>&os;: 对于 + &os; FTP 服务器的完整镜像。</para></listitem> </itemizedlist> </listitem> </varlistentry> @@ -3002,12 +3038,15 @@ doc/zh_*</screen> <term>俄罗斯</term> <listitem> - <para>rsync://cvsup4.ru.FreeBSD.org/</para> + <para>rsync://ftp.mtu.ru/</para> <para>可用的 collections:</para> <itemizedlist> - <listitem><para>FreeBSD-gnats: GNATS bug - 跟踪数据库。</para></listitem> + <listitem><para>&os;: 完整的 &os; FTP + 服务器镜像。</para></listitem> + <listitem><para>&os;-gnats: GNATS 问题追踪数据库。</para></listitem> + <listitem><para>&os;-Archive: &os; 档案的 FTP + 服务器镜像。</para></listitem> </itemizedlist> </listitem> </varlistentry> @@ -3022,7 +3061,7 @@ doc/zh_*</screen> <para>可用的 collection:</para> <itemizedlist> - <listitem><para>FreeBSD: FreeBSD FTP + <listitem><para>&os;: &os; FTP 服务器的完整镜像。</para></listitem> </itemizedlist> </listitem> @@ -3036,7 +3075,7 @@ doc/zh_*</screen> <para>可用的 collection:</para> <itemizedlist> - <listitem><para>sites/ftp.FreeBSD.org: FreeBSD FTP 服务器 + <listitem><para>sites/ftp.FreeBSD.org: &os; FTP 服务器 的完整镜像。</para></listitem> </itemizedlist> </listitem> @@ -3048,11 +3087,11 @@ doc/zh_*</screen> <listitem> <para>rsync://ftp-master.FreeBSD.org/</para> - <para>服务器只供 FreeBSD 主镜像站点使用。</para> + <para>服务器只供 &os; 主镜像站点使用。</para> <para>可用的 collection:</para> <itemizedlist> - <listitem><para>FreeBSD:FreeBSD FTP 服务器的主要存档。</para></listitem> - <listitem><para>acl:FreeBSD 主 ACL + <listitem><para>&os;:&os; FTP 服务器的主要存档。</para></listitem> + <listitem><para>acl:&os; 主 ACL 列表。</para></listitem> </itemizedlist> @@ -3060,7 +3099,7 @@ doc/zh_*</screen> <para>可用的 collection:</para> <itemizedlist> - <listitem><para>FreeBSD:FreeBSD FTP 服务器的完整 + <listitem><para>&os;:&os; FTP 服务器的完整 镜像。</para></listitem> </itemizedlist> </listitem> diff --git a/zh_CN.GB2312/books/handbook/multimedia/chapter.sgml b/zh_CN.GB2312/books/handbook/multimedia/chapter.sgml index 6572b7d82f..d14e213256 100644 --- a/zh_CN.GB2312/books/handbook/multimedia/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/multimedia/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Documentation Project - Original Revision: 1.132 + Original Revision: 1.135 $FreeBSD$ --> @@ -1351,7 +1351,8 @@ bktr0: Pinnacle/Miro TV, Philips SECAM tuner.</programlisting> url="http://www.sane-project.org/sane-supported-devices.html"> 支持的设备</ulink> 列表, 可以为您提供有关扫描仪的支持情况和状态的信息。 - &man.uscanner.4; 手册页也提供了一个支持的 USB 扫描仪列表。</para> + 在 &os; 8.X 之前版本的系统中, + &man.uscanner.4; 手册页也提供了系统支持的 USB 扫描仪列表。</para> </sect2> <sect2> @@ -1372,34 +1373,31 @@ bktr0: Pinnacle/Miro TV, Philips SECAM tuner.</programlisting> <programlisting>device usb device uhci device ohci -device uscanner</programlisting> +device ehci</programlisting> - <para>取决于您主板上的 USB 芯片, - 您只需要 <literal>device uhci</literal> 或者 - <literal>device ohci</literal> 中的一种,但是两个都在 - 内核配置文件中是没有害处的。</para> + <para>在 &os; 8.X 之前的版本中, 还需要下面这行配置:</para> - <para>如果您不想重新编译内核而且您的内核也不是 - <filename>GENERIC</filename> 的, - 您可以用 &man.kldload.8; 命令直接加载 - &man.uscanner.4; 设备驱动模块:</para> + <programlisting>device uscanner</programlisting> - <screen>&prompt.root; <userinput>kldload uscanner</userinput></screen> + <para>在这些 &os; 版本中, 是通过设备驱动程序 &man.uscanner.4; + 来提供对 USB 扫描仪的支持的。 从 + &os; 8.0 开始, 这些支持则直接由 + &man.libusb.3; 函数库提供。</para> - <para>要在每次系统启动的时候加载这个模块, - 添加下面这行到 - <filename>/boot/loader.conf</filename> 中:</para> + <para>使用正确的内核重新引导系统之后, 插入 USB 扫描仪。 + 系统消息缓冲区 (使用 &man.dmesg.8; 查看) + 中会出现下面的信息, 表示检测到了扫描仪:</para> - <programlisting>uscanner_load="YES"</programlisting> + <screen>ugen0.2: <EPSON> at usbus0</screen> - <para>在使用正确的内核重启系统, 或加载了所需的内核模块之后, - 就可以将您的 USB 扫描仪接到计算机上了。 在系统消息缓冲中, - (&man.dmesg.8;) 应该会出现一行表示检测到您的扫描仪的信息:</para> + <para>或者, 对于 &os; 7.X 系统而言:</para> <screen>uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2</screen> - <para>这表明我们的扫描仪正在使用 - <filename>/dev/uscanner0</filename> 设备节点。</para> + <para>随 &os; 版本不同, 这些信息表示扫描仪设备位于设备节点 + <filename>/dev/ugen0.2</filename> 或 + <filename>/dev/uscanner0</filename>。 在这个例子中, 我们使用的是 + &epson.perfection; 1650 USB 扫描仪。</para> </sect3> <sect3> @@ -1492,6 +1490,18 @@ found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3</screen> <screen>&prompt.root; <userinput>scanimage -L</userinput> device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner</screen> + <para>或者, 如果使用的是 <xref + linkend="scanners-kernel-usb"> 中的 USB 扫描仪:</para> + + <screen>&prompt.root; <userinput>scanimage -L</userinput> +device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner</screen> + + <para>上述输出来自于 &os; 8.X 系统。 + <literal>'epson2:libusb:/dev/usb:/dev/ugen0.2'</literal> + 给出了扫描仪所使用的后台名字 (<literal>epson2</literal>) + 和设备节点 (<literal>/dev/ugen0.2</literal>)。</para> + + <note> <para>如果没有输出任何信息, 或提示没有识别到扫描仪, 则说明 &man.scanimage.1; 无法识别它。 如果发生这种情况, 您就需要修改扫描仪支持后端的配置文件, @@ -1501,9 +1511,14 @@ device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner</screen> 这类识别问题经常会在某些 USB 扫描仪上发生。</para> - <para>例如, 对于在 <xref + <para> linkend="scanners-kernel-usb"> 中所使用的 USB 扫描仪, <command>sane-find-scanner</command> 会给出下面的信息:</para> + <para>例如, 对于在 <xref + linkend="scanners-kernel-usb">, 在 &os; 8.X 中, + 扫描仪已经被很好地识别并能够正常工作了; 而对于更早版本的 &os; + 而言 (使用 &man.uscanner.4; 驱动程序) + <command>sane-find-scanner</command> 则会给出这样的信息:</para> <screen>&prompt.root; <userinput>sane-find-scanner -q</userinput> found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0</screen> @@ -1519,16 +1534,16 @@ check that the scanner is plugged in, turned on and detected by the sane-find-scanner tool (if appropriate). Please read the documentation which came with this software (README, FAQ, manpages).</screen> - <para>既然扫描仪没有被识别,我们就需要编辑 - <filename>/usr/local/etc/sane.d/epson.conf</filename> - 文件。所用的扫描仪型号是 &epson.perfection; 1650, + <para>由于扫描仪没有识别成功, 我们就需要编辑 + <filename>/usr/local/etc/sane.d/epson2.conf</filename> + 文件。 所用的扫描仪型号是 &epson.perfection; 1650, 这样我们知道扫描仪应使用 <literal>epson</literal> 后端。确保阅读后端配置文件中的帮助注释。 改动非常简单:注释掉导致您的扫描仪使用错误接口的所有行 (在我们这种情况下,我们将注释掉从 <literal>scsi</literal> 开始的所有行,因为我们的扫描仪使用 USB 接口),然后在文件的结尾添加指定的接口和所用的设备节点。 - 这种情况下,我们添加下面这行:</para> + 这种情况下, 添加下面这行:</para> <programlisting>usb /dev/uscanner0</programlisting> @@ -1542,6 +1557,7 @@ device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner</screen> 并不会带来太大的麻烦。 您需要关注的是 <literal>`epson:/dev/uscanner0'</literal> 字段, 这个给了我们正确地后端名称和正确的设备节点。</para> + </note> <para>一旦 <command>scanimage -L</command> 命令可以看到扫描仪, 配置就完成了。设备现在准备好等待扫描了。</para> @@ -1570,23 +1586,43 @@ device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner</screen> 然而您可能需要让其他的用户也可以访问扫描仪。 用户需要有扫描仪所用的设备节点的读和写权限。 比如,我们的 USB 扫描仪使用设备节点 - <filename>/dev/uscanner0</filename>,这个节点属于 - <groupname>operator</groupname> 组。将用户 + <filename>/dev/ugen0.2</filename> + 实际上只是到实际设备节点 + <filename>/dev/usb/0.2.0</filename> 的符号连接 + (可以通过查看 <filename class="directory">/dev</filename> + 目录的内容来确认这一点)。 设备节点本身和这个符号连接分别属于 + <groupname>wheel</groupname> 和 + <groupname>operator</groupname> 组。 将用户 <username><replaceable>joe</replaceable></username> 添加到 - <groupname>operator</groupname> 组会允许他使用扫描仪:</para> + 这些组中, 就可以允许他使用扫描仪了, 不过, + 出于显而易见的安全方面的原因, 在将用户加到特定的用户组, 特别是 + <groupname>wheel</groupname> 组时, 无疑需三思而后行。 + 更好的解决方法是创建一个专门用于访问 USB 设备的组, + 并让这个组的成员能够访问 USB 设备。</para> + + <para>这里作为示例, 我们将会使用名为 + <groupname><replaceable>usb</replaceable></groupname> 的组。 + 第一步是借助 + &man.pw.8; 命令来创建它:</para> + + <screen>&prompt.root; <userinput>pw groupadd usb</userinput></screen> + + <para>接下来, 令 <filename>/dev/ugen0.2</filename> + 符号连接和 <filename>/dev/usb/0.2.0</filename> 设备节点能够以 <groupname>usb</groupname> 组的身份来访问, + 具体而言是配置正确的写权限 (<literal>0660</literal> 或 + <literal>0664</literal>), 因为默认情况下只有属主 (<username>root</username>) + 才能写这些设备。 这些配置是通过在 + <filename>/etc/devfs.rules</filename> 文件中添加如下的设置来实现的:</para> - <screen>&prompt.root; <userinput>pw groupmod operator -m <replaceable>joe</replaceable></userinput></screen> + <programlisting>[system=5] +add path ugen0.2 mode 0660 group usb +add path usb/0.2.0 mode 0666 group usb</programlisting> - <para>要了解更多细节, 请阅读 &man.pw.8; 联机手册。 此外, - 还需要为 <filename>/dev/uscanner0</filename> - 设备节点设置正确的写入权限 (0660 或 0664), - 因为默认情况下, <groupname>operator</groupname> - 组只能读这个设备节点。 - 这项工作可以通过在 <filename>/etc/devfs.rules</filename> - 文件中添加如下设置来自东完成:</para> + <para>&os; 7.X 用户需要将上面的配置改为使用与之对应的 + <filename>/dev/uscanner0</filename>:</para> <programlisting>[system=5] -add path uscanner0 mode 660</programlisting> +add path uscanner0 mode 660 group usb</programlisting> <para>随后您还需要在 <filename>/etc/rc.conf</filename> @@ -1597,10 +1633,13 @@ add path uscanner0 mode 660</programlisting> <para>关于这些配置的进一步细节请参考联机手册 &man.devfs.8;。</para> - <note> - <para>当然, 考虑安全的原因, 在您将用户添加到任何组, 尤其是 - <groupname>operator</groupname> 组时, 都应三思而后行。</para> - </note> + <para>现在, 只需将用户添加到 + <groupname><replaceable>usb</replaceable></groupname> 组, + 就可以使用扫描仪了:</para> + + <screen>&prompt.root; <userinput>pw groupmod usb -m <replaceable>joe</replaceable></userinput></screen> + + <para>更多详情, 请参见联机手册 &man.pw.8;。</para> </sect2> </sect1> </chapter> diff --git a/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml index 2e25551746..41cd2e7763 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.118 + Original Revision: 1.119 $FreeBSD$ --> @@ -2258,7 +2258,7 @@ nis_client_flags="-S <replaceable>NIS domain</replaceable>,<replaceable>server</ 客户端程序, <command>dhclient</command>, 是随 FreeBSD 作为它的一部分提供的; 而服务器部分, 则可以通过 <filename - role="package">net/isc-dhcp3-server</filename> port 得到。 + role="package">net/isc-dhcp31-server</filename> port 得到。 &man.dhclient.8;、 &man.dhcp-options.5;、 以及 &man.dhclient.conf.5; 联机手册, 加上下面所介绍的参考文献, 都是非常有用的资源。</para> @@ -2357,7 +2357,7 @@ dhclient_flags=""</programlisting> </indexterm> <para>DHCP 服务器, <application>dhcpd</application>, 是作为 <filename - role="package">net/isc-dhcp3-server</filename> port 的一部分提供的。 + role="package">net/isc-dhcp31-server</filename> port 的一部分提供的。 这个 port 包括了 ISC DHCP 服务器及其文档。</para> </sect2> @@ -2419,7 +2419,7 @@ dhclient_flags=""</programlisting> <para>DHCP 套件中的服务器部分并没有作为 FreeBSD 的一部分来提供, 因此您需要安装 - <filename role="package">net/isc-dhcp3-server</filename> + <filename role="package">net/isc-dhcp31-server</filename> port 才能提供这个服务。 请参见 <xref linkend="ports"> 以了解关于如何使用 Ports Collection 的进一步详情。</para> </sect3> @@ -2453,7 +2453,7 @@ dhclient_flags=""</programlisting> <para>接下来要做的是编辑示范的 <filename>dhcpd.conf</filename>, 它由 - <filename role="package">net/isc-dhcp3-server</filename> port + <filename role="package">net/isc-dhcp31-server</filename> port 安装。 默认情况下, 它的名字应该是 <filename>/usr/local/etc/dhcpd.conf.sample</filename>, 在开始修改之前, 您需要把它复制为 @@ -2552,7 +2552,7 @@ dhcpd_ifaces="dc0"</programlisting> <para>接下来, 可以用下面的命令来启动服务:</para> - <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/isc-dhcpd.sh start</userinput></screen> + <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/isc-dhcpd start</userinput></screen> <para>如果未来您需要修改服务器的配置, 请务必牢记发送 <literal>SIGHUP</literal> 信号给 @@ -2595,7 +2595,7 @@ dhcpd_ifaces="dc0"</programlisting> <para><application>dhcrelay</application> 在更为复杂的环境中, 可以用来支持使用 DHCP 服务器转发请求给另一个独立网络上的 DHCP 服务器。 如果您需要这个功能, 需要安装 <filename - role="package">net/isc-dhcp3-relay</filename> port。 + role="package">net/isc-dhcp31-relay</filename> port。 &man.dhcrelay.8; 联机手册提供了更为详尽的介绍。</para> </listitem> </itemizedlist> diff --git a/zh_CN.GB2312/books/handbook/ports/chapter.sgml b/zh_CN.GB2312/books/handbook/ports/chapter.sgml index 21a021ef24..a5e52f813f 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.289 + Original Revision: 1.290 $FreeBSD$ --> @@ -641,8 +641,7 @@ docbook = <step> <para>以 <username>root</username> 身份运行 - <command>sysinstall</command> - (对 &os; 5.2 之前的版本, 应执行 <command>/stand/sysinstall</command>):</para> + <command>sysinstall</command>:</para> <screen>&prompt.root; <userinput>sysinstall</userinput></screen> </step> diff --git a/zh_CN.GB2312/books/handbook/printing/chapter.sgml b/zh_CN.GB2312/books/handbook/printing/chapter.sgml index 37f65ffbbf..827e1bfeac 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.120 + Original Revision: 1.121 $FreeBSD$ --> @@ -4368,6 +4368,21 @@ cfA013rose dequeued url="http://www.cups.org/"></ulink>。</para> </listitem> </varlistentry> + + <varlistentry> + <term>HPLIP</term> + + <indexterm><primary>HPLIP</primary></indexterm> + <listitem> + <para><application>HPLIP</application>, HP &linux; 成像及打印系统 (Imaging and + Printing system), 是一套由 HP 开发的用于支持 HP 的打印、 + 扫描和传真设备的工具。 这套程序利用 <application>CUPS</application> + 打印系统作为后端来提供一些打印方面的功能。</para> + + <para><application>HPLIP</application> + 的主页位于 <ulink url="http://hplipopensource.com/hplip-web/index.html"></ulink>。</para> + </listitem> + </varlistentry> </variablelist> </sect1> diff --git a/zh_CN.GB2312/books/handbook/security/chapter.sgml b/zh_CN.GB2312/books/handbook/security/chapter.sgml index eb7e781336..7060d61ac7 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.334 + Original Revision: 1.335 $FreeBSD$ --> @@ -440,10 +440,12 @@ 并通过其他机制来检测入侵。</para> <para>系统中另一个比较大的 <username>root</username> 漏洞 - 是安装在其中的 suid-root 和 sgid 的可执行文件。绝大多数这类程序, - 例如 <application>rlogin</application>, 被存放于 - <filename>/bin</filename>, <filename>/sbin</filename>, - <filename>/usr/bin</filename>, 或 <filename>/usr/sbin</filename> 中。 + 是安装在其中的 suid-root 和 sgid 的可执行文件。 绝大多数这类程序, + 例如 <application>rlogin</application> + 会放在 <filename class="directory">/bin</filename>、 <filename + class="directory">/sbin</filename>、 <filename + class="directory">/usr/bin</filename>, 或 <filename + class="directory">/usr/sbin</filename> 目录中。 尽管并没有 100% 的安全保证,但系统默认的 suid 和 sgid 可执行文件通常是相对安全的。 当然,偶尔也会发现一些存在于这些可执行文件中的 <username>root</username> 漏洞。1998年,<literal>Xlib</literal> @@ -555,7 +557,8 @@ 然而, 这样做也可能有些过火, 而由于系统运行于较高的安全级别, 升级系统也会变得困难的多。 作为妥协, 可以让系统以较高的安全级别运行, 但并不将所有的启动文件都配置 <literal>schg</literal> 标记。 - 另一种方法是将 <filename>/</filename> 和 <filename>/usr</filename> 以只读模式挂载。 + 另一种方法是将 <filename class="directory">/</filename> 和 <filename + class="directory">/usr</filename> 以只读模式挂载。 请注意, 过分严苛的安全配置很可能限制您检测入侵的能力。</para> </sect2> @@ -564,8 +567,8 @@ <para>当实施严格的限制时,往往会在使用的方便性上付出代价。例如,使用 <command>chflags</command> 来把 <literal>schg</literal> 标记 - 应用到 <filename>/</filename> 和 - <filename>/usr</filename> 中的绝大多数文件上可能会起到反作用, + 应用到 <filename class="directory">/</filename> 和 + <filename class="directory">/usr</filename> 中的绝大多数文件上可能会起到反作用, 因为尽管它能够保护那些文件, 但同时也使入侵检测无法进行。 层次化安全的最后一层可能也是最重要的 — 检测。 如果无法检测出潜在的入侵行为, @@ -589,10 +592,12 @@ 就应该为实际的监控撰写脚本。以 NFS 挂接为例,可以用类似 &man.find.1; 和 &man.md5.1; 这样的命令为基础来完成我们所需的工作。 最好能够每天对被控机的所有执行文件计算一遍 md5,同时,还应以更高的频率测试那些 - <filename>/etc</filename> 和 <filename>/usr/local/etc</filename> + <filename class="directory">/etc</filename> 和 + <filename class="directory">/usr/local/etc</filename> 中的控制文件。一旦发现了不匹配的情形,监控机应立即通知系统管理员。 好的安全脚本也应该检查在系统分区,如 <filename>/</filename> 和 - <filename>/usr</filename> 中是否有新增或删除的可执行文件,以及不适宜的 suid 。</para> + <filename class="directory">/usr</filename> + 中是否有新增或删除的可执行文件,以及不适宜的 suid 。</para> <para>如果打算使用 ssh 来代替 NFS,那么撰写安全脚本将变得困难许多。 本质上,需要在脚本中使用 <command>scp</command> 在客户端复制文件, @@ -1357,11 +1362,11 @@ sendmail : PARANOID : deny</programlisting> <sect2> <title>创建最初的数据库</title> - + <para>这项工作只需要在 Kerberos 服务器上完成。 首先确认没有旧的 Kerberos 数据库存在。 您应该进入到 - <filename>/etc/kerberosIV</filename> 目录中并检查下述文件是否已经存在:</para> - + <filename class="directory">/etc/kerberosIV</filename> 目录中并检查下述文件是否已经存在:</para> + <screen>&prompt.root; <userinput>cd /etc/kerberosIV</userinput> &prompt.root; <userinput>ls</userinput> README krb.conf krb.realms</screen> @@ -1517,13 +1522,13 @@ Edit O.K. <sect2> <title>创建服务器文件</title> - + <para>现在需要分析在每台机器上定义的服务的所有情况。 为了做到这一点, 可以使用 <command>ext_srvtab</command> 命令。 这将创建一个文件, 它需要被 <emphasis>通过安全的途径</emphasis> 复制或移动到每一个 Kerberos 客户端的 - <filename>/etc</filename> 目录中。 + <filename class="directory">/etc</filename> 目录中。 在每一台服务器上都必须存在这个文件, 它对 Kerberos 的运行至关重要。</para> @@ -1541,11 +1546,11 @@ Generating 'grunt-new-srvtab'....</screen> <screen>&prompt.root; <userinput>mv grunt-new-srvtab srvtab</userinput></screen> - <para>如果文件是针对客户系统的, 而且网络可能会不安全, 则应把 - <filename><replaceable>client</replaceable>-new-srvtab</filename> 复制到可移动的介质上, - 并通过物理上安全的方式拿走。 - 将其改名为 <filename>srvtab</filename> 并放到客户机的 - <filename>/etc/kerberosIV</filename> 目录中, 并赋予 + <para>如果文件是针对客户系统的, 并且网络的安全性存疑, 则应把 + <filename><replaceable>client</replaceable>-new-srvtab</filename> + 复制到可移动介质上, 并以安全的实物交付方法拿走。 把文件复制到客户机的 <filename + class="directory">/etc</filename> 目录中, + 并将其改名为 <filename>srvtab</filename>, 并赋予 mode 600:</para> <screen>&prompt.root; <userinput>mv grumble-new-srvtab srvtab</userinput> @@ -1590,13 +1595,12 @@ Edit O.K. <sect2> <title>测试全部相关信息</title> - + <para>首先必须启动 Kerberos 的服务程序。 这里需要指出, 如果您正确地修改了 <filename>/etc/rc.conf</filename> 则系统在启动时会自动完成这个工作。 - 只有在 - Kerberos 服务器上才需要这么做。 Kerberos 客户程序将自动地从 - <filename>/etc/kerberosIV</filename> 目录中的文件获取所需要的信息。</para> - + 只有在 Kerberos 服务器上才需要这么做。 Kerberos 客户程序将自动地从 <filename + class="directory">/etc/kerberosIV</filename> 目录中的文件获取所需要的信息。</para> + <screen>&prompt.root; <userinput>kerberos &</userinput> Kerberos server starting Sleep forever on error @@ -2339,7 +2343,7 @@ jdoe@example.org</screen> (<ulink url="http://web.mit.edu/Kerberos/www/"></ulink>) 上的说明来操作。 请小心关于路径的问题, <acronym>MIT</acronym> port 会默认安装到 - <filename>/usr/local/</filename>, 您因此可能会执行 + <filename class="directory">/usr/local/</filename>, 您因此可能会执行 <quote>普通的</quote> 系统应用程序而非 <acronym>MIT</acronym>, 如果您的 <envar>PATH</envar> 环境变量把 把系统目录放在前面的话。</para> @@ -2396,8 +2400,8 @@ kadmind5_server_enable="YES"</programlisting> <para>在多用户环境中 <application>Kerberos</application> 的安全性会被削弱。 - 这是因为它把 ticket 保存到 - <filename>/tmp</filename> 目录中, 而这个目录可以被任何用户读取。 + 这是因为它把 ticket 保存到 <filename + class="directory">/tmp</filename> 目录中, 而这个目录可以被任何用户读取。 如果有用户与其它人同时共享一台计算机 (也就是 multi-user), 则这个用户的 ticket 就可能被其它用户窃取 (复制)。</para> @@ -3265,9 +3269,9 @@ COPYRIGHT 100% |*****************************| 4735 <secondary>配置</secondary> </indexterm> - <para>针对 <application>OpenSSH</application> - 服务程序和客户端的系统级配置文件在 <filename>/etc/ssh</filename> - 目录中。</para> + <para>针对 <application>OpenSSH</application> 服务程序和客户端的系统级配置文件在 + <filename class="directory">/etc/ssh</filename> + 目录中。</para> <para><filename>ssh_config</filename> 用于配置客户端的设定, 而 <filename>sshd_config</filename> 则用于配置服务器端。</para> @@ -3633,8 +3637,10 @@ drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2 drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3 drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html</programlisting> - <para>这里我们看到了 <filename>directory1</filename>、 - <filename>directory2</filename>, 以及 <filename>directory3</filename> + <para>这里我们看到了 <filename + class="directory">directory1</filename>、 <filename + class="directory">directory2</filename>, 以及 <filename + class="directory">directory3</filename> 目录使用了 <acronym>ACL</acronym>。 而 <filename>public_html</filename> 则没有。</para> @@ -3867,7 +3873,8 @@ VII. References<co id="co-ref"></programlisting> <callout arearefs="co-affects"> <para>The <literal>Affects</literal>(影响范围) 一栏给出了 &os; 的哪些版本存在这个漏洞。 对于内核来说, 检视受影响的文件上执行的 <command>ident</command> 输出可以帮助确认文件版本。 - 对于 ports, 版本号在 <filename>/var/db/pkg</filename> 里面的 port 的名字后面列出。 + 对于 ports, 版本号在 <filename class="directory">/var/db/pkg</filename> + 里面的 port 的名字后面列出。 如果系统没有与 &os; <acronym>CVS</acronym> 代码库同步并每日构建, 它很可能是有问题的。</para> </callout> diff --git a/zh_CN.GB2312/books/handbook/virtualization/chapter.sgml b/zh_CN.GB2312/books/handbook/virtualization/chapter.sgml index 27acb39aa1..f2bfc680ce 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.19 + Original Revision: 1.23 $FreeBSD$ --> @@ -36,20 +36,20 @@ <listitem> <para>如何在采用 &intel; 处理器的 &apple; &macintosh; - 计算机上安装 FreeBSD。</para> + 计算机上安装 &os;。</para> </listitem> <listitem> - <para>如何在包含 <application>&xen;</application> 的 Linux 上安装 FreeBSD。</para> + <para>如何在包含 <application>&xen;</application> 的 Linux 上安装 &os;。</para> </listitem> <listitem> <para>如何在 µsoft.windows; 以 - <application>Virtual PC</application> 安装 FreeBSD。</para> + <application>Virtual PC</application> 安装 &os;。</para> </listitem> <listitem> - <para>如何为虚拟化对 FreeBSD 系统进行性能调优。</para> + <para>如何针对虚拟化环境对 &os; 系统进行性能调优。</para> </listitem> </itemizedlist> @@ -57,11 +57,11 @@ <itemizedlist> <listitem> - <para>理解 &unix; 和 FreeBSD 的基础知识 (<xref + <para>理解 &unix; 和 &os; 的基础知识 (<xref linkend="basics">)。</para> </listitem> - <listitem><para>了解如何安装 FreeBSD (<xref + <listitem><para>了解如何安装 &os; (<xref linkend="install">)。</para></listitem> <listitem><para>了解如何配置网络连接 (<xref @@ -76,22 +76,24 @@ <sect1 id="virtualization-guest"> - <title>作为客户 OS 的 FreeBSD</title> + <title>作为客户 OS 的 &os;</title> <sect2 id="virtualization-guest-parallels"> <title>MacOS 上的 Parallels</title> - <para>为 &mac; 设计的 <application>Parallels Desktop</application> 是一种可用于采用 &intel; 处理器, 并运行 &macos; - 10.4.6 或更高版本的 &apple; &mac; 计算机的商业软件。 在 &macos; + <para>为 &mac; 设计的 <application>Parallels Desktop</application> + 是一种可用于采用 &intel; 处理器, 并运行 &macos; + 10.4.6 或更高版本的 &apple; &mac; 计算机的商业软件。 + 它为 &os; 系统提供了完整的支持。 在 &macos; X 上安装了这个软件之后, 用户需要配置虚拟机并安装所需的客户操作系统。</para> <sect3 id="virtualization-guest-parallels-install"> - <title>在 Parallels/&macos; X 上安装 FreeBSD</title> + <title>在 Parallels/&macos; X 上安装 &os;</title> <para>在 &macos; X/<application>Parallels</application> 上安装 FreeBSD 的第一步是创建一个新的虚拟机。 - 在系统提示选择客户 OS 类型 (<guimenu>Guest OS Type</guimenu>) 时选择 <guimenuitem>FreeBSD</guimenuitem>, - 并根据您使用 FreeBSD 虚拟实例的需要分配磁盘和内存:</para> + 在系统提示选择客户 OS 类型 (<guimenu>Guest OS Type</guimenu>) 时选择 <guimenuitem>&os;</guimenuitem>, + 并根据您使用 &os; 虚拟实例的需要分配磁盘和内存:</para> <mediaobject> <imageobject> @@ -100,7 +102,7 @@ </mediaobject> <para>对多数在 <application>Parallels</application> 上使用 - FreeBSD 的情形而言, 4GB 磁盘空间和 512MB 的 RAM 就够用了:</para> + &os; 的情形而言, 4GB 磁盘空间和 512MB 的 RAM 就够用了:</para> <mediaobject> <imageobject> @@ -126,10 +128,39 @@ </imageobject> </mediaobject> - <para>在创建了 FreeBSD 虚拟机之后, 还需要在其中安装 FreeBSD。 - 最好的做法是使用官方的 FreeBSD CDROM 或从官方 FTP 站点下载的 ISO 镜像来完成这个任务。 + <para>选择使用的网络和网卡类型:</para> + + <mediaobject> + <imageobject> + <imagedata fileref="virtualization/parallels-freebsd6"> + </imageobject> + </mediaobject> + + <mediaobject> + <imageobject> + <imagedata fileref="virtualization/parallels-freebsd7"> + </imageobject> + </mediaobject> + + <para>保存并完成配置:</para> + + <mediaobject> + <imageobject> + <imagedata fileref="virtualization/parallels-freebsd8"> + </imageobject> + </mediaobject> + + <mediaobject> + <imageobject> + <imagedata fileref="virtualization/parallels-freebsd9"> + </imageobject> + </mediaobject> + + <para>在创建了 &os; 虚拟机之后, 还需要在其中安装 &os;。 + 最好的做法是使用官方的 &os; CDROM 或从官方 FTP 站点下载的 ISO 镜像来完成这个任务。 如果您的本地 &mac; 文件系统中有 ISO 映像文件, 或您的 &mac; 的 CD 驱动器中有 - CDROM, 就可以在 FreeBSD <application>Parallels</application> 窗口的右下角点击光盘图标。 + CDROM, 就可以在 &os; + <application>Parallels</application> 窗口的右下角点击光盘图标。 之后, 系统将给出一个窗口, 供您完成将虚拟机中的 CDROM 驱动器连接到本地的 ISO 文件或真正的 CDROM 驱动器上。</para> @@ -140,7 +171,8 @@ </mediaobject> <para>在完成了将 CDROM 与您的安装源完成关联之后, - 就可以按重启 (reboot) 图标来重启 FreeBSD 虚拟机了。 <application>Parallels</application> 将配合一个特殊的 + 就可以按重启 (reboot) 图标来重启 &os; 虚拟机了。 + <application>Parallels</application> 将配合一个特殊的 BIOS 启动, 后者能够像普通的 BIOS 一样检查系统中是否有 CDROM 驱动器。</para> <mediaobject> @@ -149,7 +181,7 @@ </imageobject> </mediaobject> - <para>此时, 它就能够找到 FreeBSD 安装介质并开始 <xref linkend="install"> + <para>此时, 它就能够找到 &os; 安装介质并开始 <xref linkend="install"> 中所介绍的标准的基于 <application>sysinstall</application> 安装的过程。</para> <mediaobject> @@ -159,7 +191,7 @@ </mediaobject> <para>此时您可以安装 X11, - 但暂时不要对它进行配置。 在完成安装之后, 重启并进入新安装的 FreeBSD 虚拟机。</para> + 但暂时不要对它进行配置。 在完成安装之后, 重启并进入新安装的 &os; 虚拟机。</para> <mediaobject> <imageobject> @@ -169,9 +201,9 @@ </sect3> <sect3 id="virtualization-guest-parallels-configure"> - <title>在 &macos; X/Parallels 上配置 FreeBSD</title> + <title>在 &macos; X/Parallels 上配置 &os;</title> - <para>在您将 FreeBSD 安装到 &macos; + <para>在您将 &os; 安装到 &macos; X 的 <application>Parallels</application> 上之后, 还需要进行一系列的配置, 以便为系统的虚拟化操作进行优化。</para> @@ -180,13 +212,13 @@ <title>配置引导加载器变量</title> <para>最重要的一步是通过调低 - <option>kern.hz</option> 变量来降低 <application>Parallels</application> 环境中的 FreeBSD + <option>kern.hz</option> 变量来降低 <application>Parallels</application> 环境中的 &os; 对 CPU 的使用。 这可以通过在 <filename>/boot/loader.conf</filename> 中增加下述配置来完成:</para> <programlisting>kern.hz=100</programlisting> - <para>如果不使用这个配置, 闲置的 FreeBSD <application>Parallels</application> 客户 + <para>如果不使用这个配置, 闲置的 &os; <application>Parallels</application> 客户 OS 会在单处理器的 &imac; 上使用大约 15% 的 CPU。 如此修改之后, 空闲时的使用量就减少到大约 5% 了。</para> </step> @@ -229,11 +261,11 @@ <!-- Mar/Apr 2007 --> </sect2info> - <title>在 Linux 上通过 &xen; 运行 FreeBSD</title> + <title>在 Linux 上通过 &xen; 运行 &os;</title> <para><application>&xen;</application> hypervisor 是一个开放源代码的并行虚拟化产品, 并由商业的 XenSource 公司提供支持。 在这种系统中, 客户操作系统称为 domU 域, - 而宿主系统则称为 dom0。 在 Linux 上运行 FreeBSD 虚拟机实例的第一步, 是安装用于 + 而宿主系统则称为 dom0。 在 Linux 上运行 &os; 虚拟机实例的第一步, 是安装用于 Linux dom0 的 <application>&xen;</application>。 在这个例子中, 宿主系统采用的发行版本是 Slackware Linux。</para> @@ -307,11 +339,11 @@ Domain-0 0 256 1 r----- 54452.9</sc </sect3> <sect3> - <title>FreeBSD 7-CURRENT domU</title> + <title>&os; 7-CURRENT domU</title> <para>从 <ulink url="http://www.fsmware.com/">http://www.fsmware.com/</ulink> - 下载用于 <application>&xen; 3.0</application> 的 FreeBSD domU 内核。</para> + 下载用于 <application>&xen; 3.0</application> 的 &os; domU 内核。</para> <itemizedlist> <listitem> @@ -515,10 +547,10 @@ xenbr1 8000.feffffffffff no vif0.1 之后, 必须针对所安装的虚拟机器来做相应设定。</para> <sect3 id="virtualization-guest-virtualpc-install"> - <title>在 Virtual PC/µsoft.windows; 上安装 FreeBSD</title> + <title>在 Virtual PC/µsoft.windows; 上安装 &os;</title> <para>在 µsoft.windows;/<application>Virtual PC</application> - 上安装 FreeBSD 的第一步是新增虚拟器。 如下所示,在提示向导中请选择 + 上安装 &os; 的第一步是新增虚拟器。 如下所示,在提示向导中请选择 <guimenuitem>Create a virtual machine</guimenuitem>:</para> <mediaobject> @@ -543,7 +575,7 @@ xenbr1 8000.feffffffffff no vif0.1 </mediaobject> <para>并依据自身需求来规划硬盘容量和内存的分配。对大多数在 - <application>Virtual PC</application> 使用 FreeBSD + <application>Virtual PC</application> 使用 &os; 的情况而言, 大约 4GB 的硬盘空间以及 512MB 的内存就够用了。</para> <mediaobject> @@ -566,7 +598,7 @@ xenbr1 8000.feffffffffff no vif0.1 </imageobject> </mediaobject> - <para>接下来选择新建的 FreeBSD 虚拟机器,并单击 + <para>接下来选择新建的 &os; 虚拟机器,并单击 <guimenu>Settings</guimenu>, 以设定网络种类以及网卡:</para> <mediaobject> @@ -581,10 +613,10 @@ xenbr1 8000.feffffffffff no vif0.1 </imageobject> </mediaobject> - <para>在新建 FreeBSD 虚拟机器以后, 就可以继续以其安装 - FreeBSD。 安装方面, 比较好的作法是使用官方的 FreeBSD + <para>在新建 &os; 虚拟机器以后, 就可以继续以其安装 + &os;。 安装方面, 比较好的作法是使用官方的 &os; 光盘或从官方 FTP 站下载 ISO 镜像。 若您的 &windows; 系统 - 内已有该 ISO 镜像, 那么就可以在 FreeBSD 虚拟机器上连按两下, + 内已有该 ISO 镜像, 那么就可以在 &os; 虚拟机器上双击, 以开始启动。 接着在 <application>Virtual PC</application> 窗口内按 <guimenu>CD</guimenu> 再按 <guimenu>Capture ISO Image...</guimenu>。 接着出现一个对话框, @@ -613,7 +645,7 @@ xenbr1 8000.feffffffffff no vif0.1 </imageobject> </mediaobject> - <para>此时, 它会找到 FreeBSD 安装光盘, 并开始在 + <para>此时, 它会找到 &os; 安装光盘, 并开始在 <xref linkend="install"> 内所介绍的 <application>sysinstall</application> 安装过程。 这时候也可以顺便安装 X11, 但不要进行相关设定。</para> @@ -625,7 +657,7 @@ xenbr1 8000.feffffffffff no vif0.1 </mediaobject> <para>完成安装之后, 记得把安装光盘或者 ISO 镜像退出。 - 最后, 把装好的 FreeBSD 虚拟机器重新开机即可。</para> + 最后, 把装好的 &os; 虚拟机器重新开机即可。</para> <mediaobject> <imageobject> @@ -635,11 +667,11 @@ xenbr1 8000.feffffffffff no vif0.1 </sect3> <sect3 id="virtualization-guest-virtualpc-configure"> - <title>调整 µsoft.windows;/Virtual PC 上的 FreeBSD</title> + <title>调整 µsoft.windows;/Virtual PC 上的 &os;</title> <para>在 µsoft.windows; 上以 <application>Virtual PC</application> - 装好 FreeBSD 后, 还需要做一些设定步骤, - 以便将虚拟机内的 FreeBSD 最佳化。</para> + 装好 &os; 后, 还需要做一些设定步骤, + 以便将虚拟机内的 &os; 最佳化。</para> <procedure> <step> @@ -647,13 +679,13 @@ xenbr1 8000.feffffffffff no vif0.1 <para>最重要的步骤乃是藉由调降 <option>kern.hz</option> 来降低 <application>Virtual PC</application> 环境内 - FreeBSD 的 CPU 占用率。 在 + &os; 的 CPU 占用率。 在 <filename>/boot/loader.conf</filename> 内加上下列设定即可:</para> <programlisting>kern.hz=100</programlisting> - <para>若不作这设定, 那么光是 idle 状态的 FreeBSD + <para>若不作这设定, 那么光是 idle 状态的 &os; <application>Virtual PC</application> guest OS 就会在单一处理器的电脑上大约有 40% 的 CPU 占用率。 作了上述修改之后, 占用率大约会降至 3%。</para> @@ -688,17 +720,17 @@ xenbr1 8000.feffffffffff no vif0.1 <sect2 id="virtualization-guest-vmware"> <title>运行于 MacOS 的 VMware</title> - <para>&mac 版本的 <application>VMWare Fusion</application> + <para>&mac 版本的 <application>VMware Fusion</application> 是一个商业软件,运行在基于 &intel 的 &apple; &mac 计算机的 - &macos; 10.4.9 或更版本的操作系统上。FreeBSD + &macos; 10.4.9 或更版本的操作系统上。 &os; 是一个完全被支持的客户操作系统。 在 &macos; X 上安装了 - <application>VMWare Fusion</application> 之后, + <application>VMware Fusion</application> 之后, 用户就可以着手配置一个虚拟机器并安装客户操作系统。</para> <sect3 id="virtualization-guest-vmware-install"> - <title>在 VMWare/&macos; X 上安装 FreeBSD</title> + <title>在 VMware/&macos; X 上安装 &os;</title> - <para>第一步是运行 VMWare Fusion, 虚拟机器库将被装载。 + <para>第一步是运行 VMware Fusion, 虚拟机器库将被装载。 单击 "New" 创建 VM:</para> <mediaobject> @@ -718,8 +750,8 @@ xenbr1 8000.feffffffffff no vif0.1 <para>在 <guimenuitem>Operatiing System</guimenuitem> 项选择 <guimenuitem>Other</guimenuitem>,<guimenuitem>Version</guimenuitem> - 项可选 <guimenuitem>FreeBSD</guimenuitem> 或 - <guimenuitem>FreeBSD 64-bit</guimenuitem>。</para> + 项可选 <guimenuitem>&os;</guimenuitem> 或 + <guimenuitem>&os; 64-bit</guimenuitem>。</para> <mediaobject> <imageobject> @@ -810,29 +842,29 @@ xenbr1 8000.feffffffffff no vif0.1 </imageobject> </mediaobject> - <para>在你修改完设定之后,就可以从新安装的 FreeBSD + <para>在你修改完设定之后,就可以从新安装的 &os; 虚拟机器启动了。</para> </sect3> <sect3 id="virtualization-guest-vmware-configure"> - <title>配置运行于 &macos; X/VMWare 上的 FreeBSD</title> + <title>配置运行于 &macos; X/VMware 上的 &os;</title> - <para>在 &macos; X 上的 <application>VMWare</application> - 上安装完 FreeBSD 之后,有些配置的步骤可用来优化虚拟系统。</para> + <para>在 &macos; X 上的 <application>VMware</application> + 上安装完 &os; 之后,有些配置的步骤可用来优化虚拟系统。</para> <procedure> <step> <title>设置 boot loader 变量</title> <para>最重要的步骤是降低 <option>kern.hz</option> - 来减少 <application>VMWare</application> 上 FreeBSD + 来减少 <application>VMware</application> 上 &os; 的 CPU 使用率。这需要在 <filename>/boot/loader.conf</filename> 里加入以下这行设定:</para> <programlisting>kern.hz=100</programlisting> - <para>如果没有这项设定,<application>VMWare</application> - 上的 FreeBSD 客户 OS 空闲时将占用 &imac; 上一个 CPU + <para>如果没有这项设定,<application>VMware</application> + 上的 &os; 客户 OS 空闲时将占用 &imac; 上一个 CPU 大约 15% 的资源。在修改此项设定之后仅为 5%。</para> </step> @@ -840,7 +872,7 @@ xenbr1 8000.feffffffffff no vif0.1 <title>创建一个新的内核配置文件</title> <para>你可以去掉所有的 FireWire, USB 设备的驱动程序。 - <application>VMWare</application> 提供了一个 + <application>VMware</application> 提供了一个 &man.em.4; 支持的虚拟网络适配器,所以除了 &man.em.4; 之外的网卡驱动都可以被剔除。</para> </step> @@ -862,7 +894,7 @@ xenbr1 8000.feffffffffff no vif0.1 </sect1> <sect1 id="virtualization-host"> - <title>作为宿主 OS 的 FreeBSD</title> + <title>作为宿主 OS 的 &os;</title> <para>在过去的几年中 &os; 并没有任何可用的并被官方支持的虚拟化解决方案。 一些用户曾时使用过利用 &linux 二进制兼容层运行的 @@ -885,11 +917,11 @@ xenbr1 8000.feffffffffff no vif0.1 <sect2 id="virtualization-virtualbox-install"> <title>安装 &virtualbox;</title> - <para><application>&virtualbox;</application> 已作为一个 &os; - port 位于 <filename role="package">emulators/virtualbox</filename>, + <para><application>&virtualbox;</application> 已作为一个 &os; port 提供, + 位于 <filename role="package">emulators/virtualbox-ose</filename>, 可使用如下的命令安装:</para> - <screen>&prompt.root; <userinput>cd /usr/ports/emulators/virtualbox</userinput> + <screen>&prompt.root; <userinput>cd /usr/ports/emulators/virtualbox-ose</userinput> &prompt.root; <userinput>make install clean</userinput></screen> <para>在配置对话框中的一个有用的选项是 @@ -912,8 +944,12 @@ xenbr1 8000.feffffffffff no vif0.1 <programlisting>vboxdrv_load="YES"</programlisting> - <para><application>&virtualbox;</application> 还需要挂载 - <filename class="directory">proc</filename> 文件系统:</para> + <para>在 3.1.2 之前版本的 <application>&virtualbox;</application> + 需要挂接 <filename class="directory">proc</filename> 文件系统。 + 在新版本中不再有此要求, 因为它们使用了由 &man.sysctl.3; 库提供的功能。</para> + + <para>当使用旧版本的 port 时, 需要使用下面的步骤来挂载 + <filename class="directory">proc</filename>:</para> <screen>&prompt.root; <userinput>mount -t procfs proc /proc</userinput></screen> @@ -959,8 +995,7 @@ xenbr1 8000.feffffffffff no vif0.1 <title>其他的虚拟化选项</title> <para><application>&xen;</application>在 &os; - 上作为宿主运行依然处于开发之中。 试验性版本将出现在 - &os; 8.0。</para> + 上作为宿主运行依然处于开发之中。</para> </sect2> </sect1> diff --git a/zh_CN.GB2312/books/handbook/x11/chapter.sgml b/zh_CN.GB2312/books/handbook/x11/chapter.sgml index 6b84252917..d7c70c5a1b 100644 --- a/zh_CN.GB2312/books/handbook/x11/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/x11/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.194 + Original Revision: 1.201 $FreeBSD$ --> @@ -422,23 +422,31 @@ dbus_enable="YES"</programlisting> <screen>&prompt.root; <userinput>Xorg -config xorg.conf.new -retro</userinput></screen> - <para>如果用户看到一个黑灰的格子和一个 X 形的鼠标指针,那么配置就是成功的。 - 要退出测试, 只要同时按下 + <para>如果看到黑灰的格子以及 X 型鼠标指针, 就表示配置成功了。 + 要退出测试, 需要同时按下 <keycombo action="simul"> <keycap>Ctrl</keycap> <keycap>Alt</keycap> - <keycap>Backspace</keycap> - </keycombo>。</para> - - <note><para>如果鼠标工作不正常, 则需要先配置它。 - 参见 &os; 安装一章中的 <xref linkend="mouse">。</para></note> - - <indexterm><primary>X11 调优</primary></indexterm> + <keycap>F<replaceable>n</replaceable></keycap> + </keycombo> 来切换到用于启动 X 的虚拟控制台 + (<keycap>F1</keycap> 表示第一个虚拟控制台) + 之后按 + <keycombo action="simul"> + <keycap>Ctrl</keycap> + <keycap>C</keycap> + </keycombo>。</para> <note> - <para>此组合键在 <application>&xorg;</application> 7.3 - 或者之前的版本中默认启用。 在 7.4 或以后的版本中开启此选项, - 你可以在任何的 X 终端模拟器中键入以下的命令:</para> + <para>在<application>&xorg;</application> 7.3 + 以及更早期的版本中, 应使用 + <keycombo action="simul"> + <keycap>Ctrl</keycap> + <keycap>Alt</keycap> + <keycap>Backspace</keycap> + </keycombo> 组合键来强制退出 + <application>&xorg;</application>。 如果需要在 7.4 + 和之后的版本中启用这个组合键, + 可以在任意 X 终端模拟器中输入下面的命令:</para> <screen>&prompt.user; <userinput>setxkbmap -option terminate:ctrl_alt_bksp</userinput></screen> @@ -458,6 +466,13 @@ dbus_enable="YES"</programlisting> <para>你可能需要重启你的机器来使得 <application>hald</application> 重新读取这个文件。</para> + + <para>此外, 还需要在 + <filename>xorg.conf.new</filename> 中的 + <literal>ServerLayout</literal> 或 <literal>ServerFlags</literal> + 小节中添加:</para> + + <programlisting>Option "DontZap" "off"</programlisting> </note> <para>如果鼠标无法正常工作, 在继续深入之前需要先配置它。 @@ -815,20 +830,12 @@ EndSection</programlisting> <indexterm><primary>fonts</primary> <secondary>anti-aliased</secondary></indexterm> - <para>X11 从 <application>&xfree86;</application> 4.0.2 开始支持字体的反走样。 - 但是, 字体配置在 - <application>&xfree86;</application> 4.3.0 之前是非常繁琐的。 - 从 <application>&xfree86;</application> 4.3.0 开始, - 对于所有支持 Xft 的应用程序, 所有放到 X11 + <para>对于所有支持 Xft 的应用程序, 所有放到 X11 <filename>/usr/local/lib/X11/fonts/</filename> 和 <filename>~/.fonts/</filename> 中的字体都自动地被加入反走样支持。 - 并不是所有的应用程序都支持 Xft, 但已经有相当多的程序提供 Xft 支持了。 - 支持 Xft 的应用程序包括 Qt 2.3 以及更高版本 - (用以开发 <application>KDE</application> 桌面的工具包)、 - GTK+ 2.0 和更高版本 (用于开发 - <application>GNOME</application> 桌面的工具包), 以及 - <application>Mozilla</application> 1.2 和更高版本。 - </para> + 绝大多数较新的程序都提供了 Xft 支持, 包括 + <application>KDE</application>、 <application>GNOME</application> 以及 + <application>Firefox</application>。</para> <para>要控制哪些字体是 anti-aliased,或者配置 anti-aliased 特性, 创建(或者编辑,如果文件已经存在的话)文件 @@ -924,8 +931,7 @@ EndSection</programlisting> <para>某些字体,比如 Helvetica,当 anti-aliased 的时候可能存在问题。 通常的表现为字体本身似乎被垂直的切成两半。 - 糟糕的时候,还可能导致应用程序比如 - <application>Mozilla</application> 崩溃。 + 糟糕的时候,还可能导致应用程序崩溃。 为了避免这样的现象,考虑添加下面几行到 <filename>local.conf</filename>文件里面:</para> @@ -943,18 +949,6 @@ EndSection</programlisting> <literal></fontconfig></literal> 标签来结束文件。 不这样做将会导致您的更改被忽略。</para> - <para>X11 默认的字库当使用反走样时会比较难看。 - 更好的字库可以在 - <filename role="package">x11-fonts/bitstream-vera</filename> - port 中找到。 这个 port 会创建一个 - <filename>/usr/local/etc/fonts/local.conf</filename> 文件, - 如果这个文件不存在的话。 反之, - port 将创建 <filename>/usr/local/etc/fonts/local.conf-vera - </filename> 文件。 将其内容合并到 - <filename>/usr/local/etc/fonts/local.conf</filename> 中, - 则 Bitstream 字体将自动地代替默认的 - X11 Serif, Sans Serif, 以及单倍距字体。</para> - <para>最后,用户可以通过他们个人的 <filename>.fonts.conf</filename> 文件来添加自己的设定。 要完成此项工作, 用户只需简单地创建 @@ -986,24 +980,6 @@ EndSection</programlisting> <literal>rgb</literal> 改为 <literal>bgr</literal>、 <literal>vrgb</literal> 或 <literal>vbgr</literal>: 试验一下看看那个更好。</para></note> - - <indexterm> - <primary>Mozilla</primary> - <secondary>disabling anti-aliased fonts (禁用反锯齿字体)</secondary> - </indexterm> - - <para>在下次启动 X server 时, 反锯齿 (anti-aliasing) 功能就启用了。 - 不过, 应用程序必须了解如何使用它, 才能因此而受益。 - 目前 Qt 工具包已经对其提供了全面支持, - 因此整个 <application>KDE</application> 环境都能使用反锯齿字体。 - GTK+ 和 - <application>GNOME</application> 也可以通过 <quote>Font</quote> capplet - 来使用反锯齿功能 (进一步细节请参见 <xref - linkend="x11-wm-gnome-antialias">)。 默认情况下, - <application>Mozilla</application> 1.2 及更高版本有能力自动使用反锯齿。 - 要禁用这一特性, 则需要使用指定 <makevar>-DWITHOUT_XFT</makevar> - 并重新联编 - <application>Mozilla</application>。</para> </sect2> </sect1> @@ -1047,16 +1023,19 @@ EndSection</programlisting> <sect2> <title>使用 XDM</title> - <para><application>XDM</application> 精灵程序在 - <filename>/usr/local/bin/xdm</filename> 中。您可以在任何时候 - 用 <username>root</username> 来运行这个程序, - 在本地机器上,它将启动管理X的画面。如果要 - <application>XDM</application> 每次机器一启动就开始运行, - 一个简单的办法是在 <filename>/etc/ttys</filename> 中加入一个记录。 - 有关这个文件的更多的格式和使用方法,可以看看 <xref - linkend="term-etcttys">。在默认的 - <filename>/etc/ttys</filename> 文件中用于运行 - <application>XDM</application> 守护程序的一行是这样的:</para> + <para>如果希望使用 <application>XDM</application> 来启动, 首先需要安装 + <filename role="package">x11/xdm</filename> port (在较新版本的 + <application>&xorg;</application> 中它并不是默认安装的)。 + <application>XDM</application> + 服务程序位于 <filename>/usr/local/bin/xdm</filename>。 + 任何时候都可以 <username>root</username> 用户的身份来运行它, + 以令其管理本地系统的 X 显示。 如果希望让 + <application>XDM</application> 在系统每次启动过程中自动运行, + 比较方便的做法是把它写到 <filename>/etc/ttys</filename> + 的配置中。 有关这个文件的具体格式和使用方法请参阅 <xref + linkend="term-etcttys">。 在默认的 + <filename>/etc/ttys</filename> 文件中已经包含了在虚拟终端上运行 + <application>XDM</application> 服务的示范配置:</para> <screen>ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure</screen> @@ -1306,8 +1285,12 @@ DisplayManager.requestPort: 0</screen> <application>GDM</application> (但默认是禁用的), 可以通过在 <filename>/etc/rc.conf</filename> 中加入 <literal>gdm_enable="YES"</literal> 来启用。 这样在重新启动的时候, - <application>GNOME</application> 就会在登录时自动启动 — - 除此之外不需要进一步设置了。</para> + <application>GDM</application> 就会在登录时自动启动了。</para> + + <para>此外, 如果希望在 <application>GDM</application> 启动时, + 同时启用所有的 <application>GNOME</application> + 服务, 还应在 <filename>/etc/rc.conf</filename> 中添加 + <literal>gnome_enable="YES"</literal>。</para> <para><application>GNOME</application> 也可以通过适当地配置名为 <filename>.xinitrc</filename> 的文件来启动。 @@ -1339,31 +1322,6 @@ DisplayManager.requestPort: 0</screen> 环节中介绍了关于如何为 <application>kdm</application> (<application>KDE</application> 的显示管理器)进行这样的配置。</para> </sect3> - - <sect3 id="x11-wm-gnome-antialias"> - <title>在GNOME上使用Anti-aliased字体</title> - - <indexterm><primary>GNOME</primary> - <secondary>anti-aliased fonts</secondary></indexterm> - <para>X11 通过<quote>RENDER</quote>扩展来支持 anti-aliasing。 - GTK+ 2.0 以及更高的版本(被 - <application>GNOME</application>使用的工具包)可以使用这个功能。 - 配置 anti-aliasing 在 - <xref linkend="antialias">描述。所以,使用最近的软件, - anti-aliasing 可以应用在 - <application>GNOME</application>桌面环境中。只需要依次选择 - <menuchoice> - <guimenu>应用程序</guimenu> - <guisubmenu>桌面首选项</guisubmenu> - <guimenuitem>字体</guimenuitem></menuchoice>,然后选上 - <guibutton>最佳形状</guibutton>, - <guibutton>最佳对比度</guibutton>,或者 - <guibutton>像素圆滑(LCD)</guibutton>。对于 - GTK+ 应用程序,它们不是 - <application>GNOME</application> 桌面的一部分,在启动程序前需要设置 - 环境变量<varname>GDK_USE_XFT</varname>的值为 - <literal>1</literal>。</para> - </sect3> </sect2> <sect2 id="x11-wm-kde"> diff --git a/zh_CN.GB2312/books/porters-handbook/book.sgml b/zh_CN.GB2312/books/porters-handbook/book.sgml index 2d101c94c1..1e36a5c006 100644 --- a/zh_CN.GB2312/books/porters-handbook/book.sgml +++ b/zh_CN.GB2312/books/porters-handbook/book.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.996 + Original Revision: 1.1052 $FreeBSD$ --> @@ -32,6 +32,7 @@ <year>2007</year> <year>2008</year> <year>2009</year> + <year>2010</year> <holder role="mailto:doc@FreeBSD.org">The FreeBSD Documentation Project</holder> </copyright> @@ -48,6 +49,8 @@ <year>2006</year> <year>2007</year> <year>2008</year> + <year>2009</year> + <year>2010</year> <holder>&cnproj.freebsd.org;</holder> </copyright> @@ -268,7 +271,7 @@ PLIST_DIRS= lib/X11/oneko</programlisting> <para>如果下载的文件的校验和经常变化, 而您又能确保它们的来源可靠 (比如, 来自于CD制造商, - 或每天构建生成的文档文件), 就应该在 <makevar>IGNOREFILES</makevar> + 或每天联编生成的文档文件), 就应该在 <makevar>IGNOREFILES</makevar> 里面标明这些文件。 这样, 再运行 <command>make makesum</command> 的时候便不会把这些标记 <literal>IGNORE</literal> 的文件计算在内了。 @@ -1112,7 +1115,7 @@ PORTEPOCH= 1</programlisting> <listitem> <para>如果 port 可以使用不同的 <link linkend="makefile-masterdir">硬编码默认配置</link> - 进行构建 (通常是一系列 port 的一部分目录名), 则 + 进行联编 (通常是一系列 port 的一部分目录名), 则 <replaceable>-compiled.specifics</replaceable> 部分就应该明示编译进去的默认值 (此处连字号是可选的)。 通常的用例包括纸型和不同的字体尺寸。</para> @@ -1575,12 +1578,11 @@ PORTEPOCH= 1</programlisting> <row> <entry><filename>java</filename></entry> - <entry>有关 Java 编程语言的软件。</entry> - <entry><filename>java</filename> 分类对于一个 - port 来说并不是唯一的分类。 - 最好用来放和 Java 语言相关的 port, - 而且我们鼓励不要把 <filename>java</filename> - 做为一个 port 的主分类。</entry> + <entry>与 Java™ 编程语言有关的软件。</entry> + <entry><filename>java</filename> 分类对 port 而言不应是其唯一的分类。 + 除了直接与 Java 语言相关的 port 之外, + 开发人员应尽量避免使用 <filename>java</filename> 作为 + port 的主分类。</entry> </row> <row> @@ -2077,7 +2079,7 @@ PORTEPOCH= 1</programlisting> <step> <para>由于这是一项影响 ports 基础设施的变动, 它不仅涉及 repo-copy 的使用, - 而且也可能会影响构建集群的衰退测试操作, + 而且也可能会影响联编集群的回归测试操作, 因此这类 PR 应分派给 &a.portmgr;。</para> </step> @@ -2108,7 +2110,7 @@ PORTEPOCH= 1</programlisting> <sect1 id="makefile-distfiles"> <title>源码包文件</title> - <para>在 <filename>Makefile</filename> 中的第二部分是描述用于构建 port + <para>在 <filename>Makefile</filename> 中的第二部分是描述用于联编 port 所必需下载的文件, 以及到什么地方去下载它们。</para> <sect2> @@ -2947,7 +2949,7 @@ PATCHFILES= patch1:test</programlisting> <para>如果您的 port 采用的是预编译的包, 但却采用了某种要求源代码必须与预编译版本一同提供的授权, 例如 GPL, 则应使用 <makevar>ALWAYS_KEEP_DISTFILES</makevar> - 来告诉 &os; 构建集群保留一份在 <makevar>DISTFILES</makevar> + 来告诉 &os; 联编集群保留一份在 <makevar>DISTFILES</makevar> 中文件的副本。 一般来说这些 port 的用户并不需要这些文件, 因此, 只在定义了 <makevar>PACKAGE_BUILDING</makevar> 符的时候, @@ -3038,13 +3040,13 @@ ALWAYS_KEEP_DISTFILES= yes <para>这个变量用于指定 port 所依赖的共享库。 其内容是由一系列 <replaceable>lib</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional> 元组构成的表, 其中 <replaceable>lib</replaceable> 是共享库的名字, - 而 <replaceable>dir</replaceable> 则是在找不到时应该从哪里构建和安装, + 而 <replaceable>dir</replaceable> 则是在找不到时应该从哪里联编和安装, 最后, <replaceable>target</replaceable> 用于指定在那个目录中调用的 target。 例如, <programlisting>LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg</programlisting> 会检测主版本号为 9 的 jpeg 共享库, 如果它不存在, 则会进入到您的 ports 目录中的 <filename>graphics/jpeg</filename> - 子目录, 并构建和安装它。 如果您指定的 <replaceable>target</replaceable> + 子目录, 并联编和安装它。 如果您指定的 <replaceable>target</replaceable> 就是 <makevar>DEPENDS_TARGET</makevar> (默认是 <literal>install</literal>), 则可以略去不写。</para> @@ -3076,7 +3078,7 @@ ALWAYS_KEEP_DISTFILES= yes <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional> 元组的列表, 这里, <replaceable>path</replaceable> 时所需的可执行, 或者资源文件的名字, <replaceable>dir</replaceable> 是在无法找到这些文件或目录时, - 去什么地方完成构建和安装以便获得这些文件; 而 + 去什么地方完成联编和安装以便获得这些文件; 而 <replaceable>target</replaceable> 则用来指定在这个目录中所调用的 target 的名字。 假如 <replaceable>path</replaceable> 以斜线 (<literal>/</literal>) 开始, 则会当作普通文件, @@ -3096,7 +3098,7 @@ ALWAYS_KEEP_DISTFILES= yes 系统也会检查是否能够在搜索路径中找到名为 <command>xmlcatmgr</command> 的文件, 如果找不到的话, 则会进入 ports 目录中的 <filename>textproc/xmlcatmgr</filename> 子目录, - 并进行构建和安装的操作。</para> + 并进行联编和安装的操作。</para> <note> <para>这种情况下, <command>innd</command> 实际上是一个可执行文件; @@ -3104,7 +3106,7 @@ ALWAYS_KEEP_DISTFILES= yes </note> <note> - <para>ports 构建集群上官方的搜索 <envar>PATH</envar> 是</para> + <para>ports 联编集群上官方的搜索 <envar>PATH</envar> 是</para> <programlisting>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin</programlisting> </note> @@ -3119,16 +3121,16 @@ ALWAYS_KEEP_DISTFILES= yes </sect2> <sect2> - <title><makevar>BUILD_DEPENDS</makevar> (依赖的构建环境)</title> + <title><makevar>BUILD_DEPENDS</makevar> (依赖的联编环境)</title> - <para>此变量用于指定用来构建 port 的可执行文件或资源文件。 + <para>此变量用于指定用来联编 port 的可执行文件或资源文件。 与 <makevar>RUN_DEPENDS</makevar> 类似, 它是一个 <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional> 元组的列表。 例如, <programlisting> BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip</programlisting> 将检测名为 <command>unzip</command> 的可执行文件是否存在, 如果不存在, 则会进入到您的 ports 目录中的 <filename>archivers/unzip</filename> - 并完成构建和安装工作。</para> + 并完成联编和安装工作。</para> <note> <para>这里的 <quote>build</quote> 表示从解压缩到编译的全部过程。 @@ -3148,7 +3150,7 @@ ALWAYS_KEEP_DISTFILES= yes ncftp2:${PORTSDIR}/net/ncftp2</programlisting> 将检测名为 <command>ncftp2</command> 的可执行文件是否存在, 如果找不到, 则将进入到您 ports 目录中的 - <filename>net/ncftp2</filename> 子目录并加以构建和安装。</para> + <filename>net/ncftp2</filename> 子目录并加以联编和安装。</para> <para>这个依赖关系是在 <maketarget>fetch</maketarget> target 过程中检查的。 @@ -3166,7 +3168,7 @@ ALWAYS_KEEP_DISTFILES= yes unzip:${PORTSDIR}/archivers/unzip</programlisting> 将检查名为 <command>unzip</command> 的可执行文件是否存在, 如果不存在, 则会进入到您的 ports 目录中的 <filename>archivers/unzip</filename> - 子目录, 予以构建和安装。</para> + 子目录, 予以联编和安装。</para> <para>这个依赖关系是在 <maketarget>extract</maketarget> target 的过程中检查的。 如果与 @@ -3215,12 +3217,12 @@ ALWAYS_KEEP_DISTFILES= yes 这样的变量。</para> <note> - <para><emphasis>任何</emphasis> 情况下, 都不应在 - <filename>/etc/make.conf</filename> 中配置 + <para>在 <emphasis>任何</emphasis> 情况下, + 都不应在 <filename>/etc/make.conf</filename> 中配置任何 <makevar>USE_<replaceable>*</replaceable></makevar>。 - 例如, 设置 <programlisting>USE_GCC=3.2</programlisting> - 将导致每一个 port 都依赖于 gcc32, 甚至包括 - gcc32 本身!</para> + 例如, 设置 <programlisting>USE_GCC=3.4</programlisting> + 将导致每个 port 都依赖 gcc34, 甚至包括 + gcc34 本身!</para> </note> <table frame="none"> @@ -3254,7 +3256,7 @@ ALWAYS_KEEP_DISTFILES= yes <row> <entry><makevar>USE_BISON</makevar></entry> - <entry>此 port 在构建时使用 <command>bison</command>。</entry> + <entry>此 port 在联编时使用 <command>bison</command>。</entry> </row> <row> @@ -3271,9 +3273,9 @@ ALWAYS_KEEP_DISTFILES= yes <entry>此 port 需要使用某一特定版本的 <command>gcc</command> 才能完成编译。 - 可以使用类似 <literal>3.2</literal> 这样的值来精确指定版本。 + 可以使用类似 <literal>3.4</literal> 这样的值来精确指定版本。 如果希望使用不低于某一版本的编译器, 则可以用 - <literal>3.2+</literal> 这样的形式。 如果与所希望的版本吻合, + <literal>3.4+</literal> 这样的形式。 如果与所希望的版本吻合, 则将使用基本系统中所提供的 <command>gcc</command>, 反之, 系统会从 ports 中安装所希望版本的 <command>gcc</command>, 并调整 <makevar>CC</makevar> 以及 @@ -3339,7 +3341,7 @@ ALWAYS_KEEP_DISTFILES= yes <para>当您输入 <command>make clean</command> 时, 其依赖的 port 也会自动进行清理。 如果您不希望如此, 应定义环境变量 <makevar>NOCLEANDEPENDS</makevar>。 如果 port - 依赖一些重新构建需要花费很长时间的 port 时, 例如 KDE, GNOME + 依赖一些重新联编需要花费很长时间的 port 时, 例如 KDE, GNOME 或 Mozilla 时, 这一方法会非常有用。</para> <para>要无条件地依赖某个 port, 可以使用 <makevar>${NONEXISTENT}</makevar> @@ -3360,7 +3362,7 @@ ALWAYS_KEEP_DISTFILES= yes <para>不要在 ports tree 中引入任何循环依赖关系!</para> </important> - <para>ports 构建技术不能够容忍循环依赖关系。 如果您引入了这样的关系, + <para>ports 联编技术不能够容忍循环依赖关系。 如果您引入了这样的关系, 就一定会有人安装的 FreeBSD 会因此而损坏, 而且这种现象会越来越多。 这些情形很难检测; 如果有疑虑, 在进行这样的修改之前, 务必执行: <command>cd /usr/ports; make index</command>。 这个过程在旧的机器上会很慢, @@ -3374,7 +3376,7 @@ ALWAYS_KEEP_DISTFILES= yes <title><makevar>MASTERDIR</makevar> (主 port 所在的目录)</title> <para>如果 port 需要依某些变量的设置 (举例来说, 分辨率或纸型) - 来构建略有不同的预编译包, 则可以为每一个这样的包建立不同的目录, + 来联编略有不同的预编译包, 则可以为每一个这样的包建立不同的目录, 这样可以让用户更容易地看到他们想要安装的版本, 但又能在这些 port 之间共用尽可能多的文件。 一般情况下, 如果运用得当, 除主目录之外都只需要很短的 <filename>Makefile</filename>。 这些 <filename>Makefile</filename> 中, @@ -3402,7 +3404,7 @@ RESOLUTION?= 300 <para><filename role="package">japanese/xdvi300</filename> 也提供了全部常规的补丁, 以及打包用到的文件等等内容。 如果您在那里输入 <command>make</command>, - 它将使用默认的分辨率值 (300) 并正常地构建 port。</para> + 它将使用默认的分辨率值 (300) 并正常地联编 port。</para> <para>对于其它分辨率而言, 以下是 <emphasis>完整的</emphasis> <filename>xdvi118/Makefile</filename>:</para> @@ -3421,7 +3423,7 @@ MASTERDIR= ${.CURDIR}/../xdvi300 <filename>xdvi300</filename> 中查找。 <literal>RESOLUTION=118</literal> 这行将覆盖在 <filename>xdvi300/Makefile</filename> 中所作的 <literal>RESOLUTION=300</literal> 设置, 从而 port - 将以分辨率为 118 的设置来构建。</para> + 将以分辨率为 118 的设置来联编。</para> </sect1> <sect1 id="makefile-manpages"> @@ -3433,7 +3435,8 @@ MASTERDIR= ${.CURDIR}/../xdvi300 <filename>pkg-plist</filename> 中列出联机手册 — 参见 <link linkend="plist-sub">PLIST 的生成</link> 来了解更多细节)。 此外, 这也会让安装阶段自动地根据在 <filename>/etc/make.conf</filename> - 中所作的 <makevar>NOMANCOMPRESS</makevar> 设置来自动对联机手册文件执行压缩或解压缩操作。</para> + 中所作的 <makevar>NO_MANCOMPRESS</makevar> + 设置来自动对联机手册文件执行压缩或解压缩操作。</para> <para>如果 port 尝试通过使用符号连接或硬连接将联机手册安装为多个名字, 就必须使用 <makevar>MLINKS</makevar> 变量来予以明示。 @@ -3447,7 +3450,7 @@ MASTERDIR= ${.CURDIR}/../xdvi300 <literal>maybe</literal> 之一。 <literal>yes</literal> 表示联机手册已经以压缩的形式安装, <literal>no</literal> 表示还没有, 而 <literal>maybe</literal> 则表示所安装的软件会尊重 - <makevar>NOMANCOMPRESS</makevar> 的设置值, 因此 + <makevar>NO_MANCOMPRESS</makevar> 的设置值, 因此 <filename>bsd.port.mk</filename> 不需要特别做什么事情。</para> <para>如果设置了 <makevar>USE_IMAKE</makevar> 而未定义 @@ -3521,11 +3524,11 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting> 如果软件包有需要, 也可以通过修改 <makevar>INFO_PATH</makevar> 来指定不同的位置。 不过, 并不推荐这样做。 所有列出的项目均是相对于 <filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar></filename> 的文件路径。 - 例如, <filename role="package">lang/gcc33</filename> 表示将 + 例如, <filename role="package">lang/gcc34</filename> 表示将 info 文件安装到 - <filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar>/gcc33</filename>, + <filename><makevar>PREFIX</makevar>/<makevar>INFO_PATH</makevar>/gcc34</filename>, 因此 <makevar>INFO</makevar> 应写成类似这样: - <programlisting>INFO= gcc33/cpp gcc33/cppinternals gcc33/g77 ... + <programlisting>INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ... </programlisting> 这样安装/卸载代码就会自动地在注册包之前将它们加入到临时的 <filename>pkg-plist</filename> 中了。</para> @@ -3534,11 +3537,11 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting> <sect1 id="makefile-options"> <title>Makefile 选项</title> - <para>某些大型应用程序可以在构建时使用一系列配置选项, + <para>某些大型应用程序可以在联编时使用一系列配置选项, 用以在系统中已经安装了某些库或应用程序时增加一些功能。 例如, 选择某种自然 (人类的) 语言, GUI 或命令行界面, 由于并不是所有的用户都希望使用这些库或者应用程序, port - 系统提供了一组方便的机制, 来让 port 的作者控制构建时的配置。 + 系统提供了一组方便的机制, 来让 port 的作者控制联编时的配置。 支持这些特性可以让用户体验更好, 并达到事半功倍的效果。</para> <sect2> @@ -3610,9 +3613,9 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting> <entry><makevar>WITHOUT_X11</makevar></entry> <entry>如果 port 能够在是否包含 - X 支持的情况下分别构建, 则一般情况应该默认以包含 - X 支持的配置来构建。 如果定义了这一变量, - 则应构建不包含 X 支持的版本。</entry> + X 支持的情况下分别联编, 则一般情况应该默认以包含 + X 支持的配置来联编。 如果定义了这一变量, + 则应联编不包含 X 支持的版本。</entry> </row> </tbody> </tgroup> @@ -3675,20 +3678,22 @@ ${MANPREFIX}/man/de/man3/baz.3.gz</programlisting> <literal>OFF</literal> 之一。 这种三元组可以使用多次。</para> <para>定义 <makevar>OPTIONS</makevar> 变量的值, - 必须在引用 <filename>bsd.port.pre.mk</filename> 之前定义。 + 必须在引入 <filename>bsd.port.options.mk</filename> 之前进行。 而 <makevar>WITH_*</makevar> 和 <makevar>WITHOUT_*</makevar> - 只有在引用了 - <filename>bsd.port.pre.mk</filename> 之后才能开始检测。</para> - </sect3> + 变量则只能在引入了 + <filename>bsd.port.options.mk</filename> 之后才可以进行检测。 使用 + <filename>bsd.port.pre.mk</filename> 也可以达到同样的目的, + 在系统开始提供 <filename>bsd.port.options.mk</filename> 之前的许多 + port 都在使用这种用法。 不过, 请注意 + <filename>bsd.port.pre.mk</filename> 会要求某些变量已经进行过定义, 如 + <makevar>USE_*</makevar> 等。</para> - <sect3> - <title>例子</title> <example id="ports-options-simple-use"> <title>简单的 <makevar>OPTIONS</makevar> 用法</title> <para><programlisting>OPTIONS= FOO "启用 foo 选项" On \ BAR "支持 bar 功能" Off -.include <bsd.port.pre.mk> +.include <bsd.port.options.mk> .if defined(WITHOUT_FOO) CONFIGURE_ARGS+= --without-foo @@ -3700,10 +3705,24 @@ CONFIGURE_ARGS+= --with-foo RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar .endif +.include <bsd.port.mk></programlisting></para> + </example> + + <example id="ports-options-old-style-use"> + <title>Old style use of <makevar>OPTIONS</makevar></title> + <para><programlisting>OPTIONS= FOO "Enable option foo" On + +.include <bsd.port.pre.mk> + +.if defined(WITHOUT_FOO) +CONFIGURE_ARGS+= --without-foo +.else +CONFIGURE_ARGS+= --with-foo +.endif + .include <bsd.port.post.mk></programlisting></para> </example> </sect3> - </sect2> <sect2> @@ -3761,7 +3780,7 @@ PORTVERSION= 1.0</programlisting> <para>如果这不是所希望的情形, 您可以修改一系列变量的设置。</para> <sect2> - <title><makevar>WRKSRC</makevar> (开始构建操作的目录名)</title> + <title><makevar>WRKSRC</makevar> (开始联编操作的目录名)</title> <para>这个变量给出了在应用程序的源代码包解压缩之后所生成的目录的名字。 如果我们之前的例子解压缩生成一个叫做 <filename>foo</filename> (而不是 @@ -3775,7 +3794,7 @@ PORTVERSION= 1.0</programlisting> </sect2> <sect2> - <title><makevar>NO_WRKSUBDIR</makevar> (不需要临时的构建目录)</title> + <title><makevar>NO_WRKSUBDIR</makevar> (不需要临时的联编目录)</title> <para>如果 port 完全不需要写入到某个子目录中, 您应设置 <makevar>NO_WRKSUBDIR</makevar> 以明示这一点。</para> @@ -4214,7 +4233,27 @@ PORTVERSION= 1.0</programlisting> </sect1> <sect1 id="building"> - <title>构建机制</title> + <title>联编机制</title> + + <sect2 id="parallel-builds"> + <title>Ports 的并行联编</title> + + <para>&os; ports 框架支持使用多个 <command>make</command> 子进程来进行并行编译, + 在 <acronym>SMP</acronym> 上这可以全面地利用系统的 + <acronym>CPU</acronym> 计算能力, 令 port 的联编过程更快、 更有效率。</para> + + <para>目前这是通过向原作者的代码传递 + &man.make.1; 参数 <makevar>-jX</makevar> 来实现的。 + 遗憾的是, 并不是所有的 port 都能够很好地处理这个选项。 + 因此, 必须通过明确地在 <filename>Makefile</filename> 中指定 + <literal>MAKE_JOBS_SAFE=yes</literal> 来启用这一功能。</para> + + <para>从 port 监护人的角度还有一个控制的方法是设置 + <makevar>MAKE_JOBS_UNSAFE=yes</makevar> 变量。 + 这个变量主要是用于已知不能与 <makevar>-jX</makevar> + 配合使用的 port, 即使用户在 <filename>/etc/make.conf</filename> 中定义了 + <literal>FORCE_MAKE_JOBS=yes</literal> 变量, 系统也不会使用并行编译。</para> + </sect2> <sect2 id="using-make"> <title><command>make</command>、 <command>gmake</command>, 以及 @@ -4240,7 +4279,7 @@ PORTVERSION= 1.0</programlisting> <entry><makevar>USE_GMAKE</makevar></entry> <entry>此 port 需要使用 <command>gmake</command> - 来完成构建过程。</entry> + 来完成联编过程。</entry> </row> <row> @@ -4257,7 +4296,7 @@ PORTVERSION= 1.0</programlisting> <application>imake</application> 根据 <filename>Imakefile</filename> 文件来生成 <filename>Makefile</filename>, 则应设置 - <literal>USE_IMAKE=yes</literal>。 这会使构建过程中的配置 + <literal>USE_IMAKE=yes</literal>。 这会使联编过程中的配置 (configure) 阶段自动执行 <command>xmkmf -a</command>。 如果 <option>-a</option> 标志会给您的 port 带来麻烦, 则需设置 <literal>XMKMF=xmkmf</literal>。 如果 port 用到了 @@ -4265,7 +4304,7 @@ PORTVERSION= 1.0</programlisting> <maketarget>install.man</maketarget> target, 则应设置 <literal>NO_INSTALL_MANPAGES=yes</literal>。</para> - <para>如果 port 源文件的 <filename>Makefile</filename> 的主构建 + <para>如果 port 源文件的 <filename>Makefile</filename> 的主联编 target 是 <maketarget>all</maketarget> 以外的名字, 应对应地设置 <makevar>ALL_TARGET</makevar>。 对于 <maketarget>install</maketarget> 而言, 对应的变量是 @@ -4318,7 +4357,7 @@ PORTVERSION= 1.0</programlisting> <row> <entry><makevar>GNU_CONFIGURE</makevar></entry> - <entry>此 port 需要用 <command>configure</command> 脚本来准备构建。</entry> + <entry>此 port 需要用 <command>configure</command> 脚本来准备联编。</entry> </row> <row> @@ -4421,7 +4460,7 @@ PORTVERSION= 1.0</programlisting> <sect2 id="using-autotools-introduction"> <title>入门</title> - <para>众多 GNU autotools 提供了一种在多重操作系统和机器架构之上构建软件的抽象机制。 + <para>众多 GNU autotools 提供了一种在多重操作系统和机器架构之上联编软件的抽象机制。 在 Ports Collection 中, port 可以通过简单的方法来使用这些工具:</para> <programlisting>USE_AUTOTOOLS= <replaceable>工具</replaceable>:<replaceable>版本</replaceable>[:<replaceable>操作</replaceable>] ...</programlisting> @@ -4451,7 +4490,7 @@ PORTVERSION= 1.0</programlisting> <sect2 id="using-libtool"> <title><command>libtool</command></title> - <para>使用 GNU 构建框架的共享库通常会使用 + <para>使用 GNU 联编框架的共享库通常会使用 <command>libtool</command> 来调整共享库的编译和安装, 以便与所运行的操作系统相匹配。 通常的做法是使用应用程序所附带的 <command>libtool</command> 副本。 @@ -4462,9 +4501,9 @@ PORTVERSION= 1.0</programlisting> <para>如果不使用额外的操作符, <literal>libtool:<replaceable>版本</replaceable></literal> - 表示希望构建框架使用 configure 脚本来对系统所安装的 <command>libtool</command> + 表示希望联编框架使用 configure 脚本来对系统所安装的 <command>libtool</command> 进行修补。 这会暗含地定义 <makevar>GNU_CONFIGURE</makevar>。 - 更进一步, 构建框架还会设置一系列 make 和 shell + 更进一步, 联编框架还会设置一系列 make 和 shell 变量用于 port 后续的操作。 请参见 <filename>bsd.autotools.mk</filename> 了解进一步的详情。</para> @@ -4540,7 +4579,7 @@ PORTVERSION= 1.0</programlisting> <command>configure</command> 来生成实际的 <filename>Makefile</filename>。</para> - <para>类似地, 偶尔会有一些软件包不提供构建所需的 + <para>类似地, 偶尔会有一些软件包不提供联编所需的 <filename>aclocal.m4</filename> 文件。 这些文件可以通过使用 <command>aclocal</command> 来扫描 <filename>configure.ac</filename> 或 @@ -4711,13 +4750,13 @@ PLIST_SUB+= NLS="@comment " <row> <entry><makevar>USE_PERL5</makevar></entry> - <entry>表示 port 将 <literal>perl 5</literal> 用于构建和运行。</entry> + <entry>表示 port 将 <literal>perl 5</literal> 用于联编和运行。</entry> </row> <row> <entry><makevar>USE_PERL5_BUILD</makevar></entry> - <entry>表示 port 将 <literal>perl 5</literal> 用于构建。</entry> + <entry>表示 port 将 <literal>perl 5</literal> 用于联编。</entry> </row> <row> @@ -4744,7 +4783,7 @@ PLIST_SUB+= NLS="@comment " <row> <entry><makevar>PERL_MODBUILD</makevar></entry> - <entry>使用 Module::Build 进行配置、 构建并安装。 + <entry>使用 Module::Build 进行配置、 联编并安装。 这一变量隐含设置 <makevar>PERL_CONFIGURE</makevar>。</entry> </row> </tbody> @@ -4895,7 +4934,7 @@ USE_GL= glu</programlisting> <row> <entry><makevar>X_IMAKE_PORT</makevar></entry> - <entry>用以提供 <command>imake</command> 以及许多其它用于构建 + <entry>用以提供 <command>imake</command> 以及许多其它用于联编 X11 的工具的 port。</entry> </row> @@ -5105,43 +5144,10 @@ USE_XORG= x11 xpm</programlisting> </sect1> - <sect1 id="using-kde"> - <title>使用 KDE</title> - - <sect2 id="kde-variables"> - <title>变量及其含义</title> - - <table frame="none"> - <title>用于使用 KDE 的 port 的变量</title> - - <tgroup cols="2"> - <tbody> - <row> - <entry><makevar>USE_KDELIBS_VER</makevar></entry> - - <entry>表示 port 用到了 KDE 库。 这个变量可以指定使用的 KDE 的主版本, - 如果定义了这个变量, 则系统会自动将 - <makevar>USE_QT_VER</makevar> 设为适当的值。 - 目前唯一一个可用的值是 - <literal>3</literal>。</entry> - </row> - - <row> - <entry><makevar>USE_KDEBASE_VER</makevar></entry> + <sect1 id="using-qt"> + <title>使用 Qt</title> - <entry>表示 port 要用到 KDE 的基本系统。 这个变量可以指定使用的 KDE 的主版本, - 如果定义了这个变量, 则系统会自动将 - <makevar>USE_QT_VER</makevar> 设为适当的值。 - 目前唯一一个可用的值是 - <literal>3</literal>。</entry> - </row> - </tbody> - </tgroup> - </table> - - </sect2> - - <sect2 id="kde-qt"> + <sect2 id="qt-common"> <title>在 port 中使用 Qt</title> <table frame="none"> @@ -5474,20 +5480,167 @@ do-configure: </sect1> + <sect1 id="using-kde"> + <title>使用 KDE</title> + + <sect2 id="kde-variables"> + <title>变量定义 (只用于 KDE 3.x)</title> + + <table frame="none"> + <title>用于使用 KDE 3.x 的 port 的变量</title> + + <tgroup cols="2"> + <tbody> + <row> + <entry><makevar>USE_KDELIBS_VER</makevar></entry> + + <entry>表示 port 用到了 KDE 库。 + 这个变量可以指定希望使用的 KDE 主版本号, + 如果设置了这个变量, 则系统也会将 + <makevar>USE_QT_VER</makevar> 设为适当的版本。 + 该变量目前唯一有效的值是 + <literal>3</literal>。</entry> + </row> + + <row> + <entry><makevar>USE_KDEBASE_VER</makevar></entry> + + <entry>表示 port 用到了 KDE 的基本系统。 + 这个变量可以指定希望使用的 KDE 主版本号, + 如果设置了这个变量, 则系统也会将 + <makevar>USE_QT_VER</makevar> 设为适当的版本。 + 该变量目前唯一有效的值是 <literal>3</literal>。</entry> + </row> + </tbody> + </tgroup> + </table> + + </sect2> + + <sect2 id="kde4-variables"> + <title>用于 KDE 4 的变量定义</title> + + <para>如果您的应用程序需要使用 KDE 4.x, 则应将 <makevar>USE_KDE4</makevar> + 设为所需组件的列表。 下面列出一些最常用到的组件 + (最新的组件列表位于 <filename>/usr/ports/Mk/bsd.kde4.mk</filename> + 中的 <makevar>_USE_KDE4_ALL</makevar>):</para> + + <table frame="none"> + <title>可用的 KDE4 组件</title> + + <tgroup cols="2"> + <thead> + <row> + <entry>名称</entry> + <entry>说明</entry> + </row> + </thead> + + <tbody> + <row> + <entry><literal>akonadi</literal></entry> + <entry>个人信息管理 (PIM)存储服务</entry> + </row> + + <row> + <entry><literal>automoc4</literal></entry> + <entry>令 port 使用 automoc4 联编工具集</entry> + </row> + + <row> + <entry><literal>kdebase</literal></entry> + <entry>基本的 KDE 应用程序 (Konqueror、 Dolphin、 Konsole)</entry> + </row> + + <row> + <entry><literal>kdeexp</literal></entry> + <entry>试验性的 KDE 库 (包含尚未完全确定不变的 API)</entry> + </row> + + <row> + <entry><literal>kdehier</literal></entry> + <entry>常用的 KDE 目录层次结构</entry> + </row> + + <row> + <entry><literal>kdelibs</literal></entry> + <entry>基本 KDE 库</entry> + </row> + + <row> + <entry><literal>kdeprefix</literal></entry> + <entry>如果设置了这个选项, 则 port 将安装到 + <literal>${KDE4_PREFIX}</literal> + 而不是 <literal>${LOCALBASE}</literal></entry> + </row> + + <row> + <entry><literal>pimlibs</literal></entry> + <entry>PIM 函数库</entry> + </row> + + <row> + <entry><literal>workspace</literal></entry> + <entry>用于组成桌面的应用程序和函数库 (Plasma、 KWin)</entry> + </row> + + </tbody> + </tgroup> + </table> + + <para>KDE 4.x port 会安装到 <literal>${KDE4_PREFIX}</literal>, + 目前是 <filename>/usr/local/kde4</filename>, + 以避免与 KDE 3.x ports 冲突。 这是通过指定 <literal>kdeprefix</literal> + 组件来实现的, 它表示替换默认的 <makevar>PREFIX</makevar>。 不过, + port 仍会遵循通过 <envar>MAKEFLAGS</envar> 环境变量设置的 + <makevar>PREFIX</makevar> 以及其它 <application>make</application> 参数。</para> + + <para>KDE 4.x ports 有可能和 KDE 3.x ports 冲突, 因此如果启用了 + <literal>kdeprefix</literal> 组件, 它们会安装到 + <literal>${KDE4_PREFIX}</literal>。 目前 + <literal>KDE4_PREFIX</literal> 的默认值是 + <filename>/usr/local/kde4</filename>。 也可以将 KDE 4.x ports + 安装到自定义的 <literal>PREFIX</literal>。 当 + <literal>PREFIX</literal> 是通过 <envar>MAKEFLAGS</envar> + 环境变量, 或直接在 <application>make</application> 命令行指定时, + 它会替换 <literal>kdeprefix</literal> 提供的配置。</para> + + <example id="kde4-components-example"> + <title><makevar>USE_KDE4</makevar> 示例</title> + + <para>下面是一个简单的 KDE 4 port。 <makevar>USE_CMAKE</makevar> + 指定 port 使用 <application>CMake</application> — + 许多 KDE 4 项目所使用的配置工具。 + <makevar>USE_KDE4</makevar> 则引入 KDE 函数库, 并令 port 在联编阶段使用 + <application>automoc4</application>。 需要的 KDE 组件, + 以及其他依赖的组件可以从 configure 的日志中获知。 + <makevar>USE_KDE4</makevar> 并不会自动设置 <makevar>USE_QT_VER</makevar>。 + 如果 port 需要使用某些 Qt4 组件, 则需要设置 <makevar>USE_QT_VER</makevar> + 并指定所需要的组件。 </para> + + <programlisting>USE_CMAKE= yes +USE_KDE4= automoc4 kdelibs kdeprefix +USE_QT_VER= 4 +QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting> + </example> + </sect2> + + </sect1> + <sect1 id="using-java"> <title>使用 Java</title> <sect2 id="java-variables"> <title>变量定义</title> - <para>如果您的 port 需要 Java™ 开发包 (JDK) 来完成构建、 + <para>如果您的 port 需要 Java™ 开发包 (JDK™) 来完成联编、 支持运行, 甚至完成解开源代码包这样的工作, 就应该定义 <makevar>USE_JAVA</makevar>。</para> <para>在 Ports Collection 中有许多不同的 JDK, 它们的版本各不相同, 或是来自不同的供应商。 如果您的 port 必须使用其中的某个特定的版本, 也可以予以定义。 最新的稳定版本是 - <filename role="package">java/jdk15</filename>。</para> + <filename role="package">java/jdk16</filename>。</para> <table frame="none"> <title>用到 Java 的 port 可以使用的变量</title> @@ -5527,7 +5680,7 @@ do-configure: <row> <entry><makevar>JAVA_BUILD</makevar></entry> - <entry>设置这个变量表示所选的 JDK port 应被列入 port 的构建依赖关系。</entry> + <entry>设置这个变量表示所选的 JDK port 应被列入 port 的联编依赖关系。</entry> </row> <row> @@ -5543,13 +5696,13 @@ do-configure: <row> <entry><makevar>USE_JIKES</makevar></entry> <entry>port 是否应使用 - <command>jikes</command> bytecode 编译器进行构建。 + <command>jikes</command> bytecode 编译器进行联编。 如果没有设置, 则 port 将在 - <command>jikes</command> 可用的情况下在构建时使用它。 + <command>jikes</command> 可用的情况下在联编时使用它。 您也可以明确地禁止使用或要求使用 <command>jikes</command> (通过将这个变量设置为 <literal>'no'</literal> 或 <literal>'yes'</literal>)。 后一种情形中, <filename - role="package">devel/jikes</filename> 将加入 port 的构建依赖关系。 + role="package">devel/jikes</filename> 将加入 port 的联编依赖关系。 任何情况下, 如果 <command>jikes</command> 被作为 <command>javac</command> 使用, 则 <filename>bsd.java.mk</filename> 会定义 @@ -5619,21 +5772,21 @@ do-configure: <row> <entry><makevar>JAVAC</makevar></entry> <entry>所用 Java 编译器的完整路径 (例如 - <filename>'/usr/local/jdk1.1.8/bin/javac'</filename> 或 + <filename>'/usr/local/jdk1.3.1/bin/javac'</filename> 或 <filename>'/usr/local/bin/jikes'</filename>)。</entry> </row> <row> <entry><makevar>JAR</makevar></entry> <entry>所用 <command>jar</command> 工具的完整路径 (例如 - <filename>'/usr/local/jdk1.2.2/bin/jar'</filename> 或 + <filename>'/usr/local/jdk1.3.1/bin/jar'</filename> 或 <filename>'/usr/local/bin/fastjar'</filename>)。</entry> </row> <row> <entry><makevar>APPLETVIEWER</makevar></entry> <entry>所用 <command>appletviewer</command> 工具的完整路径 (例如 - <filename>'/usr/local/linux-jdk1.2.2/bin/appletviewer'</filename>)。</entry> + <filename>'/usr/local/linux-jdk1.3.1/bin/appletviewer'</filename>)。</entry> </row> <row> @@ -5660,8 +5813,7 @@ do-configure: <row> <entry><makevar>JAVA_KEYTOOL</makevar></entry> - <entry>所用 <command>keytool</command> 工具的完整路径。 - 只有当 JDK 是 Java 1.2 或更高版本时才可用。</entry> + <entry>所用 <command>keytool</command> 工具的完整路径。</entry> </row> <row> @@ -5671,8 +5823,7 @@ do-configure: <row> <entry><makevar>JAVA_POLICYTOOL</makevar></entry> - <entry>所用 <command>policytool</command> 程序的完整路径。 - 只有当 JDK 是 Java 1.2 或更高版本时才可用。</entry> + <entry>所用 <command>policytool</command> 程序的完整路径。</entry> </row> <row> @@ -5694,23 +5845,19 @@ do-configure: <row> <entry><makevar>RMID</makevar></entry> - <entry>所用 RMI 服务程序 <command>rmid</command> 的完整路径。 - 只有当 JDK 是 Java 1.2 或更高版本时才可用。</entry> + <entry>所用 RMI 服务程序 <command>rmid</command> 的完整路径。</entry> </row> <row> <entry><makevar>JAVA_CLASSES</makevar></entry> <entry>所用 JDK 类文件目录的完整路径。 - 对 JDK 1.2 和更高版本的环境而言, 这应该是 - <filename>${JAVA_HOME}/jre/lib/rt.jar</filename>。 更早版本的 - JDK 则使用 - <filename>${JAVA_HOME}/lib/classes.zip</filename>。</entry> + <filename>${JAVA_HOME}/jre/lib/rt.jar</filename>。</entry> </row> <row> <entry><makevar>HAVE_JIKES</makevar></entry> <entry>随 <command>jikes</command> 是否将被应用于 port - 的构建过程而定 (参见前述 <makevar>USE_JIKES</makevar>)。</entry> + 的联编过程而定 (参见前述 <makevar>USE_JIKES</makevar>)。</entry> </row> </tbody> </tgroup> @@ -5763,19 +5910,19 @@ do-configure: </sect2> <sect2 id="java-building-with-ant"> - <title>采用 Ant 进行构建</title> + <title>采用 Ant 进行联编</title> - <para>如果 port 采用 Apache Ant 进行构建, + <para>如果 port 采用 Apache Ant 进行联编, 则需要定义 <makevar>USE_ANT</makevar>。 如是, 则 Ant 将作为 子-make 命令来使用。 如果 port 未定义 <literal>do-build</literal> target, 则将默认依 <makevar>MAKE_ENV</makevar>、 - <makevar>MAKE_ARGS</makevar> 和 <makevar>ALL_TARGETS</makevar>. + <makevar>MAKE_ARGS</makevar> 和 <makevar>ALL_TARGET</makevar>。 的设置执行 Ant。 这类似于 <xref linkend="building"> 中介绍的关于 <makevar>USE_GMAKE</makevar> 的机制。</para> <para>若 <command>jikes</command> 被作为 <command>javac</command> 使用 (参见 <xref linkend="java-variables"> 中的 - <makevar>USE_JIKES</makevar>), 则 Ant 会自动将其用于 port 的构建过程。</para> + <makevar>USE_JIKES</makevar>), 则 Ant 会自动将其用于 port 的联编过程。</para> </sect2> @@ -5821,10 +5968,10 @@ do-configure: <filename>pkg-plist</filename> 中直接使用 <literal>%%DATADIR%%</literal>。</para> - <para>撰写本文时, 对是应该从源代码构建, 还是直接安装预编译的 + <para>撰写本文时, 对是应该从源代码联编, 还是直接安装预编译的 Java ports 安装包并没有明确的规定。 尽管如此, <ulink url="http://www.freebsd.org/java/">&os; Java Project</ulink> - 的开发人员仍鼓励移植软件的开发者在不麻烦的情况下尽可能从源代码完成构建。</para> + 的开发人员仍鼓励移植软件的开发者在不麻烦的情况下尽可能从源代码完成联编。</para> <para>本节中所介绍的全部特性, 均是在 <filename>bsd.java.mk</filename> 中实现的。 如果您感觉自己的 port 需要更为复杂的 Java 支持, @@ -6045,7 +6192,7 @@ do-configure: <row> <entry><makevar>USE_PHPIZE</makevar></entry> - <entry>此 port 将作为 PHP 扩展模块进行构建。</entry> + <entry>此 port 将作为 PHP 扩展模块进行联编。</entry> </row> <row> @@ -6058,7 +6205,7 @@ do-configure: <row> <entry><makevar>USE_PHP_BUILD</makevar></entry> - <entry>构建依赖于 PHP。</entry> + <entry>联编依赖于 PHP。</entry> </row> <row> @@ -7896,8 +8043,11 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}" <programlisting>#!/bin/sh +# $FreeBSD$ +# # PROVIDE: doormand # REQUIRE: LOGIN +# KEYWORD: shutdown # # 在 /etc/rc.conf.local 或 /etc/rc.conf 中增加下述设置可以启用这一服务: # @@ -7906,7 +8056,7 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}" # doormand_config (path): 默认设为 %%PREFIX%%/etc/doormand/doormand.cf。 # -. %%RC_SUBR%% +. /etc/rc.subr name="doormand" rcvar=${name}_enable @@ -7923,6 +8073,15 @@ command_args="-p $pidfile -f $doormand_config" run_rc_command "$1"</programlisting> + <para>除非有很站得住脚的理由提前启动服务,所有的 ports 脚本应使用 + <programlisting>REQUIRE: LOGIN</programlisting>。 + 如果服务需要以特定用户 (除 root 之外) 身份启动, 则必须这样做。 + 在前面的例子中, 我们还使用了 + <programlisting>KEYWORD: shutdown</programlisting> + 以便让 mythical port 在系统停机的过程中以正常的方式终止, + 因为它需要在系统引导过程中启动服务。 如果脚本没有启动任何服务, + 则并不需要这样做。</para> + <para>这里, 对变量的默认赋值方法应采用 "=", 而非 ":=" 这样的形式。 这是因为, 前一种赋值方法只有在变量未被设置时才设置默认值, @@ -7939,6 +8098,7 @@ run_rc_command "$1"</programlisting> <filename>Makefile</filename> 中使用。 最新版本的 &os; 并不为脚本名增加任何后缀, 但较早的版本则曾使用过 <filename>.sh</filename> 后缀。</para> + <note> <para>新增的脚本均不应使用 <filename>.sh</filename> 后缀。 未来, 仍然包含这一后缀的脚本将被批量改名。</para> @@ -7960,6 +8120,32 @@ run_rc_command "$1"</programlisting> <makevar>USE_RC_SUBR</makevar> 变量的内容匹配。</para> </sect2> </sect1> + + <sect1 id="users-and-groups"> + <title>添加用户和用户组</title> + + <para>一些 port 需要在安装的系统中创建特定的用户或用户组。 + 如果有这种情况, 请从 50 到 999 之间选择一个尚未使用的 UID, 并在 + <filename>ports/UIDs</filename> (针对用户) 或 + <filename>ports/GIDs</filename> (针对组) 中予以记录。 + 请务必确保您没有使用系统中已经在其他 ports 中使用的 UID。</para> + + <para>如果您的 port 需要创建新用户或用户组, + 请在提交补丁的时候一并提交这两个文件的补丁。</para> + + <para>接下来, 可以在您的 <filename>Makefile</filename> 中使用 + <makevar>USERS</makevar> 和 <makevar>GROUPS</makevar> + 这两个变量, 系统会在安装时自动创建用户或组。</para> + + <programlisting>USERS= pulse +GROUPS= pulse pulse-access pulse-rt</programlisting> + + <para>现有的保留 UID 和 GID 列表, + 可以在 <filename>ports/UIDs</filename> 和 + <filename>ports/GIDs</filename> 找到。</para> + + </sect1> + </chapter> <chapter id="plist"> @@ -8000,6 +8186,23 @@ PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting> 就不需要再到 <filename>pkg-plist</filename> 中修改那几十 (或者, 有时甚至是上百) 行的内容了。</para> + <para>如果您的 port 需要根据一定的配置来有条件地安装一些文件, + 通常的做法是在 <filename>pkg-plist</filename> 中列出这些文件时, + 在对应行的开头加上 <literal>%%TAG%%</literal>, + 并将 <literal>TAG</literal> 写到 <filename>Makefile</filename> + 中的 <makevar>PLIST_SUB</makevar> 变量中, 根据需要替换掉, 或替换为 + <literal>@comment</literal>, 后者表示让打包工具忽略这行:</para> + + <programlisting>.if defined(WITH_X11) +PLIST_SUB+= X11="" +.else +PLIST_SUB+= X11="@comment " +.endif</programlisting> + + <para>与之对应, 在 <filename>pkg-plist</filename> 中:</para> + + <programlisting>%%X11%%bin/foo-gui</programlisting> + <para>这一替换过程 (以及加入 <link linkend="makefile-manpages">联机手册</link> 的过程), 会在 <maketarget>pre-install</maketarget> 和 @@ -8199,7 +8402,7 @@ etc/orbit.conf.sample <para>开始的步骤和上面的前三行一样, 也就是 <command>mkdir</command>, <command>mtree</command> 并 - <command>make depends</command>。 然后构建和安装 + <command>make depends</command>。 然后联编和安装 port:</para> <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen> @@ -8513,8 +8716,8 @@ as .putsy.conf and edit it.</programlisting> <para><makevar>PREFIX</makevar> 能够决定 port 安装时的目的位置。 一般情况下这个位置是 <filename>/usr/local</filename> - 或 <filename>/opt</filename>。 用户可以将 <makevar>PREFIX</makevar> - 设为其希望的任意值。 您的 port 则必须遵循这个变量。</para> + 或 <filename>/opt</filename>, 但也可以设为其它的任意值。 + 您的 port 则必须遵循这个变量。</para> <para>除此之外, 如果用户配置了 <makevar>DESTDIR</makevar>, 则表示希望将 port 安装到另一个环境, 通常是 jail @@ -8581,7 +8784,7 @@ as .putsy.conf and edit it.</programlisting> <title>Tinderbox</title> <para>如果您是非常热心的 ports 参与者, 则可以看看 <application>Tinderbox</application>。 - 这是一个强大的用于构建和测试 ports 的系统, 它基于 + 这是一个强大的用于联编和测试 ports 的系统, 它基于 <link linkend="build-cluster">Pointyhat</link> 的脚本。 您可以使用 <filename role="package">ports-mgmt/tinderbox</filename> port 来安装 <application>Tinderbox</application>。 请一定仔细阅读随它安装的文档, @@ -8730,7 +8933,7 @@ as .putsy.conf and edit it.</programlisting> <para>在漏洞被修正之后, 一定要同时增加 port 的修订版本号。 这样, 规律性地升级安装的 package 的用户就能够看到他们需要进行升级。 - 另外, 还应构建预编译的安装包, 并通过 FTP 和 WWW 镜像发布, + 另外, 还应联编预编译的安装包, 并通过 FTP 和 WWW 镜像发布, 以取代有漏洞的版本。 注意要增加 <makevar>PORTREVISION</makevar> 数字, 除非在修正问题时 <makevar>PORTVERSION</makevar> 发生了变化。 一般来说, @@ -8843,7 +9046,7 @@ as .putsy.conf and edit it.</programlisting> <dates> <discovery>2010-05-25</discovery> <co id="co-vx-dsc"> <entry>2010-07-13</entry> <co id="co-vx-ent"> - <modified>2010-09-17</entry> <co id="co-vx-mod"> + <modified>2010-09-17</modified> <co id="co-vx-mod"> </dates> </vuln></programlisting> @@ -9126,13 +9329,13 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 </sect1> <sect1 id="porting-wrkdir"> - <title><makevar>WRKDIR</makevar> (构建时使用的临时目录)</title> + <title><makevar>WRKDIR</makevar> (联编时使用的临时目录)</title> <para>任何时候都不要在 <makevar>WRKDIR</makevar> 以外的位置写文件。 <makevar>WRKDIR</makevar> - 是在 port 构建过程中唯一的一处一定可写的地方 (参见 + 是在 port 联编过程中唯一的一处一定可写的地方 (参见 <ulink url="&url.books.handbook;/ports-using.html#PORTS-CD">如何从 - CDROM 安装 port</ulink> 以了解从只读的目录中构建和安装 port 的例子)。 + CDROM 安装 port</ulink> 以了解从只读的目录中联编和安装 port 的例子)。 如果您需要改变 <filename>pkg-<replaceable>*</replaceable></filename> 文件, 请按照 <link linkend="porting-pkgfiles">重新定义某个变量</link> 介绍的方法, @@ -9140,7 +9343,7 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 </sect1> <sect1 id="porting-wrkdirprefix"> - <title><makevar>WRKDIRPREFIX</makevar> (用于构建的临时目录的父目录名)</title> + <title><makevar>WRKDIRPREFIX</makevar> (用于联编的临时目录的父目录名)</title> <para>一定要确保您的 port 尊重 <makevar>WRKDIRPREFIX</makevar> 的设置。 绝大多数 port 并不需要担心这个。 具体说来, @@ -9799,7 +10002,7 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 <row> <entry>450005</entry> <entry>April 27, 2002</entry> - <entry>默认将 XFree86 4 用于预编译包构建之后的 4.5-STABLE</entry> + <entry>默认将 XFree86 4 用于预编译包联编之后的 4.5-STABLE</entry> </row> <row> @@ -10512,7 +10715,7 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 <row> <entry>502106</entry> <entry>March 8, 2004</entry> - <entry>pf 连入构建和安装过程之后的 5.2-CURRENT + <entry>pf 连入联编和安装过程之后的 5.2-CURRENT </entry> </row> @@ -11765,6 +11968,72 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 </row> <row> + <entry>702000</entry> + <entry>April 15, 2009</entry> + <entry>7.2-RELEASE</entry> + </row> + + <row> + <entry>702100</entry> + <entry>April 15, 2009</entry> + <entry>7.2-RELEASE 之后的 7.2-STABLE。</entry> + </row> + + <row> + <entry>702101</entry> + <entry>May 15, 2009</entry> + <entry>ichsmb(4) 改为使用左邻接辅编址来保持与其它 + SMBus 控制器驱动一致性之后的 7.2-STABLE。</entry> + </row> + + <row> + <entry>702102</entry> + <entry>May 28, 2009</entry> + <entry>MFC 了 + <function>fdopendir</function> 函数之后的 7.2-STABLE。</entry> + </row> + + <row> + <entry>702103</entry> + <entry>June 06, 2009</entry> + <entry>MFC 了 PmcTools 之后的 7.2-STABLE。</entry> + </row> + + <row> + <entry>702104</entry> + <entry>July 14, 2009</entry> + <entry>MFC 了 + <function>closefrom</function> 系统调用之后的 7.2-STABLE。</entry> + </row> + + <row> + <entry>702105</entry> + <entry>July 31, 2009</entry> + <entry>MFC 了 SYSVIPC ABI + 改动之后的 7.2-STABLE。</entry> + </row> + + <row> + <entry>702106</entry> + <entry>September 14, 2009</entry> + <entry>MFC 了 x86 PAT + 增强, 并新增了 d_mmap_single() 以及 + scatter/gather 型 VM 对象类型之后的 7.2-STABLE。</entry> + </row> + + <row> + <entry>703000</entry> + <entry>February 9, 2010</entry> + <entry>7.3-RELEASE</entry> + </row> + + <row> + <entry>703100</entry> + <entry>February 9, 2010</entry> + <entry>7.3-RELEASE 之后的 7.3-STABLE。</entry> + </row> + + <row> <entry>800000</entry> <entry>October 11, 2007</entry> <entry>8.0-CURRENT。 分拆了宽字符和单字节字符 @@ -12217,7 +12486,305 @@ Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00 <entry>March 18, 2009</entry> <entry>实现了 rpath 动态字符替换之后的 8.0-CURRENT.</entry> </row> - + <row> + <entry>800074</entry> + <entry>March 24, 2009</entry> + <entry>引入了 tcpdump 4.0.0 和 + libpcap 1.0.0 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800075</entry> + <entry>April 6, 2009</entry> + <entry>修改了 structs vnet_net、 + vnet_inet 和 vnet_ipfw 结构布局之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800076</entry> + <entry>April 9, 2009</entry> + <entry>为 dummynet 新增了延迟评估工具之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800077</entry> + <entry>April 14, 2009</entry> + <entry>删去了 VOP_LEASE() 和 + vop_vector.vop_lease 之后的 8.0-CURRENT</entry> + </row> + <row> + <entry>800078</entry> + <entry>April 15, 2009</entry> + <entry>在 struct rt_metrics 和 struct + rt_metrics_lite 中添加了 rt_weight 字段, + 导致其结构发生变化之后的 8.0-CURRENT。 + 此后 RTM_VERSION 增加, 但又回退了。</entry> + </row> + <row> + <entry>800079</entry> + <entry>April 15, 2009</entry> + <entry>在 struct route 和 struct_in6 中添加了 + struct llentry 指针之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800080</entry> + <entry>April 15, 2009</entry> + <entry>改变了 struct inpcb 布局之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800081</entry> + <entry>April 19, 2009</entry> + <entry>改变了 malloc_type 布局之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800082</entry> + <entry>April 21, 2009</entry> + <entry>改变了 struct ifnet 布局, 并增加了 if_ref() + 和 if_rele() 引用计数维护功能之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800083</entry> + <entry>April 22, 2009</entry> + <entry>实现了底层蓝牙 HCI API 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800084</entry> + <entry>April 29, 2009</entry> + <entry>修改了 IPv6 SSM 和 MLDv2 + 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800085</entry> + <entry>April 30, 2009</entry> + <entry>启用了包括一个活跃映像的 VIMAGE 内核支持之后的 + 8.0-CURRENT。</entry> + </row> + <row> + <entry>800086</entry> + <entry>May 8, 2009</entry> + <entry>为 patch(1) 增加任意长输入行支持之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800087</entry> + <entry>May 11, 2009</entry> + <entry>修改了一些 VFS KPI 之后的 8.0-CURRENT。 + VFS 的 FSD 部分中删去了线程参数。 + <function>VFS_*</function> 函数并不需要这些上下文信息, + 因为它总是与 + <varname>curthread</varname> 相关。 + 在某些特殊情况中, 则保留了原先的行为。</entry> + </row> + <row> + <entry>800088</entry> + <entry>May 20, 2009</entry> + <entry>对 net80211 监视模式进行调整之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800089</entry> + <entry>May 23, 2009</entry> + <entry>增加了 UDP 控制块支持之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800090</entry> + <entry>May 23, 2009</entry> + <entry>将网络接口克隆虚拟化之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800091</entry> + <entry>May 27, 2009</entry> + <entry>增加了层次式 jail 并取消全局 securelevel + 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800092</entry> + <entry>May 29, 2009</entry> + <entry>修改了 + <function>sx_init_flags()</function> KPI 之后的 8.0-CURRENT。 + <constant>SX_ADAPTIVESPIN</constant> 退役, + 而新增的 <constant>SX_NOADAPTIVE</constant> 标志则表达相反语义。</entry> + </row> + <row> + <entry>800093</entry> + <entry>May 29, 2009</entry> + <entry>为 struct mount 增加 mnt_xflag 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800094</entry> + <entry>May 30, 2009</entry> + <entry>新增了 + &man.VOP.ACCESSX.9; 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800095</entry> + <entry>May 30, 2009</entry> + <entry>调整轮询 KPI (polling KPI) 之后的 8.0-CURRENT。 + 轮询处理程序会返回处理过的包的数量。 新增的 + <constant>IFCAP_POLLING_NOCOUNT</constant> + 则表示返回值不重要, 并跳过计数。</entry> + </row> + <row> + <entry>800096</entry> + <entry>June 1, 2009</entry> + <entry>对新的 netisr 进行了改进, 并调整了保存和存取 FIB + 方式之后的 8.0-CURRENT。</entry> + <!-- + Had been 96 and 97 but were folded because we are + running out of numbers. + --> + </row> + <row> + <entry>800097</entry> + <entry>June 8, 2009</entry> + <entry>引入了 vnet 析构挂钩和相关基础设施之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800097</entry> + <entry>June 11, 2009</entry> + <entry>引入了 netgraph 输出到输入路径调用检测和排队机制, + 并调整了 struct thread 布局之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800098</entry> + <entry>June 14, 2009</entry> + <entry>引入了 OpenSSL 0.9.8k 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800099</entry> + <entry>June 22, 2009</entry> + <entry>更新了 NGROUPS 并将路由虚拟化挪到它自己的 + VImage 模块之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800100</entry> + <entry>June 24, 2009</entry> + <entry>修改了 SYSVIPC ABI 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800101</entry> + <entry>June 29, 2009</entry> + <entry>删去了与网络接口一一对应的 + /dev/net/* 字符设备之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800102</entry> + <entry>July 12, 2009</entry> + <entry>在 struct sackhint、 struct tcpcb 以及 struct + tcpstat 上增加占位元素之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800103</entry> + <entry>July 13, 2009</entry> + <entry>将 TOE 驱动接口中的 struct tcpopt + 替换为 TCP syncache 中的 struct toeopt 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800104</entry> + <entry>July 14, 2009</entry> + <entry>新增了基于 linker-set 的 per-vnet + 分配器之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800105</entry> + <entry>July 19, 2009</entry> + <entry>递增了所有未使用符号版本的动态连接库版本之后的 + 8.0-CURRENT。</entry> + </row> + <row> + <entry>800106</entry> + <entry>July 24, 2009</entry> + <entry>引入 VM 对象类型 OBJT_SG 之后的 8.0-CURRENT。</entry> + </row> + <row> + <entry>800107</entry> + <entry>August 2, 2009</entry> + <entry>通过加入 newbus sxlock 使 newbus 子系统不再使用 + Giant, 以及 8.0-RELEASE。</entry> + </row> + <row> + <entry>800108</entry> + <entry>November 21, 2009</entry> + <entry>实现了 EVFILT_USER kevent 过滤器之后的 8.0-STABLE。</entry> + </row> + <row> + <entry>800500</entry> + <entry>January 7, 2010</entry> + <entry>令 <command>pkg_add -r</command> + 使用 packages-8-stable 的 <literal>__FreeBSD_version</literal> + 版本变化的 8.0-STABLE。</entry> + </row> + <row> + <entry>800501</entry> + <entry>January 24, 2010</entry> + <entry>调整了 + <function>scandir(3)</function> 和 + <function>alphasort(3)</function> 函数原型, + 使其符合 SUSv4 之后的 8.0-STABLE。</entry> + </row> + <row> + <entry>800502</entry> + <entry>January 31, 2010</entry> + <entry>新增了 + <function>sigpause(3)</function> 之后的 8.0-STABLE。</entry> + </row> + <row> + <entry>900000</entry> + <entry>August 22, 2009</entry> + <entry>9.0-CURRENT。</entry> + </row> + <row> + <entry>900001</entry> + <entry>September 8, 2009</entry> + <entry>引入了 x86emu, 来自 OpenBSD 的 x86 CPU + 实模式模拟器之后的 9.0-CURRENT。</entry> + </row> + <row> + <entry>900002</entry> + <entry>September 23, 2009</entry> + <entry>实现了 EVFILT_USER kevent 过滤器之后的 9.0-CURRENT。</entry> + </row> + <row> + <entry>900003</entry> + <entry>December 2, 2009</entry> + <entry>新增了 + <function>sigpause(3)</function> 以及 csu 的 PIE + 支持之后的 9.0-CURRENT。</entry> + </row> + <row> + <entry>900004</entry> + <entry>December 6, 2009</entry> + <entry>新增了 libulog 及其 libutempter 兼容接口之后的 9.0-CURRENT。</entry> + </row> + <row> + <entry>900005</entry> + <entry>December 12, 2009</entry> + <entry>新增了用于查询指定休眠队列上等待者数量的 + <function>sleepq_sleepcnt()</function> 函数之后的 9.0-CURRENT。</entry> + </row> + <row> + <entry>900006</entry> + <entry>January 4, 2010</entry> + <entry>调整了 + <function>scandir(3)</function> 和 + <function>alphasort(3)</function> 函数原型, + 使其符合 SUSv4 之后的 9.0-CURRENT。</entry> + </row> + <row> + <entry>900007</entry> + <entry>January 13, 2010</entry> + <entry>删去了 utmp(5) 并增加了 utmpx (参阅 + <function>getutxent(3)</function>) + 以改善用户登录日志和系统事件支持之后的 9.0-CURRENT。</entry> + </row> + <row> + <entry>900008</entry> + <entry>January 20, 2010</entry> + <entry>9.0-CURRENT 引入了 BSD 授权的 bc/dc + 并将 GNU bc/dc 标注为过时之后的 9.0-CURRENT。</entry> + </row> + <row> + <entry>900009</entry> + <entry>January 26, 2010</entry> + <entry>新增了用于管理网络接口说明的 SIOCGIFDESCR + 和 SIOCSIFDESCR ioctl 之后的 9.0-CURRENT。 + 这组接口受到了 OpenBSD 的启发。</entry> + </row> </tbody> </tgroup> </table> @@ -12370,25 +12937,6 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> </sect1> - <sect1 id="dads-uid-and-gids"> - <title>UID 和 GID</title> - - <para>最新的预留 UID 和 GID 可以在 <filename>ports/UIDs</filename> 和 - <filename>ports/GIDs</filename> 这两个文件中找到。</para> - - <para>如果您的 port 安装到系统上之前需要一些用户, - 请使用 <filename>pkg-install</filename> 脚本来调用 - <command>pw</command> 以便自动地创建它们。 请参见 - <filename role="package">sysutils/symon</filename> 提供的例子。 - 您的 port 必须使用固定的 用户/组 ID 号, - 必须在 50 到 999 之间选择一个未用的 UID 并在 - <filename>ports/UIDs</filename> (用于用户) 或 - <filename>ports/GIDs</filename> (用于组) 中进行注册。</para> - - <para>如果您的 port 需要在这一范围内预留新的 UID 或 GID 的话, - 请同时提交修改这两个文件的补丁。</para> - </sect1> - <sect1 id="dads-rational"> <title>理性行事</title> @@ -12417,7 +12965,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> 和 <makevar>CXX</makevar> 变量的设置。 这也就是说, port 不应使用绝对的方式来设置这个变量的值, 而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值。 - 这样, 就可以设置全局的构建选项, 令其影响所有的 port 构建过程了。</para> + 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。</para> <para>如果实在无法这样做, 请在 <filename>Makefile</filename> 中加入 <literal>NO_PACKAGE=ignores @@ -12452,7 +13000,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> <para>您的 port 应遵循 <makevar>CFLAGS</makevar> 变量的设置。 这也就是说, port 不应使用绝对的方式来设置这个变量的值, 而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值, - 这样, 就可以设置全局的构建选项, 令其影响所有的 port 构建过程了。</para> + 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。</para> <para>如果实在无法这样做, 请在 <filename>Makefile</filename> 中加入 <literal>NO_PACKAGE=ignores @@ -12505,7 +13053,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> <note> <para>如果设置了 <makevar>PTHREAD_LIBS</makevar>, - 而在构建时出现 <literal>unrecognized + 而在联编时出现 <literal>unrecognized option '-pthread'</literal> 这样的错误, 可能需要通过将 <makevar>CONFIGURE_ENV</makevar> 设为 <literal>LD=${CC}</literal> 来使用 @@ -12545,7 +13093,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> <command>make</command> 的值, 将是在用户试图安装时得到的提示信息。 务请使用正确的 <command>make</command> 变量, 因为每一个都表达了截然不同的意义, 而且许多自动化系统, 例如 - <link linkend="build-cluster">port 构建集群</link>、 + <link linkend="build-cluster">port 联编集群</link>、 <link linkend="freshports">FreshPorts</link>, 以及 <link linkend="portsmon">portsmon</link>, 都依赖于 <filename>Makefile</filename> 的正确性。</para> @@ -12558,9 +13106,9 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> <para><makevar>BROKEN</makevar> 专门用于表达目前无法正确编译、 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。</para> - <para>如果进行了相关的配置, 则构建集群仍将尝试构建它, + <para>如果进行了相关的配置, 则联编集群仍将尝试联编它, 以确认导致问题的深层问题是否已被解决。 (不过, 一般情况下, - 构建集群并不会这样做。)</para> + 联编集群并不会这样做。)</para> <para>举例来说, 当 port 发生下述情况时, 应使用 <makevar>BROKEN</makevar>:</para> @@ -12604,9 +13152,9 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> <listitem> <para><makevar>IGNORE</makevar> 用来表示 port - 由于某些其它原因不应予以构建。 如果认为发生了结构性的问题, + 由于某些其它原因不应予以联编。 如果认为发生了结构性的问题, 则应使用它。 任何情况下, - 构建集群都不会构建标记为 + 联编集群都不会联编标记为 <makevar>IGNORE</makevar> 的 port。 以下是使用 <makevar>IGNORE</makevar> 的一些例子:</para> @@ -12620,7 +13168,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> </listitem> <listitem> - <para>构建时需要 &os; 内核的源代码, + <para>联编时需要 &os; 内核的源代码, 但用户没有安装它们</para> </listitem> @@ -12718,7 +13266,7 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> <para>目前还没有确切的关于需要给出多少通知的政策。 当前的实践是, 对于与安全有关的问题为一个月, - 而与构建有关的问题则为两个月。 这也让有兴趣的 committer + 而与联编有关的问题则为两个月。 这也让有兴趣的 committer 能够有一点时间来修正问题。</para> </sect1> @@ -12726,14 +13274,14 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> <title>避免使用 <literal>.error</literal> 结构</title> <para>在 <filename>Makefile</filename> 中给出信号, - 表示由于某种外界因素 (例如, 用户指定了无效的构建选项) + 表示由于某种外界因素 (例如, 用户指定了无效的联编选项) 而无法安装的方法是将变量 <makevar>IGNORE</makevar> 设为一非空值。 这个值将被格式化, 并在用户执行 <command>make install</command> 是给出提示。</para> <para>用 <literal>.error</literal> 实现这一目的是一种常见的误用。 这样做的问题是, 许多在 ports 树上运行的自动化工具会因此而失败。 - 最常见的情况见于构建 <filename>/usr/ports/INDEX</filename> 的过程 + 最常见的情况见于联编 <filename>/usr/ports/INDEX</filename> 的过程 (参见 <xref linkend="make-describe">)。 然而, 即使十分普通的命令, 例如 <command>make -V maintainer</command>, 在这种情况下也会失败。 这是不可接受的。</para> @@ -12869,7 +13417,7 @@ EXTRACT_SUFX= .tar.Z PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz -[监护人(maintainer); *必须有*! 这是某个资源处理 port 更新、 构建失败, +[监护人(maintainer); *必须有*! 这是某个资源处理 port 更新、 联编失败, 以及回答用户直接提问或汇报 bug 的人。 为了保证 Ports Collection 有尽可能高的品质, 我们不再接受指定给 "ports@FreeBSD.org" 的新 port。] MAINTAINER= asami@FreeBSD.org @@ -12888,7 +13436,7 @@ WRKSRC= ${WRKDIR}/xdvi-new PATCH_DIST_STRIP= -p1 [如果需要运行由 GNU autoconf 生成的 "configure" 脚本] GNU_CONFIGURE= yes -[如果需要使用 GNU make, 而不是 /usr/bin/make 来完成构建...] +[如果需要使用 GNU make, 而不是 /usr/bin/make 来完成联编...] USE_GMAKE= yes [如果是一个 X 应用程序, 并使用 "xmkmf -a" 来运行...] USE_IMAKE= yes @@ -12968,16 +13516,16 @@ pre-install: <sect1 id="build-cluster"> <title>位于 <hostid role="hostname">pointyhat.FreeBSD.org</hostid> - 的 &os; Port 构建集群</title> + 的 &os; Port 联编集群</title> <para>&os; 的一个最不为人所知的强项是, - 它拥有一个专用于持续构建 Ports Collection 的集群, - 这个集群会构建所有主要的 OS 版本在每一个 Tier-1 架构上的 package。 + 它拥有一个专用于持续联编 Ports Collection 的集群, + 这个集群会联编所有主要的 OS 版本在每一个 Tier-1 架构上的 package。 您可以在 <ulink url="http://pointyhat.FreeBSD.org/">package - 构建和错误日志</ulink> 找到其结果。</para> + 联编和错误日志</ulink> 找到其结果。</para> - <para>每一个 port 都会被构建, + <para>每一个 port 都会被联编, 除非标记为 <makevar>IGNORE</makevar>。 标记了 <makevar>BROKEN</makevar> 的 port 仍然会被继续尝试, 以了解是否某些依赖关系的变动解决了其问题 @@ -12987,15 +13535,15 @@ pre-install: </sect1> <sect1 id="distfile-survey"> - <title>&os; 的 Port Distfile 普查</title> + <title>&os; 的 Ports Distfile 扫描器</title> - <para>构建集群是一组专门用于构建所有 ports 的最新的版本的机器, - 其上已经下载所有的 distfile。 然而, 由于 Internet 在持续地发生变化, + <para>联编集群是一组专门用于联编所有 port 最新版本的机器, + 其上已经下载了所有的 distfiles。 然而, 由于 Internet 在持续地发生变化, distfile 可能很快就消失了。 <ulink - url="http://people.FreeBSD.org/~fenner/portsurvey/">FreeBSD - Ports distfiles 普查</ulink> 试图查询每一个 port 的所有下载站点, + url="http://www.portscout.org">FreeBSD + Ports distfile 扫描器</ulink> 试图查询每一个 port 的所有下载站点, 以期找出这些文件是否依然存在。 维护者应规律性地检查这些报告, - 这不仅会提高用户构建的速度, 同时也避免了浪费那些镜像了全部 + 这不仅会提高用户联编的速度, 同时也避免了浪费那些镜像了全部 distfile 的志愿者的带宽。</para> </sect1> @@ -13010,7 +13558,7 @@ pre-install: <literal>portsmon</literal>)。 这个系统包含了一个处理若干信息来源的数据库, 并提供了一个可以通过 web 方式浏览的界面。 目前, - 它利用到了和 ports 有关的问题报告 (PR)、 来自构建集群的错误日志, + 它利用到了和 ports 有关的问题报告 (PR)、 来自联编集群的错误日志, 以及来自 Ports Collection 的文件所提供的信息。 未来, 还会对它进行进一步的扩展, 从而提供包括 distfile 普查, 以及其它来源在内的更多信息。</para> @@ -13024,7 +13572,7 @@ pre-install: 有时并不在 Synopsis (概要) 中指明 port 的名字, 尽管我们希望他们这样做)。 因此, <literal>portsmon</literal> 在您想要查找是否有人提交某个现存的 port 的 PR, - 以及它的构建是否出现了错误; 或在您创建新的 port + 以及它的联编是否出现了错误; 或在您创建新的 port 之前想要查找一下是否已经有人提交过时, 就非常有用了。</para> </sect1> |