JavaScript is required to for searching.
跳过导航链接
退出打印视图
映像包管理系统手册页     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

用户命令

系统管理命令

标准、环境和宏

pkg(5)

pkg

- 映像包管理系统

描述

映像包管理系统 pkg(5) 是用于提供软件生命周期管理(安装、升级和删除)的框架。映像包管理以软件包为单位对软件进行管理,软件包是由一组关键字/值对以及可能的数据有效负荷定义的操作的集合。在许多情况下,操作是在文件系统中找到的文件,但它们也表示其他可安装对象,例如驱动程序、服务和用户。

软件包 FMRI 和版本

每个软件包均由带有机制 pkg: 的故障管理资源标识符 (fault management resource identifier, FMRI) 表示。软件包的完整 FMRI 由机制、发布者、软件包名称和以下格式的版本字符串组成:

pkg://solaris/system/library/c++-runtime@0.5.11,5.11-0.174.0.0.0.0.0:20110921T190358Z

solaris 是发布者。system/library/c++-runtime 是软件包名称。虽然名称空间是有层次的且可具有任意深度,但不存在强制包含;名称从本质上而言是任意的。发布者信息为可选项,但必须位于 pkg:// 之后(如果存在)。包括发布者的 FMRI 通常称为“全限定”FMRI。如果不存在发布者信息,则软件包名称通常应位于 pkg:/ 之后。

如果 FMRI 不包含发布者信息,打包客户端通常允许省略 FMRI 的机制。例如,pkg:/system/library/c++-runtime 可以写为 system/library/c++-runtime。如果省略了机制,客户端也允许省略除软件包名称的最后一个组成部分(用于匹配目的)之外的所有其他内容。例如,system/library/c++-runtime 可以写为 library/c++-runtimec++-runtime,这将与名为 c++-runtime 的软件包或以 /c++-runtime 结尾的软件包名称匹配。

发布者名称将个人、个人组或组织标识为一个或多个软件包的源。为避免发布者名称冲突并有帮于标识发布者,最佳做法是使用代表发布软件包实体的域名作为发布者名称。

版本跟在软件包名称后面,由 @ 符号分隔。版本包含四个数字序列,由标点符号分隔。前三个序列中的元素由圆点分隔,各序列可具有任意长度。不允许版本的组成部分以零开头(例如 01.1 或 1.01)。允许以零结尾(例如 1.10)。

版本的第一个部分是组件版本。对于紧密绑定到操作系统上的组件,此序列通常是操作系统中该版本的 uname -r 值。对于具有自己的开发生命周期的组件,此序列是一个由小圆点分隔的发行编号,例如 2.4.10。

版本的第二个部分(如果存在)必须跟在逗号 (,) 后面,是内部版本。内部版本指定构建软件包内容的操作系统版本,提供了希望软件包内容可成功运行的最低操作系统版本。

版本的第三个部分(如果存在)必须跟在连字符 (-) 后面,是分支版本。分支版本是用于提供特定于供应商的信息的版本控制组件。分支版本可在打包元数据发生更改时增大,独立于组件版本。分支版本可能包含内部版本号或其他信息。

版本的第四个部分(如果存在)必须跟在冒号 (:) 后面,是一个时间戳。时间戳表示软件包的发布时间。

在版本之间进行比较时,不考虑完整版本的任何组件,除非左侧的组件与其相同。因此 "4.3-1" 大于 "4.2-7",因为 "4.3" 大于 "4.2";"4.3-3" 大于 "4.3-1",因为 "3" 大于 "1"。

系统的许多部分(如果适用)会在显示 FMRI 时缩短 FMRI 并接受简短格式的输入,以减少显示的或所需的信息量。通常,可以省略机制、发布者、内部版本和时间戳。有时可以省略所有版本控制信息。

操作

操作表示系统上的可安装对象。在软件包的清单中对操作进行了描述。每个操作主要由其名称和一个关键属性组成。这些属性共同引用一个唯一的对象,与该对象一样遵循版本历史记录。操作可以具有其他属性。某些属性由包管理系统直接解释。其他属性可能仅对系统管理员或最终用户有用。

操作具有一种简单文本表示法:

action_name attribute1=value1 attribute2=value2 ...

属性名称中不能包含空格、引号或等号 (=)。第一个等号后的所有字符都属于值。值中可以包含所有这些符号,虽然空格必须括在单引号或双引号中。单引号处于括在双引号中的字符串内时不需要进行转义,双引号处于括在单引号中的字符串内时也不需要进行转义。可使用反斜杠 (\) 字符作为引号的前缀来避免终止带引号的字符串。反斜杠可使用反斜杠进行转义。

可以使用多个值对属性进行多次命名。这些值被视为无序列表。

具有多个属性的操作可以在清单文件中创建长行。可以通过使用反斜杠终止每个不完整的行来对此类行进行折行。请注意,属性/值对之间必须具有此接续字符。属性、属性值及其组合均不可分离。

下面列出的属性不是全部属性。事实上,任意属性都可附加到操作中,标准属性组易于扩大以合并将来的开发。

某些操作属性会导致在打包上下文外部执行其他操作。这些属性记录在下面的“执行器”部分中。

文件操作

file 操作表示普通文件。file 操作引用有效负荷,具有四个标准属性:

path

安装文件的文件系统路径。此属性是 file 操作的关键属性。

mode

文件的访问权限(采用数字格式)。这些只是简单权限,并非 ACL。

owner

拥有文件的用户的名称。

group

拥有文件的组的名称。

有效负荷是一个位置属性,因为它未命名。它是操作名称后面的第一个词。在发布的清单中,它是文件内容的 SHA-1 散列。如果存在于尚待发布的清单中,则它表示可以找到有效负荷的路径。请参见 pkgsend(1)。如果值包括一个等号,则可以使用散列属性代替位置属性。这两种属性可用于同一操作中。但是,散列必须完全相同。

其他属性包括:

preserve

此属性指定在升级时不应覆盖文件的内容(如果确定自文件安装或上次升级后其内容已发生了更改)。在初始安装时,如果找到现有文件,则挽救该文件(存储在 /var/pkg/lost+found 中)。

如果 preserve 的值是 renameold,则使用扩展名 .old 重命名现有文件,并将新文件放入相应位置。

如果 preserve 的值是 renamenew,则现有文件保持不变,并使用扩展名 .new 安装新文件。

如果 preserve 的值是 legacy,则在初始软件包安装时不会安装此文件。在升级时,会使用扩展名 .legacy 重命名任何现有文件,并在随后将新文件放入相应位置。

如果 preserve 的值是 true(或是上面未列出的值,例如 strawberry),则现有文件保持不变,而且也不安装新文件。

overlay

此属性指定操作是允许其他软件包在同一位置提供文件,还是提供用于覆盖其他文件的文件。此功能设计用于不参与任何自组装(例如 /etc/motd)且可安全覆盖的配置文件。

如果未指定 overlay,多个软件包将无法向同一位置提供文件。

如果 overlay 的值是 allow,则允许另外一个软件包向同一位置提供文件。除非也设置了 preserve 属性,否则此值没有效果。

如果 overlay 的值是 true,操作提供的文件将覆盖已指定 allow 的任何其他操作。基于覆盖文件的 preserve 属性值保留对已安装文件进行的更改。在删除时,如果仍要安装将覆盖的操作,则将保留文件的内容,无论是否指定了 preserve 属性。只能一个操作覆盖另一个操作,且 modeownergroup 属性必须匹配。

也可以“体验”文件,而且文件可根据自身情况具有其他属性。对于 ELF 文件,可识别下列属性:

elfarch

ELF 文件的体系结构。此属性是 uname -p 查询文件所基于的体系结构后的输出。

elfbits

此属性为 3264

elfhash

此属性是文件中“相关”ELF 部分的散列。这些部分已在装入二进制文件时映射到内存中。在确定两个二进制文件的可执行行为是否将不同时,仅需要考虑这些部分。

original_name

此属性用于处理可编辑文件在软件包之间或在位置之间(或在这两者之间)的移动操作。此属性采用的格式为源软件包的名称后跟一个冒号和文件的原始路径。所删除的任何文件将使用其软件包和路径或 original_name 属性的值(如果指定)进行记录。所安装的已设置 original_name 属性的任何可编辑文件将使用具有该名称的文件(如果它在同一打包操作中被删除)。

revert-tag

此属性用于标记应恢复为一个组的可编辑文件。可以指定多个 revert-tag 值。在使用所指定的任意标记调用 pkg revert 时,文件将恢复为其清单定义的状态。请参见 pkg(1)。

目录操作

dir 操作类似于 file 操作,因为它表示文件系统对象。但 dir 操作表示目录而不是普通文件。dir 操作具有与 file 操作相同的四个标准属性,path 是关键属性。

目录是 IPS 中包括的引用。当显式或隐式引用某目录的最新软件包不再引用该目录时,将删除该目录。如果该目录包含未打包的文件系统对象,则将这些项移动到 $IMAGE_META/lost+found 中。有关 $IMAGE_META 的更多信息,请参见“文件”部分。

要将未打包的内容移动到新的目录中,以下属性可能会有用:

salvage-from

此属性指定所挽救项的目录。具有此属性的目录在创建时可继承所挽救目录的内容(如果存在)。

链接操作

link 操作表示符号链接。link 操作具有以下标准属性:

path

安装符号链接的文件系统路径。此属性是 link 操作的关键属性。

target

符号链接的目标。链接将解析到的文件系统对象。

mediator

指定由给定中介组(例如 python)中涉及的所有路径名称共享的中介名称空间中的条目。可基于 mediator-version 和/或 mediator-implementation 执行链接中介。给定路径名称的所有中介链接必须指定同一中介者。但是,并非所有中介者版本和实现都需要在给定路径上提供链接。如果中介不提供链接,则会在选定该中介时删除链接。mediator 与特定版本和/或实现组合起来表示可选择供包管理系统使用的中介。

mediator-version

指定 mediator 属性描述的接口的版本(表示为非负整数的点分序列)。如果指定了 mediator 而未指定 mediator-implementation,则此属性是必需的。本地系统管理员可以显式设置要使用的版本。指定的值通常应与提供链接的软件包版本相匹配(例如,runtime/python-26 应使用 mediator-version=2.6),尽管这不是必需的。

mediator-implementation

指定除 mediator-version 之外还使用中介者实现,或使用中介者实现代替 mediator-version。不认为实现字符串应进行排序,如果系统管理员未显式指定,则由 pkg(5) 任意选择一个字符串。

该值可以是由字母数字字符和空格组成的任意长度的字符串。如果实现本身可被版本化或已被版本化,则应在字符串的结尾处在 @ 之后指定版本(表示为非负整数的点分序列)。如果存在实现的多个版本,则缺省行为是选择最高版本的实现。

如果系统上仅安装了特定路径的实现中介链接的一个实例,则会自动选择该实例。如果以后安装了该路径的其他链接,除非应用供应商、站点或本地覆盖或者如果某一链接进行了版本中介,否则不会切换链接。

mediator-priority

在解决中介链接中的冲突时,pkg(5) 通常会选择 mediator-version 值最大的链接,如果不可能,则会基于 mediator-implementation 进行选择。此属性用于为常规冲突解决方案过程指定覆盖。

如果未指定此属性,则会应用缺省中介者选择逻辑。

如果值为 vendor,则与未指定 mediator-priority 的链接相比,会优先选择该链接。

如果值为 site,则与值为 vendor 或未指定 mediator-priority 的链接相比,会优先选择该链接。

本地系统管理员可以覆盖上面所述的选择逻辑。

硬链接操作

hardlink 操作表示硬链接。它具有与 link 操作相同的属性,path 也是其关键属性。

驱动程序操作

driver 操作表示设备驱动程序。driver 操作不引用有效负荷。驱动程序文件自身必须作为 file 操作进行安装。可识别下列属性(有关更多信息,请参见 add_drv(1M)):

name

驱动程序的名称。这通常是(但并不总是)二进制驱动程序文件的文件名。此属性是 driver 操作的关键属性。

alias

此属性表示驱动程序的别名。给定的驱动程序可以具有多个 alias 属性。无需任何特殊的引号规则。

class

此属性表示驱动程序类。给定的驱动程序可以具有多个 class 属性。

perms

此属性表示驱动程序的设备节点的文件系统权限。

clone_perms

此属性表示此驱动程序的克隆驱动程序次要节点的文件系统权限。

policy

此属性指定设备的其他安全策略。给定的驱动程序可以具有多个 policy 属性,但次要设备规范不可以存在于多个属性中。

privs

此属性指定驱动程序所用的特权。给定的驱动程序可以具有多个 privs 属性。

devlink

此属性指定 /etc/devlink.tab 中的条目。该值是定义了进入文件的确切行,带有由 \\t 表示的制表符。有关更多信息,请参见 devlinks(1M)。给定的驱动程序可以具有多个 devlink 属性。

依赖操作

depend 操作表示软件包间的依赖性。一个软件包可以依赖于另一个软件包,因为第一个软件包需要第二个软件包中的功能才能运行自身包含的功能或者甚至进行安装。依赖性可以是可选的。如果安装时未满足某个依赖性,包管理系统会尝试安装或更新依赖软件包至足够新的版本(受其他约束限制)。

可以识别下列属性:

fmri

表示依赖软件包的 FMRI。此属性是 dependency 操作的关键属性。fmri 值不得包括发布者。假定软件包名称是完整的。require-any 类型的依赖性可具有多个 fmri 属性。fmri 值中的版本是可选项,虽然对于某些类型的依赖性来说,不带版本的 fmri 没有任何意义。

type

依赖性的类型。

如果值为 require,则依赖性是必需的,且必须具有等于或大于 fmri 属性中指定版本的版本。如果未指定版本,则任何版本都满足依赖性。如果不能满足其任一必需依赖性,则无法安装软件包。

如果值为 optional,则依赖性(如果存在)必须处于指定的版本级别或更高级别。

如果值为 exclude,则当依赖性存在于指定的版本级别或更高级别时,无法安装包含软件包。如果未指定版本,则依赖软件包无法与指定依赖性的软件包同时安装。

如果值为 incorporate,则依赖性是可选的,但依赖软件包的版本会受到约束。请参见下面的“约束和冻结”。

如果值为 require-any,则多个 fmri 属性指定的多个依赖软件包中的任一个都可满足依赖性(遵循与 require 依赖性类型相同的规则)。

如果值为 conditional,则依赖性仅在系统上存在 predicate 属性定义的软件包时是必需的。

如果值为 origin,依赖性(如果存在)必须在要在安装之前修改的映像上具有指定值或更优值。如果 root-image 属性的值为 true,则依赖性必须存在于根目录为 / 的映像上,才能安装此软件包。

如果值为 group,则依赖性是必需的,除非软件包出现在映像避免列表上。请注意,过时软件包会无提示地满足组依赖性。请参见 pkg(1) 中的 avoid 子命令。

如果值为 parent,则在映像不是子映像时忽略依赖性。如果映像是子映像,则依赖性必须存在于父映像中。符合 parent 依赖性的软件包版本与用于 incorporate 依赖性的软件包版本相同。

predicate

表示 conditional 依赖性的谓词的 FMRI。

root-image

仅对 origin 依赖性有影响,如上所述。

许可证操作

license 操作表示许可证或其他与软件包内容相关联的信息文件。软件包可以通过 license 操作将许可证、免责声明或其他指南提供给软件包安装程序。

license 操作的有效负荷将提供到与软件包相关的映像元数据目录中,且应仅包含用户可读的文本数据。不应包含 HTML 或任何其他形式的标记。通过各属性,license 操作可以向客户端指示必须显示相关的有效负荷并/或要求接受它。显示并/或接受的方法由客户端决定。

可以识别下列属性:

license

此属性是 license 操作的关键属性。此属性为许可证提供有意义的描述,以帮助用户在无需阅读许可证文本本身的情况下确定内容。其中一些示例值包括:

  • ABC Co. Copyright Notice

  • ABC Co. Custom License

  • Common Development and Distribution License 1.0 (CDDL)

  • GNU General Public License 2.0 (GPL)

  • GNU General Public License 2.0 (GPL) Only

  • MIT License

  • Mozilla Public License 1.1 (MPL)

  • Simplified BSD License

license 值在软件包内必须唯一。建议在说明中包括许可证的版本,如上面的几个示例所示。如果软件包有对应多种不同许可证的代码,请使用多个 license 操作。许可证属性值的长度不得超过 64 个字符。

must-accept

如果为 true,则用户必须先接受此许可证,才能安装或更新相关软件包。省略此属性等效于 false。接受的方法(例如,交互式或基于配置)由客户端决定。

must-display

如果为 true,则在执行打包操作期间客户端必须显示操作的有效负荷。省略此值等效于 false。此属性不应用于版权声明,仅用于实际许可证或执行操作期间必须显示的其他材料。显示的方法由客户端决定。

传统操作

legacy 操作表示由传统包管理系统使用的软件包数据。与此操作相关联的属性将添加到传统系统的数据库中,以便查询这些数据库的工具可以像实际安装了传统软件包一样工作。需特别指出的是,这应足以使传统系统确信系统上已安装了 pkg 属性指定的软件包,如此便可使用软件包来满足依赖性。

可识别根据 pkginfo(4) 上的参数指定的下列属性:

category

CATEGORY 参数的值。缺省值为 system

desc

DESC 参数的值。

hotline

HOTLINE 参数的值。

name

NAME 参数的值。缺省值为 none provided

pkg

要安装的软件包的缩写。缺省值为软件包的 FMRI 中的名称。此属性是 legacy 操作的关键属性。

vendor

VENDOR 参数的值。

version

VERSION 参数的值。缺省值为软件包的 FMRI 中的版本。

设置操作

set 操作表示软件包级别的属性或元数据,例如软件包描述。

可以识别下列属性:

name

属性的名称。

value

提供给属性的值。

set 操作可以提供软件包作者选择的任何元数据。但是,存在大量定义明确的对包管理系统具有特定意义的属性名称。

pkg.fmri

请参见“说明”部分中的“软件包 FMRI 和版本”。

info.classification

一个 pkg(5) 客户端可以使用一个或多个标记对软件包进行分类。该值应具有一个机制(例如 "org.opensolaris.category.2008" 或 "org.acm.class.1998")和实际分类(例如 "Applications/Games"),由冒号 (:) 分隔。

pkg.description

软件包的内容和功能的详细描述,长度通常约为一个段落。

pkg.obsolete

如果为 true,则将软件包标记为过时。过时的软件包除了设置操作外不能具有任何其他操作,且不得标记为已重命名。

pkg.renamed

如果为 true,则软件包已被重命名。软件包中还必须存在一个或多个 depend 操作,且指向此软件包已重命名到的软件包版本。软件包不能同时标记为已重命名和过时,但在其他情况下可以具有任意多个设置操作。

pkg.summary

软件包的一行简短描述。

组操作

group 操作定义 UNIX 组,如 group(4) 中所定义。不存在对于组口令的支持。使用此操作定义的组最初不具有用户列表。可以使用 user 操作添加用户。可以识别下列属性:

groupname

组名的值。

gid

组的唯一数字 ID。缺省值为 100 之下的第一个自由组。

用户操作

user 操作定义 UNIX 用户,如 /etc/passwd/etc/shadow/etc/group/etc/ftpd/ftpusers 文件中所定义。使用此属性定义的用户具有添加到相应文件中的条目。

可以识别下列属性:

username

用户的唯一名称

password

用户的加密口令。缺省值为 *LK*。请参见 shadow(4)。

uid

用户的唯一 UID。缺省值为 100 之下的第一个自由值。

group

用户的主组名称。必须可在 /etc/group 中找到。

gcos-field

/etc/passwdgcos 字段的值。缺省值为 username

home-dir

用户的起始目录。缺省值为 /。

login-shell

用户的缺省 shell。缺省值为空。

group-list

用户所属的辅助组。请参见 group(4)。

ftpuser

可设置为 truefalse。缺省值 true 指示允许用户通过 FTP 登录。请参见 ftpusers(4)。

lastchg

1970 年 1 月 1 日至上次修改口令的日期之间的天数。缺省值为空。请参见 shadow(4)。

min

所需的相邻两次更改口令之间的最小天数。必须将此字段设置为 0 或更大值才能启用口令有效期。缺省值为空。请参见 shadow(4)。

max

口令的最大有效天数。缺省值为空。请参见 shadow(4)。

warn

用户在口令到期之前多少天收到警告。请参见 shadow(4)。

inactive

允许该用户不活动的天数。按每台计算机对此进行计数。可从计算机的 lastlog 文件获取有关上次登录的信息。请参见 shadow(4)。

expire

表示为自 UNIX 纪元(1970 年 1 月 1 日)后的天数的绝对日期。达到此数字时,将无法再进行登录。例如,到期值为 13514 指定登录将在 2007 年 1 月 1 日失效。请参见 shadow(4)。

flag

设置为空。请参见 shadow(4)。

执行器

在某些上下文中,附加操作可能适合在为特定操作做准备时执行或者在引入特定操作后执行。这些附加操作通常仅在实时系统映像上才需要,而且特定于操作系统。当软件包安装或删除过程中涉及的多个操作具有相同的执行器时,会为该安装或删除过程执行一次与执行器存在情况相对应的操作。

错误指定的执行器可能会导致软件包安装失败,如果该执行器无法确定进行安全安装的方法。

系统定义了以下执行器:

reboot-needed

可设置为 truefalse。如果在软件包安装期间安装或更新某个操作(此执行器设置为 true),则可以将打包事务通告为需要重新引导。某些客户端实现可能会执行附加步骤,例如,在映像是实时系统映像的情况下,使用该映像的克隆执行整个软件包操作。

disable_fmrirefresh_fmrirestart_fmrisuspend_fmri

其中每个执行器在软件包安装或删除过程中均使用服务实例的 FMRI 值进行操作。根据 svcadm(1M) 的 disable 子命令,disable_fmri 会导致给定的 FMRI 在删除操作之前被禁用。根据 svcadm(1M) 的各个子命令,refresh_fmrirestart_fmri 会导致给定的 FMRI 在安装、更新或删除操作后被刷新或重新启动。最后,suspend_fmri 会导致给定的 FMRI 在安装操作阶段之前被临时禁用,并在该阶段完成后被重新启用。

该值可以包含与多个服务实例匹配的模式。但是,它必须使用 svcs(1) 所接受的 glob 显式执行此操作,而不是通过不指示任何实例来隐式执行此操作。

约束和冻结

在将软件包转换为新版本、添加到系统中或从系统中删除时,所选的版本或是否允许删除由对软件包施加的各种约束确定。这些约束可由其他软件包以依赖性的形式进行定义,或者由管理员以冻结的形式进行定义。

最常见的约束形式由 require 依赖性提供,如上面的“依赖操作”中所述。此类约束可防止软件包被降级或删除。

操作系统的大多数部分由名为 incorporation 的软件包进行封装。这些软件包主要提供由 incorporate 依赖性表示的约束。

如上所述,合并的软件包不需要存在于系统上,但如果存在,它将同时指定一个非独占最低版本和一个独占最高版本。例如,如果依赖 FMRI 具有版本 1.4.3,则低于 1.4.3 的版本不能满足依赖性,且任何高于或等于 1.4.4 的版本也不能满足依赖性。但是,可以允许以点分序列扩展的版本,如 1.4.3.7。

Incorporation 用于强制系统的各部分进行同步升级。对于某些组件(例如 C 库和内核),这是一项基本要求。对于其他组件(例如,不具有任何其他依赖性的简单用户级组件),同步升级仅仅用来提供一组经过测试的已知软件包版本,这些软件包版本可由 incorporation 的特定版本进行引用。

因为 incorporation 只是一个软件包,所以可将其删除,它提供的所有约束也将随之解除。但是,Oracle Solaris 提供的许多 incorporation 是合并软件包所必需的,因为解除其约束可能会不安全。

尝试将软件包升级到已安装的 incorporation 所不允许的版本,将不会尝试查找更高的 incorporation 版本来满足该请求,反而会失败。如果必须移动约束本身,而又无法删除指定它的 incorporation,则必须将 incorporation 升级到指定所需约束版本的版本。升级 incorporation 会导致不能满足新版本提供的约束的所有合并软件包也进行升级。

系统管理员可以使用 pkg freeze 命令约束软件包。在未提供版本的情况下,将指定软件包约束为系统上已安装的版本。如果提供了版本化软件包,则此管理约束或冻结会像已安装了合并依赖性(其中 fmri 属性具有所提供的软件包版本值)一样进行操作。

包管理系统永远不会自动解除冻结。要解除约束,请使用 pkg unfreeze 命令。

发布者和系统信息库

如上所述,发布者只是软件包客户端用来标识软件包提供者的一个名称。发布者可使用软件包系统信息库和/或软件包归档来发行其软件包。软件包系统当前支持以下两种类型的系统信息库:源系统信息库和镜像系统信息库。

是包含一个或多个软件包的所有元数据(例如,目录、清单和搜索索引)和内容(文件)的软件包系统信息库。如果在一个映像中为给定发布者配置了多个源,则软件包客户端 API 会尝试选择从其检索软件包数据的最佳源。这是最常见的系统信息库类型,当每次在软件包系统信息库上使用 pkgsendpkgrecv 时进行隐式创建。

mirror 是仅包含软件包内容(文件)的软件包系统信息库。如果在一个映像中为给定发布者配置了一个或多个镜像,则客户端 API 会优先使用镜像进行软件包内容检索并尝试选择从其检索软件包内容的最佳镜像。如果镜像不可访问、不具有所需内容或者运行缓慢,客户端 API 将从任何已配置的源系统信息库检索内容。镜像设计用于通过 pkg.depotd(1M) 的动态镜像功能在一组可信客户端之间共享内容。镜像还设计用于验证对软件包元数据的访问,但发行软件包内容不需要进行验证。例如,客户端可能配置有需要具有 SSL 密钥和证书对才能访问的 https 源,以及提供软件包内容的 http 镜像。这样,只有经过授权的客户端才可以安装或更新软件包,同时避免了验证软件包内容检索的开销。通过删除系统信息库中除名为 file 的子目录及其父目录之外的所有子目录可创建镜像。通过使用 pkg.depotd(1M) 的镜像模式还可将源系统信息库置备为镜像。

侧面和变量

软件可以具有可选组件和互斥组件。可选组件的示例包括语言环境和文档。互斥组件的示例包括 SPARC 或 x86 和调试或非调试二进制文件。

在 IPS 中,可选组件称为侧面,互斥组件称为变量。侧面和变量指定为软件包操作中的标记。每个侧面和变量标记都有一个名称和值。单个操作可以具有多个侧面和变量标记。具有多个侧面和变量标记的组件有多种,例如供开发者使用的特定于体系结构的头文件,或仅用于 SPARC 全局区域的组件。

以下是变量标记的一个示例 variant.arch=sparc。以下是侧面标记的一个示例 variant.arch=sparc。引用侧面和变量时,通常不带前导字符串 facet.variant.

侧面和变量是映像的特殊属性,无法在单个软件包上设置。要查看映像上设置的侧面和变量的当前值,请按 pkg(1) 手册页中所示,使用 pkg facetpkg variant 命令。要修改映像上设置的侧面和变量的值,请使用 pkg change-facetpkg change-variant 命令。

侧面为布尔型:只能设置为 true(启用)或 false(禁用)。缺省情况下,映像中的所有侧面都被视为 true。某一操作的侧面标记只能具有 true 值;其他值代表的行为不确定。映像上设置的侧面可以为完整侧面(如 doc.man)或模式(如 locale.*)。要禁用侧面名称空间的一部分,仅启用其中的几个侧面时,此方式很有用。例如,您可以禁用所有语言环境,然后仅启用一个或两个特定语言环境,如以下示例所示:

# pkg change-facet locale.*=false
[output about packages being updated]
# pkg change-facet locale.en_US=true
[output about packages being updated]

大多数变量可以具有任意数量的值。例如,arch 变量可以设置为 i386sparcppcarm 或分发支持的任何体系结构。(Oracle Solaris 中仅使用 i386sparc。)但 debug 变量例外。debug 变量只能设置为 truefalse;其他值的行为不确定。如果文件操作同时具有非调试和调试版本,则必须针对这两个版本明确设置适用的 debug 变量,如以下示例所示:

file group=sys mode=0644 overlay=allow owner=root \
  path=etc/motd pkg.csize=115 pkg.size=103 preserve=true \
  variant.debug.osnet=true

file group=sys mode=0644 overlay=allow owner=root \
  path=etc/motd pkg.csize=68 pkg.size=48 preserve=true \
  variant.debug.osnet=false 

要安装使用变量的软件包,必须在映像上设置变量值。archzone 变量由创建映像和安装其初始内容的程序设置。缺省情况下,debug.* 变量在映像中设置为 false

映像中设置的侧面和变量会影响是否安装特定操作。

您可以创建自己的侧面和变量标记。以下是 Oracle Solaris 中的常用标记。

变量名
可能值
variant.arch
sparc, i386
variant.opensolaris.zone
global, nonglobal
variant.debug.*
truefalse

以下列表描述了 Oracle Solaris 中使用的一小部分侧面标记:

facet.devel             facet.doc
facet.doc.html          facet.doc.info
facet.doc.man           facet.doc.pdf
facet.locale.de         facet.locale.en_GB
facet.locale.en_US      facet.locale.fr
facet.locale.ja_JP      facet.locale.zh_CN

映像策略

映像策略由具有布尔值的映像属性所定义。有关 flush-content-cache-on-successsend-uuid 属性的说明以及如何查看和修改其值的信息,请参见 pkg(1) 手册页中的“映像属性”。

文件

因为 pkg(5) 映像可位于任意一个较大的文件系统内,需要使用标记 $IMAGE_ROOT 来区分相对路径。对于典型的系统安装,$IMAGE_ROOT 等效于 /。

$IMAGE_ROOT/var/pkg

完整或部分映像的元数据目录。

$IMAGE_ROOT/.org.opensolaris,pkg

用户映像的元数据目录。

在特定映像的元数据中,某些文件和目录可能包含修复和恢复期间有用的信息。标记 $IMAGE_META 用于指示包含元数据的顶层目录。 $IMAGE_META 通常是以上给出的两个路径之一。

$IMAGE_META/lost+found

在软件包操作期间移动的有冲突目录和文件的位置。

$IMAGE_META/publisher

为每个发布者包含一个目录。每个目录存储特定于发布者的元数据。

$IMAGE_META 目录分层结构中的其他路径是专用的,但可以进行更改。

属性

有关下列属性的说明,请参见 attributes(5):

属性类型
属性值
可用性
package/pkg
接口稳定性
Uncommitted(未确定)

另请参见

pkg(1)pkgsend(1)pkg.depotd(1m)pkg.sysrepo(1m)svcs(1)svcadm(1M)

http://hub.opensolaris.org/bin/view/Project+pkg/