如何在 Oracle Solaris 11 系统上仅更新 Java

作者:Peter Dennis 和 Alta Elstad

本文介绍如何更新 Java 而不更新任何其他软件。Java 可能在一个 Oracle Solaris 版本内多次更新,因此您应定期执行此过程。


2013 年 5 月发布


Java 是 Oracle Solaris 11 系统软件的一部分。通常,最好的做法是同时更新系统软件,作为一个一起测试的支持集。Oracle Solaris 11 使用名为 incorporation 的特殊软件包将特定软件集聚在一起,该软件包指定可安装的软件包版本。incorporation 中指定的软件包可能本身是 incorporation,也可能需要安装另一个软件包的特定版本。因此一个 incorporation 影响(或该 incorporation 约束)的软件包集可能比 incorporation 软件包中指定的集合大得多。

想对本文发表评论吗?请将链接发布在 Facebook 的 OTN Garage 页面上。有类似文章要分享?请将其发布在 Facebook 或 Twitter 上,我们来进行讨论。

如果您尝试安装的软件包版本与 incorporation 约束的版本不同,您将收到一条错误消息,更新或安装操作将失败。一般情况下,对于一个版本受 incorporation 约束的软件包,支持通过更新 incorporation 软件包来更新它。

有时您需要安装的受 incorporation 约束的软件,其版本不同于 incorporation 允许的版本。例如,您可能需要安装一个安全更新。本文介绍如何更新一个受 incorporation 约束的软件而不修改受该 incorporation 约束的任何其他软件,最终仍然得到一个受支持的系统。本示例更新的软件是 Java。

有关 incorporation 的更多信息,请参见“从 Oracle 支持信息库更新 Oracle Solaris 11 系统的更多技巧”一文中的“Oracle Solaris 11 软件结构”。

如何更新 Oracle Solaris 11.1 中的 Java 软件

Oracle Solaris 11.1 安装版本受 java-incorporation 软件包约束的 Java SE 7 软件包。仅通过更新 java-incorporation 软件包无法更新此软件包,因为该软件包又受 pkg:/entire incorporation 软件包约束。

要更新 Java 而不更新 pkg:/entire 软件包,请解锁 Java incorporation 软件包的 version-lock facet,然后更新 Java incorporation 软件包,如以下过程所述,该过程介绍了如何更新全局区域。

有关 version-lock facet 的更多信息,请参见添加和更新软件包 第 5 章“配置安装的映像”中的“放宽 incorporation 指定的版本约束”。

  1. 检查是否有可用的更新软件包:

    确保 java-incorporation 软件包有可用的更新。

    # pkg list -af java-incorporation
    NAME (PUBLISHER)                                  VERSION                    IFO
    consolidation/java/java-incorporation             0.5.11-0.175.1.7.0.4.0     ---
    consolidation/java/java-incorporation             0.5.11-0.175.1.0.0.24.0    i--
    

    如果映像(“I”列中的“i”)中当前安装的这些软件包的版本是最新可用版本,则无可更新,停止操作。

    如果您认为应该有更新的版本可用,可检查您的 solaris 发布者源点。如果您的 solaris 发布者源点是本地位置,请确保该本地信息库与最新更新软件包同步。如果更改发布者源点或更新本地软件包信息库,请刷新发布者或者刷新或重新构建信息库。

  2. 解锁 version-lock facet:

    java-incorporation 软件包的 version-lock facet 的值更改为 false,如清单 1 所示。要更新的软件包的数量是该映像中安装的软件包数,因为会针对此 facet 检查映像中的每个软件包。

    # pkg change-facet \
    facet.version-lock.consolidation/java/java-incorporation=false
                Packages to update: 851
         Variants/Facets to change:   1
           Create boot environment:  No
    Create backup boot environment: Yes
    
    Planning linked: 1/1 done
    PHASE                                          ITEMS
    Removing old actions                             1/1
    Updating image state                            Done 
    Creating fast lookup database                   Done 
    Reading search index                            Done 
    Building new search index                    851/851
    

    清单 1

    使用 pkg facet 命令确认 facet 更改的值。

    # pkg facet
    FACETS                                                   VALUE
    facet.version-lock.consolidation/java/java-incorporation False
    
  3. 更新软件包:

    更新 java-incorporation 软件包。作为优秀实践,先使用 -nv 选项进行更新,如清单 2 所示,查看将更新哪些内容。

    # pkg update -nv java-incorporation
    
                Packages to update:         2
         Estimated space available:  77.61 GB
    Estimated space to be consumed: 377.26 MB
           Create boot environment:        No
    Create backup boot environment:       Yes
              Rebuild boot archive:        No
    
    Changed packages:
    solaris
      consolidation/java/java-incorporation
        0.5.11,5.11-0.175.1.0.0.24.0:20120904T175431Z -> 0.5.11,5.11-0.175.1.7.0.4.0:20130429T150946Z
      runtime/java/jre-7
        1.7.0.7,5.11-0.175.1.0.0.24.0:20120904T175502Z -> 1.7.0.21,5.11-0.175.1.7.0.4.0:20130429T151023Z
    Planning linked: 0/1 done; 1 working: zone:z1
    Linked image 'zone:z1' output:
    |      Estimated space available: 77.61 GB
    | Estimated space to be consumed: 28.95 MB
    |           Rebuild boot archive:       No
    `
    Planning linked: 1/1 done
    

    清单 2

    如果您感到满意,不带 -n 选项执行更新。作为优秀实践,使用 --be-name 选项(如清单 3 所示)只在新的引导环境 (BE) 中进行更改,当前引导环境作为备份保持不变。

    # pkg update -v --be-name s11.1javaupdate java-incorporation
    
                Packages to update:         2
         Estimated space available:  77.57 GB
    Estimated space to be consumed: 377.26 MB
           Create boot environment:       Yes
         Activate boot environment:       Yes
    Create backup boot environment:        No
              Rebuild boot archive:        No
    
    Changed packages:
    solaris
      consolidation/java/java-incorporation
        0.5.11,5.11-0.175.1.0.0.24.0:20120904T175431Z -> 0.5.11,5.11-0.175.1.7.0.4.0:20130429T150946Z
      runtime/java/jre-7
        1.7.0.7,5.11-0.175.1.0.0.24.0:20120904T175502Z -> 1.7.0.21,5.11-0.175.1.7.0.4.0:20130429T151023Z
    Planning linked: 0/1 done; 1 working: zone:z1
    Linked image 'zone:z1' output:
    |      Estimated space available: 77.57 GB
    | Estimated space to be consumed: 28.95 MB
    |           Rebuild boot archive:       No
    `
    Planning linked: 1/1 done
    DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
    Completed                                2/2       191/191    62.4/62.4  1.5M/s
    
    Downloading linked: 0/1 done; 1 working: zone:z1
    Downloading linked: 1/1 done
    PHASE                                          ITEMS
    Removing old actions                             7/7
    Installing new actions                           8/8
    Updating modified actions                    190/190
    Updating package state database                 Done 
    Updating package cache                           2/2 
    Updating image state                            Done 
    Creating fast lookup database                   Done 
    Reading search index                            Done 
    Updating search index                            2/2 
    Executing linked: 0/1 done; 1 working: zone:z1
    Executing linked: 1/1 done
    
    A clone of solaris11.1 exists and has been updated and activated.
    On the next boot the Boot Environment s11.1javaupdate will be
    mounted on '/'.  Reboot when ready to switch to this updated BE.
    

    清单 3

    确认软件包已经在新的引导环境中更新:

    # pkg list java-incorporation
    NAME (PUBLISHER)                                  VERSION                    IFO
    consolidation/java/java-incorporation             0.5.11-0.175.1.0.0.24.0    i--
    # beadm mount s11.1javaupdate /mnt
    # pkg -R /mnt list java-incorporation
    NAME (PUBLISHER)                                  VERSION                    IFO
    consolidation/java/java-incorporation             0.5.11-0.175.1.7.0.4.0     i--
    # beadm unmount s11.1javaupdate
    

如何更新非全局区域

更改全局区域中的 facet 值不会 改变非全局区域中的 facet 值。在某些情况下,在全局区域中安装或更新软件包也会影响非全局区域。Java 不是 这种情况:您可以在全局区域和非全局区域安装不同的 Java 版本。如果非全局区域中需要更新 Java 版本,可单独执行这些更新,如下所示。

如果在全局区域更新过程中使用 --be-name 选项,可能需要重新引导到新 BE,并在其中更新非全局区域。

在以下示例中,只更新 java-incorporation 软件包。请注意,在上面全局示例中,更新了 java-incorporation 软件包和 jre-7 软件包。本示例中的非全局区域并未安装 jre-7 软件包。解锁和更新 java-incorporation 软件包可确保如果稍后在此区域中安装 Java 7,将安装更新的版本。

  1. 登录区域并检查当前安装的 java-incorporation 软件包版本:

    # zlogin z1
    [Connected to zone 'z1' pts/4]
    Oracle Corporation	SunOS 5.11	11.1	September 2012
    root@z1:~# pkg list -af java-incorporation
    NAME (PUBLISHER)                                  VERSION                    IFO
    consolidation/java/java-incorporation             0.5.11-0.175.1.7.0.4.0     ---
    consolidation/java/java-incorporation             0.5.11-0.175.1.0.0.24.0    i--
    
  2. 解锁 version-lock facet:

    java-incorporation 软件包的 version-lock facet 值更改为 false,如清单 4 所示。

    root@z1# pkg change-facet \
    facet.version-lock.consolidation/java/java-incorporation=false
                Packages to update: 183
         Variants/Facets to change:   1
           Create boot environment:  No
    Create backup boot environment: Yes
    
    PHASE                                          ITEMS
    Removing old actions                             1/1
    Updating image state                            Done 
    Creating fast lookup database                   Done
    

    清单 4

  3. 更新软件包:

    更新 java-incorporation 软件包,如清单 5 所示。虽然本示例未显示 -n--be-name 选项,但您可以在非全局区域中使用这些选项。有关如何使用这些选项,请参见上面的全局区域示例

    root@z1# pkg update java-incorporation
                Packages to update:   1
           Create boot environment:  No
    Create backup boot environment: Yes
    
    DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
    Completed                                1/1           3/3      0.0/0.0  427k/s
    
    PHASE                                          ITEMS
    Removing old actions                             5/5
    Installing new actions                           5/5
    Updating modified actions                        1/1
    Updating package state database                 Done 
    Updating package cache                           1/1 
    Updating image state                            Done 
    Creating fast lookup database                   Done
    

    清单 5

    确认已更新软件包:

    root@z1# pkg list java-incorporation
    NAME (PUBLISHER)                                  VERSION                    IFO
    consolidation/java/java-incorporation             0.5.11-0.175.1.7.0.4.0     i--
    

另请参见

有关如何解锁软件包的更多信息,请参见以下资源:

以下是有关 Oracle Solaris 11 的其他一些资源:

关于作者

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

Alta Elstad 是支持 Oracle Solaris 11 软件包的技术文档作家。

修订版 1.0,2013 年 5 月 16 日

关注我们:
博客 | Facebook | Twitter | YouTube