FreeBSD 4.5 RELEASE i386 发行公告(2002 年 1 月 29 日)

FreeBSD 项目

版权所有 © 2000、2001、2002 由 FreeBSD 文档项目所有

$FreeBSD: src/release/doc/en_US.ISO8859-1/relnotes/common/new.sgml,v 1.22.2.191.2.1 2002/01/25 20:58:19 bmah Exp $

FreeBSD 4.5-RELEASE 的发行说明包含了自 4.4-RELEASE 以来在 FreeBSD 基本系统中所做变更的总结。列出了内核和用户空间的变更,以及自上次发布以来发布的适用于基本系统的安全公告。还包括了有关升级的简要说明。

1 引言

本文档包含了 FreeBSD 4.5-RELEASE 在 IA-32 硬件平台上的发行说明。它介绍了自 4.4-RELEASE 以来新增(或变更)的 FreeBSD 新特性。同时,它还提供了一些关于从先前版本升级的说明。

此发行版的 FreeBSD 4.5-RELEASE 是一个正式发行版。可以在 ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/ 或其所有镜像站点找到。有关如何获取此(j及其他)版本的 FreeBSD 发行版的更多信息,请参阅 FreeBSD 手册中的“获取 FreeBSD” 附录。

2 新特性

本节介绍了自 4.4-RELEASE 以来,FreeBSD 中最显著的新特性或变更。典型的发行说明项目包括新驱动程序或硬件支持、新命令或选项、重要的错误修复或第三方软件升级。还列出了自 4.4-RELEASE 以来发布的适用于基本系统的安全公告。

由于篇幅限制,这里未列出许多对 FreeBSD 所做的其他变更。例如,文档已得到修正和改进,修复了小的 bug,审计并修正了不安全的编码实践,并清理了源代码。

2.1 内核变更

amdpm(4) 驱动程序已新增,提供对 AMD 756 芯片组的系统监控功能的访问。

kern.maxvnodes 限制现在正确地限制了使用中的 vnode 数量。之前只有没有缓存页面的 vnode 可以被释放,这可能导致在访问许多小文件的大内存机器上,vnode 数量无限增长。一个 vnlru 内核线程帮助刷新并重用 vnode。

新增一个新的内核选项 KVA_SPACE,可以用来重新配置内核虚拟地址空间的大小。

Linux 模拟现在支持 Port emulators/linux_base-7(RedHat 7.X 模拟)所需的内核功能。

内核配置参数 MAXTSIZ、DFLDSIZ、MAXDSIZ、DFLSSIZ、MAXSSIZ 和 SGROWSIZ 都是加载器可调节的(kern.maxtsiz, kern.maxdfldsiz 等)。

现在,指定 maxusers 内核配置参数的值为 0 会导致在启动时计算一个适当的值(根据内存大小,介于 32 和 384 之间)。此值现在是所有 GENERIC 内核的默认值。

新增支持 NEC PC-98NOTE 电源管理控制器的驱动程序 pmc。

现在,内核的加载地址已导出到符号表中,移除了各种硬编码常量,以便像 ps(1) 这样的工具能够与编译时使用不同地址的内核一起工作。

大型进程(或大量进程)的核心转储不再长时间锁定机器。

为每个进程分配的内核状态的内存页面数量已从 2 增加到 3,以减少内核栈溢出(及随之而来的进程数据结构损坏)的可能性。

系统负载平均值计算现在对采样的时机新增一些抖动,以避免与定期运行的进程同步。

如果正在构建带有模块的调试内核(即使用 makeoptions DEBUG=-g),则模块也将被构建为包含调试支持,以确保完整性。此变更的副作用是,使用调试内核构建并安装的模块现在会占用比以前更多的磁盘空间。

安装 CD 上的内核现在与 mfsroot 镜像分开。这为构建自定义 FreeBSD 发行版提供了更多的灵活性。

2.1.1 处理器/主板支持

2.1.2 启动加载器

新增的 cdboot 引导实用程序为光盘提供了更好的兼容性,特别是对于那些未完全实现 El Torito 可启动光盘标准的某些 BIOS。这种引导加载器支持“无仿真”模式启动,从而消除了在可启动光盘上使用仿真软盘映像的需求。这反过来允许在支持 CD 启动的机器上使用完整的内核进行安装(而不是在软盘上使用的精简内核)。

注意:

尽管此功能在 FreeBSD 4.5-RELEASE 的 ISO 镜像中未使用,但它可能会在未来的版本中得到应用。与此同时,用户在构建自定义发行版时可以使用此功能。

loader(8) 现在提供了对加载 bzip2 压缩内核和模块的可选支持(在编译时启用,默认关闭)。

FreeBSD 启动加载器现在能够从具有 16K 磁盘块的文件系统启动(旧限制为 8K)。

FreeBSD 启动加载器现在支持参数 -p,用于在探测阶段强制内核在每行输出后暂停。

2.1.3 网络接口支持

an(4) 驱动程序现在支持“监视”模式,可以通过 ancontrol(8)-M 选项设置。

bge(4) 驱动程序已新增,支持 Broadcom BCM570x 系列千兆以太网控制器,包括 3Com 3c996-T、SysKonnect SK-9D21 和 SK-9D41,以及 Dell PowerEdge 2550 服务器上的内置千兆以太网 NIC。支持输出 TCP/IP 校验和卸载、巨帧和 VLAN 标签插入/去除,以及中断调节。

dc(4) 驱动程序现在支持基于 Conexant LANfinity RS7112 芯片的 NIC。

de(4) 驱动程序现在在 21143 的发送和接收单元之间执行轮询仲裁,而不是优先处理接收单元。这在高负载下提供了 10-15% 的转发速率提升。

驱动程序 dgm 已从 FreeBSD -CURRENT 更新。

已新增驱动程序 em(4) ,支持基于 Intel 82542、82543 和 82544 千兆以太网控制器芯片的 NIC。该驱动程序支持 82543 和 82544 基适配器的发送/接收校验和卸载和巨帧。

faith(4) 设备现在可加载、卸载和克隆。

驱动程序 fxp(4) 现在支持 Intel 的可加载微代码,用于实现接收端中断合并和数据包捆绑,适用于支持这些功能的 NIC。此支持可以通过在 ifconfig(8) 中使用选项 link0 来启用。

已新增驱动程序 gx(4) ,支持基于 Intel 82542 和 82543 千兆以太网控制器芯片的 NIC。支持光纤和铜缆两种变体。两种板卡都支持 VLAN 标签/插入,并且 82543 还支持 TCP/IP 校验和卸载。

新增 sbni 驱动程序,用于支持 Granch SBNI12 系列 ISA 和 PCI 点对点通信接口。Port sysutil/sbniconfig 可以用于配置这些设备。

驱动程序 sis(4)现在支持 SiS 900 风格的板载以太网控制器,适用于 SiS 635 和 735 主板芯片组。

驱动程序 sis(4) 现在支持 VLAN。

vlan(4) 设备现在可加载、卸载和克隆。

驱动程序 wx(4) 现在已弃用,亦不再正式维护。具有 Intel Pro/1000 千兆以太网接口的用户应使用 em(4) 驱动程序或驱动程序 gx(4) 。驱动程序(em(4) 由 Intel 支持,但仅适用于 i386 架构。 驱动程序 gx(4) 由 FreeBSD 项目开发,支持多个平台。)

xl(4) 驱动程序现在支持实施此功能的 NIC 的发送和接收端 TCP/IP 校验和卸载,例如 3C905B、3C905C 和 3C980C。

修复了驱动程序 xl(4) 中的一个错误,涉及统计溢出中断处理,导致中等到高数据包速率时出现慢速问题;现已修复。

每个接口的 ifnet 结构现在具有指示网络接口支持的功能集以及哪些功能已启用的能力。ifconfig(8) 支持查询这些功能。

通过将每个接口的 if_inaddr 线性列表替换为哈希表,改进了具有大量 IP 别名的主机的性能。

某些网络驱动程序(特别是 dc(4)sis(4))的包转发性能得到了提升,消除了不必要的缓冲区复制。

2.1.4 网络协议

bpf(4) 的读取超时功能现在在与 select(2)/poll(2) 以及 pthreads 一起使用时工作得更加正确。

bridge(4)dummynet(4) 已经做了一些增强和错误修复,并且现在是可以加载的模块。

TCP NewReno 实现中的一个错误已经修复,该错误可能会在某些情况下导致吞吐量下降。

TCP 的默认缓冲区大小,由 sysctl 变量 net.inet.tcp.sendspacenet.inet.tcp.recvspace 控制,现已分别增加到 32K 和 64K。以前,这两个缓冲区的默认值为 16K。为了尽量避免增加拥塞,net.inet.tcp.local_slowstart_flightsize 的默认值已从无限大改为 4。

注意:

在繁忙的主机上,新的更大缓冲区大小可能需要手动增加 NMBCLUSTERS 参数,无论是在内核配置文件中,还是通过引导加载器可调参数 kern.ipc.nmbclusters 进行增加。可以使用 netstat -mb 来监控 mbuf 集群的状态。

一个导致 TCP 连接在发送方看到零大小窗口时可能发生停滞的错误已被修复。

FreeBSD 中的 TCP 实现现在实现了缓存,用于存储未完成的、接收到的 SYN 段。传入的 SYN 段现在会导致条目被放入缓存,直到 TCP 三次握手完成,此时会像往常一样为连接分配内存。此外,所有的 TCP 初始序列号(ISN)都作为 cookie 使用,从而允许在缓存中删除条目,但仍然可以接受其相应的 ACK。所谓的 syncachesyncookies 特性组合使得主机对基于 TCP 的拒绝服务攻击更加具有抵抗力。此功能的工作由美国国防高级研究计划局和 NAI Labs 赞助。

2.1.5 磁盘和存储

已经更新驱动程序 aac(4) ,包含了适配器发起的命令处理、磁盘设备的新增/删除、崩溃转储功能以及管理 CLI 所需的 ioctl(2) 命令。该驱动程序现在完全符合 Adaptec 的要求,并获得了其批准。

ata(4) 驱动程序现在支持更多种类的芯片组,具体请参见硬件说明。

ata(4) 驱动程序现在支持 48 位寻址。现在支持大于 137GB 的设备。

ata(4) 驱动程序现在修复了使用 VIA 82C686B 南桥芯片的系统中的一些数据损坏问题。

ciss 驱动程序,支持用于 SCSI-3 支持的通用接口的设备,已经加入。该驱动程序支持 Compaq SmartRAID 5* 系列 RAID 控制器(5300、532、5i)。

isp(4) 驱动程序现在支持 Qlogic 2300 和 2312 光纤通道 PCI 卡。

ncv、nsp 和 stg SCSI 驱动程序现在可以作为模块构建和加载。

2.1.6 文件系统

FFS 的目录布局偏好算法(dirprefs)已经变更。它不再将目录块散布到磁盘上,而是尝试将相关的目录块聚集在一起。操作大规模目录层级(如 FreeBSD Ports 树)时,已经表现出显著的速度提升。对于新目录,这一变化是透明且自动的。

虚拟内存子系统现在默认支持 UFS 目录内存需求(此行为由 sysctl 变量 vfs.vmiodirenable 控制)。

修复了问题,该问题导致无法从 SCSI CDROM 挂载根文件系统(一直支持 ATAPI CDROM)。

默认情况下,UFS_DIRHASH 基于哈希的查找优化现在在 GENERIC 内核中启用,用于大目录。

通过使用 fsx 文件系统测试工具发现的一些文件系统代码中的错误已经修复。在某些情况下(主要与 NFS 使用有关),这些错误可能会导致数据损坏或内核 Panic。

2.1.7 PCCARD 支持

从 FreeBSD -CURRENT 版本的 pcic(4) 驱动程序合并了多个特性,包括对 ToPIC 基于的笔记本电脑的改进支持、对某些控制器的 3.3V 支持以及错误修复。

2.1.8 多媒体支持

urio(4) 驱动程序已加入,用于 Diamond Rio 系列 MP3 播放器。(由于某种原因,此驱动程序的手册页已提交至 FreeBSD 4.3-RELEASE。)

2.1.9 第三方软件

IPFilter 现在支持 IPv6。

2.1.9.1 isdn4bsd

isdnphone(8) 现在支持选项 -k,用于通过键盘功能发送消息到 PBX 或交换局。

isic(4) 驱动程序现在支持 Compaq Microcom 610 ISDN ISA PnP 卡。

2.2 与安全相关的变更

FreeBSD 4.4-RELEASE 中已禁用每个用户的 ~/.login.conf 文件,以规避由一个 bug 引起的安全漏洞。该 bug 已经修复,且此功能已经重新启用。

OpenSSH 中的一个安全漏洞,可能允许用户在启用了 UseLogin yes 的情况下执行任意权限的代码,已经被修复。请注意,该设置的默认值为 UseLogin no。(参见安全通告 FreeBSD-SA-01:63。)

pkg_add(1) 使用不安全的临时目录可能允许本地攻击者在安装二进制包时修改其内容。这个漏洞已被修复。(参见安全通告 FreeBSD-SA-02:01。)

pw(8) 中的一个竞争条件,可能会暴露 /etc/master.passwd 的内容,已经被消除。(参见安全通告 FreeBSD-SA-02:02。)

k5su(8) 中的一个 bug,可能允许放弃超级用户权限的进程重新获得这些权限。该 bug 已被修复。(参见安全通告 FreeBSD-SA-02:07。)

exec(3) 系统调用中的一个竞争条件,可能导致本地用户获得提升的权限,已经被修复。(参见安全通告 FreeBSD-SA-02:08。)

2.3 用户空间变更

arp(8) 现在为每个 ARP 条目打印适用的接口名称。

camcontrol(8) 的简化版现已可通过安装软盘使用。这使得它能够在启动后重新扫描连接的设备,或者显示连接到 SCSI 总线的设备(例如,从“紧急全息外壳”中)。作为副作用,它允许通过基于 aic(4) 的 PCMCIA SCSI 适配器(如 Adaptec APA-1460)在安装过程中使用设备。

cat(1) 现在可以从 UNIX 域套接字读取。

compat4x 兼容性发行版现在包括不依赖于 librsaUSA.so 和 librsaINTL.so 库的 libcrypto.so.1 和 libssl.so.1 版本。这一变更提高了与为 FreeBSD 4.1-RELEASE 及更早版本构建的二进制文件的兼容性。

edquota(8) 现在可以使用选项 -f,将原型配额分配(通过 -p 指定)限制到单个文件系统。

find(1) 现在可以接受不同时间单位,应用于 -[acm]time 原语。

fmt(1) 已被重写;重写修复了许多以前行为中的错误。

ftpd(8) 现在支持选项 -o-O,分别禁用 RETR 命令;前者适用于所有人,后者仅适用于访客用户。结合 -A 选项和适当的文件权限,这些可以用来创建相对安全的匿名 FTP 上传盒,供他人上传文件。

groups(1)whoami(1) shell 脚本现在不再需要;它们的功能已完全合并到 id(1) 中。

ipfw(8) 现在默认不显示动态防火墙规则,除非传递 -d 选项。选项 -e 列出过期的动态规则。

ipfw(8) 新增新的防火墙规则限制类型,用于限制地址对之间的会话数量。

keyinfo(1) 现在是 C 程序,而非 Perl 脚本。

libfetch 已同步到 FreeBSD -CURRENT 版本;其中一个新特性是现在支持认证回调。

libstand 现在支持包含 bzip2 压缩文件的文件系统。

本地化名称已重命名,以提高与 X11R6 及其他多个 UNIX 版本使用的名称的兼容性。例如,en_US.ISO_8859-1 本地化名称已变更为 en_US.ISO8859-1/etc/locale.alias/etc/man.alias/etc/nls.alias 中的条目提供了向后兼容性。下面的表格总结了本地化变更:

FreeBSD 4.4-RELEASE
FreeBSD 4.5-RELEASE

ISO_ ***

ISO ***

ru_SU ***

ru_RU ***

DIS_ ***

ISO *** -15

*** .ASCII

*** .US-ASCII

lpd(8) 现在在其控制文件中支持某些 o-type 打印文件操作,这允许打印由 MacOS 10.1 生成的 PostScript 文件。

natd(8) 现在支持 -log_ipfw_denied 选项,用于记录因被 ipfw(8) 规则阻止而无法重新注入的分组。

netstat(1) 现在有参数 -z 用于重置统计信息。

netstat(1) 现在有参数 -S,用于以数字方式打印地址,而端口名则以符号方式打印。

newfs(8) 中,每组的默认柱面数现在根据当前文件系统参数计算得出,这是最大允许值。可以通过 -c 选项进行覆盖。以前,默认值固定为 16。此变更有助于提高 fsck(8) 性能并减少碎片。

newfs(8) 创建的新文件系统的默认块和碎片大小现在分别为 16384 字节和 2048 字节(旧的默认值为 8192 字节和 1024 字节)。这一变更通常会提高性能,但会浪费一些磁盘空间。

newsyslog(8) 现在支持使用 bzip2(1) 压缩日志文件。

已添加 nl(1),行号过滤程序。

pciconf(8) 现在支持 -v 选项,用于显示配置设备的厂商/设备信息,并与 -l 选项一起使用。默认的厂商/设备数据库可以在 /usr/share/misc/pci_vendors 中找到。

ping(8) 现在支持 -A 选项,在丢包时发出蜂鸣声。

route(8) 在变更间接路由时现在会更详细地显示信息,在修改的路由与网关路由相同的情况下。

route(8) 现在使用 host/bits 语法,而不是 net/bits 语法,以与 netstat(1) 兼容。

route(8) 现在可以创建仅“代理”的发布 ARP 条目。

route(8) 的 add 命令现在支持 -ifp-ifa 修饰符。

send-pr(1) 现在可以使用 -a 选项将文件包含到问题报告的 Fix: 部分。

sh(1) 现在实现了作为内建命令的 test,以提高效率。

sysctl(8) 现在支持 -e 选项,以使用 = 分隔变量名和值,而不是使用 :。此功能对于生成可以反馈给 sysctl(8) 的输出非常有用。

sysinstall(8) 现在具有在安装过程中加载 KLD 的能力。

当从安装媒体运行时,sysinstall(8) 会自动加载在 mfsroot 软盘或文件系统映像的 /stand/modules 目录中找到的任何设备驱动程序。请注意,任何加载的驱动程序将不会出现在内核的启动消息中;sysinstall(8) 的调试屏幕将提供更多信息。

sysinstall(8) 现在默认在它创建的所有文件系统上启用软更新(除根文件系统外)。

sysinstall(8) 的“自动”分区模式已收到更新,提供了更合理的默认值,用于创建分区的大小;自动调整大小的分区现在也可以回收删除其他分区时释放的空间。

syslogd(8) 现在可以通过 -b 选项绑定到特定地址(而不是使用所有可用地址)。

syslogd(8) 现在接受 -c 参数来禁用重复行压缩。

以前,vnconfig(8) 在使用 -f(配置文件)选项时只能配置 16 个设备。这个限制已被移除。

wall(1) 现在支持参数 -g,向指定组的所有用户发送消息。

whois(1) 支持 -c 选项,用于指定一个国家代码,以帮助将查询定向到特定的 whois 服务器。

2.3.1 Contributed Software

FreeBSD 附带的 IPFilter 版本现在包括了程序 ipfs(8),该程序允许将为 NAT 条目和有状态规则创建的状态信息保存到磁盘,并在重新启动后恢复。这些功能的引导配置由 rc.conf(5)支持。

程序套件 NTP已更新至 4.1.0 版本。

OpenSSH 已更新至 2.9 版,新增了两个程序:sftp(1)ssh-keyscan(1)。其中的一些增强功能包括:现在支持重新加密现有的 SSH 会话,ssh-agent(1) 现在支持 DSA 密钥的认证转发,并且在 ssh(1) 中新增实验性的 SOCKS4 代理。

注意:

协议 1 和 2 仍然是 /etc/ssh/ssh_config 中的默认协议设置。在 FreeBSD -CURRENT 中,默认协议为 2,1。

已添加 smmsp 和 mailnull 用户到 /etc/master.passwd 中。如果没有设置 confDEF_USER_ID,默认情况下sendmail将使用 mailnull 用户以提高安全性。以前,如果 mailnull 用户不存在,则使用 daemon 用户。此变更可能会在向文件或程序(如mail/majordomo)发送邮件时产生权限问题。通过在系统的配置文件 * .mc 中新增以下行,可以恢复先前的行为:

    define(`confDEF_USER_ID', `daemon')

已导入用户空间实用程序 smbfs 的版本 1.4.3 。smbutil(1)mount_smbfs(8)现在可以在基本系统中使用,无需安装 Port net/smbfs。请注意,mount_smbfs(8) 将自动将模块 smbfs.ko 加载到内核中,即使 LIBMCHAIN 和 LIBICONV 未编译到内核中。

tcsh 已更新至 6.11 版本。

时区数据库已更新至 tzdata2001d 版本。

2.3.1.1 CVS

CVS 已更新至 1.11.1p1。

cvs(1)现在支持选项 -T,用于从仓库更新沙箱的 CVS/Template 文件。

cvs(1) diff 现在支持选项 -j,用于执行与分支标签相关的修订差异。

2.3.2 Ports/软件包

由于认证过程的延迟,FreeBSD 的本地 JDK 支持将在 4.5-RELEASE 之后发布。当发行版可用时,将在 FreeBSD 网站以及 FreeBSD 公告邮件列表<freebsd-announce@FreeBSD.org>上发布公告。

pkg_create(1)现在支持选项 -b,用于从本地安装的软件包创建包文件。

pkg_delete(1)现在支持选项 -r,用于递归删除软件包。

XFree86版本 4.2.0 在 FreeBSD 4.5-RELEASE 的发行日期前几天发布。因此,FreeBSD 团队没有时间测试和评估新版本以便纳入发行版。因此,FreeBSD 4.5-RELEASE 包含较旧的 4.1.0 版本的 XFree86 软件包。安装较新版本的 XFree86 可以通过更新(发布后)版本的 FreeBSD Ports 来完成;有关如何操作的说明,请参见 使用 Ports 部分以及 FreeBSD 手册中的相关章节。

3 从旧版 FreeBSD 升级

如果你正在从先前版本的 FreeBSD 进行升级,通常有三种选择:

  • 使用 sysinstall(8) 的二进制升级方法。这个方法可能是最快的,尽管它假设你的 FreeBSD 安装没有使用任何特殊的编译选项。

  • 完全重新安装 FreeBSD。严格来说,这不是一种升级方法,并且通常不如二进制升级方便,因为它需要你手动备份和恢复 /etc 目录的内容。然而,在你想要(或需要)变更磁盘分区的情况下,这可能是有用的。

  • /usr/src 中的源代码进行升级。这种方式更灵活,但需要更多的磁盘空间、时间以及更多的技术专长。从非常旧的 FreeBSD 版本进行升级可能会遇到问题;在这种情况下,通常执行二进制升级或完全重新安装会更有效。

请阅读 INSTALL.TXT 文件以获取更多信息,最好是在开始升级之前。如果你是从源代码进行升级,请确保也阅读 /usr/src/UPDATING

最后,如果你想使用各种方式跟踪 FreeBSD 的-STABLE 或 -CURRENT 分支,请务必查阅 -CURRENT vs. -STABLE 章节和 FreeBSD 手册

重要提示:

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


可以从 ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/ 下载本文件以及其他与版本相关的文档。

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

有关此文档的问题,请发送电子邮件至 doc@FreeBSD.org

最后更新于