跳过导航链接 | |
退出打印视图 | |
![]() |
在 Oracle Solaris 11.1 中使用映像包管理系统打包和交付软件 Oracle Solaris 11.1 Information Library (简体中文) |
您可能希望为给定的应用程序交付具有如下特征的多个实现:
所有实现在映像中都可用。
其中一个实现被指定为首选实现。
首选实现具有指向其二进制文件(安装到某个常见目录,例如 /usr/bin)的符号链接,以方便搜索。
管理员可根据需要更改首选实现,无需添加或删除任何软件包。
交付应用程序的多个实现的一个示例为 GCC。Oracle Solaris 提供了多个版本的 GCC,每个版本均位于各自的软件包中,并且 /usr/bin/gcc 指向首选版本。
IPS 使用中介链接在单个映像中管理应用程序的多个实现。中介链接是指由 pkg set-mediator 和 pkg unset-mediator 命令控制的符号链接。对于软件包中用于交付应用程序的不同实现的 link 操作,可以说它们参与了仲裁。pkg mediator 命令列出了映像中的仲裁。有关 mediator 命令的信息,请参见 pkg(1) 手册页。
可以在 link 操作上设置以下属性来控制中介链接的交付方式:
指定由给定仲裁组(例如 python)中涉及的所有路径名称共享的仲裁名称空间中的条目。
可基于 mediator-version 和 mediator-implementation 执行链接仲裁。给定路径名称的所有中介链接必须指定同一 mediator。但是,并非所有中介版本和实现都需要在给定路径上提供链接。如果仲裁不提供链接,则会在选定该仲裁时删除链接。
中介与特定版本和/或实现组合起来表示可选择供包管理系统使用的仲裁。
指定 mediator 属性描述的接口的版本(表示为非负整数的点分序列)。如果指定了 mediator 而未指定 mediator-implementation,则此属性是必需的。本地系统管理员可以显式设置要使用的版本。指定的值通常应当与交付链接的软件包的版本相匹配。例如,runtime/python-26 应使用 mediator-version=2.6,尽管不是必须这样做。
指定中介的实现。该属性可以与 mediator-version 属性一起指定或者用来代替后者。实现字符串不被视为有序的。如果系统管理员未明确指定,则是 pkg(5) 随机选择的一个字符串。
mediator-implementation 的值可以是由字母数字字符和空格组成的任意长度的字符串。如果实现本身可版本化或已版本化,则应在字符串结尾处在 @ 符号后指定版本。版本表示为非负整数的点分序列。如果存在多个版本的实现,则缺省行为是选择最高版本的实现。
如果系统上仅安装了特定路径的实现仲裁链接的一个实例,则会自动选择该实例。如果以后安装了该路径的其他链接,除非应用供应商、站点或本地覆盖或者如果某一链接进行了版本中介,否则不会切换链接。
在解决中介链接中的冲突时,如果可能,pkg(5) 会选择 mediator-version 值最大的链接。如果这不可能,pkg(5) 会基于 mediator-implementation 选择链接。mediator-priority 属性用于为常规冲突解决方案过程指定覆盖。如果未指定 mediator-priority 属性,则会应用缺省中介选择逻辑。
mediator-priority 属性可以使用以下值之一:
与未指定 mediator-priority 的链接相比,将优先选择该链接。
与值为 vendor 或未指定 mediator-priority 的链接相比,将优先选择该链接。
本地系统管理员可以覆盖上面所述的选择逻辑。
样例清单中的以下两个摘录参与了链接 /usr/bin/myapp 的仲裁。实现 1 的版本为 5.8.4:
set name=pkg.fmri value=pkg://test/myapp-impl-1@1.0,5.11:20120721T035233Z file path=usr/myapp/5.8.4/bin/myapp group=sys mode=0755 owner=root link path=usr/bin/myapp target=usr/myapp/5.8.4/bin/myapp mediator=myapp mediator-version=5.8.4
实现 2 的版本为 5.12:
set name=pkg.fmri value=pkg://test/myapp-impl-2@1.0,5.11:20120721T035239Z file path=usr/myapp/5.12/bin/myapp group=sys mode=0755 owner=root link path=usr/bin/myapp target=usr/myapp/5.12/bin/myapp mediator=myapp mediator-version=5.12
这两个软件包可以安装在同一映像中:
$ pkg list myapp-impl-1 myapp-impl-2 NAME (PUBLISHER) VERSION IFO myapp-impl-1 1.0 i-- myapp-impl-2 1.0 i--
使用 pkg mediator 命令可查看正在使用的仲裁:
$ pkg mediator MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION myapp local 5.12 system $ ls -al usr/bin/myapp lrwxrwxrwx 1 root sys 23 Jul 21 16:58 usr/bin/myapp -> usr/myapp/5.12/bin/myapp
使用 pkg search 命令可查看参与 myapp 仲裁的其他软件包:
$ pkg search -ro path,target,mediator,mediator-version,pkg.shortfmri ::mediator:myapp PATH TARGET MEDIATOR MEDIATOR-VERSION PKG.SHORTFMRI usr/bin/myapp usr/myapp/5.12/bin/myapp myapp 5.12 pkg:/myapp-impl-2@1.0 usr/bin/myapp usr/myapp/5.8.4/bin/myapp myapp 5.8.4 pkg:/myapp-impl-1@1.0
使用 pkg set-mediator 命令可更改仲裁。以下示例更改作为首选版本的 myapp 版本:
# pkg set-mediator -V 5.8.4 myapp Packages to update: 2 Mediators to change: 1 Create boot environment: No Create backup boot environment: No PHASE ITEMS Removing old actions 2/2 Updating modified actions 2/2 Updating image state Done Creating fast lookup database Done Reading search index Done Updating search index 2/2 # ls -al usr/bin/myapp lrwxrwxrwx 1 root sys 24 Jul 21 17:02 usr/bin/myapp -> usr/myapp/5.8.4/bin/myapp