跳过导航链接 | |
退出打印视图 | |
![]() |
在 Oracle Solaris 11.1 中使用映像包管理系统打包和交付软件 Oracle Solaris 11.1 Information Library (简体中文) |
在 IPS 中,除非满足所有软件包相关项,否则将无法安装软件包。IPS 允许软件包相互依赖(具有循环相关项)。IPS 还允许软件包同时具有依赖于同一软件包的不同种类的相关项。
本章中的每节都包含了一个示例 depend 操作,该操作与其在创建软件包期间在软件包清单中显示的一样。
最基本类型的相关项是 require 相关项。这些相关项通常用来表示功能性相关项,例如库或解释器(如 Python 或 Perl)。
如果软件包 A@1.0 包含依赖于软件包 B@2 的 require 相关项,那么如果安装了 A@1.0,则还必须安装版本 2 或更高版本的 B 软件包。接受更高版本的软件包反映了现有软件包的较新版本中隐含的二进制兼容性期望。
如果在 depend 操作中指定的软件包的任何版本都是可接受的,则您可以省略指定的 FMRI 的版本部分。
下面是 require 相关项的示例:
depend fmri=pkg:/system/library type=require
如果有多个软件包可以满足功能要求,则使用 require-any 相关项。如果事先没有满足相关项,IPS 将选择其中一个软件包进行安装。
例如,您可以使用 require-any 相关项来确保在系统上至少安装了 Perl 的一个版本。对版本控制的处理方式与对 require 相关项的处理方式相同。
下面是 require-any 相关项的示例:
depend type=require-any fmri=pkg:/editor/gnu-emacs/gnu-emacs-gtk \ fmri=pkg:/editor/gnu-emacs/gnu-emacs-no-x11 \ fmri=pkg:/editor/gnu-emacs/gnu-emacs-x11
optional 相关项指定,如果安装了给定软件包,则该软件包必须处于给定版本或更高版本。
这种类型的相关项通常用来处理软件包用来传输内容的情况。在这种情况下,软件包的每个传输后版本将包含依赖于其他软件包的传输后版本的 optional 相关项,这样就不可能安装两个软件包的不兼容版本。在 optional 相关项上省略版本会使相关项变得无意义,但允许这样做。
下面是 optional 相关项的示例:
depend fmri=pkg:/x11/server/xorg@1.9.99 type=optional
conditional 相关项具有一个 predicate 属性和一个 fmri 属性。如果在 predicate 属性的值中指定的软件包以指定的版本或更高版本出现在系统上,conditional 相关项将被视为依赖于 fmri 属性中的软件包的 require 相关项。如果在 predicate 属性中指定的软件包未出现在系统上或以较低版本出现,则会忽略 conditional 相关项。
如果系统上存在必备基础软件包,通常会使用 conditional 相关项来安装软件包的可选扩展。
例如,同时具有 X11 和终端版本的编辑器软件包可能会代替单独的软件包中的 X11 版本,并且由于必备 X 客户机库软件包作为 predicate 存在,软件包可能会包括依赖于文本版本中的 X11 版本的 conditional 相关项。
下面是 conditional 相关项的示例:
depend type=conditional fmri=library/python-2/pycurl-26 \ predicate=runtime/python-26
group 相关项用来构造软件包的组。
group 相关项将忽略指定的版本。指定的软件包的任何版本都可以满足此相关项。
指定的软件包是必需的,除非该软件包已经是以下操作之一的对象:
软件包已放置在避免列表中。有关避免列表的信息,请参见 pkg(1) 手册页。
已通过 pkg install --reject 拒绝了软件包。
已通过 pkg uninstall 卸载了软件包。
使用这三个选项,管理员可以取消选择作为 group 相关项的主体的软件包。如果使用了这三个选项中的任何一个,除非另一相关项随后需要该软件包,否则 IPS 在更新期间将不会重新安装该软件包。如果另一后续操作删除了新的相关项,则会再次卸载该软件包。
有关如何使用这些相关项的一个典型示例是,使构造的软件包包含依赖于系统典型用途所需的软件包的 group 相关项。一些示例可能是 solaris-large-server、solaris-desktop 或 developer-gnu。Oracle Solaris 组软件包显示了一组提供了 group 相关项的 Oracle Solaris 软件包。
安装组软件包可以确保能够通过后续更新将 OS 更新到较新的版本,将向系统中添加合适的软件包。
下面是 group 相关项的示例:
depend fmri=package/pkg type=group
origin 相关项的存在是为了解决需要中间转换的升级问题。其缺省行为是指定在要更新的系统上必须存在的软件包的最低版本(如果已安装)。
例如,通常可能使用数据库软件包版本 5,该版本支持从版本 3 或更高版本进行升级,但不支持从更低版本升级。在这种情况下,当正在运行版本 3 时,版本 5 具有依赖于自身的 origin 相关项。因此,如果要全新安装版本 5,安装将继续进行。但是,如果安装了版本 1 的软件包,将无法将该软件包直接升级到版本 5。在这种情况下,pkg update database-package 将不会选择版本 5,而会选择版本 3 作为可升级到的最新版本。
可以通过将 root-image 属性设置为 true 来修改 origin 相关项的行为。在这种情况下,如果正在运行的系统中(而非要更新的映像中)存在指定的软件包,则该软件包必须使用指定的版本或更高版本。这通常用于操作系统问题(例如依赖于引导块安装程序的相关项)。
下面是 origin 相关项的示例:
depend fmri=pkg:/database/mydb@3.0 type=origin
incorporate 相关项指定如果安装了给定的软件包,该软件包处于给定的版本以满足给定的版本准确性。例如,如果相关 FMRI 版本为 1.4.3,则低于 1.4.3 的版本或 1.4.4 及更高版本将不满足相关项。版本 1.4.3.7 不满足此示例相关项。
使用 incorporate 相关项的常用方法是:将许多此类相关项放置在同一个软件包中以在软件包版本空间中定义一个兼容的接口。包含这样的 incorporate 相关项集的软件包通常称为 incorporation。Incorporation 通常用来定义一起构建的且不单独进行版本控制的一组软件包。Oracle Solaris 中大量使用了 incorporate 相关项来确保将软件的兼容版本安装在一起。
下面是 incorporate 相关项的示例:
depend type=incorporate \ fmri=pkg:/driver/network/ethernet/e1000g@0.5.11,5.11-0.175.0.0.0.2.1
parent 相关项用于区域或其他子映像。在这种情况下,将仅在子映像中检查该相关项,该相关项指定在父映像或全局区域中必须存在的软件包和版本。指定的版本必须匹配指定的精度级别。
例如,如果 parent 相关项依赖于 A@2.1,则以 2.1 开头的任何 A 版本都将匹配。此相关项通常用来要求软件包在非全局区域与全局区域之间保持同步。作为快捷方式,可以将特殊的软件包名称 feature/package/dependency/self 用作包含此相关项的软件包的确切版本的同义词。
parent 相关项用来将安装在非全局区域中的关键操作系统组件(如 libc.so.1)与安装在全局区域中的内核保持同步。第 10 章中还论述了 parent 相关项。
下面是 parent 相关项的示例:
depend type=parent fmri=feature/package/dependency/self \ variant.opensolaris.zone=nonglobal
如果相关软件包以指定的版本级别或更高级别安装在映像中,则包含 exclude 相关项的软件包将无法安装。
如果在 exclude 相关项的 FMRI 中省略了版本,则被排除的软件包的任何版本都无法与指定了该相关项的软件包同时安装。
exclude 相关项很少使用。这些约束可能会使管理员感到绊手绊脚,应尽量避免使用。
下面是 exclude 相关项的示例:
depend fmri=pkg:/x11/server/xorg@1.10.99 type=exclude