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

退出打印视图

更新时间: 2014 年 7 月
 
 

指定中介链接

以下命令显示了 Python、Ruby 和 Secure Shell 当前选定的首选实现:

$ pkg mediator python ruby ssh
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
python      vendor    2.6     vendor
ruby        system    1.9     system
ssh         vendor            vendor     sunssh

以下命令显示了各中介的所有参与者:

$ pkg mediator -a python ruby ssh
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
python      vendor    2.6     vendor
python      system    2.7     system
ruby        system    1.9     system
ruby        system    1.8     system
ssh         vendor            vendor     sunssh

系统选择了较低版本作为首选 Python 实现,因为它指定了 mediator-priority,如 VER. SRC.IMPL. SRC. 以及以下命令所示:

$ pkg contents -Ho action.raw -t link -a path=usr/bin/python 'runtime/python*'
link mediator=python mediator-version=2.7 path=usr/bin/python pkg.linted.pkglint
.dupaction010.2=true target=python2.7
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
python target=python2.6

如果指定 mediator=python 作为 -a 选项的参数,则输出将显示 python 中介中的更多链接。请记住在中介中包含所有必要的路径。

$ pkg contents -Ho action.raw -t link -a mediator=python runtime/python-26
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
2to3 target=2to3-2.6
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
python target=python2.6
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
pydoc target=pydoc-2.6
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
idle target=idle-2.6
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
python-config target=python2.6-config
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
amd64/python target=python2.6 variant.arch=i386
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
amd64/python-config target=python2.6-config variant.arch=i386
link facet.doc.man=all mediator=python mediator-priority=vendor mediator-version
=2.6 path=usr/share/man/man1/python.1 target=python2.6.1

runtime/python-27 软件包中 usr/bin/python 中介链接的 pkg.linted.pkglint.dupaction010.2=true 属性表示 /usr/bin/python 链接由多个软件包提供,并且是一个有效的中介链接。对于一项操作只能由一个软件包提供的规定,中介链接是一个例外。pkglint 实用程序将检查重复的操作。将 pkg.linted.check.id 设置为 true 可跳过针对该操作的 check.id 检查。请参见验证软件包pkglint(1) 手册页。使用 pkglint -L 命令可显示 pkglint 所执行检查的完整列表。pkglint.dupaction010 检查的描述为“中介链接应有效”。

系统选择了较高版本作为首选 Ruby 实现。

$ pkg contents -Ho action.raw -t link -a path=usr/bin/ruby runtime/ruby-19
link mediator=ruby mediator-version=1.9 path=usr/bin/ruby pkg.linted.pkglint.dup
action010.2=true target=./ruby19

ssh 中介只有一个参与者。如果希望提供应用程序的其他实现,请在原始软件包中定义中介,以确保在提供其他实现时,原始软件包为中介的参与者。否则,将需要为原始软件包提供更新,否则用户将无法选择原始实现作为首选实现。

除显示链接操作外,以下命令显示了定义该操作的软件包的名称。

$ pkg contents -o pkg.name,action.raw -t link -a path=usr/bin/ssh '*'
PKG.NAME    ACTION.RAW
network/ssh link mediator=ssh mediator-implementation=sunssh mediator-priority=
vendor path=usr/bin/ssh target=../lib/sunssh/bin/ssh

指定 mediator-implementation 的中介链接还可以指定 mediator-versionmediator-priority 或同时指定两者。如果中介的所有参与者仅指定一个 mediator-implementation,则系统将任意选择首选实现。如果选定的 mediator-implementation 已版本化,则将选择最高版本,如以下命令所示:

$ pkg mediator -a myapp
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
myapp       system            system     db@12
myapp       system            system     db@11
myapp       system            system     db
$ pkg mediator myapp
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
myapp       system            system     db@12

如果将另一个实现添加到中介,则系统可能会选择该实现,如以下命令所示:

$ pkg mediator -a myapp
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
myapp       system            system     aa
myapp       system            system     db@12
myapp       system            system     db@11
myapp       system            system     db
$ pkg mediator myapp
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
myapp       system            system     aa