FreeBSD/alpha 6.1-RELEASE 发行说明

The FreeBSD Project

$FreeBSD: src/release/doc/zh_CN.GB2312/relnotes/common/new.sgml,v 1.5.2.6.2.3 2006/05/06 16:53:40 delphij Exp $

FreeBSD 是 FreeBSD基金会的注册商标

IBM, AIX, EtherJet, Netfinity, OS/2, PowerPC, PS/2, S/390, 和 ThinkPad 是 国际商用机器公司在美国和其他国家的注册商标或商标。

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 International, Inc 在美国和其他国家的商标。 包含 SPARC 商标的产品基于 Sun Microsystems, Inc. 开发的架构。

许多制造商和经销商使用一些称为商标的图案或文字设计来彰显自己的产品。 本文档中出现的, 为 FreeBSD Project 所知晓的商标,后面将以 '™' 或 '®' 符号来标注。

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


目录
1 简介
2 最新变动
2.1 安全公告
2.2 对内核的改动
2.2.1 引导区和 loader 的变化
2.2.2 硬件支持
2.2.3 网络协议
2.2.4 磁盘及存储
2.2.5 文件系统
2.2.6 基本系统附带的第三方软件
2.3 用户环境的变动
2.3.1 /etc/rc.d 脚本
2.4 基本系统包含的第三方软件
2.5 Ports/Packages 套件基础结构
2.6 发行版建造工程和功能集成
2.7 文档
3 从先前版本的 FreeBSD 升级

1 简介

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

  这是一份 FreeBSD 6.1-RELEASE 的 snapshot 发布包。 您可以从 http://www.FreeBSD.org/snapshots/ 或其他镜像那里得到它的副本。 关于这个 (或其他) snapshot 发布包的更多信息,可以在 FreeBSD 手册 中的 “如何获得 FreeBSD”附录 中找到。

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


2 最新变动

  这一节描述了 FreeBSD 自 6.0-RELEASE 以来最明显的新功能和变化。

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


2.1 安全公告

  在 texindex(1) 中发现并修正了一处临时文件漏洞, 这一漏洞可能导致本地的攻击者以运行 texindex(1) 工具的用户身份覆盖文件。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:01.texindex

  在 ee(1) 中发现并修正了一处临时文件漏洞, 这一漏洞可能导致本地的攻击者以运行 ee(1) 的用户身份覆盖文件。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:02.ee

  发现并修正了 cpio(1) 工具中的一系列漏洞。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:03.cpio

  发现并修正了 ipfw(4) IP 分片处理部分的一处可能导致崩溃的问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:04.ipfw

  发现并修正了 IEEE 802.11 扫描代码中的一处潜在的缓冲区溢出问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:05.80211

  发现并修正了两个可能导致一部分内核内存被泄露给用户的问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:06.kmem

  发现并修正了 pf(4) 中 IP 分片处理过程中一个可能导致在特定情况下崩溃的问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:07.pf

  发现并修正了 NFS 服务器代码中一处可能导致在服务器收到长度为零的消息时崩溃的问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:10.nfs

  发现并修正了 fast_ipsec(4) 实现中的一处可能导致安全关联序号无法更新, 进而导致数据包无条件地通过序号验证检查的问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:11.ipsec

  发现并修正了 opiepasswd(1) 中的一处可能导致非特权用户, 能够在某些情况下为 root 用户配置 OPIE 身份验证的问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:12.opie

  发现并修正了 sendmail(8) 中的一项可能导致远程攻击者以执行 sendmail 的用户, 通常是 root 身份执行任意代码的问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:13.sendmail

  发现并修正了在 AMD 第7和第8代处理器上运行的 FreeBSD 内核的一处信息泄露问题。 要了解进一步详情, 请参阅安全公告 FreeBSD-SA-06:14.fpu


2.2 对内核的改动

   ddb(4) 调试器新增了 show lock 命令。 参数为有效的锁类时, 这一命令会显示关于锁的多种信息, 并调用在 lock_class 中新增的函数指针 (lc_ddb_show) 来显示关于锁的其他信息 (例如 mutex 的持有者, 或 xlock 的 sx 锁)。

  加入了针对不同平台的 DEFAULTS 内核配置文件。

  新增了 firmware(9) 子系统。 它能够使用特制的模块, 将二进制数据加载到内核中。

   random(4) 熵设备驱动程序是 MPSAFE 的了。

  新增了 sysctl 变量 security.mac.biba.interfaces_equal, 用于配置是否以标签 biba/equal(equal-equal) 创建所有网络接口。 这对于类似 dhclient(8) ppp(8) 这样需要初始化网络接口, 但又不提供标签支持的程序非常有用。 默认情况下, 此变量的值为 0(禁用)。


2.2.2 硬件支持

   acpi_thermal(4) 驱动现在支持被动降温了。

   kbdmux(4) 驱动已经集成到了 syscons(4)kbd 设备驱动程序中。 默认情况下 syscons(4) 会首先查找 kbdmux(4) 键盘, 如果找不到则搜索其他键盘。 切换到 kbdmux(4) 可以在启动时通过使用 loader(8) 来加载 kbdmux 内核模块, 或在运行状态通过 kldload(8) 加载模块并移去当前键盘来完成。


2.2.2.1 多媒体支持

   agp(4) 驱动现在支持 ATI IGP 芯片组了。

  对 sound(4) 驱动进行了全方位的更新, 包括修正了在先前版本的系统中存在的一系列与锁有关, 可能导致系统崩溃的缺陷, 并带来了一些性能上的改善。 此外, 这一驱动现在也支持更为广泛的采样速率、 多种可选的采样精度, 以及 24/32-位 PCM 格式的转换了。

   snd_atiixp(4) 驱动支持挂起和恢复功能了。

   snd_als4000(4) 驱动是 MPSAFE 的了。

   snd_es137x(4) 驱动是 MPSAFE 的了。

   snd_ich(4) 驱动是 MPSAFE 的了。

   snd_solo(4) 驱动是 MPSAFE 的了。

   snd_via8233(4) 驱动是 MPSAFE 的了。

   snd_via82c686(4) 驱动是 MPSAFE 的了。


2.2.2.2 网络接口设备支持

   ath(4) 驱动更新到了 0.9.16.16 版。

  修正了导致 bfe(4) 驱动无法在配有 1GB 以上 RAM 的系统上正常工作的问题。

   bge(4) 驱动提供了 polling(4) 模式的支持。

  em(4) 驱动支持类似 sparc64 这样的 big-endian 架构了。

  新增了 le(4) 驱动, 这一驱动支持 AMD Am7900 LANCE 和 Am79C9xx PCnet 网络接口控制器, 它基于 NetBSD 的实现。 尽管 lnc(4) 驱动也支持这些网络接口控制器, 这一驱动提供了许多额外的特性, 例如 MPSAFE、 ALTQ、 VLAN_MTU、 ifmedia, 以及 PCI 变体的 32-位 DMA。

   lge(4) 驱动是 MPSAFE 的了。


2.2.3 网络协议

  对 arp(8) 重传算法进行了重写, 使得在需要某一 ARP 项时, 不再抑制重传 ARP 请求。 sysctl 变量 net.link.ether.inet.host_down_time 也因此消失了。

   arp(8) 新增了 sysctl 变量, net.link.ether.inet.log_arp_permanent_modify 以抑制对永久 ARP 项的修改尝试的日志记录。

   if_bridge(4) 网桥驱动新增了创建镜像口, 即, 将网桥接收到的每个帧都发送到那个端口的支持。 这一功能可以通过 ifconfig(8) 启用。

   if_bridge(4) 网桥驱动新增了对 RFC 3378 EtherIP 的支持。 这一变动使得向网桥增加 gif(4) 接口, 并收发 IP 协议 97 的数据包成为可能。 这些包实际上是附带了 EtherIP 包头的以太网帧。

   ipfw(4) 的 IP 包过滤器现在支持 IPv6 了。 ip6fw(8) 包过滤器已经过时, 并将在以后的发行版中删除。

   ipfw(4) 新增了对于由查表得到的值所对应的动作进行替换的功能, 这一功能可以用来优化规则集。 目前, 该功能只能用于 pipequeuedivertteenetgraph 以及 ngtee 规则。 例如, 下列规则会把不同的包发给不同的 pipe:

pipe 1000 config bw 1000Kbyte/s
pipe 4000 config bw 4000Kbyte/s
table 1 add x.x.x.x 1000
table 1 add x.x.x.y 4000
pipe tablearg ip from table(1) to any

  修正了通过 TCP 进行的 NFS 连接无法在服务器发出 FIN 之后重连的问题。 这一问题会影响使用 Solaris 的 NFS 服务器提供的服务。

   ng_iface(4) Netgraph 节点支持 altq(4) 了。

  默认禁用了在 FreeBSD 中的 ip6(4) 协议栈中的广播包路径 MTU 发现功能, 这使由于通过多播种的许多路由器来通知路径 MTU 可能构成对于一台服务器的分布式拒绝服务攻击行为。 这一功能可以通过新的 sysctl 变量 net.inet6.ip6.mcast_pmtu 来重新启用。

  当 RTT 低于某一特定阈值时, TCP 带宽-延迟积限制功能会自动禁用。 在 LAN 上这一优化是没有意义的, 因为时钟的粒度过粗, 使得在计算最大带宽时会出问题。 新增的 sysctl 变量 net.inet.tcp.inflight.rttthresh 可以用来指定希望此功能起作用的以毫秒为单位的阈值, 其默认值为 10ms。


2.2.4 磁盘及存储

  对 amr(4) 驱动的性能进行了改进, 并增加了完全的 64-位 DMA 支持。 尽管这一特性默认是启用的, 但也还可以使用加载器变量 hw.amr.force_sg32 来禁用, 以方便调试。

   amr(4) 驱动新增了 Linux LSI MegaRaid 工具所需的 ioctl(2) 请求支持, 以便在 FreeBSD 的 Linux 模拟环境中使用它们。

   ata(4) 驱动提供了针对某些在 48-位 模式下 DMA 无法正常工作的控制器的缓解方法。 对于那些可疑的控制器, 驱动程序会在访问超过 137GB 的区域时使用 PIO 模式。

   ata(4) 驱动提供了对 ITE IT8211F IDE 控制器, 以及 Promise PDC40718 和 PDC40719 芯片的支持, 后两种芯片见于 Promise Fasttrak TX4300。

   ata(4) 驱动支持以 DMA 方式将内核崩溃转存数据存入 ataraid(4) 设备了。

   ataraid(4) 驱动支持 JMicron ATA RAID 元数据了。

  GEOM_LABEL class 支持 Ext2FS、 NTFS 和 ReiserFS 了。

  GEOM_MIRROR class 支持将内核崩溃转存数据, 保存到其 GEOM providers 上了。

  GEOM_MIRRORGEOM_RAID3 这两个 class 新增了对 sysctl 变量 kern.geom.mirror.disconnect_on_failurekern.geom.graid3.disconnect_on_failure 的支持, 用以控制发生故障的盘是否断开。 目前其默认值是 1 以保持之前的行为, 而如果将它设置为 0, 则这样的盘不会被断开, 而内核将继续尝试使用它们 (只有第一次错误被记入日志)。 如果有多个盘都存在故障, 但位置不同, 则这一功能将有助于恢复数据。 出现故障的盘在 gmirror listgraid3 list 的输出中仍可见, 但会标记上 BROKEN

  GEOM_MIRRORGEOM_RAID3 这两个 class 采用了并发 I/O 请求来获得更好的同步性能。 新增的 sysctl 变量 kern.geom.mirror.sync_requestskern.geom.raid3.sync_requests 用于定义允许多少个并发的 I/O 请求。 此外, sysctl 变量 kern.geom.mirror.reqs_per_synckern.geom.mirror.syncs_per_seckern.geom.raid3.reqs_per_sync, 以及 kern.geom.raid3.syncs_per_sec 则已经过时并删去。

  新增了 GEOM class GEOM_ZERO。 它提供了一个非常大 (41PB) /dev/gzero 的 provider, 主要可以用来进行性能测试。 在收到 BIO_READ 请求时它会对 bio_data 填零, 而 BIO_WRITE 则什么都不做。

   twa(4) 已更新至 3ware 网站发布的 9.3.0.1 版本。

   geli(8) 支持在挂接根文件系统之前加载密钥文件了。 例如, 可以将下列配置加入 /boot/loader.conf 来启用它:

geli_da0_keyfile0_load="YES"
geli_da0_keyfile0_type="da0:geli_keyfile0"
geli_da0_keyfile0_name="/boot/keys/da0.key0"
geli_da0_keyfile1_load="YES"
geli_da0_keyfile1_type="da0:geli_keyfile1"
geli_da0_keyfile1_name="/boot/keys/da0.key1"
geli_da0_keyfile2_load="YES"
geli_da0_keyfile2_type="da0:geli_keyfile2"
geli_da0_keyfile2_name="/boot/keys/da0.key2"

geli_da1s3a_keyfile0_load="YES"
geli_da1s3a_keyfile0_type="da1s3a:geli_keyfile0"
geli_da1s3a_keyfile0_name="/boot/keys/da1s3a.key"

  新增了用以支持 LSI MegaRAID SAS 系列控制器的驱动程序 mfi(4)

  新增了用以支持 HighPoint 的 RocketRAID 232x 系列 RAID 控制器的驱动程序 rr232x(4)


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

  DRM 已更新至 DRI CVS 在 20051202 的快照版本。


2.3 用户环境的变动

   bsnmpd(1) 工具支持 RFC 2790 所描述的主机资源 MIB 了。

   config(8) 工具新增了对 nocpu 语句的支持, 其作用是取消先前的 cpu 语句。

  如果指定内核配置文件所在的目录中存在名为 DEFAULTS 内核配置文件, 则 config(8) 工具会在读取内核配置文件之前, 首先处理这个文件的内容。

   csh(1) 工具支持 NLS 编录了。 注意需要安装 shells/tcsh_nls port 才能正常使用。

   devd(8) 工具新增了用于指定配置文件的 -f 选项。

   ftpd(8) 即使在没有使用 -p 参数的情况下, 也会创建 PID 文件 /var/run/ftpd.pid 了。

   getfacl(1) 工具新增了 -q 参数, 以避免显示每个文件头的中列出文件名、 属主与所属用户组的注释信息。

   gvinum(8) 工具新增了用以完成对象改名, 并将子盘从一个驱动器转入另一驱动器的命令。

   jail(8) 工具新增了 -J jid_file 选项的支持, 用以指定 JidFile, 后者类似于 PidFile, 包含 jailid、 路径、 主机名、 ip 以及用以启动 jail 的命令。

   kdump(1) 工具新增了 -H 参数, 表示让 kdump 显示包含 threadid 的附加字段。

   kdump(1) 工具新增了 -s 参数, 用于在显示中略去 I/O 数据。

  ln(1) 工具新增了 -F 参数, 表示在创建符号连接时删除空目录。

   locate(1) 工具新增了 -0 参数, 使其能够与 xargs(1)-0 参数联用。

  ls(1) 工具新增了 -I 参数, 用以禁用超级用户自动加上的 -A 参数。

   mergemaster(8) 工具新增了 -A 参数, 用于显式地指定传递给下层 Makefile 的架构名称。

   moused(8) 服务新增了 -H 参数, 用以启用虚拟的水平方向滚轮, 这一功能与通过 -V 参数启用虚拟的垂直方向滚轮类似。

   netstat(1) 新增了在内核采用 FAST_IPSEC 而非 KAME IPSEC 协议栈时显示 ipsec(4) 协议统计信息的能力。 请注意 netstat -s -p ipsec 的输出会随编译到内核中的协议栈不同而有所差异, 因为这两个协议栈的统计信息并不相同。

   periodic(8) 的 daily (每日执行) 脚本, 新增了显示 gmirror(8) graid3(8) gstripe(8), 以及 gconcat(8) 设备的支持。 请注意这些功能默认都处于禁用的状态。

  新增了一组 pidfile(3) 函数, 用以提供可靠的 PID 文件处理方法。 这些函数放到了 libutil 中。

   rfcomm_sppd(1) 能够支持在指定服务名的同时指定 -c 选项和通道号了。 支持的名字包括: DUN (拨号网络)、 FAX (传真)、 LAN (使用 PPP 访问 LAN), 以及 SP (串口)。

  新增了用于查看 UFS 文件系统中快照位置的 snapinfo(8) 工具。

  加入了基于 OpenBSD 实现的 strtonum(3) 库函数。 这是 strtoll(3) 的改进版本。

  修正了 ypwhich(1) 工具中的一个导致 -m 选项产生不正确的可用命名映射的 bug。


2.3.1 /etc/rc.d 脚本

  新增了 bluetooth 脚本。 这个脚本会在设备连上/段开时, 由 devd(8) 调用并启动/停止对应的设备, 而无须管理员手工干预。 这个脚本的默认配置参数在 /etc/defaults/bluetooth.device.conf, 这些默认值可以用 /etc/bluetooth/$device.conf 来覆盖 (这里的 $deviceubt0btcc0, 等等。) 要了解进一步详情, 请参阅 bluetooth.conf(5)

  新增了 hcsecdsdpd 脚本, 分别用于 hcsecd(8) sdpd(8) 服务。 在没有蓝牙设备接到系统上时, 也可以启动这些服务, 但这两个服务都需要蓝牙 socket 层, 因此默认禁用了这两个服务。 蓝牙 socket 曾必须通过模块加载, 或静态联编进内核, 这两个服务才能运行。

  新增了用于 hostapd(8)hostapd 脚本。

  jail 脚本新增了 jail_interface 选项和 jail_jid_interface 选项, 用以在给定的网络接口上创建 IP 别名。

  netif 脚本新增了对 ipv4_addrs_ifn 的支持, 它表示增加 CIDR 记法的 IPv4 地址。 例如:

ipv4_addrs_ed0="192.168.0.1/24 192.168.1.1-5/28"

  ppp-user 脚本改名为 ppp


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

  BIND 从 9.3.1 更新到了 9.3.2。

  hostapd 由 0.3.9 版更新到了 0.4.8 版。

  GNU Troff 从 1.19 更新到了 1.19.2。

  sendmail 由 8.13.4 更新到了 8.13.6。

  时区数据库从 tzdata2005l 版升级到了 tzdata2005r 版。

  WPA Supplicant 由 0.3.9 版更新到了 0.4.8 版。


2.5 Ports/Packages 套件基础结构

   pkg_add(1) 命令新增了 -P 参数, 它与 -p 参数类似, 区别在于给定的前缀也会用于依赖的其他包。

   pkg_add(1) pkg_create(1) 这两个工具新增了 -K 参数, 表示将 package 默认保存至当前目录 (如果有定义 PKGDIR 则保存在那个目录)。

   pkg_create(1) 程序新增了 -x 参数, 用以使用基本正则表达式来表示 package 的名字, -E 标志表示使用扩展正则表达式, 而 -G 则表示精确匹配。

   pkg_version(1) 工具新增了 -o 参数, 用于显示在 package 生成时所记录的来源 (origin) 目录而不是其本身的名字, 以及 -O 参数表示只列出所有注册来源为指定来源的 package。

  新增了 portsnap(8) 工具 (sysutils/portsnap) 到 FreeBSD 基本系统中。 这是一个安全、 便于使用、 快速、 轻量级的工具, 能够很好地帮助用户保持他们的 ports tree 与官方版本同步。

  修正了 portsnap(8) 工具在处理 HTTP_PROXY_AUTH 时的 bug。

  从 local_startup 目录启动脚本改为使用与基本系统同样的 rcorder(8) 排序了。

  删去了从 Ports 套件安装的启动脚本的后缀。 这意味着 foo.sh 都将改名为 foo, 并且名为 foo.ORG 的脚本也会被执行。 您应重新安装所有安装了启动脚本的 package, 并清理 local_startup 目录中多余的文件。

  新增了两个 rc.conf 变量, ldconfig_local_dirsldconfig_local32_dirs。 这两个变量用于指定本地的 ldconfig(8) 目录列表。

  pkg-plist 中的 @cwd 命令支持不指定目录参数了。 如果没有指定目录参数, 则它将把当前工作目录设置为 @cwd 命令给出的第一个前缀。


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

  新增了 /var/audit 目录以及 audit 用户组。 它们主要用于 TrustedBSD OpenBSM 软件包, 这一软件包将在今后的版本中加入。

  支持的 GNOME 桌面环境 (x11/gnome2) 的版本, 从 2.10.2 升级到了 2.12.3。

  支持的 KDE 桌面环境 (x11/kde2) 的版本, 从 3.4.2 升级到了 3.5.1。

  支持的 Perl 解释器 (lang/perl5.8) 的版本, 从 5.8.7 升级到了 5.8.8。

  支持的 Xorg 视窗系统 (x11/xorg) 的版本, 从 6.8.2 升级到了 6.9.0。


2.7 文档

  


3 从先前版本的 FreeBSD 升级

  通过源代码升级到 FreeBSD 6.1-RELEASE, 则应使用 FreeBSD 5.3-RELEASE 或更高版本。 使用旧版的系统的用户, 如果想要升级到 6.1-RELEASE, 则需要首先升级到 FreeBSD 5.3 或更新的版本, 然后再升级到 FreeBSD 6.1-RELEASE。

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


这份文档,以及其他与FreeBSD发行版本有关的文档,都可以在 http://www.FreeBSD.org/snapshots/下载。

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

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

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