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

文档信息

前言

用户命令

packagemanager(1)

pkg(1)

pkgdepend(1)

pkgdiff(1)

pkgfmt(1)

pkglint(1)

pkgmerge(1)

pkgmogrify(1)

pkgrecv(1)

pkgrepo(1)

pkgsend(1)

pkgsign(1)

pm-updatemanager(1)

系统管理命令

标准、环境和宏

pkgdepend

- 映像包管理系统依赖项分析器

用法概要

/usr/bin/pkgdepend [options] command [cmd_options] [operands]
/usr/bin/pkgdepend generate [-IMm] -d dir [-d dir]
    [-D name=value] [-k path] manifest_file
/usr/bin/pkgdepend resolve [-moSv] [-d output_dir]
    [-s suffix] manifest_file ...

描述

pkgdepend 用于生成并解析软件包的依赖项。软件包可能依赖于其他软件包中的文件。pkgdepend 通常用于两种传递:文件依赖项生成和文件到软件包的解析。

generate 子命令将检查软件包的内容,并确定该软件包所需的外部文件。

resolve 子命令使用执行 generate 步骤后输出的文件列表,然后搜索软件包的引用集来确定包含这些依赖文件的软件包的名称。为依赖文件搜索的软件包的引用集为当前在发布者的系统上安装的软件包。

提供的文件的多个组件用作依赖项信息的源:

ELF

分析提供的文件中的 ELF 头以获取依赖项信息,-k-D 选项可用于修改获取的信息。有关 ELF 依赖项的更多详细信息,请参见 ldd(1) 和《链接程序和库指南》

脚本

包含引用某个解释程序的 #! 行的 Shell 脚本会导致对提供该解释程序的程序包出现依赖项。

Python

Python 脚本首先作为脚本进行分析。此外,脚本声明的任何导入可能还会充当依赖项信息的源。

硬链接

清单中的硬链接会导致对提供链接目标的软件包出现依赖项。

SMF

提供的包含 require_all 依赖项的 SMF 服务清单会导致对提供 SMF 清单(这些清单提供这些 FMRI)的软件包出现依赖项。

选项

支持以下选项:

-R dir

对根目录为 dir 的映像进行操作。如果未根据环境指定或确定目录,则缺省值为 /。有关更多信息,请参见“环境变量”部分。

--help-?

显示用法消息。

子命令

支持以下子命令:

generate [-IMm] -d dir [-d dir] [-D name=value] [-k path] manifest_file

生成由 manifest_file 指定的清单文件的依赖项。

使用 -I 时,将显示 manifest_file 中满足条件的依赖项。请勿使用带 -I 选项的 pkgdepend resolve 命令产生的结果。

使用 -M 时,将显示无法分析的文件类型的列表。

使用 -m 时,将重复原始清单,并在其后添加任何发现的依赖项。

使用 -d 时,将 dir 添加到目录列表以搜索清单的文件。

对于每个 -D,将添加 value,作为在 ELF 文件依赖项的运行路径中扩展标记 name 的一种方法。

对于每个 -k,将 path 添加到运行路径的列表,以搜索内核模块。使用 -k 参数会删除缺省路径 /kernel/usr/kernel

运行路径(例如 -k 选项指定的那些运行路径)也可以通过使用操作或清单属性 pkg.depend.runpath 来按操作或清单指定。pkg.depend.runpath 属性的值是要使用的路径的冒号分隔字符串。

使用的 -k 将被清单或操作中设置的任何 pkg.depend.runpath 属性覆盖。

特殊标记 $PKGDEPEND_RUNPATH 可用作 pkg.depend.runpath 属性值的一个组件,以包括所分析文件的标准系统运行路径。

在某些情况下,您可能需要防止自动生成依赖项。例如,如果软件包提供了一个用于导入一组模块的样例 Python 脚本,则该样例脚本导入的那些模块不是提供该样例脚本的软件包的依赖项。使用操作或清单属性 pkg.depend.bypass-generate 可以防止针对指定的文件生成依赖项。

pkg.depend.bypass-generate 值是与文件名匹配的 Python 正则表达式。正则表达式隐式固定在文件路径的开头和结尾。以下示例中提供的值与 this/that 匹配,但与 something/this/that/the/other 不匹配。

pkg.depend.bypass-generate=this/that

有关 Python 正则表达式语法的更多信息,请使用命令 pydoc re 或参见 http://docs.python.org/dev/howto/regex.html 中的更完整文档。

pkgdepend generate 输入清单包含 SMF 清单文件时,由这些 SMF 清单文件声明的任何 SMF 服务或实例都将包括在 pkgdepend 输出中。这些 SMF 服务或实例以名称为 org.opensolaris.smf.fmriset 操作的形式包括在输出中。

resolve [-moSv] [-d output_dir] [-s suffix] manifest_file ...

将文件中的依赖项转换为提供这些文件的软件包中的依赖项。先根据命令行中给定的清单解析依赖项,然后再根据系统上安装的软件包进行解析。缺省情况下,每个清单的依赖项放置在名为 manifest_file.res 的文件中。

使用 -m 时,将重复清单,删除 generate 步骤生成的任何依赖项,然后添加已解析的依赖项。

使用 -o 时,会将结果写入到标准输出。该选项旨在供用户使用。将此输出附加到某个文件可能会导致产生无效的清单。在用于清单处理的管道中使用时,强烈建议使用 -d-s 选项,而不要使用 -o

使用 -d 时,会将单独文件中提供的每个清单的已解析依赖项写入 output_dir 中。缺省情况下,每个文件与清单(该清单是写入该文件的依赖项的源)具有相同的基名。

使用 -s 时,对于每个输出文件,会将 suffix 附加到文件(该文件是解析的依赖项的源)的基名。"." 附加到 suffix 的前面(如果未提供)。

使用 -S 时,只根据命令行上指定的清单进行解析,而不根据系统上安装的清单进行解析。

使用 -v 时,将包括其他软件包依赖项调试元数据。

示例

示例 1 生成依赖项

foo 中写入的清单(其内容目录在 ./bar/baz 中)生成 赖项,并将结果存储在 foo fdeps 中。

$ pkgdepend generate -d ./bar/baz foo > foo.fdeps

示例 2 解析依赖项

根据彼此的情况和当前系统上安装的软件包来解析 foo.fdeps bar.fdeps 中的文件依赖项。

$ pkgdepend resolve foo.fdeps bar.fdeps
$ ls *.res
foo.fdeps.res    bar.fdeps.res

示例 3 生成并解析两个清单的依赖项

生成两个清单(foo bar)的文件依赖项,并保留原始清单中的所有信息。然后解析文件依赖项,并将生成的清单放置在 ./res 中。这些生成的清单可以和 pkgsend publish 一起使用。

$ pkgdepend generate -d /proto/foo -m foo > ./deps/foo
$ pkgdepend generate -d /proto/bar -m bar > ./deps/bar
$ pkgdepend resolve -m -d ./res ./deps/foo ./deps/bar
$ ls ./res
foo    bar

示例 4 将值添加到 ELF 文件依赖项的标记

在为 foo 中写入的清单(其内容目录在 / 中)生成依赖项时,将 ELF 文件中运行路径内的所有 PLATFORM 标记替换为 sun4vsun4u

$ pkgdepend generate -d / -D 'PLATFORM=sun4v' -D 'PLATFORM=sun4u' foo

示例 5 指定内核模块目录

在为 foo 中写入的清单(其内容目录在 / 中)生成依赖项时,将 /kmod 指定为要在其中查找内核模块的目录。

$ pkgdepend generate -d / -k /kmod foo

示例 6 绕过依赖项生成

opt/python 附加到给定 Python 脚本的标准 Python 运行路径,然后根据名称为 test 的所有 Python 模块绕过作为 opt/python/foo/file.py 提供的文件的依赖项生成。

避免针对 usr/lib/python2.6/vendor-packages/xdg 中提供的任何文件生成依赖项。

$ cat manifest.py
set name=pkg.fmri value=pkg:/mypackage@1.0,1.0
set name=pkg.summary value="My test package"
dir path=opt mode=0755 group=sys owner=root
dir path=opt/python mode=0755 group=sys owner=root
dir path=opt/python/foo mode=0755 group=sys owner=root
file NOHASH path=opt/python/__init__.py mode=0644 group=sys owner=root
file NOHASH path=opt/python/foo/__init__.py mode=0644 group=sys owner=root
#
# Add runpath and bypass-generate attributes:
#
file NOHASH path=opt/python/foo/file.py mode=0644 group=sys owner=root \
    pkg.depend.bypass-generate=.*/test.py.* \
    pkg.depend.bypass-generate=.*/testmodule.so \
    pkg.depend.bypass-generate=.*/test.so \
    pkg.depend.bypass-generate=usr/lib/python2.6/vendor-packages/xdg/.* \
    pkg.depend.runpath=$PKGDEPEND_RUNPATH:/opt/python

$ pkgdepend generate -d proto manifest.py

环境变量

PKG_IMAGE

指定包含要用于软件包操作的映像的目录。如果指定 -R,则忽略该值。

退出状态

将返回以下退出值:

0

一切正常工作。

1

出现错误。

2

指定的命令行选项无效。

99

发生了意外的异常。

属性

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

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

另请参见

pkg(5)

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