FreeBSD 9.0-RELEASE 发行说明(2012 年 1 月 12 日)

原文链接:FreeBSD 9.0-RELEASE Release Notes

FreeBSD 项目

版权 © 2012 FreeBSD 文档项目

$FreeBSD: stable/9/release/doc/en_US.ISO8859-1/relnotes/article.sgml 230006 2012-01-12 05:51:11Z hrs $

FreeBSD 是 FreeBSD 基金会的注册商标。

IBM、AIX、EtherJet、Netfinity、OS/2、PowerPC、PS/2、S/390 和 ThinkPad 是国际商业机器公司(IBM)在美国、其他国家或两者的商标。

IEEE、POSIX 和 802 是美国电气和电子工程师协会(IEEE)的注册商标。

Intel、Celeron、EtherExpress、i386、i486、Itanium、Pentium 和 Xeon 是英特尔公司及其子公司在美国和其他国家的商标或注册商标。

SPARC、SPARC64、SPARCengine 和 UltraSPARC 是 SPARC 国际公司在美国及其他国家的商标。SPARC 国际公司拥有所有 SPARC 商标,并根据许可协议允许其成员适当使用这些商标。

许多制造商和销售商用于区分其产品的标识被声明为商标。本文档中出现这些标识时,如果 FreeBSD 项目已知该商标声明,这些标识后面会加上“™”或“®”符号。

FreeBSD 9.0-RELEASE 的发行说明包含了自上一个版本以来对 FreeBSD 基本系统在 9.0-STABLE 开发线路上的更改的总结。本文档列出了自上一个版本发布以来发布的安全公告,以及对 FreeBSD 内核和用户空间的重大更改。同时也简要介绍了升级的相关内容。

1 介绍

本文档包含了 FreeBSD 9.0-RELEASE 的发行说明。它介绍了 FreeBSD 最近添加、修改或删除的功能。同时,也提供了从之前版本升级到本版本的一些说明。

FreeBSD 9.0-RELEASE 版本是个 RELEASE 发行版。你可以在 http://www.FreeBSD.org/releases/ 或其镜像站点找到该版本。有关如何获取此(或其他)版本的更多信息,可以参考 FreeBSD 手册 中的 “获取 FreeBSD”附录

所有用户在安装 FreeBSD 之前,强烈建议查阅发行说明中的勘误(更正文档)。该文档包含了在发布周期结束或发布后发现的“最新变化”信息。通常,它包含已知的 bug、安全公告以及文档更正。你可以在 FreeBSD 网站上找到 FreeBSD 9.0-RELEASE 的最新勘误文档。

2 新特性

本节介绍了自 8.2-RELEASE 以来,FreeBSD 中最显著的用户可见的新功能或更改。

典型的发行说明内容包括自 8.2-RELEASE 后发布的安全公告、新的驱动程序或硬件支持、新命令或选项、重要的 bug 修复或第三方的软件升级。它们还可能列出主要 Port/包的更改或发布工程实践的变化。显然,发行说明无法列出每个在版本之间对 FreeBSD 所做的更改;本文件主要集中于安全公告、用户可见的更改以及重要的架构改进。

2.1 安全公告

以下安全公告中介绍的问题已被修复。有关更多信息,请查阅各个安全公告,网址为 http://security.FreeBSD.org/

安全公告
日期
主题

2011 年 4 月 20 日

2011 年 5 月 28 日

使用大型 RRSIG RRsets 和负缓存导致的 BIND 远程拒绝服务攻击

2011 年 9 月 28 日

2011 年 9 月 28 日

处理 UNIX 套接字地址时的缓冲区溢出

2011 年 12 月 23 日

2011 年 12 月 23 日

通过 chrooted ftpd 执行代码

2011 年 12 月 23 日

telnetd 代码执行漏洞

2011 年 12 月 23 日

pam_ssh 在用户账户拥有未加密的 SSH 私钥时错误地授予访问权限

2011 年 12 月 23 日

pam_start() 未对服务名称进行验证

2.2 内核变更

FreeBSD 内核现在支持 Capsicum 能力模式。Capsicum 是一套用于沙箱支持的特性,采用一种能力模型,其中能力为文件介绍符。已经向 GENERIC 内核添加了两个新选项:CAPABILITIES 和 CAPABILITY_MODE。有关 Capsicum 的更多信息,请参见 http://www.cl.cam.ac.uk/research/security/capsicum/。[r219129]

[amd64, i386] FreeBSD dtrace(1) 框架现在支持 FreeBSD/amd64 上的 linux32 和 freebsd32 系统调用的 systrace。新增了两个 systrace_linux32systrace_freebsd32 内核模块,除了提供原生系统调用跟踪外,还支持跟踪兼容系统调用。[r219559, r219561]

[amd64, i386, powerpc] FreeBSD ELF 图像激活器现在支持程序头 PT_GNU_STACK。默认情况下此功能被禁用。新增的 sysctl(8) 变量 kern.elf32.nxstackkern.elf64.nxstack 允许为指定的 ABI(例如 elf32 为 32 位 ABI)启用 PT_GNU_STACK。[r217152, r217396]

已实现 hhook(9)(帮助钩子)和 khelp(9)(内核帮助)KPIs。这些是 pfil(9) 框架的超集,用于在内核中进行更通用的使用。hhook(9) KPI 提供了一种方式,使得内核子系统能够导出钩子点,供 khelp(9) 模块挂接,从而为内核提供增强或新增的功能。khelp(9) KPI 提供了一个管理 khelp(9) 模块的框架,这些模块间接使用 hhook(9) KPI 在内核中的钩子点注册其钩子函数。这些功能为内核提供了以结构化的方式在运行时动态扩展的能力,且能够保持 ABI 兼容性。[r216758, r216615]

[amd64, i386, pc98] 已添加了 loader(8) 可调选项 hw.memtest.tests。该选项控制是否在启动时执行内存测试。默认值为 1(执行内存测试)。[r224516]

已实现新的资源计费 API。它可以记录每个进程、每个 jail 和每个登录类的资源使用信息。请注意,该功能默认并未构建或安装。如需构建并安装该功能,请在内核配置文件中指定选项 RACCT,并按照 FreeBSD 手册 中的说明重新构建基本系统。[r220137]

已实现新的资源限制 API。它与 RACCT 资源计费实现协同工作,并基于其维护的规则集和当前的资源使用情况采取用户可配置的操作。新增了 rctl(8) 工具来管理用户空间中的规则。请注意,这个功能默认并未构建或安装。如需构建并安装该功能,请在内核配置文件中指定选项 RCTL ,并按照 FreeBSD 手册 中的说明重新构建基本系统。[r220163]

在 FreeBSD 的 Linux ABI 兼容性中,系统调用 sendmsg(2)recvmsg(2) 得到了改进。[r220031]

open(2)fhopen(2) 系统调用现在支持 O_CLOEXEC 参数,这允许为新创建的文件介绍符设置 FD_CLOEXEC 参数。此功能在 IEEE Std 1003.1-2008(POSIX,单一 UNIX 规范版本 4)中进行了标准化。[r219999]

已实现系统调用 posix_fallocate(2) 。该功能是 POSIX 中的一项功能,确保为常规文件数据分配文件系统存储介质上的一部分存储空间。[r220791]

新增了两个系统调用 setloginclass(2)getloginclass(2)。这使得内核能够追踪进程被分配的登录类,这对于 RCTL 资源限制框架是必需的。[r219304]

[amd64] FreeBSD 现在支持在 FreeBSD/amd64 上执行 FreeBSD 1/i386 二进制文件 a.out。请注意,默认情况下此功能未构建或安装。如需构建并安装它们,请在内核配置文件中指定选项 COMPAT_43,并按照 FreeBSD 手册 中的说明重新构建基本系统。[r220238]

已添加以下 sysctl(8) 变量,以显示各种内核特性的可用性:[r218485, r219028, r219029]

说明

kern.features.ufs_acl

UFS 中的 ACL(访问控制列表)支持

kern.features.ufs_gjournal

kern.features.ufs_quota

UFS 磁盘配额支持

kern.features.ufs_quota64

64 位 UFS 磁盘配额支持

kern.features.softupdates

FFS 软件更新支持

kern.features.ffs_snapshot

FFS 快照支持

kern.features.nfsclient

NFS 客户端(旧实现)

kern.features.nfscl

NFS 客户端(新实现)

kern.features.nfsserver

NFS 服务器(旧实现)

kern.features.nfsd

NFS 服务器(新实现)

kern.features.kdtrace_hooks

加载 DTrace 内核模块所需的内核 DTrace 钩子

kern.features.ktr

内核支持 KTR 内核跟踪设施

kern.features.ktrace

内核支持系统调用跟踪

kern.features.hwpmc_hooks

内核支持硬件性能计数器(HW PMC)

kern.features.sysv_msg

System V 消息队列支持

kern.features.sysv_sem

System V 信号量支持

kern.features.p1003_1b_mqueue

POSIX P1003.1B 消息队列支持

kern.features.p1003_1b_semaphores

POSIX P1003.1B 信号量支持

kern.features.kposix_priority_scheduling

POSIX P1003.1B 实时扩展支持

kern.features.stack

支持捕获内核栈

kern.features.sysv_shm

System V 共享内存段支持

kern.features.pps_sync

内核 PLL 使用外部 PPS 信号的支持

kern.features.regression

内核支持回归测试所需的接口

kern.features.invariant_support

支持使用 INVARIANTS 选项编译的模块

kern.features.zero_copy_sockets

零拷贝套接字支持

kern.features.libmchain

mchain 库支持

kern.features.scbus

SCSI 设备支持

kern.features.mac

强制访问控制框架支持

kern.features.audit

BSM 审计支持

kern.features.geom_gate

GEOM Gate 模块支持

kern.features.geom_uzip

GEOM uzip 只读压缩磁盘支持

kern.features.geom_cache

GEOM 缓存模块支持

kern.features.geom_mirror

GEOM 镜像支持

kern.features.geom_stripe

GEOM 条带化支持

kern.features.geom_concat

GEOM 串联支持

kern.features.geom_raid3

GEOM RAID-3 功能支持

kern.features.geom_fox

GEOM FOX 冗余路径缓解支持

kern.features.geom_multipath

GEOM 多路径支持

kern.features.g_virstor

GEOM 虚拟存储支持

kern.features.geom_bde

基于 GEOM 的磁盘加密支持

kern.features.geom_eli

GEOM 加密模块支持

kern.features.geom_journal

GEOM 日志支持

kern.features.geom_shsec

GEOM 共享密钥设备支持

kern.features.geom_vol

GEOM 支持从 UFS 超级块读取卷名称

kern.features.geom_label

GEOM 标签支持

kern.features.geom_sunlabel

GEOM Sun/Solaris 分区支持

kern.features.geom_bsd

GEOM BSD 磁盘标签支持

kern.features.geom_pc98

GEOM NEC PC9800 分区支持

kern.features.geom_linux_lvm

GEOM Linux LVM 分区支持

kern.features.geom_part_pc98

GEOM PC-9800 磁盘分区类支持

kern.features.geom_part_vtoc8

GEOM SMI VTOC8 磁盘标签分区类支持

kern.features.geom_part_bsd

GEOM BSD 磁盘标签分区类支持

kern.features.geom_part_ebr

GEOM 扩展引导记录支持

kern.features.geom_part_ebr_compat

GEOM EBR 分区类:向后兼容的分区名称

kern.features.geom_part_gpt

GEOM GPT 分区类支持

kern.features.geom_part_apm

GEOM Apple 风格分区类支持

kern.features.geom_part_mbr

GEOM MBR 分区类支持

2.2.1 启动加载器更改

默认的启动加载器菜单已更新。r222417

[ia64] loader(8) 启动加载器现在支持 PBVM(预启动虚拟内存)。这允许在不需要假设物理内存布局的情况下,将内核链接到固定的虚拟地址。PBVM 还允许精确控制内核及其模块加载的地址。r219541

2.2.2 硬件支持

[powerpc] FreeBSD/powerpc 现在支持通过 3.15 及更早版本的固件提供的 OtherOS 功能来使用 Sony Playstation 3。r217044

新增了 loader(8) 可调项 machdep.disable_tsc。将此项设置为非零值可禁用 TSC(时间戳计数器)的使用,方法是关闭启动时的 CPU 频率校准、使用 TSC 进行 DELAY(9),并将 TSC 用作 CPU 时钟。另一个新的 loader(8) 可调项 machdep.disable_tsc_calibration 仅允许跳过 TSC 频率校准。这在需要使用 Intel 处理器的芯片名义频率时非常有用。r219473, r220577

[amd64, i386] FreeBSD usb(4) 子系统现在默认支持 USB 3.0。r223098

FreeBSD usb(4) 子系统现在支持 USB 包过滤器。这可捕获通过每个 USB 主机控制器的数据包。该实现几乎基于 bpf(4) 代码。已添加用户空间程序 usbdump(8)r215649

2.2.2.1 网络接口支持

修复了一个在 alc(4) 驱动中的 bug,该 bug 可能导致基于 AR8152 的网络接口无法正常工作。[r217649]

增加了一个用于 Broadcom NetXtreme II 10GbE 控制器(BCM57710、BCM57711、BCM57711E)的 bxe(4) 驱动。[r219647]

更新了 cxgb(4) 驱动到版本 7.11.0。[r220009]

增加了一个用于 Chelsio T4(Terminator 4)系列 10Gb/1Gb 适配器的 cxgbe(4) 驱动。[r218794]

[i386] dc(4) 驱动现在在启用 PAE 选项的内核中正常工作。[r218832]

更新了 em(4) 驱动到版本 7.3.2。[r219753]

更新了 igb(4) 驱动到版本 2.2.5。[r223350]

igb(4) 驱动现在支持 Intel I350 PCIe 千兆以太网控制器。[r218530]

更新了 ixgbe(4) 驱动到版本 2.3.8。[r217593]

更新了 iwn(4) 驱动中用于 1000、5000、6000 和 6500 系列卡的固件镜像。[r220892]

修复了一个在 msk(4) 驱动中的 bug,可能导致 RX 校验和卸载功能无法正常工作。[r216860]

修复了一个在 nfe(4) 驱动中的 bug,可能导致更改 MTU 后无法重新初始化。[r217794]

修复了一个在 ral(4)run(4) 驱动中的 bug,可能导致 hostap 模式无法工作。[r217511]

增加了一个用于 RDC Semiconductor R6040 10/100 PHY 的 rdcphy(4) 驱动。[r216828]

re(4) 驱动现在支持 RTL8168E/8111E-VL PCIe 千兆以太网控制器和 RTL8401E PCIe 快速以太网控制器。[r217498, r218760]

re(4) 驱动现在支持 RTL810xE PCIe 快速以太网控制器的 TX 中断调节功能。[r217766]

re(4) 驱动现在支持一种新的 RX 中断调节机制,以解决性能问题。增加了一个 sysctl(8) 变量 dev.re.N.int_rx_mod,用于控制延迟 RX 中断处理的时间,单位为微秒。将其设置为 0 可以完全禁用 RX 中断调节。增加了一个 loader(8) 可调参数 hw.re.intr_filter,用于控制是否使用支持控制器上的 MSI/MSI-X 功能的旧机制。当该值设置为非零时,re(4) 驱动使用旧机制。默认值为 0,且该可调项对不支持 MSI/MSI-X 功能的控制器没有影响。[r217902]

re(4) 驱动现在支持 RealTek RTL8168/8111 C 或更高版本控制器的 TSO(TCP 分段卸载)。请注意,由于在某些条件下可能会发送损坏的帧,默认情况下此功能是禁用的。[r217246, r217832]

re(4) 驱动现在支持独立启用 TX/RX 校验和卸载。请注意,在某些基于 RTL8168C 的网络接口上,TX IP 校验和被禁用,因为当数据包包含 IP 选项时,它可能会生成不正确的 IP 校验和。[r217381, r218289]

修复了一个 re(4) 驱动中的 bug,可能导致在接收来自 RTL8169C、8169D 或 8169E 控制器的 Jumbo 帧时发生崩溃。[r217296]

re(4) 驱动现在支持 RTL8105E PCIe 快速以太网控制器。[r217911]

rlphy(4) 驱动现在支持 Realtek RTL8201E 10/100 PHY,该芯片在 RTL8105E 控制器中使用。[r217910]

修复了一个 sis(4) 驱动中的 bug,可能导致在更改多播数据包处理和/或混杂模式配置时,DP83815、DP83816 和 SiS 900/7016 控制器无法正确重新初始化。[r217548]

修复了一个 vlan(4) 虚拟接口中的 bug,可能导致在自动配置的 IPv6 链路本地地址中出现随机的接口标识符,而不是根据父接口的 IEEE 802 48 位 MAC 地址和 RFC 4291 中介绍的算法生成的地址。[r216650]

增加了一个用于 RDC R6040 快速以太网控制器的 vte(4) 驱动,该控制器常见于 Vortex86 系统级芯片中。[r216829]

增加了一个用于 Neterion X3100 10GbE 服务器/存储适配器的 vxge(4) 驱动。[r221167]

修复了一个 wpi(4) 驱动中的 bug,可能导致显示以下错误消息并使设备无法使用:[r216824]

wpi0: could not map mbuf (error 12)
wpi0: wpi_rx_intr: bus_dmamap_load failed, error 12

2.2.3 网络协议

ipfw(8) 现在支持在 fwd 动作中使用 IPv6。[r225044]

ipfw(8) 现在支持 call 和 return 动作。在执行 call number 动作时,当前规则编号将被保存到内部堆栈,并且规则集处理将继续执行从编号 number 或更高的第一个规则。return 动作会将内部堆栈中由最新的 call 动作保存的规则编号返回,并将规则集处理返回到该编号以上的第一个规则。[r223666]

FreeBSD 的 ipsec(4) 支持现在使用一半的哈希大小作为 Hashed Message Authentication Mode (HMAC-SHA-256、HMAC-SHA-384 和 HMAC-SHA-512) 的认证哈希大小,如 RFC 4868 中所介绍。在之前的版本中,这一长度是固定的 96 位,因为实现基于旧的互联网草案 draft-ietf-ipsec-ciph-sha-256-00。需要注意的是,这意味着 9.0-RELEASE 及以后版本不再与较旧的 FreeBSD 版本兼容。[r218794]

对于 Infiniband 支持,已将 OFED(OpenFabrics Enterprise Distribution)版本 1.5.3 导入基本系统。请注意,默认情况下不会构建或安装它们。要构建并安装它们,请在 /etc/src.conf 中指定 WITH_OFED=yes,并按照 FreeBSD 手册 中的说明重建基本系统。[r219820]

FreeBSD 的 TCP/IP 网络栈现在支持 RFC 3021 中介绍的 /31 前缀,"Using 31-Bit Prefixes on IPv4 Point-to-Point Links"。[r226572]

修复了 FreeBSD TCP/IP 网络栈中的一个 bug。未指定接口时,如果存在多播选项,源地址选择将无法执行。[r217169]

修复了 sendmsg(2) 中使用的 IPV6_PKTINFO 选项的一个 bug。由 setsockopt(2) 设置的 IPV6_USE_MIN_MTU 状态被忽略。[r225682]

FreeBSD 的 TCP/IP 网络栈现在支持可插拔拥塞控制框架 mod_cc(9) 。这能让将 TCP 拥塞控制算法实现为动态加载的内核模块。以下内核模块自 9.0-RELEASE 起可用:cc_chd(4) 用于 CAIA-Hamilton-Delay 算法,cc_cubic(4) 用于 CUBIC 算法,cc_hd(4) 用于 Hamilton-Delay 算法,cc_htcp(4) 用于 H-TCP 算法,cc_newreno(4) 用于 NewReno 算法,以及 cc_vegas(4) 用于 Vegas 算法。可以通过新的 sysctl(8) 变量 net.inet.tcp.cc.algorithm 设置默认算法。该值必须设置为 net.inet.tcp.cc.available 列出的名称之一,且 newreno 是启动时的默认值。更多详细信息,请参阅 mod_cc(4)mod_cc(9) 手册页。[r216109, r216114, r216115, r218152, r218153, r218155]

添加了 h_ertt(4)(增强的往返时延)khelp(9) 模块。该模块允许 TCP/IP 网络栈中每个连接的瞬时 RTT 进行低噪声估计,并且即使在使用延迟确认和/或 TSO(TCP 分段卸载)的连接上也能实现强大的实现。[r217806]

添加了一个新的 tcp(4) 套接字选项 TCP_CONGESTION。这允许选择或查询 TCP/IP 网络栈在套接字上的连接将使用的拥塞控制算法。[r218912]

ng_ipfw(4) netgraph(4) 节点现在支持 IPv6。[r225586]

ng_one2many(4) netgraph(4) 节点现在支持 XMIT_FAILOVER 传输算法。这使得数据包通过第一个活动的许多钩子进行传输。[r219127]

ng_netflow(4) netgraph(4) 节点现在支持 NetFlow 版本 9。新增了一个 export9 钩子用于 NetFlow v9 数据。请注意,可以同时以版本 5 和版本 9 导出数据。[r219183]

2.2.4 磁盘和存储

ada(4) 驱动程序现在支持写入缓存控制。新的 sysctl(8) 变量 kern.cam.ada.write_cache 决定是否启用 ada(4) 设备的写入缓存。设置为 1 启用写入缓存,0 禁用写入缓存,-1 使用设备的默认行为。 sysctl(8) 变量 kern.cam.ada.N.write_cache 可以基于每个设备覆盖配置(默认值为 -1,表示使用全局设置)。请注意,值可以在运行时更改,但仅在设备重置后生效。[r220412]

arcmsr(4) 驱动程序已更新为版本 1.20.00.22。r224905

cam(4) 子系统现在支持 SPC-3(SCSI 主命令 3)规范的介绍符格式感应数据。r226067

已添加 geom_map(4) GEOM 类。这允许根据设备的硬编码布局生成多个 geom 提供程序,而无需显式的分区表,如嵌入式闪存存储。有关更多信息,请参见 geom_map(4) 手册页面。r220559

gpart(8) GEOM 类现在支持 MBR 和 EBR 方案的以下别名:fat32、ebr、linux-data、linux-raid 和 linux-swap。r218014

gpart(8) GEOM 类现在支持用于 GPT 方案的 bios-boot GUID,这在 GRUB 2 引导加载程序中使用。r218014

已添加 graid(8) GEOM 类。这是 ataraid(4) 驱动程序的替代,支持各种基于 BIOS 的软件 RAID。r219974

sysctl(8) 变量 kern.geom.confxml 现在包含有关磁盘标识的信息(在标签 <ident> 中)和磁盘型号字符串(在标签 <descr> 中)。r219056

md(4) 内存支持的伪磁盘设备驱动程序现在支持一个 sysctl(8) 变量 vm.md_malloc_wait,用于指定 malloc 支持的磁盘是否使用 M_WAITOKM_NOWAIT 来调用 malloc(9)。设置 M_WAITOK 可以在高负载下防止内存分配失败。如果设置为 0,则 malloc 支持的磁盘将使用 M_NOWAIT 进行内存分配。默认值为 0r216793

修复了 mmc(4) 驱动程序中可能导致设备检测失败的错误。r216941, r217509

已更新 mxge(4) 驱动程序。r223958

为 3ware 9750 SATA+SAS 6Gb/s RAID 控制器添加了 tws(4) 驱动程序。r226115

2.2.5 文件系统

FreeBSD 快速文件系统现在支持软更新日志功能。它在启用软更新的文件系统中引入了一个意图日志,即使在非正常关机情况下,也无需后台运行 fsck(8)。可以通过使用 newfs(8) 工具的 -j 参数或 tunefs(8) 工具的 -j enable 选项,在每个文件系统中启用此功能。请注意,9.0-RELEASE 安装程序会自动为新创建的 UFS 文件系统启用软更新日志功能。r207141, r218726

FreeBSD 快速文件系统现在支持在释放数据块时使用 TRIM 命令。新的 -t 参数在 newfs(8)tunefs(8) 工具中设置 TRIM 启用参数。TRIM 启用参数使文件系统在释放每个块时向底层设备发送删除请求。TRIM 命令在 ATA8-ACS2 标准中被指定为数据集管理命令,用于将删除的数据块信息传输到设备,尤其适用于固态硬盘(SSD)以进行优化。r216796

新增的 -E 参数已添加到 newfs(8)fsck_ffs(8) 工具中。此参数会清除未分配的块,通知底层设备这些块未使用,并且其内容可能会被丢弃。这在 fsck_ffs(8) 中对于在没有 TRIM 支持的系统上挂载的文件系统、禁用 TRIM 支持的系统,或已从一个设备复制到另一个设备的文件系统非常有用。r221233

FreeBSD NFS 子系统已更新。新的实现除了支持 NFS 版本 2 和 3 之外,还支持 NFS 版本 4。NFS 服务器和客户端的内核选项已从 NFSSERVER 和 NFSCLIENT 更改为 NFSD 和 NFSCL。sysctl(8) 变量以 vfs.nfssrv. 开头的已重命名为 vfs.nfsd.。NFS 服务器现在支持 sysctl(8) 变量 vfs.nfsd.server_max_nfsversvfs.nfsd.server_min_nfsvers,用于指定服务器接受的最大和最小 NFS 版本号。默认值分别为 32r221124

要启用 NFSv4,需要在 rc.conf(5) 中的服务器端配置以下变量:

nfsv_server_enable="YES"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"

并且在 /etc/exports 文件中添加以下行:

V4: /

更多有关 NFSv4 及其配置的信息,请参见 nfsv4(4)exports(5) 手册页面。

FreeBSD NFS 子系统现在支持挂载选项 nocto。此选项会禁用在打开时进行的关闭到打开缓存一致性检查。此选项可能会提高只读挂载的性能,但应仅在服务器上的数据很少更改时使用。 mount_nfs(8) 工具现在也支持此参数关键字。r221436

已添加 loader(8) 可调变量 vfs.typenumhash,默认设置为 1。这使得在内核中对文件系统标识号进行哈希计算成为可能。此举修复了在升级或重建 NFS 服务器上的内核时,由于这些标识号值的意外变化,导致 NFS 客户端出现“过时的 NFS 文件句柄”错误。r225537

FreeBSD ZFS 子系统已更新为 SPA(存储池分配器,也称为 zpool)版本 28。现在它支持数据去重、三重奇偶校验 RAIDZ(raidz3)、快照保持、日志设备移除、zfs diff、zpool split、zpool import -F 和只读 zpool 导入。r219089

2.3 用户空间变化

已添加复杂的指数函数 cexp(3)cexpf(3) 和立方根函数 cbrtl(3)libm。[ r219359, r219571 ]

bsdtar(1)cpio(1) 工具现在基于 libarchive 版本 2.8.4。[ r224152, r224153, r224154 ]

cpuset(1) 工具现在支持 -C 参数来创建一个新的 cpuset 并将现有进程分配到该集,-l cpu-list 选项中的关键字 all 指定系统中的所有 CPU。[ r217416 ]

dhclient(8) 工具现在默认使用 resolvconf(8) 来管理 resolv.conf(5) 文件。resolvconf_enable 变量在 /etc/dhclient-enter-hooks 中控制行为。[ r219739 ]

修复了 fetch(1) 工具中的一个 bug,该 bug 可能导致 STAT FTP 命令无法正常工作。[ r217505 ]

gpart(8) 工具现在支持 -p 参数用于子命令 show。这允许显示分区提供者的名称,而不是分区的索引。[ r219415 ]

hastd(8) 工具现在将工作进程的 root 权限降低到 hast 用户。[ r218049 ]

hastd(8) 工具现在支持关键字 checksum 来指定资源部分中的校验和算法。到 9.0-RELEASE 为止,支持 none、sha256 和 crc32。[ r219351 ]

hastd(8) 工具现在支持关键字 compression 来指定资源部分中的压缩算法。到 9.0-RELEASE 为止,支持 none、hole 和 lzf。[ r219354 ]

hastd(8) 工具现在支持关键字 source 来指定在连接远程 hastd(8) 守护进程之前绑定到本地地址。[ r219818 ]

已经导入了符合《单一 UNIX 规范》的 iconv() API 库和工具实现。这些是基于 NetBSD 的 Citrus 实现。请注意,默认情况下这些并不会被构建或安装。要构建和安装它们,请在 /etc/src.conf 中指定 WITH_ICONV=yes,并根据 FreeBSD Handbook 重新构建基本系统。[ r219019 ]

ifconfig(8) 工具现在支持关键字 fdx、flow、hdx 和 loop ,分别作为 full-duplex、flowcontrol、half-duplex 和 loopback 的别名。[ r217013 ]

已经将 readline(3) API 集成到 libedit 中。这基于 NetBSD 的实现,现在 BSD 许可的工具使用它,而不是 GNU libreadline。[ r220370 ]

makefs(8) 工具现在支持 ISO 9660 格式。[ r224762 ]

libmdlibcrypt 现在支持 SHA-256 和 SHA-512 算法。[ r220496, r220497 ]

netstat(1) 工具现在不会在 netstat -aninetstat -nr 的结果中显示 FreeBSD 内核使用的内部作用域地址表示,这些表示源自 KAME IPv6 堆栈。[ r217642 ]

newsyslog(8) 工具现在支持 xz(1) 压缩。在可选字段中添加了 X 参数以指定压缩方式。[ r218127 ]

pam_group(8) 模块现在支持选项 ruserluserruser 使其根据客户端的组成员身份接受或拒绝,这是默认行为。luser 检查目标用户的组成员身份,而不是客户端的组。如果未指定任何选项, pam_group(8) 将默认假设 ruser 并发出警告。[ r219563 ]

添加了 poweroff(8) 工具。它等同于执行以下命令:

# shutdown -p now

ppp(8) 工具现在支持 name 接口名和 description 接口介绍命令。这些命令具有与 ifconfig(8) 工具中的 name 和 description 子命令相同的功能。r218397

ps(1) 工具现在支持 -o class 选项来显示每个进程的登录类信息,以及选项 -o usertime-o systime,分别显示累计的用户 CPU 时间和系统 CPU 时间。r219307, r219713

rtadvd(8) 守护进程现在支持 noifprefix 关键字,用于在未指定 addr 关键字时禁用从接口收集链接前缀。在 /etc/rtadvd.conf 文件中,使用 noifprefix 和 no addr 可以生成不包含前缀信息选项的 RA 消息。r222732

rtsold(8)rtadvd(8) 守护进程现在支持 RFC 6106 中介绍的 RDNSS 和 DNSSL 选项,即“IPv6 路由通告选项用于 DNS 配置”。新增了一个 rtadvctl(8) 工具,用于控制 rtadvd(8) 守护进程。r222732, r224006

rtld(1) 运行时链接器现在支持共享对象作为 ELF 共享库中的过滤器,支持标准和辅助过滤。链接器处理过滤器时,会推迟加载目标文件,直到引用过滤器符号,除非定义了 LD_LOADFLTR 环境变量或在创建过滤器时指定了 -z loadfltr 选项。r216695

修复了 sed(1) 工具中的竞态条件。当指定 -i 选项时,可能会出现一个短暂的时间窗口,导致没有以原始文件名命名的文件。r217133

sh(1) 程序现在支持 kill 作为内建命令。它允许指定 %job,等同于相应的进程组。请注意,如果发生致命错误,内建命令将返回退出状态 2,而不是其他内建命令的状态 1。r216629

已修复 sh(1) 程序中的一个 bug,保证了 POSIX 兼容性。在 EXIT trap 处理程序中,当没有参数的 exit 命令被指定时,它不会再返回不正确的退出状态。这个 trap 处理程序在 shell 终止时触发。在其他信号的 trap 操作中,exit 命令没有参数时返回的退出状态对应于收到的信号。r217176, r217472

sh(1) 程序现在修复了当前在前台作业退出时的 stdout 缓冲区问题。此前该缓冲区未被刷新,导致消息可能写入错误的文件,尤其是在接下来的命令为内建命令且其 stdout 被重定向时。r217557

sh(1) 程序现在支持 trap 命令中的 -- 参数,用于停止选项处理。r217461

sh(1) 程序中的 %builtin 关键字支持已从 $PATH 变量中删除。现在,所有内建命令都在查找 $PATH 中的目录之前找到。r217206

程序 sh(1) 中的算术表达式处理代码已通过导入 dash 代码进行了更新。现在,它支持条件操作符 (?:),并修复了在算术表达式中评估 &&|| 时的一个 bug。r218466

修复了守护进程 tftpd(8) 中的一个 bug。它在传输大文件时存在互操作性问题。r224536

用户帐户数据库 utmp(5) 已被替换为 utmpx(3)。用户帐户工具现在将只使用 utmpx 数据库文件。wtmpcvt(1) 工具可以用于将 wtmp 文件转换为新格式,从而使其能够使用更新的工具进行读取。r202188

添加了工具 utxrm(8) ,允许手动从 utmpx 数据库中删除条目。这在登录守护进程崩溃或在关机时未能删除条目时非常有用。r218847

zpool(8) 工具现在支持命令 zpool labelclear,用于清除不在池中的驱动器的标签数据。r224171

2.4 第三方软件

ACPI CA 已更新至版本 20110527。[r222544]

awk 已更新至 2011 年 8 月 7 日发布的版本。[r224731]

ISC BIND 已更新至版本 9.8.1-P1。[r228189]

GNU binutils 已更新至 2.17.50 版本(截至 2007 年 7 月 3 日),这是最后一个遵循 GPLv2 的版本。[r218822]

compiler-rt 库已导入,提供低级目标特定接口,如 libgcc 中的函数。[r222656]

dialog 已更新至版本 1.1-20110707。[r224014]

netcat 工具已更新至版本 4.9。[r221793]

tnftp(前身为 lukemftp)已更新至 tnftp-20100108。[r223328]

GNU GCClibstdc++ 已更新至 gcc-4_2-branch 的 rev 127959 版本(最后一个 GPLv2 许可的版本)。[r220150]

gdtoa,FreeBSD libc 库中用于二进制与十进制数字转换的一组例程,已更新至 2011 年 3 月 4 日的快照版本。[r219557]

LESS 程序已更新至版本 v444。[r222906]

已导入 LLVM 编译器基础设施和 clang(C 语言族前端)版本 3.0 。请注意,默认情况下,它不用于构建 FreeBSD 基本系统。在 FreeBSD 构建基础设施中,clang(1)clang++(1)clang-cpp(1) 工具可以分别用于 make(1) 变量 CCCXXCPP。[r208954]

已导入 Openresolv 版本 3.4.4 。resolvconf(8) 工具现在管理 resolv.conf(5) 文件。[r219734]

OpenSSH 工具已更新至 5.8p2,并合并了针对大带宽延迟积产品连接和无加密支持的优化。[r221484, r224638]

pf 数据包过滤器已更新至版本 4.5。[r223637]

sendmail 已更新至版本 8.14.5。[r223067]

timezone 数据库已更新至 tzdata2011m 版本。[r226750]

unifdef(1)工具已更新至版本 2.5.6。[r217698]

xz 程序已从 5.0.0 更新至 2011 年 7 月 11 日的快照版本。[r223935]

2.5 发布工程与集成

新增了一个安装程序 bsdinstall(8),并已集成到安装 ISO 镜像中。安装后,仍可使用sysinstall(8)工具进行配置。r218799

KDE 桌面环境的支持版本(x11/kde4)已从 4.5.5 更新至 4.7.3。

3 从旧版 FreeBSD 升级

3.1 使用 freebsd-update(8) 或基于源代码的升级程序升级

[amd64, i386] 从 FreeBSD 6.2-RELEASE 开始,支持使用 freebsd-update(8) 工具进行版本之间的二进制升级(以及各个安全分支的快照)。二进制升级过程将更新未修改的用户空间实用程序,以及未修改的 GENERIC 内核,这些都是 FreeBSD 官方发布的一部分。freebsd-update(8) 工具要求被升级的主机具备互联网连接。

支持从先前版本进行基于源代码的升级(即从源代码重新编译 FreeBSD 基本系统),具体请参阅 /usr/src/UPDATING 中的说明。

有关升级说明的更多具体信息,请参阅 http://www.FreeBSD.org/releases/9.0R/installation.html

重要:

升级 FreeBSD 之前,务必备份 所有 数据和配置文件。

3.2 用户可见的不兼容性

本节介绍了升级系统之前,你可能需要了解的显著不兼容性。在提交问题报告/向 FreeBSD 邮件列表提问之前,请仔细阅读本节和勘误文档

3.2.1 更新 dialog

dialog 库在 FreeBSD 的新安装程序和 FreeBSD 中用于显示对话框窗口并允许用户选择各种选项。请注意,在 9.0-RELEASE 中更新了该库,并且在一些关键操作上有几个不同之处,这可能会使熟悉 9.0-RELEASE 之前版本的用户感到困惑。例如,在复选框窗口中按下回车键将不再选中一个项目。新版本始终使用空格键选择项目,回车键用于确认/取消选择。

3.2.2 分区元数据完整性检查

FreeBSD 现在会通过 GEOM PART 子系统在磁盘上发现分区表时检查分区元数据的完整性。当磁盘设备准备就绪时,系统会自动执行此检测。内核中的 GEOM PART 类会验证从磁盘元数据获取的所有通用分区参数,如果发现任何不一致,分区表将被拒绝,并显示以下诊断信息:

GEOM_PART: Integrity check failed

此完整性检查默认启用。在 9.0-RELEASE 之前的系统中,不一致性会被默默忽略。因此,升级到 9.0-RELEASE 后,有可能导致系统无法启动。更具体地说,在某些情况下,内核在启动时无法挂载系统分区。

如果发生这种情况,可以使用 loader(8) 的可调选项kern.geom.part.check_integrity 作为解决方法。在启动时,在 loader(8) 提示符下输入以下命令:

set kern.geom.part.check_integrity="0"
boot

这些命令会暂时禁用完整性检查。如果它是启动失败的原因,FreeBSD 内核应在输入命令后像先前版本一样检测到分区。可以将此配置添加到 /boot/loader.conf 中,如下所示:

kern.geom.part.check_integrity="0"

要检查启动后系统中的不一致元数据,可以使用系统上的 gpart(8) 工具。损坏的条目将如下所示:

% gpart show
=>        63  1953525104  mirror/gm0  MBR  (931G) [CORRUPT]
          63  1953525105           1  freebsd  [active]  (931G)

有关更多信息,请参阅 gpart(8) 手册页。

3.2.3 ATA/SATA 子系统现已基于 cam(4)

在 9.0-RELEASE 中,FreeBSD 的 ATA/SATA 磁盘子系统已被新的基于 cam(4) 的实现所替代。cam(4) 代表了通用访问方法(Common Access Method),这是一个最初为 SCSI-2 设计的 API 集,并且作为“SCSI-2 通用访问方法传输和 SCSI 接口模块”进行了标准化。从 FreeBSD 3.X 开始,FreeBSD 便使用 cam(4) 子系统来处理 SCSI 设备。

虽然新的基于 cam(4) 的 ATA/SATA 子系统提供了旧的 ata(4)所没有的各种功能,但它也有一些不兼容之处:

  • ATA/SATA 磁盘现在被识别为名称为 ada0 的设备节点,而不是 ad0。目前,为了保持向后兼容,系统会自动生成一个符号链接 /dev/ad0 指向 /dev/ada0。这个符号链接的生成可以通过 kern.cam.ada.legacy_aliases(默认启用)进行控制。你可能需要更新 /etc/fstab 或考虑使用卷标签(有关详细信息,请参阅 glabel(8))来指定每个要挂载的文件系统。

  • atacontrol(8) 工具不能用于基于 cam(4) 的设备。camcontrol(8) 工具是替代工具。

  • ataraid(4) 软件 RAID 现在由 graid(8) GEOM 类支持。如果你以前有 /dev/ar0,它现在会生成一个名为 /dev/raid/r0 的设备节点。请注意,这不是默认启用的。要启用它,请在 loader(8) 提示符下输入以下行:

    set geom_raid_load="YES"
    boot

    或将以下行添加到/boot/loader.conf:

    geom_raid_load="YES"

    然后重启系统。不会为 /dev/raid/r0 生成像 /dev/ar0 这样的符号链接。因此,如果系统使用 /dev/ar0 作为根分区,挂载本地文件系统时将失败,因为它被重命名为 /dev/raid/r0。在这种情况下,你需要手动更新 /etc/fstab

  • burncd(8) 工具不适用于基于 cam(4) 的设备。请改用sysutils/cdrtools 中的 cdrecord(1) 工具。

更具体的更改说明如下:

  • 已弃用变量 ipv6_enable。系统默认启用 IPv6 功能。如果没有配置 IPv6 地址,则不会发生 IPv6 通信。 9.0-RELEASE 现在支持主机和路由器 IPv6 节点之间的中间配置。变量 ipv6_enable 假定当 ipv6_gateway_enable 设置为 NO(默认值)时,系统是一个主机节点,否则是一个路由器节点。主机节点总是接受 ICMPv6 路由器广告(RA)消息,而路由器则不接受。 在 9.0-RELEASE 中,这一模型依然适用,但按接口进行,而不是按系统进行。具体来说,如果某个接口具有 ACCEPT_RTADV 参数,则该接口将接受 RA 消息以进行 SLAAC(无状态地址自动配置),无论是否启用了数据包转发。 除此之外,还新增了每个接口的 NO_RADR 参数和 sysctl(8) 变量 net.inet6.ip6.rfc6204w3。此变量控制是否应忽略在接受 RA 消息的接口上通过 RA 消息传递的默认路由器列表信息。在 IPv6 路由器模型中,默认不应将 RA 消息作为默认路由器列表的消息来源。因此,当启用 IPv6 数据包转发时,FreeBSD 9.0-RELEASE 会忽略默认路由器列表部分,即使该接口设置了 ACCEPT_RTADV 参数。然而,在某些情况下,如果系统需要作为 CPE(客户驻地设备)工作,获取来自上游网络的 RA 消息用于网络配置,并同时作为 LAN 的路由器,这会导致困难。有关此类配置的更多信息,请参阅 RFC 6204。 为了支持这种配置,可以使用 rc.conf(5) 中的变量 ipv6_cpe_wanif

    ipv6_gateway_enable="YES"
    ipv6_cpe_wanif="em0"

    这意味着 em0 接口接受 RA 消息及其中的默认路由器信息,而其他接口即使设置了 ACCEPT_RTADV 参数,也会忽略默认路由器信息部分。

    ipv6_cpe_wanif 的内部处理会将 sysctl(8) 变量 net.inet6.ip6.rfc6204w3net.inet6.ip6.no_radr 都设置为 1。请注意,这两个变量默认值为 0。当前者设置为 1 时,即使启用了 IPv6 数据包转发,FreeBSD 仍然接受默认路由器列表。管理员需要在其他 RA 接收接口上设置 NO_RADR 参数,以防止其接收意外的默认路由器信息。后者变量表示在这些接口上自动设置 NO_RADR 参数。

    如果在 FreeBSD 9.0-RELEASE 中定义了 ipv6_enable="YES",它将在 /etc/rc.conf 中设置 ipv6_activate_all_interfaces="YES" 并在所有网络接口上启用 ifconfig(8) 选项 inet6 accept_rtadv。请注意,这仅用于向后兼容。在 FreeBSD 9.0-RELEASE 中,不应使用 ipv6_enable

  • 变量 ipv6_ifconfig_IF 已更名为 ifconfig_IF_ipv6。此变量控制是否应在该接口上启用 IPv6 功能。如果未设置 ifconfig_IF_ipv6,则该接口没有 IPv6 功能。 请注意,变量 ifconfig_IF_ipv6 始终需要使用地址族关键字 inet6。如果只需要自动的链路本地地址,则以下行即可:

    ifconfig_em0_ipv6="inet6 auto_linklocal"

    如果你希望所有接口(包括没有 ifconfig_IF_ipv6 行的接口)像以前的版本那样具备完整的 IPv6 功能,你可能想使用稍后解释的变量 ipv6_activate_all_interfaces

    如果在 FreeBSD 9.0-RELEASE 中定义了 ipv6_ifconfig_IF="...",则意味着 ifconfig_IF_ipv6="inet6 ..." 。请注意,这仅用于向后兼容。inet6 地址族关键字对于 ifconfig_IF_ipv6 是必须的,但对于ipv6_ifconfig_IF则不需要。在 9.0-RELEASE 中,不应使用变量 ipv6_ifconfig_IF

  • 没有对应的变量 ifconfig_IF_ipv6 的接口会被 devd(8) 守护进程标记为 IFDISABLED 参数。该参数表示该接口上的 IPv6 通信被禁用。你可以在ifconfig(8)的输出中看到这一点:

    % ifconfig em0
    em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
    ether xx:xx:xx:xx:xx:xx
    inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
    nd6 options=3<PERFORMNUD,IFDISABLED,ACCEPT_RTADV>
    media: Ethernet autoselect (1000baseT <full-duplex>)
    status: active

    要启用 IPv6 功能,必须首先移除此参数。有几种方法可以做到这一点。添加 IPv6 地址会自动移除此参数。也可以通过以下命令显式移除该参数:

    # ifconfig em0 inet6 -ifdisabled

    请注意,定义 ifconfig_IF_ipv6 是启用该接口 IPv6 功能的最合理方法。IFDISABLED 参数的目的是在仅限 IPv4 的环境中防止接口即使具有 IPv6 链路本地地址,也进行不必要的 IPv6 通信。如果你希望在所有接口上启用完整的 IPv6 功能,你可能想使用稍后解释的变量 ipv6_activate_all_interfaces

  • 已修改 net.inet6.ip6.accept_rtadv 变量。它曾是一个系统范围的配置选项,用于控制系统是否接受 ICMPv6 路由通告(RA)消息。在 FreeBSD 9.0-RELEASE 中,这个选项被转换为每个接口的 ifconfig(8) 选项 inet6 accept_rtadv。尽管 sysctl(8) 变量仍然在 FreeBSD 9.0-RELEASE 中可用,但现在它控制每个接口选项是否默认设置。默认值为 0(不接受 RA 消息)。

  • 已修改 net.inet6.ip6.auto_linklocal 变量。它曾是系统范围的配置选项,用于控制网络接口在启动时是否生成 IPv6 链接本地地址。在 FreeBSD 9.0-RELEASE 中,这个选项被转换为每个接口的 ifconfig(8) 选项 inet6 auto_linklocal。尽管 sysctl(8) 变量仍然在 FreeBSD 9.0-RELEASE 中可用,但现在它控制每个接口选项是否默认设置。默认值为 1(自动生成链接本地地址)。

  • 已合并 ipv6_ifconfig_IFIFIF_aliasIF0IF 的功能到 ifconfig_IFIFIF_aliasIF0IF 中。请注意,地址族关键词始终是必需的:

    ifconfig_em0_alias0="inet 192.168.2.10 netmask 255.255.255.255"
    ifconfig_em0_alias1="inet6 2001:db8:1::1 prefixlen 64"

    尽管在 FreeBSD 9.0-RELEASE 中 ipv6_ifconfig_IFIFIF_aliasIFNIF 仍然可用,但它仅用于向后兼容。

  • 新增变量 ipv6_activate_all_interfaces。如果将该变量设置为 YES,即使没有定义 ifconfig_IFIFIF_ipv6 变量,也不会添加选项 IFDISABLED。这可以防止在动态添加的接口上(如 ppp(4)tap(4)ng_iface(4))上出现 IFDISABLED。

3.2.5 Openresolv 和 /etc/resolv.conf

新增了 resolvconf(8) 工具,现在它处理更新 resolv.conf(5) 文件。直接修改 /etc/resolv.conf 可能会被网络配置工具(如 dhclient(8)rtsold(8))覆盖。

3.2.6 磁盘分区管理工具

在早期版本中,提供了多个工具来管理磁盘分区信息。它们已经废弃,取而代之的是 gpart(8) 工具。具体来说,fdisk(8)disklabel(8)bsdlabel(8)sunlabel(8) 工具不再积极支持,尽管这些工具仍可用以保持向后兼容。


此文件和其他与版本相关的文档可以从 http://www.FreeBSD.org/releases/ 下载。

关于 FreeBSD 的问题,请在联系 questions@FreeBSD.org 之前先阅读 文档

所有 FreeBSD 9.0-STABLE 用户应订阅 stable@FreeBSD.org 邮件列表。

如有关于本文档的疑问,请发送电子邮件至 doc@FreeBSD.org

最后更新于