在 Oracle® Solaris 11.2 中使用映像包管理系统打包和交付软件

退出打印视图

更新时间: 2014 年 7 月
 
 

互斥软件组件

Oracle Solaris 支持多种体系结构,SVR4 包管理系统常发生的一个错误是意外安装了错误体系结构的软件包。针对每种受支持的体系结构维护单独的 IPS 软件系统信息库对 ISV 没有吸引力,而且这样软件用户很容易出错。因此,IPS 支持在多种体系结构上安装单个软件包。

用于实现此功能的机制称作变量。变量允许目标映像的属性确定实际安装哪些软件组件。

变量包含两部分:名称和可能值列表。下表显示了在 Oracle Solaris 11 中定义的变量。

变量名
可能的值
variant.arch
sparci386
variant.opensolaris.zone
globalnonglobal
variant.debug.*
truefalse

变量出现在软件包中的以下两处:

  • set 操作对变量进行命名并定义应用于此软件包的值。

  • 如果任何操作只能针对 set 操作中指定的变量值的子集进行安装,则该操作具有一个标记,指定要根据其安装此操作的变量名称和值。

例如,交付符号链接 /var/ld/64 的软件包可能包含以下定义:

set name=variant.arch value=sparc value=i386
dir group=bin mode=0755 owner=root path=var/ld
dir group=bin mode=0755 owner=root path=var/ld/amd64 \
    variant.arch=i386
dir group=bin mode=0755 owner=root path=var/ld/sparcv9 \
    variant.arch=sparc
link path=var/ld/32 target=.
link path=var/ld/64 target=sparcv9 variant.arch=sparc
link path=var/ld/64 target=amd64 variant.arch=i386

请注意,同时交付到 SPARC 和 x86 上的组件不接收变量标记,但是只交付到其中一种体系结构的组件将接收相应的标记。操作可包含用于不同变量名称的多个标记。例如,某个软件包可能同时包含用于 SPARC 和 x86 的调试H和非调试二进制文件。

在 Oracle Solaris 中,内核组件通常从安装在区域中的软件包中省略,因为内核组件在非全局区域中没有用。所以,内核组件使用设置为 globalopensolaris.zone 变量进行标记,从而不在非全局区域中安装内核组件。通常在发布期间使用 pkgmogrify(1) 规则在清单中进行此操作。针对区域标记 i386sparc 内部版本中的软件包,然后使用 pkgmerge(1) 合并来自 sparci386 内部版本的软件包。这比尝试手动构造此类软件包要远远可靠和快得多。

软件开发者不应定义定制 variant.debug.* 变量以外的新变量。如果变量分配给了一个组件,而该变量在映像中没有缺省值,那么该软件包的安装将失败。变量名称空间的 variant.debug.* 部分预定义为使用缺省值 false。软件包开发者可以提供组件的调试版本,用定制 variant.debug.* 变量标记这些组件。如果发生问题,用户可以选择此变量。请记住,变量是按每个映像设置的,所以确保选择一个合适的名称,此名称可合理解释软件的该部分,而且是唯一的。

变量标记在合并期间应用于因体系结构而不同的操作,包括相关项和 set 操作。如果软件包标记为不支持当前映像的某个变量值,则不考虑安装此软件包。

pkgmerge(1) 手册页提供了有关合并软件包的一些示例。如果需要,pkgmerge 命令可同时合并多个不同变量。