# FreeBSD 7.0-RELEASE 发行说明

### The FreeBSD Project

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

$FreeBSD: src/release/doc/zh_CN.GB2312/relnotes/article.sgml,v 1.1.2.2.2.3 2008/02/17 01:16:40 delphij Exp $

FreeBSD 是 FreeBSD基金会的注册商标

IBM、 AIX、 EtherJet、 Netfinity、 OS/2、 PowerPC、 PS/2、 S/390 以及 ThinkPad 是国际商用机器公司在美国和其他国家的注册商标或商标。

IEEE, POSIX, 和 802 是 Institute of Electrical and Electronics Engineers, Inc. 在美国的注册商标。

Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, 和 Xeon 是 Intel Corporation 及其分支机构在美国和其他国家的商标或注册商标。

Sparc, Sparc64, SPARCEngine, 以及 UltraSPARC 是 SPARC International, Inc 在美国和其他国家的商标。 包含 SPARC 商标的产品基于 Sun Microsystems, Inc. 开发的架构。

许多制造商和经销商使用一些称为商标的图案或文字设计来彰显自己的产品。 本文档中出现的， 为 FreeBSD Project 所知晓的商标，后面将以 '™' 或 '®' 符号来标注。

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

## 1 简介

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

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

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

## 2 最新变动

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

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

### 2.1 安全公告

修正了 2 个 BIND 远程拒绝服务的问题 （一个关于 DNSSEC 一个关于 DNS 递归查询）。 要了解进一步详情， 请参阅安全公告 FreeBSD-SA-07:02.bind. [已合并]

现在可以通过设置 `net.inet6.ip6.rthdr0_allowed` sysctl 变量来控制 IPv6 类型 0 路由头的处理。 默认值为`0` (off)。 要了解进一步详情， 请参阅安全公告 FreeBSD-SA-07:03.ipv6. [已合并]

修正了 file(1) 工具 （和其依赖的 libmagic(3) 库） 一个潜在的堆溢出问题。 要了解进一步详情， 请参阅安全公告 FreeBSD-SA-07:04.file. [已合并]

修正了 libarchive(3) 和 tar(1) 处理损坏的 tar(5) 归档文件的错误。 要了解进一步详情， 请参阅安全公告 FreeBSD-SA-07:05.libarchive. [已合并]

修正了 tcpdump(1) 中缓冲区溢出的问题。 要了解进一步详情， 请参阅安全公告 FreeBSD-SA-07:06.tcpdump. [已合并]

修正了一个 named(8) 中的错误， 这个错误会导致攻击者能够破坏解析器的 DNS 缓存。 要了解进一步详情， 请参阅安全公告 FreeBSD-SA-07:07.bind. [已合并]

修正了一个 OpenSSL 中缓冲区溢出的问题 (由前一个安全补丁的错误修改造成)。 要进一步了解详情， 请参阅安全公告 FreeBSD-SA-07:08.openssl. [已合并]

修正了一个 random(4) 可能泄漏前一次生成数据的缺陷。 要进一步了解详情， 请参阅安全公告 FreeBSD-SA-07:09.random. [已合并]

修正了 openpty(3) 和 ptsname(3) 中发现的信息泄露问题。 要进一步了解详情， 请参阅安全公告 FreeBSD-SA-08:01.pty. [已合并]

修正了 inet_network(3) Internet 地址管理函数中的一处可能导致覆盖用户定义的数据区内存内容的问题。 要进一步了解详情， 请参阅安全公告 FreeBSD-SA-08:02.libc. [已合并]

修正了可能导致 sendfile(2) 越权访问文件内容的问题。 要进一步了解详情， 请参阅安全公告 FreeBSD-SA-08:03.sendfile. [已合并]

### 2.2 对内核的改动

acpi(4) 提供了对 HPET 时钟计数器的基本支持。[已合并]

acpi_ibm(4) 驱动提供了将风扇配置为手动或自动控制， 以及在手动控制模式下调节风扇转速的能力。 要启用对风扇转速的手动控制， 需要将 sysctl 变量 `dev.acpi_ibm.`0`.fan` 设置为零 (手动)。 这样做时必须非常小心，因为禁用自动风扇控制， 可能会使硬件过热， 从而导致永久性的损坏。

改进了 apm(4) 挂起/唤醒 支持。

cpufreq(4) CPU 频率控制框架现已在 `GENERIC` 默认内核中启用。

对 Camellia 块密码的支持已被加入到 FreeBSD 内核。 它能被指定为 ipsec(4) 和 geli(8) 的块算法。 更多关于 Camellia 的信息能够在 RFC 4132 中找到。

由于已经不再需要， 内核配置选项 `options COMPAT_43` 已经从 `GENERIC` 及相关配置文件中删除。 这一变动可以为某些程序带来微小的性能提升。

哑终端驱动 ( dcons(4)) 在 `GENERIC` 内核默认启用。

ddb(4) 调试器新增了 `show sleepq` 命令。 这个命令需要指定一个等待通道作为其参数， 起作用是显示与那一等待通道关联的休眠队列。

修正了文件描述符处理中的一个会导致在某些情况下按 `close(0); dup(fd)` 顺序执行时不返回描述符 `0` 的 bug。

gdb(1) 远程调试接口提供了对于将控制台信息复制到远程调试器实例的能力。 要启用这一特性， 需要在 `loader.conf` 中配置 `debug.gdbcons="1"`， 并在加载器提示符出现时输入 `boot -d; gdb; step`， 再从远程机器挂接 gdb(1)。 sysctl 变量 `debug.gdbcons` 可以用来控制这一功能的开关状态。

hwpmc(4) 和 pmcstat(8) 提供了对动态加载的内核模块以及通过 dlopen(3) 加载的动态连接库的性能分析支持。 pmcstat(8) 新增了通过网络 socket 将数据记录到远程主机的能力。

新增一个 sysctl 变量 `kern.hostuuid` 用来保存全局唯一标识符 (UUID)。 此 UUID 是由 `rc.d/hostid` 启动脚本计算生成， 为使其在每次的系统重启后不丢失，它会被保存在磁盘上。

对内核配置选项 `INCLUDE_CONFIG_FILE` 进行了改进。 正在运行的内核的完整配置， 可以通过 `sysctl -b kern.conftxt` 来直接提取了。 此外， 也可以通过 `config -x kernelfile` 从内核文件中提取配置文件。 如果希望保持配置文件中的注释， 可以使用 config(8) 的 `-C` 选项。

对于内核调度实体 (KSE) 的支持变成了内核选项 (过去是内核中的必选功能)。 在除了 sun4v 之外的所有硬件架构的 GENERIC 内核中， 都依然默认启用这一功能 (因而这一变动并不会产生功能上的变化)。

对 Linux ABI 支持进行了增强， 以支持对 Linux 2.6.16 的模拟。 这一功能默认并不启用。 如果希望启用， 则需要通过将 `compat.linux.osrelease` sysctl 变量设置为 `2.6.16`。 请注意， 这一支持目前仍是试验性的。

在内核的 PCI 支持代码中新增了对于 消息信号中断 (MSI) 以及 扩展消息信号中断 (MSI-X) 的支持。 [已合并]

新增了内核接口 priv(9)。 其作用是检查线程及信任状是否拥有某些特权。 与现有的 suser(9) 接口不同， priv(9) 采用符号化的名称来标示特权， 这样就便于表达更复杂一些的特权授予策略了。

FreeBSD 能够支持对同一文件的并发 read(2)/ readv(2) 访问了。

内核的 sx(9) 锁进行了优化， 在多数情况下采用简单的原子操作， 来获得和释放共享及互斥锁。 尽管这一变动一般而言并不是用户可见的， 但它带来了相当可观的性能改善。o

对 ULE 进程调度器进行了修改， 以改进其行为， 特别是在高负载条件下的互操作性应用， 以及针对单处理器和多处理器系统的改良。 这些改进也被称作 “ULE 3.0”。 (ULE 3.0 先前曾被称作 SCHED_SMP， 它基于 ULE 调度器的 2.0 版本。 ULE 2.0 并未在已经发行过的 FreeBSD 发行版 中出现过， 但其开发过程中进行了大量的修改、 测试以及性能评估。)

新增了 `SIGCHLD` 信号队列能力。 对于状态发生变化的子进程， 内核会保持在队列中的一个与之对应的 `SIGCHLD` 实例。 如果没有对信号进行处理， 并且进程对此改变状态， 则信号信息会被更新， 以反映最新的进程状态。 新增的引导加载器选项 `kern.sigqueue.queue_sigchild` 可以控制这一行为， 将其设置为零表示禁用 `SIGCHLD` 队列功能。

新增了 sysctl 变量 `kern.malloc_stats`。 它能够以二进制流化的数据结构形式导出内核 malloc 的统计数据。

新增了 sysctl 变量 `kern.forcesigexit`。 如果设置了这个变量， 并且 trap 信号被当前线程占有， 或被进程忽略， 它会强制执行 sigexit。 这一功能默认启用。

删去了与 syscons(4) 提供类似功能的 pcvt(4) 驱动程序， 因为它已经无法适应内核中其他部分的变化了。

实现了 RedZone， 一种用于内核 malloc(9) 的缓冲区溢出检测机制。 它能够在运行中的 free(9) 和 realloc(9) 时刻检测缓冲区的上溢和下溢， 并显示分配和释放内存的调用栈。 如欲了解进一步的详情， 请参见联机手册 redzone(9)。

新增了引导加载器选项 `vm.kmem_size_min`， 这个选项用于指定 `vm.kmem_size` 的最小值。

新增了 sysctl 变量 `vm.zone_stats`。 它能够以二进制流化的数据结构形式导出 uma(9) 分配器的统计数据。

将 sysctl 变量 `hw.pci.do_powerstate` 分拆成了两个 sysctl 变量 `hw.pci.do_powerstate_nodriver` 和 `hw.pci.do_powerstate_resume`。 另外， 这些变量由布尔值改为了范围值。 `0` 表示不进行任何电源管理， `1` 表示保守电源管理， 即导致过问题的设备类型， 会被加入到监视列表中， `2` 表示激进的电源管理， 表示将对系统不重要的设备都加入到列表中， 而 `3` 则表示将全部设备的电源无条件关闭。 `hw.pci.do_powerstate_nodriver` 的默认值是 `0`， 而 `hw.pci.do_powerstate_resume` 的默认值则是 `1`。

[ia64] 在 `GENERIC` 内核中默认启用了 SMP 支持。

新增了用以示范托管访问控制框架的内核配置文件 `src/sys/`arch`/conf/MAC`。

`POSIX_TIMERS` 支持更新到了 200112L。

新增了对 POSIX 消息队列的试验性支持。

对 UNIX domain socket 的上锁策略进行了修订以改善其并发能力； 这一变动为一些 SMP 计算负载带来了显著的性能提升 (特别是在 8-路 amd64 系统上运行的 MySQL)， 而在 UP 系统上则几乎没有增加其他开销。

为了支持过滤式中断处理方式， 对 Newbus API 进行了一些微小但范围很大的修改。 由于这些改动也会使内核 ABI 发生变化， 因此全部第三方设备驱动程序也需要进行修改并重新编译。

#### 2.2.1 引导加载器变动

新增了用于设置在 `boot2` 中设置串口控制台速率， 并可用于 `/boot.config` 文件及 `boot:` 提示行处的 `-S` 选项。

[amd64, i386] 为引导加载器新增了 firewire(4) 和 dcons(4) 支持。 如果需要启用， 则可在 `/etc/make.conf` 中加入 `LOADER_FIREWIRE_SUPPORT=yes` 并重新联编引导加载器。

[pc98] 在 boot0.5 中对 IPLware 的支持进行了强化， 以支持版本 3.33。

#### 2.2.2 硬件支持

cardbus(4)、 pccard(4)、 pccbb(4) 和 ex(4) 驱动程序可以作为内核模块联编了。

新增了 acpi_dock(4) 驱动程序， 它为通过 ACPI 控制笔记本扩展坞的支持。 [已合并]

acpi_thermal(4) 驱动程序支持自定义 `_PSV`、 `_HOT` 和 `_CRT` 温度值了。

删去了对 alpha 硬件架构的支持。 对于 Alpha 的支持仍会在 RELENG_5 和 RELENG_6 开发线中继续保留。

cardbus(4) 驱动程序支持 `/dev/cardbus`%d`.cis` 了。

[i386, amd64] 新增了 coretemp(4) 驱动程序， 它能够读取 Intel® Core™ 处理器的核心温度读数。 [已合并]

`est` cpufreq(4) 驱动程序支持对 VIA C7-M 系列处理器的频率控制了。

firewire(4) 代码是 MPSAFE 的了。

新增了 icee(4) 驱动程序， 用以支持 I2C EEPROM。

修正了导致无法卸载内核模块 ichsmb(4) 的 bug。

[amd64, i386] 在启用了 SMP 的内核中， 双核处理器 (例如 Intel Core Duo) 的处理核心都可以使用了。 [已合并]

[ia64, powerpc] 引导加载器选项 `debug.mpsafevfs` 默认设为 `1` 了。

删去了 sab(4) 驱动程序 (它已被 scc(4) 驱动程序取代)。

新增了 scc(4) 驱动程序。 这个驱动程序提供了对串口通讯控制器的范型支持， 并将对通道和模式的控制交由具体的驱动程序， 如 uart(4) 处理。

[amd64] smbios(4) 驱动程序新增了对 amd64 的支持。

[sun4v] FreeBSD 现在提供了对于 Sun Microsystems UltraSPARC-T1 架构的初步支持。 FreeBSD/sun4v 已经可以在 Sun Fire T1000 和 Sun Fire T2000 服务器上运行。 关于这一工作的进一步信息， 可以在 sun4v 项目 主页上找到。

新增了 tnt4882(4) 驱动程序， 它支持 National Instruments PCI-GPIB 卡。

[amd64, i386, ia64, sparc64] uart(4) 驱动程序现已加入到默认的 `GENERIC` 内核。 当 sio(4) 和 uart(4) 都能管理同一个串口时， 会优先采用 sio(4)。

新增了 uark(4) 驱动程序， 它支持基于 Arkmicro Technologies ARK3116 的 USB 串口适配器。

uart(4) 驱动新增了对于将 LOM (Lights Out Management) 和 RSC (Remote System Control) 设备作为控制台的支持。

删除了 zs 驱动程序， 它提供的功能已经由 uart(4) 驱动程序取代。

[i386] 新增了引导加载器选项 `hw.apic.enable_extint`。 这个选项可以用于禁止屏蔽第一个 I/O APIC 上的 ExtINT 引脚。 至少有一种用于 Intel Pentium III 的芯片组需要这个选项， 即使所有 8259A 的引脚都被屏蔽也是如此。 默认值依然是屏蔽 ExtINT 引脚。

##### 2.2.2.1 多媒体支持

新增了基于 NetBSD 的新的 midi(4) 驱动程序。 它支持 snd_cmi(4) 和 snd_emu10k1(4) 驱动程序。

snd_cmi(4) 驱动程序是 MPSAFE 的了。

新增了 snd_emu10kx(4) 驱动程序， 它支持 Creative SoundBlaster Live! 和 Audigy 系列声卡， 并提供了可选的伪多声道回放功能。

新增了 snd_envy24(4) 驱动程序， 它支持 Envy24 系列的音效芯片。 [已合并]

新增了 snd_envy24ht(4) 驱动程序， 它支持 VIA Envy24HT 系列的音效芯片。 [已合并]

新增了 snd_hda(4) 驱动程序。 它支持符合 Intel High Definition Audio 1.0 版本规范的设备。 [已合并]

snd_solo(4) 驱动程序是 MPSAFE 的了。 [已合并]

新增了 snd_spicds(4) 驱动程序， 它支持 I2S SPI 音效编码解码芯片。 [已合并]

uaudio(4) 驱动程序新增了对 24/32 位声音格式和转换的支持。

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

ath(4) 驱动程序更新到了 HAL 0.9.20.3 版。 [已合并]

axe(4) 驱动程序支持 altq(4) 了。 [已合并]

bge(4) 驱动程序的 Jumbo frame (巨型帧) 支持是 MPSAFE 的了。

bge(4) 驱动程序新增了对高位在前 (big-endian) 硬件平台， 如 sparc64 的支持。

iwi(4) 驱动程序所需要的固件映像文件， 现在成为了 FreeBSD 基本系统的一部分。 如果想要加载这个固件， 您必须同意位于 `/usr/share/doc/legal/intel_iwi/LICENSE` 的授权许可协议， 并在 `/boot/loader.conf` 中设置 `legal.intel_iwi.license_ack=1`。 这个驱动程序先前的版本， 需要使用由 `net/iwi-firmware-kmod` port/package 或 `net/iwi-firmware` port/package 安装的固件映像文件。

新增了 ixgbe 驱动程序， 它能够支持 Intel 10G (万兆以太网) PCI-Express 适配器 (82598)。

删去了 lnc(4) 驱动程序。 le(4) 和 pcn(4) 驱动程序能够支持过去由 lnc(4) 支持的所有设备。

新增了 msk(4) 驱动程序。 它能够支持使用 Marvell/SysKonnect Yukon II

cm(4) 驱动程序是 MPSAFE 的了。

新增了 cxgb(4) 驱动程序， 它提供了对基于 Chelsio T3 和 T3B 芯片组的 10 Gigabit (万兆) 以太网适配器的支持。 [已合并]

新增了 edsc(4) 驱动程序， 它提供了对 Ethernet discard 网络接口的支持。 [已合并]

由于使用的人太少， 删去了 el(4) 驱动程序。

em(4) 驱动程序更新到了来自 Intel 的 6.7.3 版本。 除了其他修改之外， 这个版本新增了对基于 80003、 82571、 82571EB、 82572 以及 82575 网卡， 以及基于 ICH8 芯片组的板载网卡的支持。 [已合并]

em(4) 驱动程序包含了对挂起和唤醒功能的初步支持。

通过使用快速中断处理程序和 taskqueue 代替 ithread 中断处理程序， 改善了 em(4) 驱动程序的性能。 出于调试目的， 这一变动可以通过定义内核选项 `NO_EM_FASTINTR` 来禁用。

在 `GENERIC` 内核中启用了基于火线的 IP 驱动程序 ( fwip(4))。

gem(4) 驱动程序新增了对 altq(4) 的支持。

ipw(4) 驱动程序所需要的固件映像文件， 现在成为了 FreeBSD 基本系统的一部分。 如果想要加载这个固件， 您必须同意位于 `/usr/share/doc/legal/intel_ipw/LICENSE` 的授权许可协议， 并在 `/boot/loader.conf` 中设置 `legal.intel_ipw.license_ack=1`。 这个驱动程序先前的版本， 需要使用由 `net/ipw-firmware-kmod` port/package 或 `net/ipw-firmware` port/package 安装的固件映像文件。

iwi(4) 驱动程序新增了对高位在前 (big-endian) 硬件平台， 如 sparc64 的支持。

iwi(4) 驱动程序所需要的固件映像文件， 现在成为了 FreeBSD 基本系统的一部分。 如果想要加载这个固件， 您必须同意位于 `/usr/share/doc/legal/intel_iwi/LICENSE` 的授权许可协议， 并在 `/boot/loader.conf` 中设置 `legal.intel_iwi.license_ack=1`。 这个驱动程序先前的版本， 需要使用由 `net/iwi-firmware-kmod` port/package 或 `net/iwi-firmware` port/package 安装的固件映像文件。

新增了 ixgbe 驱动程序， 它能够支持 Intel 10G (万兆以太网) PCI-Express 适配器 (82598)。

删去了 lnc(4) 驱动程序。 le(4) 和 pcn(4) 驱动程序能够支持过去由 lnc(4) 支持的所有设备。

新增了 msk(4) 驱动程序。 它能够支持使用 Marvell/SysKonnect Yukon II 千兆以太网控制器的网卡。 [已合并]

[amd64, i386] 新增了 mxge(4) 驱动程序， 它能够支持 Myricom Myri10GE 10 Gigabit (万兆) 以太网适配器。 如欲了解进一步的详情， 请参阅联机手册 mxge(4)。 [已合并]

[amd64, i386] 新增了来自 OpenBSD 的开放源代码的 nForce 以太网设备驱动程序 nfe(4)。 在 `GENERIC` 内核中， 这个驱动程序取代了原先使用的 nve(4) 驱动程序。

[arm] 新增了 npe(4) 驱动程序， 它能够支持 Intel XScale 网络处理引擎。 [已合并]

新增了 nxge(4) 驱动程序， 它能够支持 Neterion Xframe 10 Gigabit (万兆) 以太网适配器。

re(4) 驱动程序新增了对 D-Link DGE-528(T) 千兆以太网卡的支持。

新增了 rum(4) 驱动程序。 它能够支持基于 Ralink RT2501USB 和 RT2601USB 芯片组的 WLAN 适配器。

ti(4) 驱动程序新增了对高位在前 (big-endian) 硬件平台， 如 sparc64 的支持。

新增了用于 FOMA (由日本 NTT DoCoMo, Inc. 设计的第三代移动电话系统) 的 ufoma(4) 驱动程序。 它能够支持基于日本 MCPC (移动计算推进委员会) 颁布的 USB 实现指导说明书所设计的第三代移动电话。

新增了 vgapci(4) 驱动程序。 这是一个用于 VGA PCI 设备的框架驱动程序， 以总线驱动的形式提供服务， 这样， 类似 drm(4)、 acpi_video(4)， 以及 agp(4) 这些驱动程序就可以与其配合工作， 使得在同一个设备上使用多个驱动程序成为可能。

vge(4) 驱动新增了对 altq(4) 的支持。 [已合并]

wi(4) 驱动程序可以以内核模块的形式联编了。

[amd64, i386, pc98] 在默认的 `GENERIC` 中加入了 wlan_wep(4)、 wlan_ccmp(4) 和 wlan_tkip(4) 驱动程序。

[amd64, i386] 新增了 wpi(4) 驱动程序， 它提供了对 Intel 3945 无线 LAN 控制器的支持。

[amd64, i386] 新增了 zyd(4) 驱动程序。 它提供了对 ZyDAS ZD1211/ZD1211B USB IEEE 802.11 b/g 无线网络设备的支持。

从 OpenBSD 引入了网络接口组功能。 举例说来， 这个功能允许管理员在一组网络接口上应用防火墙规则。 更多信息， 请参阅联机手册 ifconfig(8)。

对 802.11 协议栈进行了大幅度的改写。 重要的新增功能， 包括支持后台扫描、 在多个 AP 之间漫游， 以及对拥有 802.11n 能力的设备所需要的支持基础。

802.11 协议栈新增了对于 900 MHz 无线网卡， 以及对 802.11a 四分和对分频道的支持。 [已合并]

FreeBSD 网络协议栈现在在运行时已经完全没有内核全局锁 Giant， 并完全使用内核的细粒度锁原语来管理并发了。 这显著地改善了在多处理器系统上的网络协议栈性能； 即使是在单处理器的系统中， 也可以看到性能的提升。 ISDN4BSD 和 netatm 目前已临时从联编过程中摘除。 这些模块在运行时仍然需要全局锁， 而摘除了这两个模块， 使得删除 NET_NEEDS_GIANT 兼容代码。 我们计划将这些模块转换为使用细粒度的内核上锁方式， 并在 FreeBSD 7.1-RELEASE 时重新连入联编过程。

#### 2.2.3 网络协议

[amd64, i386, pc98] 为 bpf(4) 和 ng_bpf(4) 实现了试验性的 BPF 即时编译器。 如果希望启用这个功能， 需要使用内核选项 `options BPF_JITTER`。 使用 `net.bpf_jitter.enable` 可以禁用这个功能。

bpf(4) 设备新增了一系列新的 ioctl(2) 调用， 用于检查输入和输出的数据包， 以及发到网络上的数据包。

在系统中删去了 bridge(4) 驱动程序。 它的功能已经由 if_bridge(4) 完全取代了。

用于支持 RFC 1701 和 RFC 1702 中介绍的 GRE 封装的 gre(4) 驱动程序能够支持 GRE 上的 IPv6 了。

if_bridge(4) 驱动程序新增了对 RSTP， 即快速生成树协议 (802.1w) 的支持。 [已合并]

if_bridge(4) 驱动程序在桥接端口上新增了 `private` 标志； 网桥上的非 private 端口可以与任何其他非 private 端口通讯。 这个功能对于在服务器网路中使用多个客户 VLAN 的场景比较有用； 此外， 它也可以用来阻止客户 VLAN 之间互相访问， 但又同时允许它们访问服务器网络。 网桥端口上的 private 标志可以通过 ifconfig(8) 来设置或清除。

删去了原先硬编码的 IPv4 多播组成员限制 (先前的值是 20)。

IPv6 多播转发现在可以通过内核模块 `ip_mroute.ko` 来动态载入了。

ipfw(4) 包过滤器支持针对 Routing Header Type 0 和 Mobile IPv6 Routing Header Type 2 以及对于 Routing Header 的不做区分的过滤了。

删去了 ip6fw(8) 包过滤器。 由于 ipfw(4) 已经能够支持 IPv6， 因此应使用它来代替。 请注意某些规则可能需要进行少量调整。

删去了 KAME 的 IPsec 实现。 作为替代， `FAST_IPSEC` 成为了 FreeBSD 内核支持的唯一一个 IPsec 实现。 过去曾用来表示 KAME IPsec 的内核选项 `IPSEC` 现在用于启用 `FAST_IPSEC`。 `FAST_IPSEC` 提供了对 IPv4 和 IPv6 的支持， 使用了细粒度的内核上锁， 并支持基于硬件的加密加速。

删去了对 IP 上的 IPX 隧道支持。

新增了从 OpenBSD 和 NetBSD 移植的 lagg(4) 驱动程序， 它支持一系列链路聚合、 故障转移和容错协议及算法。 [已合并]

原生模式 ATM 协议层 natm(4) 是 MPSAFE 的了。

新增了 ng_car(4) Netgraph 节点类型， 实现了若干种流量整形和速率限制算法。

新增了 ng_deflate(4) Netgraph 节点类型， 实现了 Deflate PPP 压缩。 [已合并]

ng_h4(4) Netgraph 节点是 MPSAFE 的了。 [已合并]

ng_ppp(4) Netgraph 节点是 MPSAFE 的了。 [已合并]

新增了 ng_pred1(4) Netgraph 节点类型， 实现了 Predictor-1 PPP 压缩。 [已合并]

TCP 传输方式的 NFS 默认重传计时器变改为了 60 秒。 这个变动能够防止不必要地重传非幂等的 NFS 请求。 此外， rc.conf(5) 中的 `nfs_access_cache` 变量的默认值也改为了 60。

nfsiod 内核线程的默认数量 ( sysctl(8) 变量 `vfs.nfs.iodmin`) 由原先的 4 调整为 0。

新增了 sysctl 变量 `net.inet.icmp.reply_from_interface`。 这表示让 icmp(4) 以数据包进入的网络接口上的 IP 地址来回应非本地数据包。 对于路由器而言， 这可以让 traceroute(8) 显示出包实际经过的路径， 而不是可能出现的另一条路。

新增了 sysctl 变量 `net.inet.icmp.quotelen`。 它可以调节 ICMP 回应中引用的原数据包长度。 系统内部会确保最小长度为 8 字节。 最大的引用长度， 取决于回应 mbuf 中的剩余空间。 加入这一选项是为了解决 I-D `draft-gont-icmp-payload-00.txt` 提到的问题。

如果需要， 在回应和分配 mbuf 时， icmp(4) 会引用完整的 TCP 头了。 这个变动修正了由 I-D `draft-gont-icmp-payload-00.txt` 提到的问题。

新增了 socket 选项 `IP_MINTTL`。 这个选项可以控制在 socket 上收到的包的最小 TTL 值。 所有包含更小 TTL 的包都会被直接丢弃。 目前这已经能够在 RAW、 UDP 和 TCP 监听 socket 上使用。 该选项唯一一个有用的值是 `255`， 表示阻止本地 socket 监听接受所有来自直接连接的网络之外的数据包。 此外， 这个选项也使得在用户态实现 RFC 3682 “The Generalized TTL Security Mechanism (GTSM)” 成为可能。

内核 ppp(4) 驱动程序支持 IPv6 了。

隐蔽转发 (stealth forwarding) 同时支持 IPv6 和 IPv4 了。 这一行为可以通过新增的 sysctl 变量 `net.inet6.ip6.stealth` 来控制。

删去了内核选项 `PIM`。 相关代码现在由内核选项 `MROUTING` 提供。

新增了对于 RFC 3678 特定源组播 (SSM) socket API 的支持。 更多细节， 请参阅联机手册 sourcefilter(3)。

新增了对于 流控制传输协议 (SCTP) 的支持。 SCTP 实现了由 RFC 4960 定义的支持可靠的、 面向消息的传输协议。 在 FreeBSD 中可以通过 `SCTP` 内核选项来启用这种支持， 它是 `GENERIC` 内核的一部分。 关于它的进一步信息， 请参见联机手册 sctp(4)。

`IPV6_V6ONLY` socket 选项支持 UDP 了。

内核选项 `TCP_DROP_SYNFIN` 现在是默认启用的了。 `net.inet.tcp.drop_synfin` sysctl 变量的默认值， 和之前一样仍然是 `0`。

FreeBSD 网络协议栈新增了对于网卡等硬件提供的 TCP 分片协处理 (TSO) 能力的支持。 通过将大块数据分拆成多个 TCP 分片这样的操作交给网卡来进行， TSO 能够减少发送大量 TCP 数据时的开销。 这一功能， 可以以网络接口为单位， 通过 ifconfig(8) 的 `tso` 和 `-tso` 参数， 来启用和禁用。 目前， 支持 TSO 的网卡驱动包括 em(4)、 mxge(4) 和 cxgb(4)。

FreeBSD 提供了对 TCP socket 缓冲的自动尺寸收放能力。 这使得 socket 缓冲区尺寸能够依据网络条件自动适应， 而不再需要静态地设置。 这一功能的行为， 可以通过 `net.inet.tcp.sendbuf_*` 和 `net.inet.tcp.recvbuf_*` sysctl 变量来调整。

为 tap(4) 驱动程序新增了 sysctl 变量 `net.link.tap.up_on_open`。 如果启用， 则新的 tap 设备会在创建时直接标记为 `up`。 [已合并]

#### 2.2.4 磁盘和存储

aac(4) 驱动程序新增了对一些惠普机器上使用的 Adaptec 2610SA SATA-RAID 控制器的支持。

ahc(4) 驱动程序是 MPSAFE 的了。

ahd(4) 驱动程序是 MPSAFE 的了。

CAM 子系统是 MPSAFE 的了。

ciss(4) 驱动程序是 MPSAFE 的了。

GEOM 存储变换系统新增了 `GEOM_JOURNAL` class。 它支持块级别的日志操作， 可以为文件系统模块保持一致性提供文件系统日志。 (目前， 这一功能只支持 UFS 文件系统。) 关于它的操作， 可以由 gjournal(8) 工具进行控制。

新增了用以支持多种磁盘设备访问路径的 GEOM_MULTIPATH class。 新增的 gmultipath(8) 工具可以利用这个功能控制磁盘的行为。

新增了用以提供以物理设备为后端， 支持任意尺寸虚拟存储设备 的 `GEOM_VIRSTOR` class。 关于它的进一步信息， 请参见联机手册 gvirstor(8)。

为了保持命名方式一致， 将 GEOM class 内核模块 `g_md.ko` 改名为 `geom_md.ko`。

[amd64, i386] 新增了 hptiop(4) 驱动。 该驱动支持 Highpoint RocketRAID 3xxx 和 4xxx 系列的 SAS 和 SATA RAID控制器。

[amd64, i386] 新增了 hptrr(4) 驱动程序， 它能够支持多种 HighPoint RocketRAID 控制器 (更多细节， 可以在联机手册中找到)。 [已合并]

[amd64, i386] 对 hptmv(4) 驱动程序进行了更新， 它支持 amd64 和 PAE 了。

isp(4) 驱动程序是 MPSAFE 的了。

对 mpt(4) 驱动程序进行了更新， 以支持包括 RAID 卷， 以及 RAID 成员状态/设置报告、 周期性卷重同步状态报告， 以及用于设置卷重同步速率、 卷成员写入缓存状态和卷事务队列深度等信功能。 [已合并]

mpt(4) 驱动程序新增了 SAS HBA (部分)、 64-位 PCI 以及大规模数据传输的支持。 [已合并]

mpt(4) 驱动程序是 MPSAFE 的了。

在较早版本的 FreeBSD 中出现过的 rr232x(4) 驱动程序已不再支持， 其功能已经被 hptrr(4) 驱动程序所取代。 根据 Highpoint 的要求， 这一版本中删去了 rr232x(4) 驱动程序。 [已合并]

twa(4) 驱动更新到了 3ware 网站上公布的 3.70.03.007 版本。 这个版本对 AMCC 的 3ware 9650 系列 SATA 控制器提供了支持。 [已合并]

新增了用于 Internet SCSI (iSCSI) 协议的内核驱动 iscsi_initiator(4)。 这个驱动允许通过 TCP/IP 网络访问远程的 SCSI 设备。 用户态环境工具 iscontrol(8) 可以用来控制这一驱动程序的操作。

新增了模拟 Linux SCSI SG 直通设备 API 的大部分功能子集的 scsi_sg 驱动程序。 这使得以 Linux 模拟方式 (以及 FreeBSD 原生应用程序) 能够以和在 Linux 上面相同的方式操作 `/dev/sg`*`` 设备。 [已合并]

umass(4) 驱动提供了对命令 `PLAY_MSF`、 `PLAY_TRACK`、 `PLAY_TRACK_REL`、 `PAUSE`、 `PLAY_12` 的支持， 这使得 cdcontrol(1) 工具能够操作 USB CD 驱动器了。

#### 2.2.5 File Systems

FreeBSD NFS 子系统中的一部分 (与协议栈及 callout 的接口和 NFS 客户端部分) 是 MPSAFE 的了。

pseudofs(9) 伪文件系统构建包及使用它实现的文件系统 ( procfs(5)、 linprocfs(5) 和 linsysfs(5)) 是 MPSAFE 的了。

[amd64, i386] 增加了试验性的 TMPFS 文件系统支持。 TMPFS 是一种高效的内存文件系统， 它由 NetBSD 项目在 Google 的 Summer of Code 活动中开发。 关于这种文件系统的进一步信息， 请参见联机手册 tmpfs(5)。

重新实现了 unionfs 文件系统。 与之前的实现相比， 这个版本解决了许多崩溃和上锁问题。 此外， 它还提供了新增的 “transparent” (透明) 和 “masquerade” (伪装) 这两种工作模式， 能够自动在文件系统聚合的上层创建文件。 关于这个文件系统的进一步信息， 请参考联机手册 mount_unionfs(8)。 [已合并]

[amd64, i386, pc98] 加入了对 Sun 的 ZFS 的支持。 关于这一文件系统的更多信息， 请参见联机手册 zfs(8) 或 OpenSolaris ZFS 主页。

加入了初步的 (只读) 对 SGI 的 XFS 文件系统的支持。

### 2.3 用户态环境变动

从 `libc` 删去了原先随 INRIA IPv6 实现引入的 addr2ascii() 和 ascii2addr() 库函数调用。 在 FreeBSD 基本系统中已经不再有使用它们的地方。 作为相关的改动， 为 getnameinfo(3) 增加了对于 `AF_LINK` 地址的支持。

删去了 `struct addrinfo` 中的 `ai_addrlen` 原先用于保持 ABI 兼容性的补位桩。 例如， 这个变动会破坏 64 位平台， 包括 FreeBSD/amd64、 FreeBSD/ia64 以及 FreeBSD/sparc64 上 getaddrinfo(3) 函数的 ABI 兼容性。

atrun(8) 工具新增了 PAM 支持。 在开始为用户帐号运行任务之前， 它会首先通过 PAM 检查用户帐号的状态。 默认的不可用的帐户定义包括已过期用户， 以及使用 pw(8) 锁定的用户。

camcontrol(8) 新增了用于显示设备容量的 `readcap` 命令。 [已合并]

cron(8) 服务新增了 PAM 支持。 在运行帐户私有的 crontab(5) 文件中的命令之前， 它会通过 PAM 检查帐户的状态， 如果帐户不可用， 则跳过命令。 默认的不可用帐户定义包括已过期用户， 以及使用 pw(8) 锁定的用户。 此外， cron(8) 如果系统中存在 nologin(5) 文件， 除非 crontab(5) 属主的登录类型 (login class) 不受 nologin(5) 限制， 否则也会跳过其 crontab(5) 中的命令。 系统文件 `/etc/crontab` 中配置的命令， 不受 PAM 检查的限制。

dhclient(8) 程序新增了 RFC 3422 描述的无类静态路由选项支持。

dump(8) 和 restore(8) 程序能够保存和恢复文件的扩展属性信息了。

新增了实现用于操作 ELF 文件的 SVR4 elf(3) / gelf(3) API 的 libelf 函数库。

fdisk(8) 程序新增了用于以 fdisk 配置文件格式显示 slice 表的 `-p` 选项。 [已合并]

删去了 finger(1) 的 T/TCP 支持 (以及用于启用该支持的 `-T` 选项)。

修正了 find(1) 程序无法正确处理传给 `-user` 和 `-group` 的数字格式的参数的 bug。

freebsd-update(8) 命令新增了 `upgrade` 子命令， 用于完成在不同的 FreeBSD 版本之间的二进制升级。 [已合并]

ftpd(8) 工具新增了对 RFC2389 (FEAT) 和 RFC2640 (UTF8) 的支持。 RFC2640 支持是可选的， 可以通过新增的 `-8` 参数来启用。 更多信息， 可以在 ftpd(8) 联机手册中找到。 [已合并]

默认启用了 gcc(1) SSP (堆栈溢出保护) 支持。

gbde(8) 工具新增了 `-k` 和 `-K` 选项， 用于指定通行字之外的密钥文件。

gpt(8) 新增了设置 GPT 分区卷标的能力。

gvinum(8) 工具新增了 `resetconfig` 子命令。

新增了 RFC2743 和 RFC2744 描述的第 2 版通用安全服务 (Generic Security Service) API (GSS-API) 及其 C 绑定接口。 这是一个新增的可扩展 GSS-API 层， 它支持 GSS-API 插件， 与 Solaris 实现类似， 而原有的 Kerberos 5 GSS 机制， 则进行了重写， 作为新实现的插件库提供。

hccontrol(8) 工具支持 HCI 节点自动探测了。

id(1) 工具会在组 ID 之后显示生效用户 ID 了。

新增了 ipfwpcap(8) 工具。 它能够截获 divert(4) socket 并将数据以 pcap(3) (也就是 tcpdump(1) 所使用的) 格式写入文件或管道。 [已合并]

kdump(1) 程序能够将系统调用参数以符号化的名字显示了。

kenv(1) 工具新增了用于禁止警告信息的 `-q` 选项。

kgdb(1) 新增了用于以读写模式打开 kmem target 的 `-w` 选项。 这使得 kgdb 能够直接作用于 `/dev/mem` 并修改正在运行的系统的内核内存内容。

libarchive(3) 支持 POSIX.1e-风格的扩展属性了。

libarchive(3) 库能够处理 ar(1)-格式的文件了。

libc 库中， 新增了对符号映射和版本化符号定义的实现。

libedit 库更新到了 NetBSD 源代码 2005 年 8 月的版本。

libm 库中， 新增了对符号映射和版本化符号定义的实现。

引入了新的 malloc(3) 实现。 这个实现， 也称作 “jemalloc”， 是为改善多线程程序， 特别是在 SMP 系统上运行时的性能而设计的， 同时兼顾了单线程程序的性能。 由于采用了不同的算法和数据结构， jemalloc 可能会暴露一些以前没有发现的用户态代码的 bug， 不过尽管如此， 绝大多数 FreeBSD 基本系统和常用的 ports 都已经进行了测试和修正。 请注意， jemalloc 使用 mmap(2) 来获取内存， 而只在十分有限的情况下使用 sbrk(2) (并且这有限的情形仅限 32-位 硬件架构)。 其结果是， `datasize` 资源限制对典型的应用而言， 其效果会被严重削弱。 不过， 您可以使用 `vmemoryuse` 资源限制， 来限定进程能够使用的虚拟内存量， 具体细节， 请参见联机手册 limits(1)。

mdconfig(8) 工具能够将设备列表以 XML 格式输出了。 目前 `list` 和 `query` 子命令支持这个功能。

mdconfig(8) 工具的 `-u` 选项， 支持指定以逗号分割的多个设备了。

mdmfs(8) 工具新增了用于在以 vnode 作为后端存储的虚拟盘上， 跳过 newfs(8) 执行步骤的 `-P` 参数。

mdmfs(8) 工具新增了 `-E` 参数， 用于指定默认位置 (`/sbin/mdconfig`) 以外的 mdconfig(8) 工具的位置。

在 `libc` 中新增了 memmem(3) 函数。 这与 `glibc` 中的 strstr(3) 函数是二进制兼容的。

删去了 mount(8) 的 `dev` 和 `nodev` 选项。

mount(8) 工具新增了对 mqueuefs(5) 的支持。

修正了导致 mount(8) 工具无法通过 `mount -u -o rw`, 将读写挂接升级为只读挂接的问题。

删去了一系列文件系统专用的 `mount_`*`` 工具， 因为现在 mount(8) 命令提供了更为通用的 `-t` 选项。 具体说来， 下列命令已经删除掉了： `mount_devfs`、 `mount_ext2fs`、 `mount_fdescfs`、 `mount_linprocfs`、 `mount_procfs`、 `mount_std`、 `mount_linsysfs`、 `mount_reiserfs`， 以及 `mount_umapfs`。

从 FreeBSD 基本系统中删去了 mrouted(8) 多播路由服务。 这个服务实现了 DVMRP 多播路由协议， 然而在许多多播系统中， 这种协议已经被 PIM 取代。 与此相关的 map-mbone(8) 和 mrinfo(8) 工具也已经被删除。 这些程序现在可以通过 FreeBSD Ports 套件中的 `net/mrouted` 来安装。

为 netstat(1) 增加了显示 sctp(4) 协议统计数据的能力。

`/etc/nsswitch.conf` 文件现在改为静态地安装， 而不是在每次系统启动时自动生成了。

删去了 objformat(1) 工具和 getobjformat(3) 函数库 (对于 a.out 可执行文件格式支持的最后残存物)。

pam_nologin(8) 模块不再提供验证 (authentication) 功能； 与此同时， 它转而提供帐户管理 (account management) 功能。 位于 `/usr/local/etc/pam.d` 的第三方文件， 可能需要手工编辑以适应这一变动； 具体而言， 这些文件中形如下面这行的配置：

    auth    required        pam_nologin.so  no_warn

这些配置中的 `auth` 关键字， 应改为 `account`。

新增了 nscd(8)。 这是一个能够缓存 nsswitch 查询 (例如口令、 组， 以及服务数据库) 的服务， 它能够改善系统性能。

pkill(1) 工具新增了用于将搜索范围限定于指定 pidfile 文件中所记录的 PID 进程中的 `-F` 选项。 当配合另一个新增选项 `-L` 使用时， pidfile 还必须首先由 flock(2) 系统调用锁定， 或由 pidfile(3) 创建。

pkill(1) 工具新增了 `-I` 选项， 其工作方式类似于 rm(1) 的 `-i` 参数。 当指定了这个选项时， pkill(1) 在发出信号前， 会对每个进程要求用户确认。

对 pmcstat(8) 程序进行了一系列改进： 现在它可以通过网络 socket 在远程主机上进行日志记录了。 `-c` 能够接受以逗号分隔的用于配置 PMA 分配的 CPU 列表。 `-t` 选项进行了增强， 能够支持以命令名的正则表达式来选择进程。 pmcstat(8) 默认在全部 CPU 上分配系统 PMC， 而不是只限于 CPU 0。

powerd(8) 新增了用以指定 pidfile 的 `-P` 选项。

pw(8) 程序支持使用 `-M` 选项来自动设置新创建的主目录权限了。 [已合并]

在 FreeBSD 的 libc 中的 DNS 解析库更新到了 BIND 9.4.1 中的版本。

rpcbind(8) 程序现在能够通过使用 `-h` 参数来指定 INADDR_ANY 以外的 IP 地址上的 TCP 监听了。 新增的 `-6` 标志则可以指定只绑定到 IPv6 地址。

rpcgen(1) 工具现在默认生成符合 ANSI C 编译器标准的头文件和 stub 文件了。

rpc.lockd(8) 和 rpc.statd(8) 程序新增了用于指定绑定端口的 `-p` 选项。 [已合并]

rtld(1) 运行环境连接器提供了对于 GNU 语义的 ELF 符号版本支持。 这个实现的主要目标是与 GNU libc 实现， 并在 http://people.redhat.com/~drepper/symbol-versioning 和 LSB 3.0 文档中介绍的功能兼容。 同时， 新增的 `dlvsym()` 提供了查找某个符号特定版本的功能。

sa(8) 工具新增了 `-U` 和 `-P` 参数。 它们分别可以用来指定用户和进程统计文件的位置。

新增了用于编辑磁盘分区和 label 的 sade(8) 工具。 这个工具基于 sysinstall(8) 中的部分代码。

修正了 sed(1) 工具无法计算某些模式空间长度的问题。

sed(1) 工具新增了对于大小写不敏感模式匹配的支持； 这一功能可以通过在正则表达式分割符后面指定参数 `I` 来启用。

对 setenv(3) 系列库函数调用的行为进行了修改， 由之前的 BSD API 行为改为 POSIX 强制的行为。 其结果是， 更新了许多依赖于旧 API 的基本系统工具来支持这一变动。

setfacl(1) 的 `-h` 参数能够正确地在符号连接， 而不是其所指对象上设置 ACL 了。

为显示连接和监听网络 socket 的 sockstat(1) 工具新增了命令行选项 `-P`， 用以按照协议名称 (在 protocols(5) 中列出) 过滤输出结果。

sysctl(8) 新增了 `-q` 参数来制止一部分警告和错误信息的产生。

由于年久失修， 删去了 FreeBSD 基本系统中提供的 tcpslice 版本。 它的最新版本可以通过 Ports 套件中的 `net/tcpslice` 来安装。

收到 `SIGINFO` 信号时， time(1) 工具会显示指定的进程运行消耗的时间了。

top(1) 程序新增了 `-a` 选项来指定显示进程参数向量中指定的标题； 这个功能对于监控使用 setproctitle(3) 修改自身进程标题的进程而言会很有用。

top(1) 新增了用于指定 jail(8) ID 的 `-j` 选项来显示其中的进程。 [已合并]

touch(1) 工具新增了 `-A` 标志来将文件的访问和修改时间修改为指定的值。 [已合并]

truss(1) 工具新增了 `-s` 选项以提供与 strace (`devel/strace`) 同样的功能。

truss(1) 不再依赖于 procfs(5) 文件系统工作了； 它现在使用 ptrace(2) 接口来控制被跟踪的进程。

[powerpc] truss(1) 工具支持 FreeBSD/powerpc 了。

删去了 usbd(8) 工具。 devd(8) 工具及其配置文件现在已经能够完全支持其功能了。

将 uuidgen(1) 工具从 `/usr/bin` 挪到了 `/bin`。

删去了已经被 mdconfig(8) 替代多时的 vnconfig(8) 工具。

删去了 wicontrol(8) 工具。 对于 wi(4) 网络接口的配置应通过 ifconfig(8) 来进行。

由于一些可能发生的 ABI 变动， 调整了所有动态连接库的版本。 这些库包括： snmp_`*`, libdialog, libg2c, libobjc, libreadline, libregex, libstdc++, libkrb5, libalias, libarchive, libbegemot, libbluetooth, libbsnmp, libbz2, libc_r, libcrypt, libdevstat, libedit, libexpat, libfetch, libftpio, libgpib, libipsec, libkiconv, libmagic, libmp, libncp, libncurses, libnetgraph, libngatm, libopie, libpam, libpthread, libradius, libsdp, libsmb, libtacplus, libthr, libthread_db, libugidfw, libusbhid, libutil, libvgl, libwrap, libypclnt, libm, libcrypto, libssh, 以及 libssl。

新实现了 `wcsdup()` 函数， 这个函数在 Microsoft 和 GNU 系统中十分流行。

将 wlandebug(8) 工具加入到了 FreeBSD 的主源码树 (之前它在 tools 目录中)。 它提供了一系列针对 wlan(4) 模块及相关驱动的控制功能， 在调试无线网络问题时会很有用。

新增了 wpa_passphrase(8) 工具。 它能够从 ASCII 口令生成 256-位 的预分发 WPA 密钥。 [已合并]

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

新增了用于启动独立的 ftpd(8) 的 `ftpd` 脚本。

由于新增了功能更强的 `encswap` 脚本， `gbde_swap` 被淘汰了， 前者也提供了 geli(8) 加密交换分区的支持。

新增了用于在引导时配置 geli(8) 设备的 `geli` 和 `geli2` 脚本。

由于基本系统中已经不再提供 IPsec IKE 服务， 删去了与之对应的 `ike` 脚本。

新增了用以处理 vnode 后端的 md(4) 设备的 `mdconfig` 脚本。 这个脚本的主要目的是替代先前的 `ramdisk` 脚本， 因此先前的 `ramdisk_*` 变量均改名为 `mdconfig_*`。 此外， 新增了两个 rc.conf(5) 变量 `mdconfig_`*`_files` 和 `mdconfig_`*`_cmd`。 例如：

    mdconfig_md0="-t malloc -s 10m"
    mdconfig_md1="-t vnode -f /var/foo.img"

删去了位于 `/etc/rc.d` 中的 `rcconf.sh` 脚本， 并增加了用以标记引导过程中的早期和晚期分界点的变量 `early_late_divider`。

`rc.initdiskless` 脚本使用 tar(1) 代替了 pax(1)， 因为 pax(1) 需要可写的临时目录， 而在这个脚本执行时， 可能并没有这样的目录。

由于 OLDCARD 已被宣告过时， 因此 `pccard` 脚本也被宣告过时了。

`sendmail` 脚本在别名 (aliases) 数据库不存在或比别名文件旧时， 不再自动对其进行重建了。 [已合并] 如果有需要， 可以在 rc.conf 中将新增的 `sendmail_rebuild_aliases` 变量设置为 "YES" 来恢复这一功能。

删去了 `removable_interfaces` 变量。

为 `ifconfig_`ifn`` 新增了关键字 `NOAUTO`。 这会阻止网络接口在系统引导过程中或通过 `/etc/pccard_ether` 启用， 但允许使用 `/etc/rc.d/netif` 来以纯手工的方式启用和停用接口。

`/etc/rc.d/nfslocking` 脚本已被宣告过时， 并将在未来的版本中删去。 其功能已经由 `/etc/rc.d/lockd` 和 `/etc/rc.d/statd` 脚本取代。 [已合并]

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

Intel ACPI-CA 升级到了 20070320。

awk 由 2005 年 4 月 24 日版升级到了 2007 年 5 月 1 日版。 [已合并]

BIND 由 9.3.3 升级到了 9.4.2。

BSNMPD 由 1.11 升级到了 1.12。

BZIP2 由 1.0.3 升级到了 1.0.4。 [已合并]

GNU Diffutils 由 2.7 升级到了 2.8.7。 [已合并]

DRM 更新到了 DRI CVS 20060517 的快照。 [已合并]

引导加载器使用的 Forth Inspired Command Language (FICL) 升级到了 3.03。

FILE 由 4.12 升级到了 4.23。

GCC 由 3.4.6 升级到了 4.2.1。

GNU Readline library 由 5.0 升级到了 5.2 patch 2。 [已合并]

GNU 版本的 gzip 被替换成了一个经过修改的来自 NetBSD 的 gzip。 [已合并]

IPFilter 由 4.1.13 升级到了 4.1.28 版。 [已合并]

less 由 v394 升级到了 v416 版。 [已合并]

libpcap 由 0.9.4 升级到了 0.9.8 版。

netcat 由 OpenBSD 3.9 升级到了 OpenBSD 4.1 中的版本。 [已合并]

OpenSSL 由 0.9.7e 更新到了 0.9.8e。

ncurses 由 5.2-20020615 更新到了 5.6-20061217 版。 ncurses 新增了宽字符支持。 [已合并]

hostapd 由 0.3.9 版更新到了 0.5.8 版。

PF 由 OpenBSD 的 3.7 版更新到了 OpenBSD 4.1 版。 这一更新包含了一系列功能方面的增强。 两个比较显著的变动是， 在 pf.conf(5) 中， `keep state` 以及 `flags S/SA` 是 TCP 规则默认的行为了。 如有需求， 则需要使用对应的选项 `no state` 和 `flags any` 来分别禁用带状态过滤和 TCP 标志检查。

sendmail 由 8.13.8 更新到了 8.14.2 版。 [已合并]

tcpdump 由 3.9.4 更新到了 3.9.8 版。

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

tip 更新到了来自 OpenBSD 与 20060831 的快照版本。

TrustedBSD OpenBSM, 由 1.0 alpha 12 更新到了 1.0 版。

WPA Supplicant 由 0.3.9 版更新到了 0.5.8 版。

### 2.5 Ports/Packages 套件基础结构

### 2.6 发布工程与系统集成

对现有的 sysinstall(8) 工具的分区算法进行了修改。

- 在磁盘容量超过 (3 * RAM尺寸 + 10GB) 时， 默认的分区尺寸为：

  分区 | 尺寸
  --- | ---
  交换区 | RAM尺寸 * 2
  `/` | 512 MB
  `/tmp` | 512 MB
  `/var` | 1024 MB + RAM尺寸
  `/usr` | 余下的部分 (8GB 或更多)

- 在磁盘尺寸大于 (RAM尺寸 / 8 + 2 GB) 时， 默认的尺寸为下面的范围， 而空间则按比例分配：

  分区 | 尺寸
  --- | ---
  交换区 | 从 RAM尺寸 / 8 到 RAM尺寸 * 2
  `/` | 从 256MB 到 512MB
  `/tmp` | 从 128MB 到 512MB
  `/var` | 从 128MB 到 1024MB
  `/usr` | 从 1536MB 到 8192MB

- 如果系统中的磁盘空间更少， 则采用先前的分配策略。

在 `src/Makefile` 中新增了 `showconfig` target， 其作用是显示用于联编 FreeBSD 源代码树的配置。

新增了用于指定每次构建 FreeBSD 源代码树时构建参数的 `src.conf` 文件。 要了解进一步的详情， 请参见 build(7) 和 src.conf(5)。

支持的 GNOME 桌面环境 (`x11/gnome2`) 的版本， 从 2.16.1 升级到了 2.20.1。 [已合并]

支持的 KDE 桌面环境 (`x11/kde3`) 的版本， 从 3.5.4 升级到了 3.5.7。 [已合并]

支持的 Xorg 视窗系统 (`x11/xorg`) 的版本， 从 6.9.2 升级到了 7.3.0。 [已合并]

默认的 `X11BASE` 变量设置， 已由 `/usr/X11R6` 改为 `/usr/local`， 即与 `LOCALBASE` 的默认值相同。 [已合并]

这一版本的 FreeBSD 开始采用 700MB CDROM 介质的 ISO 映像文件。 多数较早的 FreeBSD 版本采用的是 650MB 的 CDROM 介质。 [已合并]

### 2.7 文档

通过新增下列联机手册， 加强了对现有功能的文档化描述： acpi_sony(4)、 device_get_sysctl(9)、 ext2fs(5)、 mca(8)、 nanobsd(8)、 snd_mss(4)、 snd_t4dwave(4)、 sysctl(9)。

在 `src/sys/doc/subsys` 中增加了通过利用 `devel/doxygen` 来生成内核子系统 API 文档的初步支持。 如果要生成 API 文档， 只需在 `src/` 目录中执行 `make doxygen` 即可。

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

[i386、 amd64] 从 FreeBSD 6.2-RELEASE 开始， 系统已经能够通过使用 freebsd-update(8) 来实现 RELEASE 版本之间 (以及不同安全分支的快照版本) 的二进制升级。 二进制升级过程将更新未经修改的 userland 工具， 以及随官方 FreeBSD 发行版发布的、 未作修改的 GENERIC 或 SMP 内核。 使用 freebsd-update(8) 工具的主机， 需要有可用的 Internet 连接。

旧式的二进制升级， 则是通过随 CDROM 发行介质提供的 sysinstall(8) 的 `Upgrade` 选项来完成的。 这种二进制升级方式， 对于 非-i386、 非-amd64 的， 以及没有接入 Internet 的系统而言会比较有用。

此外， 也可以使用源代码从较早版本升级的方式 (通过从源代码重新编译 FreeBSD 的基本系统)， 其操作方法请参见 `/usr/src/UPDATING`。

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

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

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

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

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