Oracle Solaris 支持多种体系结构,SVR4 包管理系统常发生的一个错误是意外安装了错误体系结构的软件包。针对每种受支持的体系结构维护单独的 IPS 软件系统信息库对 ISV 没有吸引力,而且这样软件用户很容易出错。因此,IPS 支持在多种体系结构上安装单个软件包。
用于实现此功能的机制称作变量。变量允许目标映像的属性确定实际安装哪些软件组件。
变量包含两部分:名称和可能值列表。下表显示了在 Oracle Solaris 11 中定义的变量。
|
变量出现在软件包中的以下两处:
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 中,内核组件通常从安装在区域中的软件包中省略,因为内核组件在非全局区域中没有用。所以,内核组件使用设置为 global 的 opensolaris.zone 变量进行标记,从而不在非全局区域中安装内核组件。通常在发布期间使用 pkgmogrify(1) 规则在清单中进行此操作。针对区域标记 i386 和 sparc 内部版本中的软件包,然后使用 pkgmerge(1) 合并来自 sparc 和 i386 内部版本的软件包。这比尝试手动构造此类软件包要远远可靠和快得多。
软件开发者不应定义定制 variant.debug.* 变量以外的新变量。如果变量分配给了一个组件,而该变量在映像中没有缺省值,那么该软件包的安装将失败。变量名称空间的 variant.debug.* 部分预定义为使用缺省值 false。软件包开发者可以提供组件的调试版本,用定制 variant.debug.* 变量标记这些组件。如果发生问题,用户可以选择此变量。请记住,变量是按每个映像设置的,所以确保选择一个合适的名称,此名称可合理解释软件的该部分,而且是唯一的。
变量标记在合并期间应用于因体系结构而不同的操作,包括相关项和 set 操作。如果软件包标记为不支持当前映像的某个变量值,则不考虑安装此软件包。
pkgmerge(1) 手册页提供了有关合并软件包的一些示例。如果需要,pkgmerge 命令可同时合并多个不同变量。