Solaris 补丁类型和依赖关系概述

本文档对补丁类型进行了总体概述。此外,本文档还介绍了各种补丁之间的基本关系。

补丁的定义
补丁是对操作系统或其他受支持软件中的已知或潜在问题的修复集合。补丁还可以针对特定的软件发行版提供新特性和增强功能。补丁所包含的文件和目录将替换或更新已有的文件和目录。
大多数 Solaris 补丁的交付方式都为一系列稀疏的 SVR4 软件包。补丁可以包含一个或多个稀疏软件包。稀疏软件包只包含 Solaris 初次在发行版中交付软件包之后发生更改的对象。当稀疏软件包中附带有代码更改时,这些软件包将启用小的补丁而不是重新分发完整但却很大的软件包。稀疏软件 包可使对客户环境所做的更改降到最低限度。
每个补丁都通过补丁标识号(补丁 ID)进行标识。补丁 ID 由一个六位数的主版本标识号和一个两位数的修订号组成,其格式为:xxxxxx-yy。
补丁是可累积的。后来的修订版中包含以前的修订版中提供的所有功能。例如,补丁 123456-02 包含补丁 123456-01 中的所有功能,此外,还包含在 Revision 02 中所添加的新的错误修复或新功能。这些更改在补丁 README 文件中进行描述。

补丁类型概述
本节将介绍具体的补丁类型。

表 1. 补丁类型

补丁类型

描述

内核补丁(以前称为内核更新 [KU] 补丁)

可以普遍使用的标准补丁。这种补丁十分重要,因为其更改范围会影响到系统。内核补丁会更改 Solaris 的内核以及相关的核心 Solaris 功能。必须重新启动才能激活新的内核版本。

临时补丁(T-patch)

已经构建并提交进行发布、但还没有完成全面测试和验证过程的补丁。
Solaris 补丁在进行正式发布之前要进行结构上的审计、功能验证并通过系统测试过程。测试是在补丁处于“T-patch”状态时进行的。在成功地完成测试过程之后,补丁将被正式发布。有关 Sun 公司的补丁测试范围的概述,请参阅 补丁测试
T-patch 也可能被用于参与活动呈报的客户,以便验证补丁是否能解决该客户的问题。这种类型的补丁通过在补丁 ID 前面加“T”进行标识,例如 T108528-14。短语“(初步补丁 - 尚未发布)”将显示在补丁 README 文件中的第一行。在补丁经过测试和验证后,T-patch 标志会被删除,补丁将被发布。
注意 - 如果您已经安装了一个 T-patch,然后发现该补丁以相同的修订版进行发布,则没有必要删除 T-patch 然后再安装发布的版本。发布的版本和 T-patch 之间除了 README 文件之外是一样的。

安全性 T-patch

通过 SunSolve 站点的安全性 T-Patch 部分,可提前访问针对安全问题的补丁。请参阅 Security T-Patch download section
这些补丁仍然处于 T-patch 阶段,这也就意味着它们没完成验证和补丁测试过程。安装安全性 T-patch 需要用户自己进行判断并考虑到可能存在风险。有关安全性 T-patch 所解决的问题的信息和可能的解决方法,请参考“免费的安全性 Sun 警报”数据集。请参阅 Sun Security Coordination Team 页面。

复原补丁

对于过大或过于复杂的补丁,有时会在其后面跟一个“回复”过程。通过回复过程提供的补丁,可以以相对安全的方式逐步安装复杂的新功能。当补丁成为一个回复 补丁时,将不会再创建该补丁的更多修订版。取而代之的是,对回复补丁的进一步更改将以一系列新的补丁 ID 提供。这些新补丁依赖并需要回复的补丁。如果一个新补丁随着时间的过去而变得复杂,则该补丁可能变为回复的补丁。例如,核心补丁在必要是就属于回复的补 丁。
这种过程的好处是:尽管客户必须安装复杂的补丁,但在进一步安装补丁时会更加简单。
有关更多详细信息,请参阅 SunSolve Patch Rejuvenation 文章。

单点补丁

自定义补丁。这种补丁作为针对客户所遇到的特定问题的回应提供给该客户。单点补丁仅适用于为其提供补丁的客户。这些补丁通常是针对一个客户而创建的,因为 大多数客户会考虑“修复”更糟糕的错误,而不是在问题可以修复时立即进行解决。这些补丁是在 Solaris 源代码库的分支之上创建的,而不是叠加到主要的源代码库。
访问单点补丁会受到限制,而且只应当在咨询 Sun 支持人员之后进行安装。

受限制的补丁 (R-patch)

具有特殊特征的极少数补丁。R-patch 会锁定修改的软件包。此锁定将阻止由其他补丁对该软件包进行后续的修改。
使用 R-patch 的环境与使用单点补丁的环境类似。与单点补丁一样,R-patch 仅适用于为其提供补丁的客户。这些补丁是在 Solaris 源代码库分支之上创建的,而不是叠加到主要的源代码库。
必须首先手动删除 R-patch,才可以应用“正式的”标准补丁。

临时诊断援助 (IDR)

IDR 通过提供软件来帮助诊断客户问题,或针对某个问题提供初步的临时性援助。IDR 以类似于 R-patch 的补丁行式提供,但由于 IDR 不提供对问题的最终解决,因此 IDR 并不属于实际补丁的替代品。在可行的情况下,应尽快使用正式的补丁来替换 IDR。
有关 IDR 的更多详细信息,请参阅 Interim Relief/Diagnostics

临时安全性援助 (IDR)

解决公共安全问题的补丁。这种补丁是 IDR 的一种类型。ISR 属于早期阶段的修复,它针对公开已知的安全漏洞提供保护。ISR 没有完成评审、验证和测试过程。ISR 的安装需要用户进行判断并考虑到会可能存在风险。ISR 在 SunSolve 上的 Security T-Patch download section 中提供。有关 ISR 所解决的问题的信息和可能的解决方法,请参考“免费的安全 Sun 警报”数据集。请参阅 Sun Security Coordination Team 页面。

非标准补丁

不能使用 patchadd 命令进行安装的补丁。非标准补丁不以软件包的形式提供。这种补丁必须使用补丁 README 文件中指定的“特殊安装说明”进行安装。非标准补丁通常提供固件或应用程序软件修复。

已撤消补丁

如果发现某个已发布的补丁会导致严重问题,该补丁将被从 SunSolve 中删除。

该补丁将不能再用于下载。

README 文件仍被保留在 SunSolve 上。README 文件的内容将更改为声明该补丁已被撤消,并添加有关问题以及删除补丁原因的简短声明。

这种补丁在已撤消补丁列表中记录一年。请参阅 Withdrawn Patches Reports

将发布 Sun 警报以告知客户有关已撤消补丁的问题。Sun 警报将指出已在其系统上安装已撤消补丁的客户应采取的任何行动。
Sun 警报显示在最近发布的 Sun 警报列表中。请参阅 Recent Sun Alerts

交互式补丁

需要用户交互才能安装的补丁。这种补丁必须按照补丁 README 文件中指定的“特殊安装说明”进行安装。

更新版本和脚本补丁

Sun 公司会定期针对 Solaris 分发版的当前版本发布更新。这些版本有时被称为“更新”版本。更新版本是完整分发版,它使用日期标志进行命名,例如 Solaris 10 6/06。
更新版本包含组成原始版本的所有软件包,例如 Solaris 10 3/05 带有所有预先应用的补丁并包括任何可以包含在内的新增功能。
预先应用补丁的过程涉及某些没有获得发布的补丁。因此,安装了“更新”版本的系统可能具有某些不能在 SunSolve 上找到的补丁。这些补丁称为脚本补丁。脚本补丁不提供错误修复或新增功能,但通过创建图像提供问题结果的修复。因此,脚本补丁不是供客户使用的,因为在创 建“更新”版本以外它们是不需要的。

补丁特征
以下部分提供了有关补丁特征的基本信息。

README 文件中的关键词
通过提供关键词,可使用户识别出哪些补丁可以适用于他们的环境。最重要的关键词是“安全”。安全指明补丁包括安全修复,因此应当被认为更加紧急。其他关键词可能包括受影响的子系统、硬件平台或用户命令。

补丁元数据
补丁具有描述补丁属性的关联元数据。元数据包括特殊处理要求,例如“安装后重新启动”或“需要以单用户模式安装”。这些属性在 README 文件中被转换为文本,用户应当阅读这些内容。
Solaris 补丁实用工具也会利用包含在 pkginfo 和 pkgmap 文件中的元数据。

非全局区域的补丁元数据
补丁包含特定于 Solaris 区域的元数据,以确保正确地修补区域环境。可在下列参考资料中找到详细信息:

参阅 patchadd(1M) 命令 -G 选项

参阅 Chapter 24, About Packages and Patches on a Solaris System With Zones Installed (Overview), in System Administration Guide: Solaris Containers-Resource Management and Solaris Zones

补丁依赖关系(相互关系)
补丁中所提供的功能(错误修复或新增功能)可能与其他补丁中所提供的功能具有相互联系。
这些相互联系由软件包的 pkginfo 文件中的三个字段确定:

SUNW_REQUIRES 字段,标识补丁依赖关系。必须首先安装这些前提补丁才能安装此补丁。

SUNW_OBSOLETES 字段,标识其内容已经累积到此补丁中的补丁。这个新补丁将废弃最初的补丁。

SUNW_INCOMPAT 字段,标识与此补丁不兼容并因此不能在同一个系统上安装的补丁。
这些字段被 Solaris patchadd 和 patchrm 命令自动用来确保被修补的目标系统的一致性。这些字段还在补丁的 README 文件中转换为人类可读的格式。

针对补丁依赖关系的 SUNW_REQUIRES 字段
SUNW_REQUIRES 标识补丁依赖关系。补丁中提供的功能可能与在其他补丁中提供的更改或功能之间具有代码依赖关系。因此,一个补丁会需要一个或多个其他补丁才能正确运行。如 果某个补丁依赖于一个或多个补丁,则该补丁将在补丁的软件包的 pkginfo 文件的 SUNW_REQUIRES 字段中指定所需的补丁。此信息还被反映在 README 文件中。必须首先安装这类前提补丁才能安装此补丁。
依赖关系要求只能是单向起作用的。如果补丁 A 需要补丁 B,则补丁 B 不能需要补丁 A。因为补丁是累积的,如果补丁 A-01 需要补丁 B-01,则补丁 B 的任何修订版都会大于或等于 -01,因此也会满足要求。
如果存在其他类型的依赖关系,则将在补丁 README 文件中指定,它可能包括下列内容:

条件依赖关系表示硬编码的补丁依赖关系,它仅在特定条件下出现。例如,当且仅当 CDE 1.3 安装在目标系统上时。

软依赖关系表示要求其补丁完全提供特定的错误修复或功能,但是系统在没有其他补丁的情况下仍保持在一致性状态中。

针对补丁累积和废弃的 SUNW_OBSOLETES 字段
SUNW_OBSOLETES 字段标识补丁累积和废弃。有时错误修复或新增功能导致两个或多个现有补丁变得关系紧密。例如,两个补丁之间可能存在双向的硬编码依赖关系。在这种情况下, 可能必须将两个或多个补丁的功能累积到一个补丁中,因此需要废弃其他补丁。其他补丁的功能被累积到其中的补丁指定已被废弃的补丁的 ID。此信息位于补丁的稀疏软件包中提供的 pkginfo 文件中的 SUNW_OBSOLETES 字段中。这种声明称为显式废弃。
补丁累积只能是单向起作用的。也就是说,如果补丁 A 累积了补丁 B,则现在补丁 A 中会包含所有补丁 B 的功能。补丁 B 现在被废弃。不会再进一步生成补丁 B 的修订版。
由于补丁具有累积性,所以补丁后来的修订版将“隐式”地废弃同一个补丁的早期修订版。被隐式废弃的补丁将不会在 SUNW_OBSOLETES 字段中进行标记。例如,Patch A-Revision xx 不需要在 pkginfo 文件中使用 SUNW_OBSOLETES 条目显式地废弃 Patch A-Revision x-1。
注意 - 对于 Solaris 10 和 Solaris 10 发行版(2007 年 8 月以后)来说,发行的补丁中可能没有包含任何新的更改。此补丁可能声明它废弃了在几个月前发布的另一个补丁。这是 Solaris 更新补丁创建流程产生的结果。如果您已安装了被废弃的补丁,而且新补丁没有列出任何新的更改,则您没有必要安装这个新补丁。
例如,Solaris 10 timezones 补丁 122032-05 被补丁 125378-02 废弃。如果您已经安装了 122032-05,则您没有必要安装 125378-02,因为 125378-02 没有提供任何新的更改。

针对不兼容性的 SUNW_INCOMPAT 字段
在少数情况下,会存在两个或多个补丁彼此之间不兼容的情况。不兼容性通常在单点补丁和 IDR 中定义。不兼容性很少在常规补丁中定义。不兼容性在一个或两个软件包的稀疏软件包中的 pkginfo 文件中的 SUNW_INCOMPAT 字段中指定。
补丁不兼容性是双向的。如果补丁 A 或补丁 B 指定与另一个补丁之间存在不兼容性,则目标系统上只能安装两个补丁之中的一个。例如,如果补丁 A 已经安装到目标系统上,而补丁 B 与其不兼容,则补丁安装实用工具 patchadd 将不允许安装补丁 B。如果必须安装补丁 B,则必须首先删除补丁 A。
两个补丁或一个不兼容对不必定义不兼容性。通常情况下,单点补丁或 IDR 会定义不兼容性,因为这些类型的补丁来自非标准代码分支。