FreeBSD 6.0-RELEASE i386 发行说明(2005 年 11 月 4 日)
FreeBSD 项目
版权所有 © 2000, 2001, 2002, 2003, 2004, 2005 The FreeBSD Documentation Project
$FreeBSD: src/release/doc/en_US.ISO8859-1/relnotes/common/new.sgml,v 1.883.2.7.2.1 2005/10/21 16:01:46 yar Exp $FreeBSD 是 FreeBSD 基金会的注册商标。
IBM、AIX、EtherJet、Netfinity、OS/2、PowerPC、PS/2、S/390 和 ThinkPad 是国际商业机器公司(IBM)在美国、其他国家或两者的商标。
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 国际公司在美国及其他国家的商标。带有 SPARC 商标的产品基于 Sun Microsystems, Inc. 开发的架构。
许多制造商和销售商用来区分其产品的名称被声明为商标。在本文件中出现这些名称时,如果 FreeBSD 项目知晓该商标声明,则名称后会附有“™”或“®”符号。
FreeBSD 6.0-RELEASE 的发行说明包含了在 6-STABLE 开发线中对 FreeBSD 基本系统所做的变更摘要。本文列出了自上次发布以来发布的适用安全公告,以及对 FreeBSD 内核和用户空间的重大变更。还简要说明了升级的相关事项。
1 引言
本文档包含了 FreeBSD 6.0-RELEASE 在 i386 硬件平台上的发行说明。它介绍了 FreeBSD 最近新增、修改或删除的功能。还提供了一些从先前版本 FreeBSD 升级的说明。
该版本的 FreeBSD 6.0-RELEASE 是一个发布版本。可以在 ftp://ftp.FreeBSD.org/ 或其任何镜像站点找到。获取此(或其他)FreeBSD 发布版本的方法,请参阅 FreeBSD 手册 中的 “获取 FreeBSD”附录。
所有用户在安装 FreeBSD 前都应咨询发布勘误。勘误文档会更新发布周期结束时或发布后发现的“最新”信息。通常,它包含已知的 bug、安全公告和文档修正。可以在 FreeBSD 网站上找到 FreeBSD 6.0-RELEASE 的最新勘误副本。
2 新功能
本节介绍了自 5.4-RELEASE 以来 FreeBSD 中最显著的新增或变更功能。一般来说,除非特别标注为 [已合并] 特性,否则这里描述的变更特属于 6-STABLE 分支。
典型的发行说明条目记录了自 5.4-RELEASE 之后发布的安全公告、新的驱动程序或硬件支持、新命令或选项、重大 bug 修复或第三方软件升级。它们还可能列出主要 Port/软件包或发布工程实践的变更。显然,发行说明不能列出每个版本间对 FreeBSD 所做的所有变更;本文档主要集中在安全公告、用户可见的变化和主要架构改进。
2.1 安全公告
修复了 fetch(1) 工具中的漏洞。该漏洞允许恶意的 HTTP 服务器覆盖客户端内存的任意部分。详见安全公告 FreeBSD-SA-04:16.fetch。[已合并]
修复了 procfs(5) 和 linprocfs(5) 中的漏洞,该漏洞可能允许恶意的本地用户读取内核内存的一部分或通过导致系统崩溃来发起本地拒绝服务攻击。更多信息请参阅安全公告 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,能够列出当前持有睡眠互斥锁(以及当前线程的自旋锁)的进程和线程。[已合并]
内核崩溃转储格式改为 ELF,以支持更大内存(超过 4GB)环境。
ichsmb(4) 驱动程序现在可以作为可加载的内核模块使用。
jail(8) 功能现在支持新的 sysctl security.jail.chflags_allowed,控制在 Jail 内使用 chflags(1) 的行为。如果设置为 0(默认值),则 Jail 内的 root 用户会被当作普通用户对待;如果设置为 1,则 Jail 内的 root 用户与未 Jail 的 root 用户相同。[已合并]
sysctl security.jail.getfsstatroot_only 重命名为 security.jail.enforce_statfs,并支持以下策略:
0
显示所有挂载点,没有任何限制。
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 调度器中的若干个 bug。[已合并]
新增细粒度锁定,使得 VFS 堆栈的大部分内容可以在不使用 Giant 锁的情况下运行。默认情况下,在 alpha、amd64 和 i386 架构上启用此功能,可以通过设置加载器可调参数(和 sysctl 变量)debug.mpsafevfs 为 0 来禁用。
修复了处理器间中断(IPI)处理中的 bug,该 bug 可能导致 SMP 系统在高负载下崩溃。更多细节参见勘误通知 FreeBSD-EN-05:03.ipi。[已合并]
System V IPC 对象(消息队列、信号量和共享内存)现在支持强制访问控制(MAC)策略,特别是 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 现在需要内核选项 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) 驱动程序。该驱动程序提供了一个软件环回机制,可以实现一个虚拟 AT 键盘,类似于 pty(4) 驱动程序对终端的处理。
FreeBSD 现在即使在单处理器系统上也始终使用本地 APIC 定时器。
默认的参数 HZ(控制各种内核定时器)在 i386 和 ia64 架构上从 100 增加到 1000。为了减少与其他系统时钟的同步效应,在 amd64 上从 1024 降低到 1000。
Shell 命令的最大长度从 128 字节变更为 PAGE_SIZE。默认情况下,这个值是 4KB(i386、pc98、amd64 和 powerpc)或 8KB(sparc64 和 ia64)。因此,兼容性模块需要重新构建,以保持与内核中数据结构变化同步。
新增可调参数 vm.blacklist。该参数可以包含空格或逗号分隔的物理地址列表。包含这些物理地址的页面将不会添加到空闲列表中,因此会被 FreeBSD VM 系统忽略。被忽略页面的物理地址也会列在消息缓冲区中。
2.2.1 引导加载程序变更
新增了支持串行控制台的 boot0 版本。可以使用 boot0cfg(8) 工具将其写入磁盘,并将 /boot/boot0sio 作为 -b 选项的参数。
cdboot 现在可以规避从 USB CDROM 驱动器引导时在某些系统上观察到的 BIOS 问题。
自动引导加载程序命令现在支持参数 prompt。
如果变量 autoboot_delay 设置为 -1,自动引导加载程序命令现在将完全禁止用户中断启动过程。[已合并]
新增了加载器菜单选项,用于设置 hint.atkbd.0.flags=0x1。此设置能在没有 PS/2 键盘连接的情况下使 USB 键盘正常工作。
默认禁用“beastie”引导菜单。
2.2.2 硬件支持
acpi(4) 驱动程序现在在挂起时关闭 ACPI 和 PCI 设备或将其置于较低功率状态,并在恢复时重新打开。这一行为可以通过将 sysctl debug.acpi.do_powerstate 和 hw.pci.do_powerstate 设置为 0 来禁用。
新增用于 IBM 笔记本的驱动程序 acpi_ibm(4)。它支持各种快捷键,并读取风扇状态和热传感器。
新增用于处理 Fujitsu 笔记本上 acpi(4) 控制按钮的 acpi_fujitsu(4) 驱动程序。
新增支持 Sony 笔记本电脑上 Sony Notebook Controller 的驱动程序 acpi_sony。
驱动程序 atkbdc(4)、atkbd(4) 和 psm(4) 已重写为更加独立于总线的方式,现在支持在 sparc64 平台上找到的 EBus。
新增灵活的处理器速度控制框架。它为各种驱动程序提供了通过调整处理器速度来控制 CPU 电源使用的方法。更多详细信息请参阅 cpufreq(4) 手册页。[已合并] 目前支持的驱动程序包括 ichss(用于 ICH 的 Intel SpeedStep)、acpi_perf(ACPI CPU 性能状态)和 acpi_throttle(ACPI CPU 节流)。后两个驱动程序包含在 acpi(4) 驱动程序中。可以通过设置设备提示来单独禁用它们,例如 hint.ichss.0.disabled="1"。
在 crypto(9) 子系统中新增了对 VIA C3 处理器中 PadLock 安全协处理器的支持。
新增硬件性能监控计数器驱动程序 hwpmc(4)。此驱动程序虚拟化现代 CPU 中的硬件性能监控设施,并提供从用户级进程使用这些设施的支持。更多详细信息,请参阅 hwpmc(4) 手册页、相关库和用户空间工具。
移除了 OLDCARD 子系统。NEWCARD 系统现在用于所有 PCCARD 设备支持。
新增驱动程序 pcii 以支持 GPIB-PCIIA IEEE-488 卡。[已合并]
驱动程序 atkbd(4) 现在支持 0x8(第 3 位)标志,用于在设备探测期间禁用键盘端口测试,因为这可能会导致一些机器挂起,特别是 Compaq R3000Z 系列的 amd64 笔记本。
新增驱动程序 pbio(4),支持直接访问运行在模式 0(简单 I/O)下的 Intel 8255A 可编程外围接口(PPI)芯片。
驱动程序 psm(4) 现在对 Synaptics 触摸板用户提供了更好的支持。它现在能够更好地跟踪低速移动,并支持各种额外的按钮和旋钮。可以通过 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) 驱动时,必须在内核配置中包含 ath_rate_onoe、ath_rate_amrr 或 ath_rate_sample 之一。
驱动 bge(4) 现在支持 altq(4) 框架,并支持 BCM5714、5721、5750、5751、5751M 和 5789 芯片。[已合并]
新增 USB 通信设备类以太网驱动 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 标记的支持现在默认禁用,因为该功能与混杂模式之间的某些交互可能引发问题。[已合并]
驱动 fxp(4) 中,默认禁用以太网流控,以防止在系统崩溃或停留在内核调试器时,子网出现问题。[已合并]
已移除驱动 gx(4),因为它不再积极维护,而驱动 em(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。[已合并]
移除了 musycc 驱动(用于 LanMedia LMC1504 T1/E1 网络接口卡),因为不再使用。
驱动 my(4) 现在是 MPSAFE。
使用设备驱动 ndis(4) 包装机制的驱动现在的构建和加载方式发生了变化。现在可以将 ndis(4) 驱动作为模块预构建,或静态编译到内核中。现在可以使用 ndisgen(8) 工具构建单个驱动;结果是一个内核模块,可以使用 kldload(8) 加载到正在运行的内核中。[已合并]
新增驱动 nve(4),支持 nVidia nForce MCP 网络适配器。
驱动 pcn(4) 现在是 MPSAFE。
驱动 re(4) 现在支持 altq(4) 框架。[已合并]
驱动 sf(4) 现在支持设备轮询和 altq(4),并且是 MPSAFE。[已合并]
驱动 sk(4) 中的几个编程错误已修正。这些错误特别影响 SMP 系统,可能会导致崩溃、页面错误、中断的 SSH 连接或文件传输损坏。更多信息请参阅勘误通知 FreeBSD-EN-05:02.sk。[已合并]
驱动 sk(4) 现在支持 altq(4)。该驱动现在还支持 Yukon 系列接口的 jumbo 帧。[已合并]
驱动 vge(4) 现在支持设备轮询 (polling(4))。
wlan(4) 框架中的 802.11 设备支持已得到大幅改进。除了架构上的变更外,还包括完成的 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”。
当使用 gid、jail 和/或 uid 规则选项时,ipfw(4) 系统现在可以与 debug.mpsafenet=1 一起工作(此调节变量默认为 1)。[已合并]
ipfw(4) 和 dummynet(4) 系统现在支持 IPv6。
ipfw(8) 现在支持通过 divert 套接字对 altq(4) 数据包进行分类和标记。还可以指定匹配特定有效载荷大小的 TCP 数据包的规则。
ipfw(8) 的 ipfw fwd 规则现在支持在指定内核选项 IPFIREWALL_FORWARD_EXTENDED(除 IPFIREWALL_FORWARD 之外)的情况下,完全操作数据包目标。此内核选项禁用所有限制,以确保本地生成的数据包的正常行为,并允许将数据包重定向到本地配置的 IP 地址。请注意,须谨慎编写 ipfw(8) 规则,以确保像 PMTU 发现这样的问题不会中断。[已合并]
ipfw(8) 系统现在支持仅限 IPv4 的规则。
ipnat(8) 现在允许重定向规则适用于非 TCP/UDP 数据包。[已合并]
正在进行的工作旨在减少网络协议栈使用 Giant 锁,并改进锁定策略。
libalias 库现在可以构建为内核模块。
网络接口的链路状态变化通知现在发送到 /dev/devctl。
新的 NetGraph 节点 ng_ipfw(4) 提供了 ipfw(4) 和 netgraph(4) 设施之间的简单接口。
新增的 NetGraph 节点 ng_nat(4) 用于执行 NAT 功能。
新增的 NetGraph 节点 ng_netflow(4) 允许运行 FreeBSD 的路由器执行 NetFlow 版本 5 导出。[已合并]
新增的 NetGraph 节点 ng_tcpmss(4) 用于修改 TCP 数据包的 MSS 选项。
驱动程序 sppp(4) 现在包括 Frame Relay 支持。[已合并]
驱动程序 sppp(4) 现在是 MPSAFE 的。
FreeBSD 路由表现在要求路由的网关与路由本身属于同一地址族。工具 route(8) 现在拒绝不同地址族的组合。例如:
实现了新的 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 扩展在最近的互联网草案中被认为是有缺陷的。
集成到 FreeBSD 中的 KAME IPv4 IPsec 实现现在支持 TCP-MD5。[已合并]
随机临时端口号分配在高连接速率下导致了一些端口重用问题。现在,在高连接速率期间,此功能被禁用;每当新连接的创建速度超过 net.inet.ip.portrange.randomcps 每秒时,端口号随机化将在接下来的 net.inet.ip.portrange.randomtime 秒内被禁用。默认值为这两个 sysctl 变量分别为 10 和 45。[已合并]
对 IPX/SPX 协议栈中的许多数据结构应用了细粒度锁定。虽然此时尚未完全 MPSAFE,但通常可以在不使用 Giant 锁的情况下安全使用 IPX/SPX(换句话说,sysctl 变量 debug.mpsafenet 可以设置为 1)。
Unix 域套接字现在支持选项 LOCAL_CREDS 和 LOCAL_CONNWAIT。选项 LOCAL_CREDS 为接收方提供了一种机制,可以通过 recvmsg(2) 控制消息接收进程的凭据。选项 LOCAL_CONNWAIT 使 connect(2) 函数阻塞,直到在监听套接字上调用 accept(2)。更多信息请参见 unix(4) 手册页。
2.2.4 磁盘与存储
驱动程序 amr(4) 现在可以在使用 pae(4) 的系统上安全使用。[已合并]
新增驱动程序 arcmsr(4),支持 Areca ARC-11xx 和 ARC-12xx 系列 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)。[已合并]
新增驱动程序 hptmv(4),支持 HighPoint RocketRAID 182x 系列。[已合并]
驱动程序 ips(4) 现在支持某些现代 ServeRAID 型号的内核崩溃转储。[已合并]
删除了驱动程序 matcd(4)。[已合并]
GENERIC 内核中默认的 SCSI 启动时探测延迟从 15 秒减少到 5 秒。
移除了旧版 vinum(4) 子系统,取而代之的是基于 geom(4) 的新版本。
驱动程序 twa(4) 更新至 9.2 版本(适用于 FreeBSD 5.2.1),该版本由 3ware 网站分发。
有关新挂载的 cd9660 文件系统的信息(例如是否存在 RockRidge 扩展)现在仅在内核以详细模式启动时才会打印。此变更是为了减少(通常不必要的)内核日志消息。[已合并]
2.2.5 文件系统
不再在挂载时重新计算“脏”UFS 和 UFS2 文件系统的汇总信息,而是由后台 fsck(8) 进行。这一改变提高了在崩溃后挂载大文件系统时的启动速度。可以通过将 sysctl 变量 vfs.ffs.compute_summary_at_mount 设置为非零值来恢复之前的行为。[已合并]
修复了 NFS 服务器中的内核 Panic。更多信息请参阅错误通知 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。[已合并]
函数 getaddrinfo(3) 现在在指定 AF_UNSPEC 时,首先查询 A 类型的 DNS 资源记录,然后查询 AAAA 记录。一些损坏的 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 共享库的主版本号已提高。在从旧版 FreeBSD 升级的 64 位平台上,所有使用 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) 选项的缩写形式进行了弃用处理。检测到缩写时,会打印警告信息并提示正确的完整形式。
kldstat(8) 工具现在支持 -m 选项,以返回特定内核模块的状态。[已合并]
LC_CTYPE 文件的磁盘格式变更为机器无关格式。
libkvm 现在支持在 amd64 和 i386 平台上的 ELF 崩溃转储,支持 32 位平台上的大于 4GB 的崩溃转储,以及支持 i386 平台上的 PAE 崩溃转储。
mixer(8) 工具现在支持 -S 选项。此选项与 -s 相同,但不会输出混音字段分隔符。
修复了 libalias 库中的错误,该错误在 natd(8) 中指定 -reverse 选项时会导致核心转储。
libarchive 库(以及使用该库的 tar(1) 命令)现在支持读取 ISO 映像(带可选的 RockRidge 扩展)和 ZIP 压缩包(支持 deflate 和 none 压缩)。[已合并]
libarchive 库现在支持处理超过 4GB 压缩大小的 ZIP 文件条目(ZIP64 扩展)和 Unix 扩展。
新增 libgpib 库,通过 ibfoo API 提供用户空间访问 GPIB 设备(使用驱动程序 pcii)的功能。[已合并]
增加了 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) 设备文件系统管理。
新增实用程序 mkuzip(8),用于压缩文件系统镜像,供 GEOM_UZIP geom(4) 模块使用。[已合并]
守护进程 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 一直使用形式为 NOFOO 和 NO_FOO 的 Makefile 变量。为了保持一致性,采用前者命名约定的变量已转换为 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 选项,匹配最旧的(最近启动最少的)匹配进程。
实用程序 portsnap(8) 用于下载、更新和提取 FreeBSD Ports 的压缩快照。
新增 powerd(8) 程序,用于管理电源消耗。
程序 ppp(8) 现在实现了参数 echo,允许独立于 LQR 报告启用 LCP ECHO。旧版本的 ppp(8) 在协商失败时会回退到 LCP ECHO 模式。现在必须指定 enable echo 才能获得此行为。[已合并]
已向程序 ppp(8) 新增选项 disable NAS-IP-Address 和 disable NAS-Identifier,以支持早期 RFC 2865 RADIUS 服务器。
修复了程序 pppd(8) 中的两个 bug,可能导致不正确的 CBCP 响应,违反了 Microsoft PPP 回调控制协议第 3.2 节。[已合并]
实用程序 ps(1) 现在支持选项 -o 中的 jid 关键字。它显示每个进程的 jail(2) ID。
程序 pstat(8) 现在支持 -h 选项,用于以 SI 前缀(如 K、M 和 G)打印交换区大小,这些前缀用于形成二进制倍数。
工具集 rescue(8) 现在包括 bsdtar(1),而不是 GNU tar。
实用程序 restore(8) 恢复了读取 FreeBSD 版本 1 转储带的功能。[已合并]
修复了实用程序 rexecd(8) 中的 bug,该 bug 导致它总是表现得像指定了 -i 选项一样。[已合并]
删除了实用程序 rexecd(8)。FreeBSD 树中没有 rexec 客户端,客户端功能 rexec(3) 仅存在于 libcompat 中。
实用程序 rm(1) 现在支持 -I 选项,要求在递归删除目录或命令行列出超过 3 个文件时确认(一次)。
实用程序 rm(1) 在指定了 -r 和 -f 选项时,尝试删除不存在的目录将不再输出诊断消息。这种行为是 SUSv3 版本的要求。
实现了以下 ISO/IEC 9899:1999 标准函数:roundl()、lroundl()、llroundl()、truncl() 和 floorl()。
新增库函数 rpmatch(3),用于检查字符串是否为当前区域设置中的肯定或否定响应。
动态链接器 rtld(1) 现在支持通过环境变量 LD_LIBMAP 指定库替代。此变量将覆盖 libmap.conf(5) 中的条目。[已合并]
删除了 rune(3),非标准多字节和宽字符支持接口。
sed(1) 现在支持 -l 选项,使其输出支持行缓冲。[已合并]
函数 strftime(3) 现在支持一些 GNU 扩展,例如 -(不填充)、_(使用空格作为填充)和 0(零填充)。[已合并]
函数 syslog(3) 现在是线程安全的。[已合并]
实用程序 syslogd(8) 现在打开额外的域套接字(默认路径为 /var/run/logpriv),权限为 0600,以供特权程序使用。这样可以防止当域套接字由于本地拒绝服务攻击而没有足够的缓冲区空间时,特权程序发生死锁。[已合并]
syslogd(8) 现在支持 -S 选项,用于变更特权套接字的路径名。这对于防止守护进程接收到来自本地套接字的消息非常有用(默认情况下使用 /var/run/log 和 /var/run/logpriv)。[已合并]
实用程序 syslogd(8) 现在允许在主机名规格中使用 : 和 % 字符。这些字符用于 IPv6 地址和作用域 ID。[已合并]
systat(1) -netstat 显示现在支持 IPv6。[已合并]
实用程序 tail(1) 的 -f 选项现在支持一次多个文件。[已合并]
程序 telnet(1) 和 telnetd(8) 现在支持 -S 选项,用于指定数字 TOS 字节。
在传递给程序 telnet(1) 的端口号前加上 + 字符现在将禁用选项协商,并允许传输高位设置的字符。此功能旨在支持 telnet(1) 作为协议测试工具的常见用法。
新增 tcpdrop(8) 命令,用于关闭选定的 TCP 连接。该命令来自 OpenBSD。[已合并]
what(1) 现在支持参数 -q,使其打印匹配的文本,但不格式化它。
whois(1) 现在支持参数 -k,用于查询 whois.krnic.net(韩国国家互联网发展局),该机构保存了韩国国内的 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) 现在支持在启动时变更网络接口名称。[已合并] 示例:
rc.d/moused 脚本现在在作为第二个参数提供设备名称时,可以启动、停止或检查特定设备:
要为不同的鼠标设备使用不同的 rc.conf(5) 设置,可以将设备名称作为设置的一部分。例如,如果鼠标设备为 /dev/ums0,可以使用以下配置:
rc.conf(5) 现在支持变量 tmpmfs_flags 和 varmfs_flags。这些变量可用于向实用程序 mdmfs(8) 传递额外选项,以自定义 md(4) 文件系统的创建细节,例如启用/禁用软更新、指定文件系统的默认所有者等。[已合并]
以下脚本已移除,因为它们是 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 dhclient OpenBSD 3.7 的版本,取代了 FreeBSD 先前版本中使用的 ISC DHCP 客户端。
FILE 从 4.10 更新至 4.12。
GNU GCC 从 2004 年 7 月 28 日的 3.4.2-prerelease 更新至 3.4.4。
为 GNU grep 新增来自 Fedora 的 grep-2.5.1-48 源 RPM 的多个错误修复和性能增强补丁。
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标记的快照。libz 从 1.2.1 更新至 1.2.2。
lukemftp 从 NetBSD 2004 年 4 月 26 日的快照更新至 2005 年 5 月 16 日的快照。
引入了来自 OpenBSD 的 netcat 2005 年 2 月 4 日的快照。更多信息请参阅 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.3 更新至版本 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 Supplicant 组件。更多信息请参阅 wpa_supplicant(8)。
2.5 Ports/软件包
pkg_create(1) 工具现在支持参数
-R。当从本地已安装的软件包创建包文件时,若指定该参数,将同时为该包依赖的所有软件包创建包文件。pkg_version(1) 工具新增参数
-q,用于隐藏端口版本比较字符(<、=和>)的输出。pkg_version(1) 工具新增参数
-I,仅使用INDEX文件判断软件包是否过时。[已合并]从 CVS 仓库中移除了文件 ports/INDEX*(记录了 Ports 中所有条目的索引)。[已合并] 这些文件生成频率较低,通常过时且不准确。需要索引文件的用户(例如用于 portupgrade(1) 等程序)可以通过以下两种方法获取:
在 ports/ 树顶运行
make index,基于当前 Ports 生成索引文件。在 ports/ 树顶运行
make fetchindex,通过网络获取索引文件。此文件通常会保持一天内的准确性。
2.6 发行工程与集成
在之前的 FreeBSD 版本中,disc1 CD-ROM(或 ISO 镜像)是一个可启动的安装盘,包含基本系统、Ports 和常用软件包。disc2 CD-ROM(或 ISO 镜像)是一个可启动的“修复盘”,带有实时文件系统,用于紧急修复。此布局现在已经变更。除 ia64 架构外,disc1 镜像现在包含基本系统分发文件、Ports 和实时文件系统,适合初始安装和修复使用。(由于体积原因,ia64 的实时文件系统放在单独的磁盘上。)软件包被移至单独的磁盘,disc2 镜像中包括常见的软件包,如桌面环境。FreeBSD 文档项目的文档也存放在 disc2 中。[已合并]
支持的 GNOME 桌面环境版本从 2.6.2 更新至 2.10.2。有关在 FreeBSD 上运行 GNOME 的更多信息,请访问 FreeBSD GNOME 项目 页面。[已合并]
注意:
使用旧版本 GNOME 桌面环境的用户(x11/gnome2)在升级时需要特别小心。直接通过 FreeBSD Ports 使用 portupgrade(1)(sysutils/portupgrade)升级将导致严重问题。请仔细阅读 http://www.FreeBSD.org/gnome/docs/faq210.html 上的说明,并使用 gnome_upgrade.sh 脚本正确升级至 GNOME 2.10。
支持的 KDE 桌面环境版本从 3.3.0 更新至 3.4.2。有关在 FreeBSD 上运行 KDE 的更多信息,请访问 KDE on FreeBSD 页面。[已合并]
注意:
使用旧版本 KDE 的用户应遵循 KDE on FreeBSD 页面或 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)。
基本系统中的手册页经过了一系列清理,提升了内容和展示质量。交叉引用现在更加准确和一致,所有章节均采用标准标题格式,标记也得到了改进。
以下可能违反 IETF 版权的手册页(基于 RFC 创建)已替换: 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 或更高版本进行。使用更早系统的用户需先升级至 FreeBSD 5.3 或更新版本,再升级到 FreeBSD 6.0-RELEASE。
重要:
在升级 FreeBSD 前,务必备份 所有 数据和配置文件。
此文件及其他发行相关文档可从 ftp://ftp.FreeBSD.org/ 下载。
如对 FreeBSD 有疑问,请在联系 questions@FreeBSD.org 之前阅读 文档。
如对本文档有疑问,请发送电子邮件至 doc@FreeBSD.org。
最后更新于