# FreeBSD/i386 6.0-RELEASE 发行说明

### The FreeBSD Project

版权 © 2000, 2001, 2002, 2003, 2004, 2005 The FreeBSD Documentation Project

$FreeBSD: www/zh_CN/releases/6.0R/relnotes-i386.html,v 1.1.1000.1 2005/12/22 17:32:35 delphij Exp $

FreeBSD is a registered trademark of the FreeBSD Foundation.

IBM, AIX, EtherJet, Netfinity, OS/2, PowerPC, PS/2, S/390, and ThinkPad are trademarks of International Business Machines Corporation in the United States, other countries, or both.

IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.

Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

Sparc, Sparc64, SPARCEngine, and UltraSPARC are trademarks of SPARC International, Inc in the United States and other countries. Products bearing SPARC trademarks are based upon architecture developed by Sun Microsystems, Inc.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.

这份 FreeBSD 6.0-RELEASE 的发行说明， 概括了 FreeBSD 基本系统在 6-STABLE 开发线上所做的改动。 本文档列举了自前一发行版本以来所有适用的安全公告， 以及对于 FreeBSD 内核以及系统附带的应用程序所做的重要修改。 对在升级时需要注意的一些问题， 也进行了简略的介绍。

## 1 简介

这篇文档包括了在 i386 硬件平台上 FreeBSD 6.0-RELEASE 的发行说明。 它描述了最近刚刚加入、修改或删除了的 FreeBSD 特性的说明。 同时，它也将给出如何从先前的 FreeBSD 版本完成升级的说明。

这是一份 FreeBSD 6.0-RELEASE 的 release 发布包。 您可以从 ftp://ftp.FreeBSD.org/ 或其他镜像那里得到它的副本。 关于这个 (或其他) release 发布包的更多信息，可以在 FreeBSD 手册 中的 “如何获得 FreeBSD”附录 中找到。

我们鼓励所有的用户在开始安装 FreeBSD 之前首先参考这一版本所对应的勘误信息。 勘误文档将随时更新，以便为用户提供在发布工程后期或该版本发布之后 “新发现的” 问题和相关信息。 通常，这包括已知的 bug，安全公告，以及对于文档的修订内容。 最新的 FreeBSD 6.0-RELEASE 勘误信息可以从 FreeBSD 网站获得。

## 2 最新变动

这一节描述了 FreeBSD 自 5.4-RELEASE 以来最明显的新功能和变化。 一般说来， 没有注明 [已合并] 的那些新特性是 6-STABLE 所独有的。

发行说明中的绝大多数条目是在说明自从 5.4-RELEASE 以来的安全公告、新的驱动程序或硬件支持、新的命令或是选项、 重要的错误修补，以及基本系统中来自第三方的软件升级。 重要的 ports 和 packages 变动，或关于交付工程的变动也会在这份文档中体现。 显而易见地，发行说明不可能涵盖 FreeBSD 版本之间的每一个微小变动； 这篇文档主要关注的，仍然是安全公告，用户可以察觉的修改， 以及重要的架构改良。

### 2.1 安全公告

在 fetch(1) 工具中发现了一处问题， 它可能导致恶意的 HTTP 服务器覆盖客户程序任意部分的内存， 这一问题已经得到修复。 要了解更多信息， 请参见安全公告 FreeBSD-SA-04:16.fetch。 [已合并]

在 procfs(5) 和 linprocfs(5) 中发现了一处问题， 它能够允许恶意的本地用户读取部分内核内存， 或通过造成系统 panic 来实施本地拒绝服务攻击， 这一问题已经得到修复。 要了解更多信息， 请参见安全公告 FreeBSD-SA-04:17.procfs。 [已合并]

修正了 TELNET 客户端程序中的两处缓冲区溢出问题. 这些问题有可能导致恶意的 TELNET 服务器或主动地网络攻击者， 使 telnet(1) 以执行它的用户的身份执行任意的代码。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:01.telnet。 [已合并]

修正了 sendfile(2) 系统调用中的一处信息泄露问题， 这一问题可能导致内核中的一段随机的部分被传递出去。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:02.sendfile。 [已合并]

修正了 `SIOCGIFCONF` ioctl(2) 的一个信息泄露问题， 这一问题可能导致 12 字节的内核内存被泄露。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:04.ifconf。 [已合并]

修正了 cvs(1) 中的多处程序设计问题， 这些问题可能导致在 CVS 服务器上执行任意代码。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:05.cvs。 [已合并]

修正了 `/dev/iir` 设备节点上的默认权限错误， 这一失误会导致允许非特权的本地用户发送命令给 iir(4) 所支持的设备。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:06.iir。 [已合并]

修正了 i386_get_ldt(2) 系统调用中， 对于输入参数的检验代码中的一处问题， 这一问题可能导致将某些内核内存的内容泄露给用户进程。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:07.ldt。 [已合并]

修正了多处可能导致内核内存的内容泄露的漏洞。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:08.kmem。 [已合并]

由于采用超线程技术 (HTT) 的处理器中所存在的信息泄露问题， 加入了新的 sysctl 变量 `machdep.hyperthreading_allowed`。 在 FreeBSD CURRENT 上起默认值是 `1` (表示启用 HTT)， 而在 4-STABLE 和 5-STABLE 开发分支， 以及受支持的安全修订分支上则是 `0` (HTT 禁用)。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:09.htt。 [已合并]

修正了 tcpdump(1) 工具中的一处漏洞， 这个漏洞能够使恶意的远程用户通过发送特制的数据报来引发拒绝服务。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:10.tcpdump。 [已合并]

修正了 gzip(1) 工具中的两处安全漏洞。 这些漏洞使得本地用户能够在解压缩时修改任意文件的权限， 或覆盖本地文件。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:11.gzip。 [已合并]

修正了 BIND 9 DNSSEC 的一处漏洞。 当启用 DNSSEC 时， 这一问题会允许远程攻击者通过发送特制的数据报来导致 named(8) 异常终止。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:12.bind9。 [已合并]

修正了 ipfw(4) 中的一处可能导致包在查询表中无法正确匹配的问题。 这一问题只影响 SMP 和启用了 `PREEMPTION` 内核选项的 UP 机器。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:13.ipfw。 [已合并]

修正了 bzip2(1) 的两处安全问题。 这包括一处拒绝服务攻击问题， 以及非授权的文件权限修改问题。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:14.bzip2。 [已合并]

修正了 FreeBSD 的 TCP 协议栈中的两处问题。 这些问题会使得攻击者能够让暨存的 TCP 连接挂起， 从而导致拒绝服务状态。 要了解更多信息， 请参见安全公告 FreeBSD-SA-05:15.tcp。 [已合并]

### 2.2 对内核的改动

对于 80386 处理器 (也就是 `I386_CPU` 内核配置选项) 的支持， 已经被删去。 使用这一类型的 CPU 的用户， 应使用 FreeBSD 5.`X` 或更早的版本。

内核调试器 ddb(4) 新增了 `show alllocks` 命令， 用以显示持有休眠互斥体 (以及当前线程所持有的自旋互斥体) 的情况的了。 [已合并]

将崩溃时的内核转存 (crash dump) 格式改为了 ELF 以支持大内存 (超过 4GB) 的环境。

ichsmb(4) 驱动现在可以作为可加载内核模块使用了。

jail(8) 功能现在支持一个新的 sysctl `security.jail.chflags_allowed`， 用于控制 chflags(1) 在 jail 中的行为。 如果设置为 `0` (默认值)， jail 中的 `root` 用户将被认为是非特权用户； 如果设置为 `1`， 则 jail 中的 root 用户会被视为与未 jail 的 `root` 用户一样。 [已合并]

sysctl 变量 `security.jail.getfsstatroot_only` 被改名为 `security.jail.enforce_statfs` 并能够支持下述策略：

值 | 策略
--- | ---
0 | 对显示全部挂接点 (mount point) 不设任何限制。
1 | 只显示 jail 的 chroot 之下的挂接点， 且只显示它在挂接点之下的部分 (例如， 如果 jail 的 chroot 目录是 `/jails/foo` 而有一个挂接点是 `/jails/foo/usr/home`， 则只显示 `/usr/home`)。
2 | 只显示 jail 的 chroot 目录所在的挂接点。

加载器变量 `debug.mpsafevm` 默认置为启用了。 [已合并]

加入了 memguard(9)， 一种用来帮助检测 “悬挂指针操作” 情形的内核内存分配器。 要利用这一功能， 就必须明确地通过 `options DEBUG_MEMGUARD` 来启用它， 并对内核进行小幅度的修改。 一般而言， 这是为内核开发人员提供的功能。

`struct ifnet` 以及网络接口 API 发生了变化。 由于 ABI 不兼容， 所有没有在 FreeBSD 基本系统中提供的驱动程序， 都必须进行改写以使用新的 API， 并重新编译方可正常使用。

一系列 ULE 的问题得到了修正。 [已合并]

在 VFS 栈中加入了细锁， 这使得它的大部分得以脱离全局锁。 这一特性在 alpha、 amd64， 以及 i386 平台上被默认打开， 并可以通过设置加载器变量 (以及 sysctl 变量) `debug.mpsafevfs` 为 `0` 来禁用它。

一个关于在对处理器间中断 (IPI) 进行处理时的问题得以修正， 这一问题可能导致 SMP 系统在重载时崩溃。 更多细节， 可以在勘误说明 FreeBSD-EN-05:03.ipi 中找到。 [已合并]

System V IPC 对象 (消息队列、 信号量和共享内存) 现在提供了强制性访问控制策略， 特别是 mac_biba(4), mac_mls(4), mac_stub(4), 和 mac_test(4) 的支持。

将传统 PCI 桥的内存分配范围， 限制到了 RAM 顶部的 32MB。 许多较早的、 旧的桥硬件， 只允许分配这一范围的内存。 这一修改只被应用于那些没有通过 BIOS 指定内存范围的设备。 它修正了 CardBus 桥 ( pccbb(4)) 的 “bad Vcc” 错误。 [已合并]

以 “debug” 开头的 sysctl(3) MIB， 现在需要使用内核选项 `options SYSCTL_DEBUG` 才能使用了。 这一选项默认不启用。

在许多驱动中加入了通用的 tty(4) 驱动接口， 这包括 cx(4) (`{tty,cua}x`), cy(4) (`{tty,cua}c`), digi(4) (`{tty,cua}D`), rc(4) (`{tty,cua}m`), rp(4) (`{tty,cua}R`), sab(4) (`{tty,cua}z`), si(4) (`{tty,cua}A`), sio(4) (`{tty,cua}d`), sx (`{tty,cua}G`), uart(4) (`{tty,cua}u`), ubser(4) (`{tty,cua}y`), ucom(4) (`{tty,cua}U`), 以及 ucycom(4) (`{tty,cua}y`) 并进行了必要的重写。 请注意， `/etc/remote` 和 `/etc/ttys` 也随之进行了更新。

加入了 vkbd(4) 驱动。 这个驱动提供了一个可以用于实现类似于 pty(4) 之于终端所完成的功能的虚拟 AT 键盘的软件环回机制。

FreeBSD 现在即使在单处理器系统上也使用局部 APIC 计时器了。

在 i386 和 ia64 平台上， 默认的 `HZ` 参数 (它控制许多内核计时器) 从默认的 `100` 提高到了 `1000`。 在 amd64 上， 这个值从 `1024` 减少到了 `1000`， 以减少和其他系统时钟之间的同步效果。

shell 命令的最大长度， 从原先的 128 变为了 `PAGE_SIZE`。 默认情况下， 这个值应该是 4KB (i386, pc98, amd64, 和 powerpc) 或 8KB (sparc64 和 ia64)。 其结果是， 兼容模块需要重新编译， 以便于内核中的数据结构保持同步。

加入了新的 `vm.blacklist` 变量。 它可以用于屏蔽一部分物理地址的内存空间， 这些内存不会加入到空闲页表中， 因而会被 FreeBSD VM 忽略掉。 忽略掉的内存页， 也会在消息缓存中予以列出。

#### 2.2.1 引导区和 loader 的变化

加入了支持串口控制台的 `boot0` 版本。 可以通过 boot0cfg(8) 并使用 `-b` `/boot/boot0sio` 将其写入磁盘。

`cdboot` 绕过了由于 BIOS 问题导致某些系统无法从 USB 光驱启动的问题。

加载器命令 `autoboot` 现在支持提示符参数了。

`autoboot` 加载器命令现在能够在 `autoboot_delay` 变量设置为 `-1` 时完全禁止用户打断启动过程了。 [已合并]

增加了一个用以设置 `hint.atkbd.0.flags=0x1` 的加载器菜单选项。 这一设置使得 USB 键盘能够在没有接 PS/2 键盘时正常使用。

默认禁用了 beastie 引导菜单。

#### 2.2.2 硬件支持

acpi(4) 驱动新增了在挂起时， 将 ACPI 和 PCI 设备关闭或置为低功耗模式的状态， 并在恢复时重新打开。 这一行为可以通过将 `debug.acpi.do_powerstate` 和 `hw.pci.do_powerstate` 这两个 sysctl 设置为 `0` 来禁用。

加入了用于 IBM 笔记本的 acpi_ibm(4) 驱动。 它提供了许多热键， 以及读取风扇状态和温度传感器的能力。

加入了用于处理 Fujitsu 笔记本上的 acpi(4)-控制按钮 acpi_fujitsu(4) 驱动。

加入了用于支持许多 Sony 笔记本上 driver, Sony 笔记本控制器的 acpi_sony 驱动。

对 atkbdc(4)、 atkbd(4) 以及 psm(4) 驱动进行了重写， 以便让它们更加独立于总线， 并提供了对 sparc64 平台的 EBus 的支持。

加入了用于灵活控制处理器速度的框架。 这为许多驱动程序通过调整 CPU 的速度来控制功耗提供了手段。 更多细节， 可以在 cpufreq(4) 联机手册中找到。 [已合并] 目前支持的驱动包括 ichss (Intel SpeedStep for ICH), acpi_perf (ACPI CPU 性能状态), 以及 acpi_throttle (ACPI CPU 减速)。 后两个设备是 acpi(4) 驱动的一部分。 它们可以通过设置设备的 hints， 例如 `hint.`ichss`.0.disabled="1"` 来禁用。

crypto(9) 子系统中加入了对 VIA C3 处理器中内建的 PadLock 安全协处理器的支持。

加入了用于硬件性能监视计数器的 hwpmc(4) 驱动。 这个驱动抽象了新式 CPU 中提供的硬件性能监视机制， 并提供了在用户进程中利用这些机制的支持。 要了解更多的细节， 请参见 hwpmc(4) 的联机手册、 相关联的函数库， 以及有关的其他工具。

删去了对于 OLDCARD 子系统的支持。 现在， 所有的 PCCARD 设备都是通过 NEWCARD 系统支持的了。

加入了用于支持 GPIB-PCIIA IEEE-488 卡的 pcii 驱动。 [已合并]

atkbd(4) 驱动新增了 `0x8` (第 3 位) 标志， 用以在设备探测时禁止测试键盘口， 以避免在某些型号， 特别是 Compaq R300Z 系列的 amd64 笔记本上造成挂起的问题。

加入了用于支持直接访问以模式0 (简单I/O) 方式运行的 Intel 8255A 可编程设备接口 (PPI) 的 pbio(4) 驱动。

对 psm(4) 进行了改进， 以支持使用 Synaptics Touchpad 的用户。 现在， 它能够更好地识别低速移动， 以及额外的按钮和滚轮。 这些特性， 可以通过 `hw.psm.synaptics.`*`` 的 sysctl 变量来调整。

syscons(4) 驱动现在支持 VESA (15、 16、 24 以及 32 位) 显示模式了。 要启用这一功能， 需要使用 `SC_PIXEL_MODE` 和 `VESA` (或相应的内核模块) 这两个内核选项。

uftdi(4) 驱动现在能支持 FTDI FT2232C 芯片了。

uplcom(4) 驱动现在能够处理 `CTS` 信号了。

改进了 ehci(4) 驱动。

##### 2.2.2.1 多媒体支持

snd_csa(4) 驱动现在支持挂起和唤醒操作了。

uaudio(4) 驱动现在增加了一些功能， 其中包括更多输入通道上的音量控制能力， 以及一些设备的录音能力。 [已合并]

##### 2.2.2.2 网络接口设备支持

更新了 ath(4) 驱动， 将流量控制算法放进了一个单独的模块。 在使用 ath(4) 时， 必须使用 `device ath_rate_onoe`, `device ath_rate_amrr`, 或 `device ath_rate_sample` 之一。

现在 bge(4) 驱动能够支持 altq(4) 框架了， 以及 BCM5714、 5721、 5750、 5751、 5751M 和 5789 芯片了。 [已合并]

加入了用于支持 USB Communication Device Class Ethernet 的 cdce(4) 驱动。 [已合并]

cp(4) 驱动现在 MPSAFE 了。 [已合并]

ctau(4) 驱动现在 MPSAFE 了。 [已合并]

cx(4) 驱动现在 MPSAFE 了。 [已合并]

dc(4) 驱动现在支持 altq(4) 框架， 并且是 MPSAFE 的了。 [已合并]

de(4) 驱动现在 MPSAFE 了。

ed(4) 驱动现在支持 altq(4) 框架了。 [已合并]

ed(4) 驱动现在 MPSAFE 了。

在 em(4) 驱动程序中， 对于 VLAN 标记 (tagging) 的硬件支持， 由于其和混杂模式之间的一些冲突被默认地禁用。 [已合并]

默认地禁用了 fxp(4) 驱动的以太网流控制功能， 以避免系统崩溃或进入内核调试器时同子网的其他系统发生问题。 [已合并]

由于不再被活跃地维护， 而且 em(4) 驱动能够支持它支持的全部硬件， 删去了 gx(4) 驱动。

hme(4) 驱动现在 MPSAFE 了。 [已合并]

加入了 ipw(4) (用于 Intel PRO/Wireless 2100)， iwi(4) (用于 Intel PRO/Wireless 2200BG/2225BG/2915ABG)， ral(4) (用于 Ralink Technology RT2500)， 以及 ural(4) (用于 Ralink Technology RT2500USB) 驱动。

ixgb(4) 驱动现在 MPSAFE 了。 [已合并]

由于无人使用， 删去了用于 LanMedia LMC1504 T1/E1 网卡的 musycc 驱动。

my(4) 驱动现在 MPSAFE 了。

使用 ndis(4) 设备驱动封装机制的驱动程序， 其构建和加载过程发生了一些变化。 ndis(4) 驱动现在可以预编译， 甚至静态联编到内核中。 单独的驱动程序， 可以使用 ndisgen(8) 工具来完成构建操作； 其结果是一个可以通过 kldload(8) 来动态加载到正在运行的内核的模块。 [已合并]

加入了用于支持 nVidia nForce MCP Networking Adapter 的 nve(4) 驱动。

pcn(4) 驱动现在 MPSAFE 了。

re(4) 驱动现在能够支持 altq(4) 框架， 并且 MPSAFE 了。 [已合并]

sf(4) 驱动现在支持设备混合轮询 (device polling) 和 altq(4) 了。 [已合并]

修正了 sk(4) 驱动中的多处程序设计错误。 这些问题主要影响 SMP 系统， 可能导致系统崩溃、 内核缺页、 SSH 连接中断， 以及文件传输问题。 更多细节， 可以在勘误公告 FreeBSD-EN-05:02.sk 上找到。 [已合并]

sk(4) 驱动现在支持 altq(4) 了。 同时， 此驱动提供了对于基于 Yukon 的网卡的巨型帧的支持能力。 [已合并]

ste(4) 驱动支持 altq(4) 了。

vge(4) 驱动现在提供了混合轮询的支持 ( polling(4))。

支持 802.11 设备的 wlan(4) 框架， 进行了大规模的改写。 除了架构上的改进之外， 还完成了 802.11g、 WPA、 802.11i、 802.1x、 WME/WMM、 AP-端节能， 以及用于加密模块的插件框架、 验证和访问控制。 清特别注意， WEP 现在需要加载 `wlan_wep` 模块 (或连入内核)。

xl(4) 驱动现在能够支持 polling(4) 了。 [已合并]

#### 2.2.3 网络协议

当发送方写的数据必须分片时， 关闭了 IPv6 中的 MTU 反馈。 [已合并]

实现了共用地址冗余协议 (CARP)。 CARP 来自 OpenBSD， 允许多个主机共享同一个 IP 地址， 从而提供了高可用性和负载均衡。 要了解更多细节， 请参考 carp(4) 联机手册。 [已合并]

加入了 if_bridge(4)， 来自 NetBSD 的网桥实现。 它提供了对于 IEEE 802.1D 生成树， 对每个桥使用不同的设备， 以及对桥包进行过滤得能力。 现在可以用 ifconfig(8) 工具来对 if_bridge(4) 进行配置了。

ipfw(4) `IPDIVERT` 选项现在可以通过内核模块的方式来加载了。 如果没有加载模块， 则 ipfw(4) 将拒绝安装 `divert` 规则， 而 natd(8) 则会返回错误信息 “protocol not supported”。

ipfw(4) 可以与 `debug.mpsafenet`=`1` (默认情况下是 `1`)， 当使用了 `gid`, `jail`, 和/或 `uid` 规则选项时正常工作了。 [已合并]

ipfw(4) 和 dummynet(4) 系统能够支持 IPv6 了。

ipfw(8) 现在支持通过转发 socket 来区分并标记 altq(4) 包了。 此外， 还可以通过特定的 payload 尺寸来匹配 TCP 包。

ipfw(8) 现在支持通过转发 socket， 以及 TCP 数据长度来区分并标记 altq(4) 包了。

ipfw(8) `ipfw fwd` 规则现在支持完整的包目的地管理了， 其前提是启用了内核选项 `options IPFIRWALL_FORWARD` 的基础上打开了 `options IPFIREWALL_FORWARD_EXTENDED`。 这个内核选项将禁用所有的限制， 以保证本地生成的包， 和发到配置在本地的 IP 地址的包能够正常地发出和转发。 请注意， 必须细心地编写 ipfw(8) 规则， 以确保类似 PMTU 发现这类应用不致发生异常。 [已合并]

ipfw(8) 系统能够支持只应用于 IPv4 的规则了。

ipnat(8) 允许在非 TCP/UDP 包上使用重定向规则了。 [已合并]

目前正在进行的工作， 在逐步去掉网络协议栈中的全局锁， 并改进锁的策略。

`libalias` 库现在可以作为内核模块来构建了。

连接状态变化通知改为发到 `/dev/devctl` 了。

新的 ng_ipfw(4) NetGraph 节点， 提供了 ipfw(4) 和 netgraph(4) 机制之间的简单接口。

加入了新的 ng_nat(4) NetGraph 节点， 用于实现 NAT 功能。

新的 ng_netflow(4) NetGraph 节点， 使得采用 FreeBSD 的路由器能够运行 NetFlow version 5 的导出。 [已合并]

加入了 ng_tcpmss(4) NetGraph 节点。 它支持改变 TCP 包的 MSS 选项。

sppp(4) 驱动程序现在提供了帧转发 (Frame Relay) 支持。 [已合并]

sppp(4) 驱动现在 MPSAFE 了。

FreeBSD 路由表现在要求路由的网关必须和路由本身同属同一地址族。 现在， route(8) 工具会拒绝异种地址族混用了。 例如：

    # route add 10.1.1.1 -inet6 fe80::1%fxp0

实现了一个新的 sysctl `net.link.tap.user_open`。 它允许基于文件系统权限对 tap(4) 设备进行非特权访问。

修正了 TCP 的一处问题， 这一问题有时会导致当接收窗口大小为零时， RST 包被忽略的问题。 [已合并]

改进了 FreeBSD TCP 协议栈中对 `RST` 的处理， 使得这类攻击变得尽可能地困难， 同时最大限度地保障了和其他 TCP 协议栈的兼容性。 算法如下： 对于所有在 `ESTABLISHED` 状态的连接， 只有当包的顺序号与 `last_ack_sent` 精确匹配时才将连接复位； 所有不符合的分片都将被直接丢弃。 对于所有其他状态的连接， 则对窗口内的复位请求进行处理。 其它的复位分片则被直接丢弃。 需要说明的是， 这一行为和 RFC 793 标准抵触， 传统的 (但安全性较差) 行为， 可以通过将新增的 sysctl `net.inet.tcp.insecure_rst` 设置为 `1` 来还原。 [已合并]

在 TCP SACK 实现中的许多错误得到了修正。 [已合并]

删去了 RFC 1644 T/TCP 支持。 这是因为其设计基于一个较弱的安全模型， 使得拒绝服务攻击变得容易。 这一 TCP 扩展被最近的一个 Internet 草案认为是有缺陷的。

已经将 KAME IPv4 IPsec 实现集成到了 FreeBSD 中， 现在它支持 TCP-MD5 了。 [已合并]

短期使用端口的随机分配导致了在高连接速率时的端口重用问题。 这一功能现在在短期内发生大量连接， 即新端口的创建速率快于每秒 `net.inet.ip.portrange.randomcps` 时， 会被自动停用 `net.inet.ip.portrange.randomtime` 秒。 这两个 sysctl 变量的默认值， 分别是 `10` 和 `45`。 [已合并]

在 IPX/SPX 协议栈的许多数据结构上应用了细化的锁。 尽管目前还不是完全的 MPSAFE， 基本上已经可以安全地在不用全局锁时使用 IPX/SPX 了 (换言之， 完全可以将 `debug.mpsafenet` sysctl 变量设置为 `1`)。

Unix domain socket 现在提供了新增的 `LOCAL_CREDS` 和 `LOCAL_CONNWAIT` 选项。 其中， `LOCAL_CREDS` 选项提供了一种机制， 使得接收方能够以 recvmsg(2) 控制消息的形式， 收到发送者的进程凭据。 而 `LOCAL_CONNWAIT` 则将让 connect(2) 函数阻塞， 直到在监听 socket 上执行了 accept(2) 为止。 欲了解进一步的情况， 请参见 unix(4) 联机手册。

#### 2.2.4 磁盘及存储

amr(4) 现在可以安全地在使用了 pae(4) 的系统上使用了。 [已合并]

加入了 arcmsr(4) 驱动。 它用于支持 Areca ARC-11`xx` 和 ARC-12`xx` 系列的 SATA RAID 控制器。 [已合并]

对 ata(4) 驱动族进行了全面翻新。 它被拆分为模块， 并可以分别加载和卸载了 (`atapci` 和 `ata` 这两个模块是加载子驱动， 即 `atadisk`、 `atapicd`、 `atapifd`、 `atapist`， 以及 `ataraid` 的前提条件)。 在支持的 SATA 控制器上， 能够热插拔设备了。 对 ATA RAID 支持进行了重写， 新版本支持了一系列新的元数据格式。 而 `atapicd` 驱动则不再支持 CD 换盘装置。 这一更新也被称作 “ATA mkIII”。

加入了 SHSEC GEOM 类。 它提供了在多个 GEOM 提供者之间实现秘密分享的能力。 所有提供者必须都存在， 才能够解开保存的秘密信息。 这一特性可以通过 gshsec(8) 工具来控制。 [已合并]

加入了新的基于 GEOM 的磁盘加密机制， GEOM_ELI。 它利用了 crypto(9) 框架提供的硬件加速， 并支持多种不同的加密算法。 请参见 geli(8) 以了解具体的细节。 [已合并]

加入了用于支持 HighPoint RocketRAID 182x 系列硬件的 hptmv(4) 驱动。 [已合并]

经过改进的 ips(4) 驱动在较新的 ServeRAID 型号上， 能够支持内核崩溃的转储操作了。 [已合并]

删去了 matcd(4) 驱动。 [已合并]

在 `GENERIC` 内核中， 默认的 SCSI 引导时探测延时， 从十五秒减少到了五秒。

删去了旧的 vinum(4) 子系统， 新的基于 geom(4) 的版本提供了更好的功能。

twa(4) 驱动更新到了来自 3ware 网站的 9.2 版 (用于 FreeBSD 5.2.1)

关于新挂接的 cd9660 文件系统的信息 (例如， 存在 RockRidge 扩展) 现在只有在内核以详细 (verbose) 模式启动时才会显示了。 这一修改主要是减少 (一般来说不必要的) 内核日志消息的数量。 [已合并]

#### 2.2.5 文件系统

原先在挂接时进行的， 重新计算 “脏” 的 (即， 上次停机时没有正常卸下) UFS 和 UFS2 文件系统摘要信息的工作， 现在转由后台 fsck(8) 进行。 这一修改将极大地改善系统崩溃后挂接大文件系统时的速度。 如果希望恢复原先的行为， 则可以通过将 `vfs.ffs.compute_summary_at_mount` sysctl 变量设置为非零值来完成。 [已合并]

修正了由于 NFS 服务器可能导致的一个内核崩溃。 更多细节， 可以在勘误公告 FreeBSD-EN-05:01.nfs. 中找到。 [已合并]

加入了针对 ReiserFS 版本 3 的只读支持。 请参见 mount_reiserfs(8) 以了解细节。

#### 2.2.6 基本系统附带的第三方软件

ACPI-CA 由 20040527 更新到了 20041119。 [已合并]

### 2.3 应用程序变动

加入了用于处理二进制文件补丁的 bsdiff(1) 和 bspatch(1) 工具。

burncd(8) 工具现在能够在光盘定型之后执行命令了 (例如 `eject`)。

chflags(1) 工具新增了 `-h` 选项， 用以改变符号连接本身的标记。

env(1) 工具增加了 `-v` 选项， 表示在执行之前把命令本身写到标准错误输出上。

env(1) 程序新增了 `-S `string`` 选项用以分割 `string` 并将它们作为命令的命令行参数。

env(1) 程序新增了 `-P `altpath`` 选项， 用以设置命令的搜索路径。

ftpd(8) 程序现在能够正确地为目录和文件的状态使用 `212` 和 `213` 状态代码了 (过去的版本， 曾经长期使用 `211`)。 这一行为在 RFC 959 中进行了描述。 [已合并]

gpt(8) 的 `create` 命令， 新增了 `-f` 命令行标志， 用以在原先已经存在了 MBR 记录的磁盘上强制创建 GPT。 [已合并]

如果指定了 `AF_UNSPEC`， 现在的 getaddrinfo(3) 函数会在查询 `AAAA` 记录之前， 首先查询 `A` DNS 资源记录。 一些有问题的 DNS 服务器会在 `AAAA` 记录不存在时返回 `NXDOMAIN`， 而根据标准， 它应该返回 `NOERROR` 和一条空记录。 这类服务器会在 IPv4/IPv6 双栈节点上导致查询停止， 因为对于 `AAAA` 的查询时返回的 `NXDOMAIN` 会导致服务器停止解析 `A` 记录的尝试。 另外， 这一行为也被视为一种潜在的拒绝服务攻击 (参见 http://www.kb.cert.org/vuls/id/714121 以了解更多细节)。 请注意， 虽然改变了查询顺序， 返回的结果仍然是 `AF_INET6` 记录先于 `AF_INET` 记录。 [已合并]

gethostbyname(3), gethostbyname2(3), 以及 gethostbyaddr(3) 函数现在是线程安全的了。 [已合并]

getnetent(3), getnetbyname(3), 以及 getnetbyaddr(3) 函数现在是线程安全的了。 [已合并]

getprotoent(3)， getprotobyname(3)， 以及 getprotobynumber(3) 函数现在是线程安全的了。 [已合并]

getservent(3)， getservbyname(3)， 以及 getservbyport(3) 函数现在是线程安全的了。 [已合并]

为遵循 IEEE Std 1003.1-2001 标准 (也称作 POSIX 2001)， `struct netent` 结构的 `n_net` 成员， 以及 getnetbyaddr(3) 的第一个参数的类型， 被改为了 `uint32_t`。 由于这些修改， 在 64-位 平台上的 ABI 与 FreeBSD 先前的版本不再兼容， 而 `libpcap` 共享库的主版本号也随之增加。 在 64-位 平台上， 如果从较早版本的 FreeBSD 升级， 则所有使用 getnetbyaddr(3), getnetbyname(3), getnetent(3), 以及 `libpcap` 的程序都必须重新编译。

gvinum(8) 工具现在支持 `checkparity`、 `rebuildparity`， 以及 `setstate` 这三个子命令了。 [已合并]

对 ifconfig(8) 工具进行了重构。 现在其模块化更为清晰， 并且在处理某些网络接口专有的功能时更为灵活。 对 802.11 支持进行了更新， 以便支持最近对于 802.11 子系统和驱动程序所进行的改进。

ifconfig(8) 工具新增了 `-tunnel` 参数， 它实际上等价于 `deletetunnel`， 以简化操作并方便输入。

ifconfig(8) 的 `-vlandev` 参数， 不再要求必须附带网络接口的名字的参数了。 为了保持向下兼容， 原有的参数仍然保留， 但不再鼓励使用。

对于相当数量的 ipfw(8) 选项的简写形式的支持， 不再推荐使用。 如果使用了这些简写， 则会在 stderr 输出警告， 以及对应的、 正确的全称形式。

kldstat(8) 工具提供了用以返回指定内核模块状态的 `-m` 选项。 [已合并]

磁盘上的 `LC_CTYPE` 文件格式， 现在已经改为机器无关的格式了。

libkvm 现在能够支持 amd64 以及 i386 平台上的 ELF 崩溃内核转存， 以及 32-位平台上的大型崩溃内核转存 (超过 4GB) 和 i386 平台上的 PAE 崩溃内核转存格式了。

mixer(8) 工具新增了 `-S` 参数。 它的功能和 `-s` 一样， 但并不输出混音字段间隔符。

修正了 `libalias` 函数库中的一处问题， 该问题可能导致使用 natd(8) 的 `-reverse` 选项时出现 core dump。

`libarchive` 库 (以及使用它的 tar(1) 命令) 现在能够读取 ISO 镜像文件 (包括可选的 RockRidge 扩展) 和 ZIP 压缩文件 (采用 `deflate` 和 `none` 的压缩) 了。 [已合并]

`libarchive` 库现在能够支持处理包含压缩容量超过 4GB 的 ZIP 文件项 (ZIP64 扩展) 和 Unix 扩展了。

加入了用于访问 GPIB 设备 (通过使用 pcii 驱动程序) 的 `ib`foo`` API 的 `libgpib` 库。 [已合并]

增加了在 `libpthread`、 `libthr`， 以及 `libc_r` 的堆栈大小。 在 32-位 的平台上， 主线程的默认堆栈尺寸为 2MB， 而其他线程的默认堆栈尺寸， 则是 1MB。 在 64-位平台上， 默认的堆栈大小相应的是 4MB 和 2MB。 [已合并]

删去了 `libxpg4` 库， 因为很久以前它的功能就已经被并入了 `libc`。 所有连接了 `libxpg4` 的二进制执行文件， 都必须重新编译， 或者使用 libmap.conf(5)。 请注意， 在 FreeBSD 基本系统中没有这样的程序。

lpd(8) 程序现在会进行检查， 以确保在打印来自其他主机的数据文件时， 在开始打印之前已经传送完成。 某些 lpr(1) 实现， 会在发送对应的数据文件之前发送控制文件， 在繁忙的打印服务器上， 这可能会造成问题。 [已合并]

为 math(3) 函数库实现了一系列新的函数。 其中包括 ceill(3)、 floorl(3)、 ilogbl(3)、 fma(3) 及其变体， lrint(3) 及其变体， 以及 lround(3) 及其变体。 [已合并]

不再推荐使用 mknod(8) 工具。 设备节点从 FreeBSD 5.0 开始， 由 devfs(5) 设备文件系统自动管理。

加入了用于为 `GEOM_UZIP` geom(4) 模块提供压缩的文件系统的 mkuzip(8) 工具。 [已合并]

现在 moused(8) 服务能够支持 “虚拟滚轮” 了， 这一模式下， 按住鼠标中键时移动鼠标将被解释为滚轮操作。 这一功能可以通过 `-V` 标志来启用。 [已合并]

为 named(8) 加入了属主为 `bind` 用户 (用于创建区域的日志文件) 的用于动态域的隔离目录。 要了解进一步的情况， 请参见示范的 named.conf(5) 中动态域的例子。 [已合并]

现在 ncal(1) 工具提供了一个 `-m` 选项， 用以生成当前年份指定月份的日历。 [已合并]

现在 newfs(8) 提供了一个 `-n` 标志， 来禁止在新文件系统上创建 `.snap` 目录。 这一特性主要是为那些不需要快照支持的文件系统， 如内存或 vnode 文件系统准备的。 [已合并]

现在 newfs(8) 会在创建 UFS 或 UFS2 文件系统， 而无法在其上产生快照时给出警告。 这一情况会在很大的文件系统使用很小尺寸的块时发生。 [已合并]

newsyslog(8) 工具现在提供了 `-d` 选项， 用于为日志文件指定根目录， 类似于 BSD make 过程中的 `DESTDIR`。 这一变化只影响日志文件的路径， 而不会影响配置文件 (`-f`) 或存档目录 (`-a`) 的路径。

现在 newsyslog(8) 工具能够使用 `-N` 参数， 以禁止对文件的轮转了。

加入了编译用户应用时的 `NO_NIS` 开关。 如其名称所暗示的， 启用这个 `Makefile` 变量将使许多程序中不再包含 NIS 支持， 并不再构建 NIS 工具。 [已合并]

多年以来， FreeBSD 同时使用了 `Makefile` 变量 `NO`FOO`` 和 `NO_`FOO``。 为了一致性， 所有的变量都改为了 `NO_`FOO`` 的形式。 在 `/usr/share/mk/bsd.compat.mk` 文件中， 提供了这些变量的一份完整列表； 此外， 它也提供了对于旧名字的临时性向下兼容支持。

现在 periodic(8) 安全检查输出， 能够支持显示由 pf(4) 所阻止的包的统计数据了。 [已合并]

pgrep(1) 现在提供了 `-S` 选项， 用于匹配系统进程 (内核线程)。

pgrep(1) 和 pkill(1) 现在支持了一个新的 `-F` 选项， 允许在一个包含 PID 的文件所指定的范围内进行匹配。

pgrep(1) 和 pkill(1) 现在支持 `-i` 选项， 在匹配进程时忽略大小写。

pgrep(1) 和 pkill(1) 现在支持 `-j` 选项， 允许按 jail(2) ID 来进行匹配。

pgrep(1) 和 pkill(1) 现在支持 `-o` 选项， 来匹配所有进程中最老的 (最新近启动的) 进程。

加入了用于管理电源功耗的 powerd(8) 程序。

加入了用于下载、 更新， 并释放压缩格式的 FreeBSD ports tree 的 portsnap(8) 工具。

ppp(8) 程序实现了 `echo` 参数， 这使得分别地启用 LCP ECHO 和 LQR 报告成为可能。 较早版本的 ppp(8) 会在协商失败时返回到 LCP ECHO 模式。 现在需要指定 `enable echo` 来获得这一行为。 [已合并]

在 ppp(8) 程序中加入了用于支持 RFC 2865 之前的 RADIUS 服务器的 `disable NAS-IP-Address` 和 `disable NAS-Identifier` 选项。

在 pppd(8) 程序中的两个问题得以修正。 这些错误可能会导致不正确的 CBCP 响应， 而违反了 微软 PPP 回呼控制协议的 3.2 节。 [已合并]

现在 ps(1) 的 `-o` 选项能够支持 `jid` 关键字了。 它用于显示每一个进程的 jail(2) ID。

现在 pstat(8) 提供了 `-h` 选项， 用以在显示交换区尺寸时显示 SI 后缀， 例如 K、 M， 和 G。

在 `/rescue` 中的 rescue(8) 工具， 现在使用 bsdtar(1) 代替了 GNU tar。

restore(8) 工具又能够处理 FreeBSD 版本 1 的转储磁带了。 [已合并]

修正了一个导致 rexecd(8) 工具总是以 `-i` 参数运行的问题。 [已合并]

删去了 rexecd(8) 工具。 在 FreeBSD 源代码中已经没有 rexec 的客户程序， 而客户函数 rexec(3) 也只存在于 `libcompat` 中。

现在 rm(1) 工具提供了一个 `-I` 选项。 如果选择递归地删除目录， 或者在命令行上指定一次删除超过 3 个文件， 这个选项会提供一次确认的机会。 [已合并]

现在 rm(1) 会在使用 `-r` 和 `-f` 递归地删除非空目录时， 屏蔽掉诊断信息。 这一行为是单一 UNIX 标准第 3 版 (SUSv3) 所要求的。

加入了用于检查字符串是否是当前 locale 的编码的 rpmatch(3) 库函数。

下列 ISO/IEC 9899:1999 标准函数得以实现： `roundl()`、 `lroundl()`、 `llroundl()`、 `truncl()`， 以及 `floorl()`。

rtld(1) 动态连接器现在支持通过 `LD_LIBMAP` 环境变量来指定库映射关系了。 这一选项能够覆盖 libmap.conf(5) 的设置。 [已合并]

删去了非标准的多字节和宽字符支持 rune(3) 接口。

sed(1) 现在支持使用 `-l` 选项， 来启用输出的行缓冲。 [已合并]

strftime(3) 现在对某些 GNU 扩展， 例如 `-` (不填充)， `_` (使用空格填充)， 以及 `0` (使用零来填充)， 提供了支持。 [已合并]

syslog(3) 函数现在是线程安全的了。 [已合并]

syslogd(8) 工具现在会打开一个额外的域 socket (默认为 `/var/run/logpriv`)， 其权限是 `0600`， 作为和特权程序的接口。 者避免了发生本地的拒绝服务攻击时， 特权程序由于域 socket 的缓冲区耗尽而死锁。 [已合并]

syslogd(8) 新增了 `-S` 选项， 用以改变特权 socket 的路径名。 如果您不希望服务接受来自本地 socket 的消息 (默认使用的是 `/var/run/log` 和 `/var/run/logpriv`) 时， 这个选项就很有用了。 [已合并]

syslogd(8) 工具现在允许在主机名标识符中使用 `:` 和 `%` 这两个字符了。 这些字符被 IPv6 地址和 scope ID 使用。 [已合并]

现在 systat(1) `-netstat` 的显示也包括了 IPv6 的数据。 [已合并]

tail(1) 的 `-f` 选项能够支持同时查看多个文件了。 [已合并]

telnet(1) 和 telnetd(8) 程序， 现在支持通过 `-S` 来指定数字化的 TOS 字节了。

在为 telnet(1) 指定端口号时使用 `+` 字符， 现在可以关闭选项协商， 并允许发出置了高位的字符了。 这一特性能够帮助利用 telnet(1) 作为协议测试工具来使用。

增加了用于关闭选定的 TCP 连接的 tcpdrop(8) 命令。 它来自 OpenBSD. [已合并]

what(1) 新增了 `-q` 选项， 其功能是， 显示匹配的文字， 但不对文字的格式进行处理。

whois(1) 现在支持 `-k` 标志， 用以查询 `whois.krnic.net` (韩国国家 Internet 开发局)， 它提供了在韩国境内的 IP 地址分配的详细资料。 [已合并]

修改了 xargs(1) 命令的 `-I` 选项， 以顺应 IEEE Std 1003.1-2004。 这一标准要求创建的参数不能超过 255 字节。

修正了一个导致类似 hosts(5)， services(5) 等配置文件在结尾处不是一个新的换行符时被忽略的问题。 [已合并]

加入了新的系统用户/组 `_dhcp` 用于支持来自 OpenBSD 的 dhclient(8)。

#### 2.3.1 `/etc/rc.d` 脚本

加入了用于启动 bsnmpd(1) 的启动脚本， `rc.d/bsnmpd`。

现在 `rc.d/jail` 启动脚本能够支持通过 `jail_`name`_flags` 变量来指定 jail(8) 参数了。 [已合并]

rc.conf(5) 现在支持在引导时修改网络接口的名字了。 [已合并] 例如：

    ifconfig_fxp0_name="net0"
    ifconfig_net0="inet 10.0.0.1/16"

如果将设备名作为脚本的第二个参数， `rc.d/moused` 脚本现在会 start/stop/check 某一特定的设备：

    # /etc/rc.d/moused start ums0

要在不同的鼠标上使用不同的 rc.conf(5) 开关， 只需把它们作为开关的一部分。 例如， 对于 `/dev/ums0` 可以使用：

    moused_ums0_enable=yes
    moused_ums0_flags="-z 4"
    moused_ums0_port="/dev/ums0"

rc.conf(5) 现在支持 `tmpmfs_flags` 和 `varmfs_flags` 两个变量了。 这些变量， 可以用来向 mdmfs(8) 工具提供额外的选项， 从而更好地定制 md(4) 文件系统的创建过程， 包括是否打开 softupdates， 指定文件系统的默认属主， 等等。 [已合并]

由于下列脚本是 NetBSD 专用的， 而且从未在 FreeBSD 中用到， 因此全部删去： `altqd`, `dhcpd`, `dhcrelay`, `downinterfaces`, `gated`, `ifwatchd`, `kdc`, `lkm1`, `lkm2`, `lkm3`, `mixerctl`, `mopd`, `mountall`, `ndbootd`, `network`, `poffd`, `postfix`, `ppp`, `racoon`, `raidframe`, `rbootd`, `rtsold`, `screenblank`, `swap2`, `sysdb`, `wscons`, `xdm`, 以及 `xfs`

### 2.4 基本系统包含的第三方软件

awk 从 2004 年 2 月 7 日的版本， 升级到了 2005 年 4 月 24 日的版本。

BIND 从 9.3.0 升级到了 9.3.1。 [已合并]

bsnmp 从 1.7 升级到了 1.10。

bzip2 从 1.0.2 升级到了 1.0.3。

导入了 OpenBSD 3.7 的 OpenBSD dhclient。 它取代了先前的 FreeBSD 版本中的 ISC DHCP 客户端。

FILE 从 4.10 升级到了 4.12。

GNU GCC 从 2004 年 6 月 28 日的 3.4.2-prerelease 版本升级到了 3.4.4。

从 Fedora 的 grep-2.5.1-48 源代码 RPM 中获得的一系列错误修正和性能改进， 业已加入到 GNU grep 中。

GNU readline 从 4.3 升级到了 5.0。

IPFilter 从 3.4.35 升级到了 4.1.18。

Heimdal 从 0.6.1 升级到了 0.6.3。 [已合并]

导入了 hostapd v0.3.9。 这是一个以用户态运行的 IEEE 802.11 AP 和 IEEE 802.1X/WPA/WPA2/EAP 验证服务和 RADIUS 验证服务期。 要了解更多细节， 请参见 hostapd(8)。

libpcap 从 v0.8.3 升级到了 v0.9.1 (alpha 096)。

libregex 从来自 GNU grep 2.5.1 的快照， 更新为 glibc CVS 代码库中的 `fedora-glibc-2_3_4-21` tag 的版本。

libz 从 1.2.1 升级到了 1.2.2。

lukemftp 从来自 NetBSD 源代码在 2004 年 4 月 26 日的快照， 升级到了 2005 年 5 月 16 日的快照。

引入了来自 OpenBSD 的 2005 年 2 月 4 日快照的 netcat。 更多信息， 可以在 nc(1) 联机手册中找到。 [已合并]

NgATM 从 1.0 升级到了 1.2。

OpenPAM 从 Eelgrass 版升级到了 Figwort 版。

OpenSSH 从 3.8p1 升级到了 4.1p1。

OpenSSL 从 0.9.7d 升级到了 0.9.7e。 [已合并]

pf， 从之前 OpenBSD 3.5 所包含的版本， 升级到了 OpenBSD 3.7 中的版本。

sendmail 从 8.13.1 升级到了 version 8.13.4。 它现在支持 `OSTYPE(freebsd6)` 了。

tcpdump 从 v3.8.3 升级到了 v3.9.1 (alpha 096)。

tcsh 从 6.13.00 升级到了 6.14.00。

texinfo 从 4.6 升级到了 4.8。

时区数据库从 tzdata2004e 版升级到了 tzdata2004g 版。 [已合并]

加入了 WPA Supplicant v0.3.9。 它提供了 WPA/IEEE 802.11i 功能的 WPA 请求组件。 要了解进一步的详情， 请参考 wpa_supplicant(8)。

### 2.5 Ports/Packages Collection 基础结构

pkg_create(1) 新增了 `-R` 参数。 当从本地安装的预编译包进行打包时， 它会对该包依赖的所有其他包进行打包操作。

pkg_version(1) 工具提供了一个新的 `-q` 选项， 来屏蔽掉 port 版本比较算符 `<`、 `=` 和 `>` 的输出。

pkg_version(1) 工具提供了新的 `-I` 选项， 用于指定只使用 `INDEX` 文件来判断包是否已经过时。 [已合并]

从 CVS 库中删去了用于保存 Ports Collection 中所有项的 `ports/INDEX`*``。 [已合并] 这些文件过去并不经常性地重新生成， 因此可能会过时和不再准确。 需要使用 INDEX 文件的用户 (例如用于 portupgrade(1)) 可以使用两种方法来获取一份副本：

- 使用 `make index` 在 `ports/` tree 的顶部构建一份当前 ports tree 的索引。

- 在 `ports/` tree 顶部执行 `make fetchindex` 来从网上下载。 这个索引文件 (通常) 在一天之内是准确的。

### 2.6 发行版建造工程和功能集成

在先前的 FreeBSD 版本中， `disc1` CD-ROM (或 ISO 镜像文件) 是一张包含基本系统、 ports tree 和常用 package 的可以引导的光盘。 而 `disc2` CD-ROM (或 ISO 镜像文件) 则是可以引导的 “fix it” 盘， 它提供了现场 (live) 文件系统， 用于进行紧急修复操作。 这一格局发生了变化。 对于除了 ia64 以外的所有平台， 现在 `disc1` 包含了基本系统的安装包文件、 ports tree， 以及现场文件系统， 使得它适合于初始安装， 以及修复工作。 (在 ia64 上， 由于现场文件系统的尺寸太大， 以至于不得不将其放到另一张盘上。) 第三方 package 都在另一张盘上； 特别地， 在 `disc2` 上提供了常用的第三方软件包， 例如桌面环境等。 来自 FreeBSD Documentation Project 的文档， 也都在 `disc2` 上。 [已合并]

支持的 GNOME 桌面环境的版本， 由 2.6.2 升级到了 2.10.2。 更多关于在 FreeBSD 上运行 GNOME 的详细资料， 可以在 the FreeBSD GNOME Project Web 页面上找到。 [已合并]

> 注意: 使用较早版本的 GNOME 桌面 (`x11/gnome2`) 的用户在升级时需要特别小心。 简单地使用 portupgrade(1) (`sysutils/portupgrade`) 配合 FreeBSD Ports Collection 进行升级可能会造成严重的问题。 GNOME 桌面的用户， 应仔细阅读 ../../../../gnome/docs/faq210.html 给出的说明， 并使用 `gnome_upgrade.sh` 脚本来正确地升级到 GNOME 2.10。

支持的 KDE 桌面环境的版本， 从 3.3.0 升级到了 3.4.2。 更多关于在 FreeBSD 上运行 KDE 的信息， 可以在 FreeBSD 上的 KDE Web 页面上找到。 [已合并]

> 注意: 使用较早版本的 KDE 的用户， 应使用 FreeBSD 上的 KDE Web 页面或 `ports/UPDATING` 中给出的方法升级。

支持的 Xorg 从 6.7.0 升级到了 6.8.2。 [已合并]

### 2.7 文档

通过新增一系列联机手册改善了对系统现有功能的文档介绍： acpi_ibm(4), acpi_sony(4), ataraid(4), bus_space(9), central(4), clkbrd(4), creator(4), devfs.conf(5), devfs.rules(5), ebus(4), eeprom(4), fhc(4), machfb(4), ofw_console(4), openfirm(4), openprom(4), pmap_page_init(9), pthread_atfork(3), rtc(4), sbus(4), sched_4bsd(4), sched_ule(4), snd_fm801(4), snd_neomagic(4), snd_t4dwave(4), snd_via8233(4), snd_via82c686(4), 以及 snd_vibes(4)。

对于基本系统的联机手册中的内容和表达方式进行了大量的整理。 交叉引用更加准确和一致， 标准小节的标题贯穿始终， 而使用的符号也进行了清理。

以下联机手册， 由于是派生于 RFC， 并有可能触犯了 IETF 的版权， 被完全替换： gai_strerror(3), getaddrinfo(3), getnameinfo(3), inet6_opt_init(3), inet6_option_space(3), inet6_rth_space(3), inet6_rthdr_space(3), icmp6(4), 和 ip6(4)。 [已合并]

## 3 从先前版本的 FreeBSD 升级

通过源代码升级到 FreeBSD 6.0-RELEASE， 则应使用 FreeBSD 5.3-RELEASE 或更高版本。 使用旧版的系统的用户， 如果想要升级到 6.0-RELEASE， 则需要首先升级到 FreeBSD 5.3 或更新的版本， 然后再升级到 FreeBSD 6.0-RELEASE。

> 重要: 很显然，升级 FreeBSD 时，应该首先备份 所有 数据和配置文件。

这份文档，以及其他与FreeBSD发行版本有关的文档，都可以在 ftp://ftp.FreeBSD.org/下载。

在遇到关于FreeBSD的技术问题时，请首先阅读 文档 之后再考虑联系 <questions@FreeBSD.org>。

所有 FreeBSD 6-STABLE 的用户都应该订阅 <stable@FreeBSD.org> 邮件列表。

关于这份文档的任何问题，请致信 <doc@FreeBSD.org>。