# FreeBSD/sparc64 5.4-RELEASE 发行说明

### The FreeBSD Project

版权 © 2000, 2001, 2002, 2003, 2004, 2005 The FreeBSD Documentation Project

$FreeBSD: src/release/doc/zh_CN.GB2312/relnotes/common/new.sgml,v 1.1.2.4.2.5 2005/05/05 18:33:08 delphij Exp $

FreeBSD is a registered trademark of the FreeBSD Foundation.

IBM, AIX, EtherJet, Netfinity, OS/2, PowerPC, PS/2, S/390, and ThinkPad are trademarks of International Business Machines Corporation in the United States, other countries, or both.

IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.

Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

Sparc, Sparc64, SPARCEngine, and UltraSPARC are trademarks of SPARC International, Inc in the United States and other countries. Products bearing SPARC trademarks are based upon architecture developed by Sun Microsystems, Inc.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the ``™'' or the ``®'' symbol.

这份 FreeBSD 5.4-RELEASE 的发行说明， 概括了 FreeBSD 基本系统自 5.3-RELEASE 以来所做的改动。 本文档同时列举了自前一发行版发布以来所有适用的安全公告， 以及对于 FreeBSD 内核以及系统附带的应用程序所做的重要修改。 在升级时所需要注意的一些问题， 也进行了简略的介绍。

## 1 简介

这篇文档包括了在 UltraSPARC 硬件平台上 FreeBSD 5.4-RELEASE 的发行说明。 它描述了最近刚刚加入、修改或删除了的 FreeBSD 特性的说明。 同时，它也将给出如何从先前的 FreeBSD 版本完成升级的说明。

这是一份 FreeBSD 5.4-RELEASE 的 release 发布包。 您可以从 ftp://ftp.FreeBSD.org/pub/FreeBSD/development/sparc64/ 或其他镜像那里得到它的副本。 关于这个 (或其他) release 发布包的更多信息，可以在 FreeBSD 手册 中的 ``Obtaining FreeBSD''附录 中找到。

我们鼓励所有的用户在开始安装 FreeBSD 之前首先参考这一版本所对应的勘误信息。 勘误文档将随时更新，以便为用户提供在发布工程后期或该版本发布之后 ``新发现的'' 问题和相关信息。 通常，这包括已知的 bug，安全公告，以及对于文档的修订内容。 最新的 FreeBSD 5.4-RELEASE 勘误信息可以从 FreeBSD 网站获得。

## 2 最新变动

这一节描述了 FreeBSD 自 5.3-RELEASE 以来最明显的新功能和变化。 一般说来， 没有注明 [已合并] 的那些新特性是 5-STABLE 所独有的。

发行说明中的绝大多数条目是在说明自从 5.3-RELEASE 以来的安全公告、新的驱动程序或硬件支持、新的命令或是选项、 重要的错误修补，以及基本系统中来自第三方的软件升级。 重要的 ports 和 packages 变动，或关于交付工程的变动也会在这份文档中体现。 显而易见地，发行说明不可能涵盖 FreeBSD 版本之间的每一个微小变动； 这篇文档主要关注的，仍然是安全公告，用户可以察觉的修改， 以及重要的架构改良。

### 2.1 安全公告

在 fetch(1) 工具中发现了一处问题， 它可能导致恶意的 HTTP 服务器覆盖客户程序任意部分的内存， 这一问题已经得到修复。 要了解更多信息， 请参见安全公告 FreeBSD-SA-04:16.fetch。

在 procfs(5) 和 linprocfs(5) 中发现了一处问题， 它能够允许恶意的本地用户读取部分内核内存， 或通过造成系统 panic 来实施本地拒绝服务攻击， 这一问题已经得到修复。 要了解更多信息， 请参见安全公告 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。

### 2.2 对于内核的改动

内核调试器 ddb(4) 现在支持用于显示持有休眠互斥体 (以及当前线程所持有的自旋互斥体) 的情况的 `show alllocks` 命令了。

现在 jail(8) 功能支持一个新的 sysctl `security.jail.chflags_allowed`， 用于控制 chflags(1) 在 jail 中的行为。 如果设置为 `0` (默认值)， jail 中的 `root` 用户将被认为是非特权用户； 如果设置为 `1`， 则 jail 中的 root 用户会被视为与未 jail 的 `root` 用户一样。

一系列 ULE 的问题得到了修正。

#### 2.2.1 引导区和 loader 的变化

#### 2.2.2 硬件支持

加入了用于驱动 SBus/EBus UltraSPARC® 型号上的某些辅助 I/O 功能的 auxio(4) 驱动。

加入了用于灵活控制处理器速度的框架。 这为许多驱动程序通过调整 CPU 的速度来控制功耗提供了手段。 更多细节， 可以在 cpufreq(4) 联机手册中找到。

加入了用于支持 GPIB-PCIIA IEEE-488 卡的 pcii 驱动。

加入了用于支持许多 UltraSPARC II 和 III 型号上的 MC146818 兼容时钟的 rtc 驱动。

uart(4) 驱动， 在 `GENERIC` 内核中默认启用， 并成为了串口的默认驱动。 ofw_console 和 sab(4) 驱动在 `GENERIC` 内核中被禁用。

##### 2.2.2.1 多媒体支持

加入了用于支持 UltraSPARC 工作站上的 Crystal Semiconductor CS4231 音效控制器的 snd_audiocs(4) 驱动。

##### 2.2.2.2 网络接口设备支持

加入了用于支持 USB 以太网通讯设备一类的 cdce(4) 驱动。

cp(4) 驱动现在是 MPSAFE 的了。

ctau(4) 驱动现在是 MPSAFE 的了。

cx(4) 驱动现在是 MPSAFE 的了。

ed(4) 驱动现在支持 altq(4) 框架了。

在 em(4) 驱动程序中， 默认禁用了对 VLAN 标记 (tagging) 的硬件支持， 因为这个功能与混杂模式之间存在一些冲突。

默认地禁用了 fxp(4) 驱动的以太网流控制功能， 以避免系统崩溃或进入内核调试器。

The hme(4) 驱动现在是 MPSAFE 的了。

re(4) 驱动支持 altq(4) 框架了。

现在 sf(4) 驱动支持设备混合轮询 (device polling) 和 altq(4) 了。

修正了 sk(4) 驱动中的多处程序设计错误。 这些问题主要影响 SMP 系统， 可能导致系统崩溃、 内核缺页、 SSH 连接中断， 或文件传输问题。 更多细节， 可以在勘误公告 FreeBSD-EN-05:02.sk 上找到。

现在， sk(4) 驱动支持 altq(4) 了。 同时， 此驱动支持基于 Yukon 的网卡的巨型帧能力了。

#### 2.2.3 网络协议

当发送方写的数据必须分片时， 关闭了 IPv6 中的 MTU 反馈。

实现了共用地址冗余协议 (CARP)。 CARP 来自 OpenBSD， 允许多个主机共享同一个 IP 地址， 从而提供了高可用性和负载均衡。 要了解更多细节， 请参考 carp(4) 联机手册。

ipfw(4) 可以与 `debug.mpsafenet`=`1` (默认情况下是 `1`)， 当使用了 `gid`, `jail`, 和/或 `uid` 规则选项时正常工作了。

ipfw(8) `ipfw fwd` 规则现在支持完整的包目的地管理了， 其前提是启用了内核选项 `options IPFIREWALL_FORWARD` 的基础上打开了 `options IPFIREWALL_FORWARD_EXTENDED`。 这个内核选项将禁用所有的限制， 以保证本地生成的包， 和发到配置在本地的 IP 地址的包能够正常地发出和转发。 请注意， 必须细心地编写 ipfw(8) 规则， 以确保类似 PMTU 发现这类应用不致发生异常。

ipnat(8) 允许在非 TCP/UDP 包上使用重定向规则了。

目前正在进行的工作， 在逐步去掉网络协议栈中的全局锁， 并改进锁的策略。

新的 ng_netflow(4) NetGraph 节点， 使得采用 FreeBSD 的路由器能够运行 NetFlow version 5 的导出。

现在 sppp(4) 驱动程序包含了帧转发 (Frame Relay) 支持。

修正了 TCP 的一处问题， 这一问题有时会导致当接收窗口大小为零时， RST 包被忽略的问题。

改进了 FreeBSD TCP 协议栈中对 `RST` 的处理， 使得这类攻击变得尽可能地困难， 同时最大限度地保障了和其他 TCP 协议栈的兼容性。 算法如下： 对于所有在 `ESTABLISHED` 状态的连接， 只有当包的顺序号与 `last_ack_sent` 精确匹配时才将连接复位； 所有不符合的分片都将被直接丢弃。 对于所有其他状态的连接， 则对窗口内的复位请求进行处理。 其它的复位分片则被直接丢弃。 需要说明的是， 这一行为和 RFC 793 标准抵触， 传统的 (但安全性较差) 行为， 可以通过将新增的 sysctl `net.inet.tcp.insecure_rst` 设置为 `1` 来还原。

在 TCP SACK 实现中的许多错误得到了修正。

将 KAME IPv4 IPsec 实现集成到了 FreeBSD 中， 现在支持 TCP-MD5 了。

短期使用端口的随机分配导致了在高连接速率时的端口重用问题。 这一功能现在在短期内发生大量连接， 即新端口的创建速率快于每秒 `net.inet.ip.portrange.randomcps` 时， 被自动禁用 `net.inet.ip.portrange.randomtime` 秒。 这两个 sysctl 变量的默认值， 分别是 `10` 和 `45`。

#### 2.2.4 磁盘及存储

现在 amr(4) 可以安全地在使用了 pae(4) 的系统上使用了。

加入了 SHSEC GEOM 类。 它提供了在多个 GEOM 提供者之间实现秘密分享的能力。 所有提供者必须都存在， 才能够解开保存的秘密信息。 这一特性可以通过 gshsec(8) 工具来控制。

加入了用于支持 HighPoint RocketRAID 182x 系列硬件的 hptmv(4) 驱动。

现在 ips(4) 驱动在较新的 ServeRAID 型号上， 能够支持内核崩溃的转储操作了。

删去了 matcd(4) 驱动。

关于新挂接的 cd9660 文件系统的信息 (例如， 存在 RockRidge 扩展) 现在只有在内核以详细 (verbose) 模式启动时才会显示了。 这一修改主要是减少 (一般来说不必要的) 内核日志消息的数量。

#### 2.2.5 文件系统

原先在挂接时进行的， 重新计算 ``脏'' (即， 上次停机时没有正常卸下) 的 UFS 和 UFS2 文件系统摘要信息的工作， 现在转由后台 fsck(8) 进行。 这一修改将极大地改善系统崩溃后挂接大文件系统时的速度。 如果希望还原原先的行为， 可以通过将 `vfs.ffs.compute_summary_at_mount` sysctl 变量设置为非零值来实现。

修正了由于 NFS 服务器可能导致的一个内核崩溃。 更多细节， 可以在勘误公告 FreeBSD-EN-05:01.nfs. 中找到。

#### 2.2.6 基本系统附带的第三方软件

ACPI-CA 由 20040527 更新到了 20041119。

### 2.3 应用程序变动

现在 ftpd(8) 程序会正确地为目录和文件的状态使用 `212` 和 `213` 状态代码了 (过去的版本， 曾经长期使用 `211`)。 这一行为在 RFC 959 中进行了描述。

如果指定了 `AF_UNSPEC`， 现在 getaddrinfo(3) 函数会在查询 `AAAA` 记录之前， 首先查询 `A` DNS 资源记录。 一些有问题的 DNS 服务器会在 `AAAA` 记录不存在时返回 `NXDOMAIN`， 而根据标准， 它应该返回 `NOERROR` 和一条空记录。 这类服务器会在 IPv4/IPv6 双栈节点上导致查询停止， 因为对于 `AAAA` 的查询时返回的 `NXDOMAIN` 会导致服务器停止解析 `A` 记录的尝试。 另外， 这一行为也被视为一种潜在的拒绝服务攻击 (参见 http://www.kb.cert.org/vuls/id/714121 以了解更多细节)。 请注意， 虽然改变了查询顺序， 返回的结果仍然是 `AF_INET6` 记录先于 `AF_INET` 记录。

gpt(8) 的 `create` 命令， 现在支持一个 `-f` 命令行标志， 以强制创建 GPT， 即使磁盘上原先已经存在了 MBR 记录。

gvinum(8) 工具现在支持 `checkparity`、 `rebuildparity`， 以及 `setstate` 这三个子命令了。

`libarchive` 库 (以及使用它的 tar(1) 命令) 现在能够读取 ISO 镜像文件 (包括可选的 RockRidge 扩展) 和 ZIP 压缩文件 (采用 `deflate` 和 `none` 的压缩) 了。

加入了用于访问 GPIB 设备 (通过使用 pcii 驱动程序) 的 `ib`foo`` API 的 `libgpib` 库。

从 HEAD 合并了一系列 `libpthread` 的错误修正。

为 math(3) 函数库实现了一系列新的函数。 其中包括 ceill(3)、 floorl(3)、 ilogbl(3)、 fma(3) 及其变体， lrint(3) 及其变体， 以及 lround(3) 及其变体。

现在 moused(8) 服务能够支持 ``虚拟滚轮'' 了， 这一模式下， 按住鼠标中键时移动鼠标将被解释为滚轮操作。 这一功能可以通过 `-V` 标志来启用。

为 named(8) 加入了属主为 `bind` 用户 (用于创建区域的日志文件) 的用于动态域的隔离目录。 要了解进一步的情况， 请参见示范的 named.conf(5) 中动态域的例子。

现在 ncal(1) 工具提供了一个 `-m` 选项， 用以生成当前年份指定月份的日历。

现在 newfs(8) 提供了一个 `-n` 标志， 来禁止在新文件系统上创建 `.snap` 目录。 这一特性主要是为那些不需要快照支持的文件系统， 如内存或 vnode 文件系统准备的。

现在 newfs(8) 会在创建 UFS 或 UFS2 文件系统， 而无法在其上产生快照时给出警告。 这一情况会在很大的文件系统使用很小尺寸的块时发生。

加入了编译用户应用时的 `NO_NIS` 开关。 如其名称所暗示的， 启用这个 `Makefile` 变量将使许多程序中不再包含 NIS 支持， 并不再勾践 NIS 工具。

现在 periodic(8) 安全检查输出， 能够支持显示由 pf(4) 所阻止的包的统计数据了。

ppp(8) 程序实现了 `echo` 参数， 这使得分别地启用 LCP ECHO 和 LQR 报告成为可能。 较早版本的 ppp(8) 会在协商失败时返回到 LCP ECHO 模式。 现在需要指定 `enable echo` 来获得这一行为。

在 pppd(8) 程序中的两个问题得以修正。 这些错误可能会导致不正确的 CBCP 响应， 而违反了 微软 PPP 回呼控制协议的 3.2 节。

restore(8) 工具又能够处理 FreeBSD 版本 1 的转储磁带了。

现在 rm(1) 工具提供了一个 `-I` 选项。 如果选择递归地删除目录， 或者在命令行上指定一次删除超过 3 个文件， 这个选项会提供一次确认的机会。

rtld(1) 动态连接器现在支持通过 `LD_LIBMAP` 环境变量来指定库映射关系了。 这一选项能够覆盖 libmap.conf(5) 的设置。

syslog(3) 函数现在是线程安全的了。

syslogd(8) 工具现在会打开一个额外的域 socket (默认为 `/var/run/logpriv`)， 其权限是 `0600`， 作为和特权程序的接口。 者避免了发生本地的拒绝服务攻击时， 特权程序由于域 socket 的缓冲区耗尽而死锁。

syslogd(8) 新增了 `-S` 选项， 用以改变特权 socket 的路径名。 如果您不希望服务接受来自本地 socket 的消息 (默认使用的是 `/var/run/log` 和 `/var/run/logpriv`) 时， 这个选项就很有用了。

syslogd(8) 工具现在允许在主机名标识符中使用 `:` 和 `%` 这两个字符了。 这些字符被 IPv6 地址和 scope ID 使用。

现在 systat(1) `-netstat` 的显示也包括了 IPv6 的数据。

tail(1) 的 `-f` 选项能够支持同时查看多个文件了。

增加了用于关闭选定的 TCp 连接的 tcpdrop(8) 命令。 它来自 OpenBSD。

whois(1) 现在支持 `-k` 标志， 用以查询 `whois.krnic.net` (韩国国家 Internet 开发局)， 它提供了在韩国境内的 IP 地址分配的详细资料。

修正了一个可能导致 hosts(5)、 services(5)， 以及其他一些配置文件， 在其最后一行不是空行时被忽略的问题。

#### 2.3.1 `/etc/rc.d` 脚本

rc.conf(5) 现在支持在引导时修改网络接口的名字了。 例如：

    ifconfig_fxp0_name="net0"
    ifconfig_net0="inet 10.0.0.1/16"

rc.conf(5) 现在支持 `tmpmfs_flags` 和 `varmfs_flags` 两个变量了。 这些变量， 可以用来向 mdmfs(8) 工具提供额外的选项， 从而更好地定制 md(4) 文件系统的创建过程， 包括是否打开 softupdates， 指定文件系统的默认属主， 等等。

### 2.4 基本系统包含的第三方软件

BIND 从 9.3.0 升级到了 9.3.1。

Heimdal 从 0.6.1 升级到了 0.6.3。

引入了来自 OpenBSD 的 2005 年 2 月 4 日快照的 netcat。 更多信息， 可以在 nc(1) 联机手册中找到。

OpenSSL 从 0.9.7d 升级到了 0.9.7e。

sendmail 从 8.13.1 升级到了 version 8.13.3。

时区数据库从 tzdata2004e 版升级到了 tzdata2004g 版。

### 2.5 Ports/Packages Collection 基础结构

从 CVS 库中删去了用于保存 Ports Collection 中所有项的 `ports/INDEX`*``。 这些文件过去并不经常性地重新生成， 因此可能会过时和不再准确。 需要使用 INDEX 文件的用户 (例如用于 portupgrade(1)) 可以使用两种方法来获取一份副本：

- 使用 `make index` 在 `ports/` tree 的顶部构建一份当前 ports tree 的索引。

- 在 `ports/` tree 顶部执行 `make fetchindex` 来从网上下载。 这个索引文件 (通常) 在一天之内是准确的。

### 2.6 发行版建造工程和功能集成

在先前的 FreeBSD 版本中， `disc1` CD-ROM (或 ISO 镜像文件) 是一张包含基本系统、 ports tree 和常用 package 的可以引导的光盘。 而 `disc2` CD-ROM (或 ISO 镜像文件) 则是可以引导的 ``fix it'' 盘， 它提供了现场 (live) 文件系统， 用于进行紧急修复操作。 这一格局发生了变化。 对于除了 ia64 以外的所有平台， 现在 `disc1` 包含了基本系统的安装包文件、 ports tree， 以及现场文件系统， 使得它适合于初始安装， 以及修复工作。 (在 ia64 上， 由于现场文件系统的尺寸太大， 以至于不得不将其放到另一张盘上。) 第三方 package 都在另一张盘上。 特别地， `disc2` 上包含了常用的预编译软件包， 例如桌面环境软件等。 来自 FreeBSD 文档计划的各类文档， 也被置于 `disc2`。

支持的 GNOME 桌面环境的版本， 由 2.6.2 升级到了 2.10。 更多关于在 FreeBSD 上运行 GNOME 的详细资料， 可以在 FreeBSD GNOME Project Web 页面上找到。

> 注意: 使用较早版本的 GNOME 桌面 (`x11/gnome2`) 的用户在升级时需要特别小心。 简单地使用 portupgrade(1) (`sysutils/portupgrade`) 配合 FreeBSD Ports Collection 进行升级可能会造成严重的问题。 GNOME 桌面的用户， 应仔细阅读 http://www.FreeBSD.org/gnome/docs/faq210.html 给出的说明， 并使用 `gnome_upgrade.sh` 脚本来正确地升级到 GNOME 2.10。

支持的 KDE 桌面环境的版本， 从 3.3.0 升级到了 3.4.0。 更多关于在 FreeBSD 上运行 KDE 的信息， 可以在 FreeBSD 上的 KDE Web 页面上找到。

> 注意: 使用较早版本的 KDE 的用户， 应使用 FreeBSD 上的 KDE Web 页面或 `ports/UPDATING` 中给出的方法升级。

支持的 Xorg 从 6.7.0 升级到了 6.8.2。

### 2.7 文档

以下联机手册先前的版本中曾包含来自 RFC 的内容， 为了避免对 IETF 的侵权， 已经重新编写： 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 系统的用户 强烈 推荐首先阅读 ``到 FreeBSD 5.4-RELEASE 的迁移指南''。 这份文档应该可以在光盘或这份发行版本说明所在的地方找到， 其文件名为 `MIGRATE5.TXT`。 它提供了一些关于升级的说明， 更重要的是， 升级到 FreeBSD 5.`X` 和继续运行 FreeBSD 4.`X` 的优缺点对比。

> 重要: 很显然，升级 FreeBSD 时，应该首先备份 所有 数据和配置文件。

这份文档，以及其他与FreeBSD发行版本有关的文档，都可以在 ftp://ftp.FreeBSD.org/pub/FreeBSD/development/sparc64/下载。

在遇到关于FreeBSD的技术问题时，请首先阅读 文档 之后再考虑联系 <questions@FreeBSD.org>。

所有 FreeBSD 5-STABLE 的用户都应该订阅 <stable@FreeBSD.org> 邮件列表。

关于这份文档的任何问题，请致信 <doc@FreeBSD.org>。