FreeBSD 6.0 RELEASE amd64 发行公告(2005 年 11 月 4 日)
FreeBSD 项目
版权 © 2000, 2001, 2002, 2003, 2004, 2005 FreeBSD 文档项目
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 International, Inc. 在美国及其他国家的商标。带有 SPARC 商标的产品基于 Sun Microsystems, Inc. 开发的架构。
许多制造商和销售商用来区分其产品的标识被声明为商标。在本文件中出现这些标识的地方,如果 FreeBSD 项目已知该商标声明,这些标识后将跟随 “™” 或 “®” 符号。
FreeBSD 6.0-RELEASE 的发布说明包含了对 FreeBSD 基本系统在 6-STABLE 开发线路上所做变更的总结。本文档列出了自上次发布以来发布的相关安全公告,以及对 FreeBSD 内核和用户空间的重大变更。同时,还简要说明了升级的相关事项。
1. 介绍
本文档包含了 FreeBSD 6.0-RELEASE 在 AMD64 硬件平台上的发布说明。它介绍了 FreeBSD 最近新增、修改或删除的功能。它还提供了一些关于从之前版本的 FreeBSD 升级的注意事项。
此版本的 FreeBSD 6.0-RELEASE 是发布版本,可以在 ftp://ftp.FreeBSD.org/
或任何其镜像站点找到。有关获取此版本(或其他版本)FreeBSD 发布的更多信息,请参见《FreeBSD 手册》中的“获取 FreeBSD”附录。
鼓励所有用户在安装 FreeBSD 之前查阅发布说明的附录。附录文档包含了发布周期结束或发布后发现的“最后时刻”信息。通常,它包含已知的漏洞、 安全公告以及文档的修正。有关 FreeBSD 6.0-RELEASE 的更新版附录,可以在 FreeBSD 网站上找到。
2. 新特性
本节介绍了自 5.4-RELEASE 以来 FreeBSD 中最具用户可见性的新增或变更功能。一般来说,除非特别标注为[已合并]特性,否则这里描述的变更是特有于 6-STABLE 分支的。
典型的发布说明条目会列出自 5.4-RELEASE 之后发布的安全公告、新驱动程序或硬件支持、新命令或选项、重大漏洞修复或第三方软件的软件升级。它们还可能列出对主要 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。[已合并]
修复了 FreeBSD/amd64 中的一个潜在权限升级漏洞,该漏洞允许非特权用户直接访问需要更高权限级别才能访问的硬件。更多细节参见安全公告 FreeBSD-SA-05:03.amd64。[已合并]
修复了 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 内核变更
内核调试器 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
来禁用。
System V IPC 对象(消息队列、信号量和共享内存)现在支持强制访问控制(MAC)策略,特别是 mac_biba(4)、mac_mls(4)、mac_stub(4) 和 mac_test(4)。
以“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) 驱动程序。该驱动程序提供了一个软件环回机制,可以实现一个虚拟 AT 键盘,类似于 pty(4) 驱动程序对终端的处理。
FreeBSD 现在即使在单处理器系统上也始终使用本地 APIC 定时器。
默认的 HZ
参数(控制各种内核定时器)已从 100
增加到 1000
,在 i386 和 ia64 架构上已变更。为了减少与其他系统时钟的同步效应,在 amd64 上已从 1024
降低到 1000
。
Shell 命令的最大长度已从 128 字节变更为 PAGE_SIZE
。默认情况下,这个值是 4KB(i386、pc98、amd64 和 powerpc)或 8KB(sparc64 和 ia64)。因此,兼容性模块需要重新构建,以保持与内核中数据结构变化同步。
已新增一个新的可调参数 vm.blacklist
。该参数可以包含空格或逗号分隔的物理地址列表。包含这些物理地址的页面将不会添加到空闲列表中,因此会被 FreeBSD VM 系统忽略。被忽略页面的物理地址也会列在消息缓冲区中。
2.2.1 引导加载器变更
自动启动加载器命令现在支持参数 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) 。它支持各种快捷键,并读取风扇状态和热传感器。
已新增用于处理 acpi(4) 控制的按钮的 acpi_fujitsu(4) 驱动程序,用于 Fujitsu 笔记本。
已新增支持 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"
。
已为 VIA C3 处理器中的 PadLock 安全协处理器新增支持到子系统 crypto(9) 中。
已新增硬件性能监控计数器驱动程序 hwpmc(4) 。此驱动程序虚拟化现代 CPU 中的硬件性能监控设施,并提供从用户级进程使用这些设施的支持。更多详细信息,请参阅 hwpmc(4) 手册页、相关库和用户空间工具。
已新增驱动程序 pcii 以支持 GPIB-PCIIA IEEE-488 卡。[已合并]
驱动程序 atkbd(4) 现在支持一个 0x8
(3 bit)参数,用于在设备探测期间禁用键盘端口测试,因为这可能会导致一些机器挂起,特别是 Compaq R3000Z 系列的 amd64 笔记本。
驱动程序 psm(4) 现在对 Synaptics 触摸板用户提供了更好的支持。它现在能够更好地跟踪低速移动,并支持各种额外的按钮和旋钮。可以通过 hw.psm.synaptics.*
系统控制变量层次来调整这些功能。
驱动程序 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) 加载到正在运行的内核中。[已合并]
设备驱动 ndis(4) 包装现在支持 amd64 系统上的 Windows®/x86-64 二进制文件。[已合并]
已新增驱动 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 的情况下,完全操作数据包目标。此内核选项禁用所有限制,以确保本地生成的数据包的正常行为,并允许将数据包重定向到本地配置的 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) 的系统上安全使用。[已合并]
驱动程序家族 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) 。[已合并]
默认的 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。[已合并]
2.2.6 第三方软件
ACPI-CA 已从 20040527 更新至 20041119。[已合并]
2.3 用户空间变更
已新增二进制差异和二进制补丁工具 bsdiff(1) 和 bspatch(1) 。
实用程序 burncd(8) 现在允许在固定磁盘后执行命令(例如弹出)。
已实现机器特定优化版本的函数 bcmp(3)、bcopy(3)、bzero(3)、memcmp(3)、memcpy(3)、memmove(3)、memset(3)、strcat(3) 和 strcpy(3) 。多个数学函数,如 ceill(3) 和 sqrtf(3),也已被替换为优化版本。
实用程序 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 库中的一个错误,该错误在指定 -reverse
选项时导致 natd(8) 崩溃。
libarchive 库(以及使用该库的 tar(1) 命令)现在支持读取 ISO 映像(带可选的 RockRidge 扩展)和 ZIP 压缩包(支持 deflate 和 none 压缩)。[已合并]
libarchive 库现在支持处理超过 4GB 压缩大小的 ZIP 文件条目(ZIP64 扩展)和 Unix 扩展。
libgpib 库已新增,提供用户空间访问 GPIB 设备(使用驱动程序 pcii),通过 ibfoo
API。[已合并]
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) 设备文件系统管理。
守护进程 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 构建过程中的 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
参数,允许在 LCP ECHO 报告之外独立启用 LCP ECHO。旧版本的 ppp(8) 在协商失败时会恢复到 LCP ECHO 模式。现在必须指定启用 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,导致它总是表现得像总是指定了 -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 的快照更新至 Fedora 的
glibc-2_3_4-21
CVS 仓库标记的快照。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。
最后更新于