从 Oracle 支持信息库更新 Oracle Solaris 11 系统的技巧

作者:Peter Dennis

反馈按钮

对于有权访问 Oracle 支持的 Oracle Solaris 11 管理员来说,正确、有效地维护系统对于数据中心运营极为重要。本文研究支持信息库更新 (SRU) 和如何利用 Oracle 的最新更新或一组指定更新来更好地维护系统。


2012 年 5 月发布

Oracle 支持信息库包含错误修复程序和关键安全修复程序,可应用到现有 Oracle Solaris 11 安装上,以帮助确保系统在数据中心正常运行。支持信息库每月更新一次,这些更新称为“支持信息库更新 (SRU)”。与包括各种新操作系统特性的 Oracle Solaris 更新不同,Oracle 支持信息库只对有支持合同的系统开放,且关键更新较少。

如果要下载软件、加入论坛、阅读类像本文这样技术方法文章等,请成为 OTN 成员。无垃圾邮件!

本文探讨映像包管理系统 (IPS) 的更高级用法,并假设您对使用 pkg(1) 命令行工具的更新过程已有基本的了解。如果要了解 IPS 的最新信息,请阅读“如何使用支持信息库更新更新 Oracle Solaris 11 系统”。

Oracle Solaris 11 软件的结构

Oracle Solaris 11 软件通过一组软件包交付,每组软件包受编制 约束,以确保软件包版本彼此一致(且经过测试)。注意,编制并不提供软件包,而是定义可以在系统上安装的软件包的版本。

每个编制大体上代表系统的功能组件。如 gnome-incorporation,它代表 GNOME 桌面。您可以在使用映像包管理系统打包并提供软件 开发人员指南中找到编制的完整列表。所有编制又受称为 entire 的编制的约束。

您可以从编制的一个版本升级到另一个版本。更新编制时,它约束的所有软件包将更新到编制新版本中指定的版本。

支持信息库更新

支持信息库要求相关客户端系统上配置了 SSL 证书。您可以使用 http://pkg-register.oracle.com 上的注册申请获得 SSL 证书。

安装 SSL 证书之后,就可以使用 pkg(1) 命令行工具或 Package Manager 图形化工具访问支持信息库了。

错误修复程序以软件包的更新形式来提供。当软件包在 SRU 中更新了时,软件包的版本字符串也会递增。您可以在使用映像包管理系统打包并提供软件 开发人员指南中找到有关版本字符串的详细信息。

因为每个软件包是编制的一部分,所以将更新编制以包括软件包的新版本。这又意味着将更新 entire 编制以使用这些新编制。

更新系统

可通过以下几种方式更新系统:

使用所有最新更改更新系统

建议您使用支持信息库内的最新更改定期更新系统。为此,在系统上使用以下命令:

# pkg update

将系统更新到特定 SRU

如果只需要更新到特定 SRU,则在运行 pkg update 命令时,通过 entire 故障管理资源标识符 (FMRI) 字符串标识 SRU。例如,下面这条命令可以更新到 SRU#2:

# pkg update entire@0.5.11-0.175.0.2

要列出所有可用 SRU,使用以下命令:

# pkg list -af entire

有关每个 SRU 中修复的错误的信息,可在 My Oracle Support SRU 信息页(要求登录)上找到。

使用 SRU 的子集更新系统

当更新到整个 SRU 不可行时,可以更新特定软件包或某组软件包以解决某一 SRU 修复的问题。这不是首选或推荐的做法,但可以更新特定软件包和编制。

该方法利用了开发人员指南第 6 章和第 13 章中介绍的版本解除锁定机制。

将相应的版本锁 facet 设置为 false,从而移除由编制应用于相应软件包的约束。

相互依赖的软件包必须要有一致的版本,但并非所有软件包可以放松约束,如果是这种情况,它们不会有版本锁 facet。例如不可分核心,它包括内核、驱动程序、系统库及相关工具。

其他已安装组件可能对有版本锁 facet 的软件包有 requireoptional 依赖关系。在这个例子中,您可以取消设置 facet 但不能修改系统上软件包的版本。如果是这种情况,该软件包系统将提示为什么不能更改该软件包。

此时,设置版本锁 facet 可能需要较长时间。这一问题正在解决。

版本锁 facet 存在于单个组件软件包和编制上。设置后者让您可以将编制从系统其余部分解除锁定,而编制本身所包含的软件包继续获得同步。

版本锁 facet 的名称一般如下所示,其中 <package-name> 是 facet 应用到的软件包的名称:

version-lock.<package-name>

此约定将来可能会更改,以便可以为通过多个软件包交付的特定组件修改单个版本锁 facet。

更新单个软件包

如果需要,某些软件包可以单独更新。一般来说,这些软件包可以独立于操作系统单独更新。当无法更新到整个 SRU 时,若要更新包含安全修复程序的 SRU 中的特定软件包,建议采用此方法。

要放松对软件包的约束,使用以下命令:

# pkg change-facet facet.version-lock.library/security/openssl=false

还可以指定所需版本:

# pkg update library/security/openssl@1.0.0.5-0.175.0.2

注意,上述 pkg update 命令使用完整 FMRI 字符串的一个子集(仅足以唯一标识它即可)。

此外,为了防止意外更改软件包,可以在所需级别将软件包冻结:

# pkg freeze library/security/openssl

建议使用 -c 选项记录冻结的原因。

# pkg freeze -c "Update prior to SRU#4 install" library/security/openssl

注意,如果要修改软件包(移至不同版本),则需要撤销冻结:

# pkg unfreeze library/security/openssl

可以通过两种方法来使软件包重新与 SRU 同步。

  • 如果软件包落伍了,只需重置相应的版本锁 facet 即可使软件包更新到当前 SRU 级别。

    # pkg change-facet facet.version-lock.library/security/openssl=true
    
  • 如果软件包超前了,有两种选择:
    • 可以更新整个系统(可能需要重新启动),然后重置版本锁 facet:

      # pkg update
      # pkg change-facet facet.version-lock.library/security/openssl=true
      
    • 或者,还可以将相关软件包降级到所需版本并将约束重新应用于软件包。重要的是识别要降级到的软件包的正确版本。为此,可以通过基于系统上安装的软件搜索应用于软件包的约束:

      # pkg search -l -o fmri ':depend:incorporate:library/security/openssl'
      FMRI
      pkg:/library/security/openssl@1.0.0.5-0.175.0.0.0.2.537 
      

      然后更新到该版本并重置版本锁 facet:

      # pkg update library/security/openssl@1.0.0.5-0.175.0.0.0.2
      ...
      # pkg change-facet facet.version-lock.library/security/openssl=true
      

      再次注意,未使用软件包的完整 FMRI 字符串。

更新单个编制

如前所述,可以放松编制施加的约束。一旦放松约束,即可独立于系统的其余部分单独更新软件包。然后可以使用 pkg freeze 冻结软件包以防止它在未来被更新。

例如,可以通过单独更新桌面编制和内核编制来避免系统重新启动:

# pkg change-facet facet.version-lock.consolidation/desktop/desktop-incorporation=false

然后可以独立于系统的其余部分单独更新桌面编制:

# pkg update desktop-incorporation

此外,还可以更新到编制的特定修订版本:

# pkg update desktop-incorporation@0.5.11-0.175.0.5.0.5.0

:如果编制解除了锁定,且在系统上执行了 pkg update,则将更新解除锁定的编制。您也可能不想发生这种情形,因此可以使用 pkg freeze desktop-incorporation 冻结编制以防止进一步更新。

建议使用 -c 选项记录冻结的原因:

# pkg freeze -c "Standard environment 12/10" desktop-incorporation

如果将来需要更改编制,则需要解除其冻结:

# pkg unfreeze desktop-incorporation

有两种方法可以使编制重新与 SRU 同步:

  • 如果编制落伍了,只需重置版本锁 facet 即可使整合更新为系统上当前的 SRU 级别:

    # pkg change-facet facet.version-lock.consolidation/desktop/desktop-incorporation=true
    
  • 如果整合超前了,有两种选择:
    • 可以更新整个系统(可能需要重新启动),然后重置版本锁 facet:

      # pkg update
      # pkg change-facet facet.version-lock.consolidation/desktop/desktop-incorporation=true
      
    • 或者,还可以降级编制及该编制所编录的所有软件包。这需要显式命名所有软件包及其关联版本:

      # pkg update desktop/desktop-incorporation@0.5.11,5.11-0.175.0.0.0.2.0 \ 
      web/browser/firefox@6.0.2-0.175.0.0.0.1.0 \
      web/data/firefox-bookmarks@6.0.2-0.175.0.0.0.0.0 \
      web/browser/firefox/plugin/firefox-flashplayer@10.3.183.10-0.175.0.0.0.1.0 \
      ..... # pkg change-facet facet.version-lock.consolidation/desktop/desktop-incorporation=true
更新多个软件包

软件包之间可能有交叉依赖关系,因此需要同时更新。包管理软件将强制系统上的映像达到一致:如果无法满足依赖要求,则不会修改软件包。如果存在此类依赖关系,则需要放松受影响软件包的约束。

包管理软件所报告消息的形式如下所示:

# pkg update package_name@0.5.11-0.175.0.2
Creating Plan \                
pkg update: No matching version of package_name can be installed:
   Reject:  pkg://solaris/package_name@0.5.11,5.11-0.175.0.2.0.3.0:...
   Reason:  All versions matching 'require' dependency 
   pkg:/otherpackage@0.5.11,5.11-0.175.0.2.0.3.0 are rejected

您还需要放松所依赖软件包的约束。

其他 pkg 命令

要查看系统上冻结了哪些软件包,使用以下命令:

# pkg freeze

要查看系统上设置了哪些 facet,运行以下命令:

# pkg facet

另请参见

关于作者

Peter Dennis 是 Oracle Solaris Revenue Product Engineering 小组的首席工程师。他曾从事多项技术工作:文件系统、卷管理和备份、集群和最终用户通用工具。目前他是 Oracle Solaris 11 Update 版本的技术负责人。

修订版 1.0,2012 年 5 月 14 日

要了解 Oracle 所有技术中与 sysadmin 有关的内容,请在 FacebookTwitter 上关注 OTN Systems。