FreeBSD 项目
版权所有 © 2000, 2001, 2002, 2003, 2004 FreeBSD 文档项目
FreeBSD 5.2-RELEASE 的版本说明包含了对 5-CURRENT 开发分支中 FreeBSD 基本系统最近变更的总结。本文档列出了自上一个版本发布以来发布的适用安全公告,以及对 FreeBSD 内核和用户空间的重大变更。还简要介绍了升级的相关事项。
本文档包含了 FreeBSD 5.2-RELEASE 在 AMD64 硬件平台上的版本说明。它介绍了最近新增、改变或删除的 FreeBSD 特性,并提供了从之前版本升级的相关说明。
此版本的 FreeBSD 5.2-RELEASE 是一个发布版本。可以在 ftp://ftp.FreeBSD.org/ 或任何镜像站点找到。有关获取此版本(或其他)FreeBSD 发布版的更多信息,可以参考 《获取 FreeBSD》 附录,该内容位于 FreeBSD 手册 中。
对于刚接触 FreeBSD 5-CURRENT 系列版本的用户,还应阅读《FreeBSD 5.2-RELEASE 早期采用者指南》。这份文档通常与版本说明一起发布(可以是 FreeBSD 发布版的一部分或在 FreeBSD 网站上找到)。它包含了使用 FreeBSD 5.2-RELEASE 相比基于 FreeBSD 4-STABLE 开发分支的版本的优缺点的关键信息。
所有用户在安装 FreeBSD 之前,强烈建议查看发布的勘误(修订说明)。修订说明文件会更新“临时发布”的信息,通常是在发布周期的最后阶段或发布之后发现的信息。它通常包含已知的漏洞、安保通告以及文档修正。FreeBSD 5.2-RELEASE 的最新修订说明可以在 FreeBSD 网站上找到。
本节介绍了 FreeBSD 5.1-RELEASE 之后 FreeBSD 中许多用户可见的新特性或变更。它包括独属于 5-CURRENT 分支的项目,以及一些可能已经合并到其他分支(在 FreeBSD 5.1-RELEASE 之后)的特性。后者将标记为 [已合并]。
典型的版本说明条目记录了在 5.1-RELEASE 之后发布的安全公告、新驱动程序或硬件支持、新命令或选项、主要的 bug 修复或第三方软件升级。它们还可能列出主要 Port/包或发布工程实践的变化。显然,版本说明不能列出从一个版本到下一个版本之间对 FreeBSD 所做的每一个变更;本文档主要关注安全公告、用户可见的变化和主要的架构改进。
修复了 realpath(3) 中的一个单字节缓冲区溢出问题。虽然该修复在 FreeBSD 5.1-RELEASE 发布之前已被提交(因此 5.1-RELEASE 并未受影响),但在发布文档中未提及此问题。详情请参见安全公告 FreeBSD-SA-03:08。[已合并]
修复了一个可能导致内核尝试发送无效信号的 bug。该 bug 可能会导致内核崩溃,或者在某些情况下,未经授权修改内核内存。更多信息请参见安全公告 FreeBSD-SA-03:09。[已合并]
修复了 iBCS2 模块中的一个 bug,该 bug 可能导致泄露内核内存内容。该模块在 FreeBSD 中默认未启用。更多信息请参见安全公告 FreeBSD-SA-03:10。[已合并]
修复了 OpenSSH 中的一个缓冲区管理 bug,该 bug 可能导致崩溃。更多信息请参见安全公告 FreeBSD-SA-03:12。[已合并]
修复了 sendmail 中的一个缓冲区溢出问题。更多信息请参见安全公告 FreeBSD-SA-03:13。[已合并]
修复了一个 bug,该 bug 可能导致内核在 ARP 缓存代码中造成资源耗尽,最终导致系统崩溃。更多信息请参见安全公告 FreeBSD-SA-03:14。[已合并]
修复了 OpenSSH PAM 挑战/响应认证子系统中的多个错误。这些错误的影响不同;详细信息请参见安全公告 FreeBSD-SA-03:15。[已合并]
修复了 procfs(5) 和 linprocfs(5) 中的一个 bug,该 bug 可能导致泄露内核内存的内容。更多信息请参见安全公告 FreeBSD-SA-03:17。[已合并]
修复了 OpenSSL 中的四个独立安全漏洞,这些漏洞可能允许远程攻击者使使用 OpenSSL 的应用程序崩溃,或以应用程序的权限执行任意代码。更多信息请参见安全公告 FreeBSD-SA-03:18。[已合并]
修复了 BIND 中一个潜在的拒绝服务问题。更多信息请参见安全公告 FreeBSD-SA-03:19。[已合并]
acpi(4) 驱动的 CPU 组件现在支持单核和 SMP 系统的 C1-C3 空闲状态,根据 ACPI 2.0 标准,在处理器空闲时提供节能/降温功能。此外,节流支持已更新为 ACPI 2.0。
dcons(4) “傻瓜控制台”驱动已新增,提供本地和远程控制台。可以通过 FireWire 使用 dcons_crom(4) 驱动访问该控制台。 dconschat(8) 工具提供用户访问 dcons(4) 设备。
现在支持通过 LIBICONV 内核选项进行多字节字符集转换方法。
puc(4) PCI 通用通信驱动现在支持将并行端口连接到 ppc(4) 驱动。
uart(4) 驱动已新增,以支持各种类别的 UART(通用异步接收器/发送器)设备。它是 sio(4) 驱动的类似物,但支持更广泛的设备。此驱动程序对于支持某些架构(如 ia64 和 sparc64)上的串行端口是必需的。
已实现内核软件看门狗功能。更多信息请参见 watchdog(4) 和 watchdogd(8)。
交换分页器已被重构。用户可见的变化包括布局策略的变更(从固定宽度条带化到设备间的轮询方式)以提高 I/O 吞吐量,消除了交换设备数量的编译时限制,并减少了内存开销。
新的驱动程序 ath(4) 和 ath_hal(4) 为基于 AR5210、AR5211 和 AR5212 芯片的 802.11a/b/g 设备提供支持。
新增驱动程序 bfe(4) ,用于支持基于 Broadcom BCM4401 的快速以太网适配器。
bge(4) 现在支持基于 Broadcom 5705 的千兆以太网网卡。[已合并]
修复了驱动 bge(4) 中的一个 bug,防止它在 10 Mbps 下正常工作。
驱动程序 em(4) 现在支持使用 sysctl 调优设置中断延迟,而无需重新编译驱动。
新增驱动程序 fatm(4) 。该驱动程序支持 NATM 和 NgATM,兼容 Fore/Marconi PCA200 ATM 卡。
新增驱动程序 re(4) ,提供对 RealTek RTL8139C+、RTL8169、RTL8169S 和 RTL8110S PCI 快速以太网和千兆以太网控制器的支持。
sk(4) 现在支持 SK-9521 V2.0 和基于 3COM 3C940 的千兆以太网网卡。[已合并]
新增驱动程序 utopia(4) ,支持 25Mbit/sec、155Mbit/sec 和 622Mbit/sec ATM 物理层配置、状态及统计报告,适用于最常用的 ATM-PHY 芯片。
驱动程序 wi(4) 的挂起/恢复支持现在在设备配置为关闭时能正常工作。[已合并]
驱动程序 wi(4) 现在应再次能与 Lucent 802.11b 接口正常工作。
已重写 802.11 支持层,以支持未来的扩展和新功能。
驱动程序 xe(4) 现在支持 CE2、CEM28 和 CEM33 卡,以及 multicast(4) 数据报。此外,驱动程序中的若干 bug 已被修复。
多个网络驱动程序的中断处理程序已标记为 MPSAFE,意味着它们可以在没有 Giant 锁的情况下运行。已转换的驱动程序包括: ath(4)、em(4)、ep(4)、fxp(4)、sn(4)、wi(4) 和 sis(4)。
IPv4 协议实现中的 ip_flow
特性已被 ip_fastforward
特性取代。ip_fastforward
尝试加速数据包转发的简单情况,将转发的数据包直接处理到输出接口,而不经过队列或 netisrs。如果无法处理特定的数据包,它会将数据包传递给正常的 ip_input
例程进行处理。可以通过将 net.inet.ip.fastforwarding sysctl 变量设置为 1 来启用此功能。
新增了选项 IP_ONESBCAST
,用于启用无定向的 ip(4) 广播,发送到特定的网络接口。
启用 IPFILTER 功能还需要启用选项 PFIL_HOOKS
。
已修复了 ipfw(4) 限制规则处理中的一个 bug,该 bug 可能会导致各种 panic。[已合并]
ipfw(4) 规则现在支持逗号分隔的地址列表(如 1.2.3.4, 5.6.7.8/30, 9.10.11.12/22
),并允许在逗号后新增空格,使地址列表更易读。[已合并]
ipfw(4) 规则现在支持 C++ 样式的注释。每个注释与其规则一起存储,并通过 ipfw(8) show
命令显示。[已合并]
ipfw(8) 现在可以修改 ipfw(4) 规则集 31
,原本该规则集是只读的并用于默认规则。可以通过 ipfw delete set 31
命令删除它们,但不会通过 ipfw flush
命令删除。这实现了“持久规则”的灵活形式。更多详情请参阅 ipfw(8)。[已合并]
新增了 NetGraph 节点类型 ng_atmpif(4) 。它模拟了 HARP 物理接口,并允许在没有真实硬件的情况下运行 HARP ATM 堆栈。
已为协议独立的多播路由(pim(4))新增内核支持。[已合并]
FreeBSD 蓝牙协议栈已更新:
libsdp 已重新采用 BSD 风格许可证实现。这是因为 Linux BlueZ 代码是通过 GPL 分发的。
工具 hccontrol(8) 现在支持四个新命令:Read
/Write_Page_Scan_Mode
和 Read
/Write_Page_Scan_Period_Mode
。
守护进程 hcsecd(8) 现在将链接密钥存储在磁盘上。不再需要每次都进行设备配对。
修复了内核模块 ng_hci(4) 和 ng_l2cap(4) 中的 NetGraph 超时问题,该问题可能会导致访问已释放的数据结构。
修复了无法在 FreeBSD 5.1-RELEASE 上构建的 ng_ubt(4) 模块。
rfcomm_sppd(1) 和 rfcomm_pppd(8) 现在支持通过 SDP 查询 RFCOMM 通道。通过手动指定 RFCOMM 通道可以禁用此行为,这些工具将不会使用 SDP 查询。
新增工具 sdpcontrol(8) ,类似于 Linux BlueZ SDP 包中的工具 sdptool 。
从 KAME 项目导入了若干 IPv6 和 IPSec 代码的修复和更新。
IPv6 高级套接字 API 现在符合 RFC 3542(也称为 RFC 2292bis),而非 RFC 2292。使用该 API 的应用程序已相应更新。
新增了对 RFC 3484 的源地址选择部分的支持。可以使用 ip6addrctl(8) 工具来配置地址选择策略。
TCP 实现中新增了 tcp_hostcache
特性。它缓存了过去 TCP 会话的测量参数,以便为后续连接提供更好的初始起始值,无论是来自同一源地址还是目的地址。以前存储在路由表中的类似信息已被移除。
驱动程序 amr(4) 现在支持系统崩溃转储。[已合并]
驱动程序 ata(4) 进行了重大重构。一个较为显著的变化是,ata(4) 驱动程序现在已不再受制于巨型内核锁。请注意,ATA 软件 RAID 系统现在必须在其内核配置文件中包括 device ataraid
,因为它不再由 device atadisk
自动包含。
ccd(4) 现在可以在原始磁盘和其他 geom(4) 提供程序上运行。
驱动程序 da(4) 不再尝试向 USB 和 FireWire 设备发送 6 字节命令。已禁用这些设备的特殊处理(这些处理现在应该不再需要);若要恢复旧行为,请在内核配置中新增 options DA_OLD_QUIRKS。[已合并]
现在可以作为内核模块加载各种 geom(4) 模块,即:geom_apple
、geom_bde
、geom_bsd
、geom_gpt
、geom_mbr
、geom_pc98
、geom_sunlabel
、geom_vol_ffs
。
新增模块 GEOM_FOX
,用于检测并在多个冗余路径之间选择连接同一设备。
twe(4) 驱动程序现在支持 3ware 通用 API。[已合并]
通过包括内核选项 CD9660_ICONV
、MSDOSFS_ICONV
、NTFS_ICONV
和 UDF_ICONV
,现在支持 cd9660、msdosfs、ntfs 和 udf 文件系统的多字节字符转换。
修正了 smbfs 中的一些越界错误,这些错误导致其在处理 15 字符 NetBIOS 名称时无法正常工作。
statfs
结构体的某些成员的大小已从 32 位变更为 64 位,以更好地支持多 TB 大小的文件系统。
执行源代码升级的用户必须确保内核和用户空间的版本一致,可以遵循文档中的源代码升级程序进行操作。
如果定义了内核选项 COMPAT_FREEBSD4
,则存在一个向后兼容版本的 statfs(2) 系统调用。强烈建议在内核中包括此选项。
使用 statfs(2) 的程序需要重新编译。已知的示例包括 devel/gnomevfs2、mail/postfix 和 security/cfg 等 Port。
通过引入密歇根大学的 Citi NFSv4 客户端实现,已增加对 NFSv4 的支持。更多信息请参见 mount_nfs4(8) 和 idmapd(8) 手册页。
acpiconf(8) 现在支持 -i
选项来打印电池信息。
acpidb(8),一个 ACPI DSDT 调试器,已添加。
arp(8) 现在支持 -i
选项,用于将当前操作的范围限制在特定接口上的 ARP 条目中。此选项仅适用于显示操作。在具有大量网络接口的路由器上应当十分有用。[已合并]
已新增 atmconfig(8) 程序,用于配置 ATM 驱动程序和 IP-over-ATM 功能。
chroot(8) 现在允许通过 -u
、-g
和 -G
选项分别在 chroot 环境中设置用户、主组或组列表。[已合并]
compat4x.i386 库已更新,以与 FreeBSD 4.9-RELEASE 中的库保持一致。
由于 devfs 的强制存在,工具 dev_mkdb
已不再需要,并已移除。
dhclient(8) 现在会轮询网络接口的状态,仅在接口处于活动状态时发送 DHCP 请求。轮询间隔可通过 -i
选项进行控制。
fsck(8) 的 lost+found
目录的默认模式现在为 0700
,而不是 01777
。[已合并]
fsck_ffs(8) 和 newfs(8) 现在在每个文件系统的根目录中创建一个 .snap 目录,并设为组操作员。 fsck_ffs(8)、mksnap_ffs(8) 和 dump(8) 将把文件系统快照写入此目录。这一变化避免了在创建快照期间锁定文件系统根目录的访问,也有助于非根用户创建快照。
ffsinfo(8) 工具已更新,以支持 UFS2 文件系统,并已重新启用。
iasl(8) 工具,ACPI 源语言(ASL)和 ACPI 机器语言(AML)的编译器/反编译器,已新增。
ifconfig(8) 现在支持接口的 staticarp
选项,用于禁用该接口的 ARP 请求发送。
initgroups(3) 库函数中的修复现已使得如果登录过程无法成功设置包括 所有 为用户定义的组的进程凭证时,登录将失败。当前的内核限制为 16 个组;管理员可能需要检查用户是否定义了超过 16 个组,否则他们将无法登录。
ipfw(8) 的 list
和 show
命令现在支持规则号范围。[已合并]
ipfw(8) 现在支持 -n
参数,用于测试命令的语法,而不实际变更任何内容。[已合并]
kdump(1) 现在支持 -p
选项,用于仅显示与特定进程相关的跟踪事件,并且新增 -E
参数,用于显示相对于转储开始的时间戳。
last(1) 现在支持 -n
参数,用于限制其输出报告中的行数。
libalias 库,natd(8) 和 ppp(8) 现在支持 Cisco Skinny Station 协议,这是 Cisco IP 电话与 Cisco Call Manager 之间通信的协议。请注意,当前不支持将 Call Manager 放在 NAT 网关后面。[已合并]
已移除 libcipher DES 加密库。所有其功能已由 libcrypto 库提供,所有使用 libcipher 的基本系统程序已转换为使用 libcrypto。
已新增 libkiconv 库,以支持在内核中使用可加载的字符集转换表。
libwrap 和 tcpdchk(8) 现在默认配置支持扩展的 tcp_wrappers 语法。
locale(1) 实用程序已重新实现,并符合 POSIX 标准。新增的 -m
选项可以显示所有可用的字符集。
mount(8) 工具现在支持在指定 -v
参数时,显示每个文件系统的文件系统 ID,此外 umount(8) 工具现在也支持文件系统 ID 以及常规的设备和路径名称。这允许在两个或多个文件系统共享相同的设备和挂载点名称时,明确指定要卸载的文件系统。
mount_cd9660(8)、mount_ntfs(8) 和 mount_udf(8) 工具现在支持 -C 选项,用于指定本地字符集以转换 Unicode 文件名。可以使用此选项指定多字节字符集。
mount_msdosfs(8) 工具现在支持 -M
选项,用于指定文件系统中文件夹的最大权限。[已合并]
mount_msdosfs(8) 工具现在支持 -D
选项,用于指定 MS-DOS 编码页和 -L
选项,用于指定本地字符集。这些选项用于转换文件名的字符集。/usr/libdata/msdosfs
表已被淘汰。
mount_nwfs(8)、mount_portalfs(8) 和 mount_smbfs(8) 工具已从 /sbin
移动到 /usr/sbin
。
nologin(8) 程序已重新用 C 语言实现(之前是 shell 脚本)。
rc.conf(5) 变量 ntpd_flags
对于 ntpd(8) 现在默认包含-f /var/db/ntpd.drift
。
已新增 PAM 模块 pam_guest(8),允许访客登录。它取代了 pam_ftp(8) 模块。
ps(1) 和 top(1) 现在支持 -H
参数,用于显示每个进程中的所有内核可见线程。
已修复 rarpd(8) 无法识别可移动以太网网卡的问题。
repquota(8) 现在支持 -n
参数,以数值形式显示用户和组。
rtld(1) 现在默认包括 libmap
功能;WITH_LIBMAP 编译选项已不再需要,并已废弃。更多信息可以在 libmap.conf(5) 中找到。
savecore(8) 现在支持 -C
参数,仅指示 coredump
文件的存在或缺失。
工具 symorder 已被移除。现在所有内核都使用 ELF 格式,因此不再需要 a.out
格式工具链。
sysinstall(8) 现在提供选择替代 MTA 的功能。目前支持 exim 和 Postfix。
sysinstall(8) 不再支持系统“安全配置文件”;该功能已被替换为单独的调优选项,用于启用和禁用 sshd(8) 并设置系统的安全级别。
systat(1) 现在包括 IPv6 和 ICMPv6 流量的显示。 [已合并]
uname(1) 现在支持 -i
参数,以返回内核标识。此名称也可以通过 sysctl 变量 kern.ident
获取。
许多位于 /bin
和 /sbin
的实用程序现在作为静态链接的“crunched”二进制文件提供,存放在 /rescue
目录中。此功能类似于 sysinstall(8) 安装的 /stand
目录,但 /rescue
包含更多功能,并作为 buildworld
/installworld
操作的一部分更新。更多细节可以在 rescue(8) 中找到。
许多位于 /bin
和 /sbin
的可执行文件现在使用动态链接而非静态链接构建。此特性支持在这些目录中使用可加载的 PAM 和 NSS 模块,也减少了根文件系统的存储需求,因为使用了共享库。在 buildworld
中可以通过定义 Makefile 变量 NO_DYNAMICROOT
来禁用此特性。请注意,静态链接的“crunched”可执行文件可在 /rescue
目录中使用,用于系统修复和恢复操作。
ACPI-CA 代码已从 20030228 快照更新为 20030619 快照。
amd 已从 6.0.7 更新为 6.0.9。
awk 来自贝尔实验室的版本已从 2003 年 3 月 14 日的快照更新为 2003 年 7 月 29 日的快照。
BIND 已从 8.3.4 更新为 8.3.7。 [已合并]
GCC 已从 3.2.2 更新为 2003 年 11 月 6 日的 3.3.3 版本后快照。
注意: 以前的 GCC 版本在启用 -march=pentium4 优化时会生成错误的代码。此问题在此次升级中已修复,并且早期针对 CPUTYPE=p4 的解决方法已被移除。
GNU Readline 已从 4.2 更新为 4.3。
GNU Sort 已从 textutils 2.0.21 版本更新为 textutils 2.1 版本。
Heimdal Kerberos 已从 0.5.1 更新为 0.6。
ISC DHCP 客户端已从 3.0.1rc11 更新为 3.0.1rc12。
lukemftp 已从 1.6beta2 更新为来自 NetBSD 的 2003 年 11 月 11 日的快照。
OpenPAM 已从 Dianthus'' 版本更新为
Dogwood'' 版本。
OpenSSL 已从 0.9.7a 更新为 0.9.7c。 [已合并]
sendmail 已从 8.12.9 更新为 8.12.10。 [已合并]
texinfo 已从 4.5 更新为 4.6。 [已合并]
时区数据库已从 tzdata2003a 版本更新为 tzdata2003d 版本。 [已合并]
如果定义了 GNU_CONFIGURE
,则会将 WRKDIR
中的所有 config.guess
和 config.sub
实例替换为来自 PORTSDIR/Template
的主版本。这使得旧版本的 Port(包含这些脚本的旧版本)能够在较新的架构(如 ia64 和 amd64)上构建。
不再为 alpha、amd64 和 ia64 架构构建软盘安装镜像。
GNOME 的支持版本已从 2.2.1 更新为 2.4。 [已合并]
KDE 的支持版本已从 3.1.2 更新为 3.1.4。 [已合并]
为了减少信息的重复(以及随之而来的维护一致性的困难),硬件说明中支持的许多特定设备已被移至系统手册页。这项工作在本次发布时仍在进行中。
已启动土耳其语(tr_TR.ISO8859-9
)翻译项目。
强烈 建议已有 FreeBSD 系统的用户 阅读《FreeBSD 5.2-RELEASE 早期采用者指南》。此文档通常在发布媒体中以 EARLY.TXT
文件名提供,或者可以在其他包含发布说明的地方找到。它提供了一些关于升级的说明,但更重要的是,它还讨论了升级到 FreeBSD 5.X 与继续使用 FreeBSD 4.X 的相对优点。
重要:
当然,在升级 FreeBSD 之前,应该先备份 所有 数据和配置文件。
此文件及其他与发布相关的文档可以从 ftp://ftp.FreeBSD.org/ 下载。
关于 FreeBSD 的问题,请在联系 questions@FreeBSD.org 之前阅读 文档。
关于此文档的问题,请发送电子邮件至 doc@FreeBSD.org。