Go to main content

手册页部分 1:用户命令

退出打印视图

更新时间: 2022年7月27日 星期三
 
 

pkgrecv(1)

名称

pkgrecv - 映像包管理系统内容检索实用程序

用法概要

/usr/bin/pkgrecv [-aknrv] [-s (src_path|src_uri)]
    [-d (dest_path|dest_uri)] [-c cache_dir]
    [-m match] [--mog-file file_path ...] [--raw]
    [--key src_key --cert src_cert]
    [--dkey dest_key --dcert dest_cert]
    (fmri|pattern) ...
/usr/bin/pkgrecv [-s (src_path|src_uri)] --newest
/usr/bin/pkgrecv [-nv] [-s (src_path|src_uri)]
    [-d (dest_path|dest_uri)] [-p publisher]...
    [--key src_key --cert src_cert] --clone

描述

pkgrecv retrieves all versions of each matching fmri or pattern from the pkg(7) repository or package archive specified by the –s option and optionally republishes the retrieved packages to the package repository or package archive specified by the –d option.除了时间戳,此重新发布过程按原样复制软件包(包括软件包签名)。要保留相同的时间戳,请参见 -–clone 选项。

缺省情况下,会以 pkgpkg.depotd 以及软件包发布工具可使用的软件包系统信息库格式检索软件包。

不重新发布未更改的软件包。因此,更新现有系统信息库的时间取决于新的和已更改软件包的数量。

使用 –m 选项可指定是检索每个匹配软件包的所有版本还是每个匹配软件包的最新版本。

如果未指定要检索的 '*',则可以指定 –r 选项来确保检索指定软件包的所有依赖项。


注 - 不要同时使用 pkgrecv 的多个实例来将软件包重新发布到同一目标系统信息库或归档文件。在这种情况下,新检索的软件包可以包含重复操作。

在将软件包检索到 dest_uri 中的 pkgrecv 操作后,如果 dest_uri 系统信息库必须支持 pkg search 操作,则在该系统信息库上运行 pkgrepo refresh 以更新搜索索引。

选项

支持以下选项:

–h

显示用法消息。

–a

Store the retrieved package data in a pkg(7) archive at the location specified by the –d option.–d 指定的文件不能已经存在。–a 选项仅可以与基于文件系统的目标一起使用。尽管不要求,但还是强烈建议使用文件扩展名 .p5p(例如: archive.p5p)。–a 选项不能与 –-raw 选项一起使用。

–c cache_dir

指定将用于缓存已下载内容的目录的路径。如果没有提供此目录,客户机将自动选择一个高速缓存目录。如果下载中断并且已自动选择了一个高速缓存目录,可使用该选项继续执行下载。有关如何设置用于存储临时数据的位置的详细信息,请参见下文的“环境变量”部分。

–d (dest_path|dest_uri)

指定应重新发布检索的软件包的文件系统路径或 URI。如果指定 –a,此目标必须是尚未存在的软件包归档文件。如果未指定 –a,此目标必须是已经存在的软件包系统信息库。使用 pkgrepo 命令创建新软件包系统信息库。如果未指定 –d,则使用值 PKG_DEST。请参见下面的“环境变量”。

–k

使检索的软件包内容保持压缩状态。重新发布时会忽略该选项。压缩的软件包内容不得与 pkgsend 一起使用。

–m match

在指定 pattern 或未充分指定 fmri 时控制要检索哪些软件包版本。在下面的说明中,–s 选项所指定的源中存在下面的四个示例软件包。在这些 FMRI 中,@: 之间的字符表示已编号的软件包版本,: 至结尾的字符表示版本字符串的时间戳部分。

pkg://solaris/package/pkg@0.5.11,5.11-0.175.1.0.0.24.0:20120904T180335Z
pkg://solaris/package/pkg@0.5.11,5.11-0.175.1.0.0.24.0:20120903T170234Z
pkg://solaris/package/pkg@0.5.11,5.11-0.175.1.0.0.23.0:20120820T165108Z
pkg://solaris/package/pkg@0.5.11,5.11-0.175.1.0.0.23.0:20120819T155007Z
all-timestamps

检索匹配 fmri pattern 的每个软件包的所有版本(隐式的 all-versions)。如果未指定 –m 选项,这将是缺省行为。在上面的例子中,将检索到全部四个软件包。

all-versions

检索匹配 fmripattern 的每个软件包的每个版本的最新时间戳。在上面的例子中,将检索到下面两个软件包:

pkg://solaris/package/pkg@0.5.11,5.11-0.175.1.0.0.24.0:20120904T180335Z
pkg://solaris/package/pkg@0.5.11,5.11-0.175.1.0.0.23.0:20120820T165108Z
latest

只检索匹配 fmripattern 的每个软件包的最新版本。在上面的例子中,将检索到下面的软件包:

pkg://solaris/package/pkg@0.5.11,5.11-0.175.1.0.0.24.0:20120904T180335Z
–n

执行试运行,不进行任何更改。

–p publisher

只克隆指定的发布者。可以多次指定此选项。–p 选项只有在与 –-clone 选项一起使用时才有效。

–r

递归检索每个匹配的 fmripattern 的所有依赖项。

–s (src_path|src_uri)

Specify the file system path or URI of a pkg(7) repository or package archive from which to receive package data.如果未指定 –s,则使用值 PKG_SRC。请参见下面的“环境变量”。

–v

显示详细输出,包括检索到的软件包个数及其完整 FMRI、检索到的文件个数以及估计的传输大小。

–-key src_key

指定用于从源 HTTPS 系统信息库进行软件包检索的客户机 SSL 密钥文件。

–-cert src_cert

指定用于从源 HTTPS 系统信息库进行软件包检索的客户机 SSL 证书文件。

–-dkey dest_key

指定用于向目标 HTTPS 系统信息库发布软件包的客户机 SSL 密钥文件。

–-dcert dest_cert

指定用于向目标 HTTPS 系统信息库发布软件包的客户机 SSL 证书文件。

–-clone

为源系统信息库创建完全一致的副本。缺省情况下,仅当源系统信息库中的发布者也存在于目标中时,克隆操作才会成功。要限制仅对指定的发布者使用克隆操作,请使用 –p 选项。使用 –p 选项指定的发布者如果不在目标系统信息库中,则会将其添加到其中。存在于目标系统信息库中但不在源系统信息库中的软件包将被删除。如果发生错误,克隆操作会导致目标系统信息库更改。因此,目标系统信息库应位于自己的 ZFS 数据集中,并且在执行克隆操作之前应创建一个快照。

–-mog-file

Specifies a file containing pkgmogrify(1) transforms to be applied to the manifest of each package before it is copied to the destination package repository. '-' can be specified to use stdin as input.如果既指定了文件又指定了 '-',则将忽略 '-' 而且仅使用所指定的文件。使用此选项将自动导致从软件包中删除任何现有的软件包签名。不允许添加新的可散列操作(如文件和许可证)。可以多次指定此选项。此选项不能与 --clone 结合使用。

–-newest

列出 –s 选项指定的系统信息库中提供的最新版本的软件包。将忽略所有其他选项。

–-raw

按主干和版本,检索一组目录结构中的原始软件包数据并将其存储在 –d 指定的位置中。–-raw 选项仅可以与基于文件系统的目标一起使用。此软件包数据可用于方便地修改和重新发布软件包,也许通过更正文件内容,也许通过提供附加的软件包元数据。–-raw 选项不能与 –a 一起使用。

示例

示例 1 列出最新的软件包

列出名为 test 的系统上的系统信息库中的最新软件包。

$ pkgrecv -s http://test --newest
pkg://solaris/system/library/c++-runtime@0.5.11,5.11-0.175.0.0.0.2.1:20120921T190358Z
pkg://solaris/system/library/freetype-2@2.4.8,5.11-0.175.1.0.0.7.1234:20120109T215840Z
pkg://solaris/system/library/math@0.5.11,5.11-0.175.0.0.0.2.1:20120921T190432Z
示例 2 检索原始软件包数据

以能够与 pkgsend publish 结合使用的合适格式从示例 1 中接收 c++-runtime 软件包。

$ pkgrecv -s http://test \
-d /local/repo --raw \
c++-runtime@0.5.11,5.11-0.175.0.0.0.2.1:20120921T190358Z
Processing packages for publisher solaris ...
Retrieving and evaluating 1 package(s)...
PROCESS       ITEMS     GET (MB)    SEND (MB)
Completed       1/1      3.5/3.5      0.0/0.0
$ ls /local/repo
pkg5.repository  publisher  system%2Flibrary%2Fc%2B%2B-runtime

由于尚未更改的软件包未重新发布,因此发送的 MB (MB to SEND)(重新发布)可能会比获取的 MB (MB to GET)(检查)少。此示例检索原始数据,而不是重新发布到 –d 系统信息库。

示例 3 从系统中检索依赖项

从名为 test 的系统中接收软件包 editor/vim 及其所有依赖项。

$ pkgrecv -s http://test -d /local/repo -r editor/vim
示例 4 仅检索最新版本

仅从名为 test 的系统中接收软件包 editor/vim 的最新版本。

$ pkgrecv -s http://test -d /local/repo -m latest -v \
editor/vim
Processing packages for publisher solaris ...
Retrieving and evaluating 1 package(s)...

Retrieving packages ...
        Packages to add:       1
      Files to retrieve:    1557
Estimated transfer size: 9.21 MB

Packages to transfer:
editor/vim@7.3.600,5.11-0.175.1.0.0.24.0:20120904T172128Z

PROCESS                                     ITEMS    GET (MB) SEND (MB)
Completed                                     1/1     9.2/9.2 25.4/25.4
示例 5 检索所有版本并远程重新发布

从名为 test 的系统中接收软件包 library/zlib 的所有版本,然后将其重新发布到名为 remote 的系统上的远程系统信息库中。

$ pkgrecv -s http://test -d http://remote:10000 \
-m all-versions library/zlib
示例 6 从系统信息库中检索依赖项

从位于 /export/repo 的系统信息库中接收软件包 editor/gnu-emacs 及其所有依赖项。

$ pkgrecv -s /export/repo -d /local/repo -r editor/gnu-emacs
示例 7 检索其他软件包和更改的内容

从位于 http://pkg.oracle.com/solaris/release/ 的系统信息库中将并非已存在的所有软件包和所有已更改内容接收到位于 /export/repoSolaris11 的系统信息库。

$ pkgrecv -s http://pkg.oracle.com/solaris/release/ \
-d /export/repoSolaris11 -m all-timestamps '*'

将位于 https://pkg.oracle.com/solaris/support/的安全系统信息库中的所有尚不存在的软件包和所有更改内容接收到位于 /export/repoSolaris11 的系统信息库。

$ pkgrecv -s https://pkg.oracle.com/solaris/support/ \
-d /export/repoSolaris11 -m all-timestamps \
--key /var/pkg/ssl/Oracle_Solaris_11_Support.key.pem \
--cert /var/pkg/ssl/Oracle_Solaris_11_Support.certificate.pem '*'
示例 8 创建软件包归档文件

根据位于 http://example.com:10000 的系统信息库创建包含软件包 editor/gnu-emacs 及其所有依赖项的软件包归档文件。

$ pkgrecv -s http://example.com:10000 -d /my/emacs.p5p -a \
-r editor/gnu-emacs
示例 9 将软件包从归档文件复制到系统信息库中

将软件包归档文件中的所有软件包复制到位于 /export/repo 中的现有系统信息库。

$ pkgrecv -s /my/archive.p5p -d /export/repo '*'
示例 10 更改发布者名称

在重新发布期间将软件包 'foo' 的发布者名称及其所有依赖项更改为 'extra'。

$ echo '<transform set name=pkg.fmri -> edit value
(pkg://).*?(/.*) \\\1extra\\\2>' | pkgrecv -s repo1 -d repo2 --mog-file - foo

环境变量

支持以下环境变量:

PKG_CLIENT_CONNECT_TIMEOUT

传输操作期间尝试建立连接时等待的秒数(针对每次尝试),达到此秒数后,客户端会异常中止操作。值 0 表示无限期等待。

缺省值:60

PKG_CLIENT_LOWSPEED_TIMEOUT

传输操作期间低于 lowspeed 限制(1024 字节/秒)的秒数,达到此秒数后,客户机会异常中止操作。值 0 表示不中止运行。

缺省值:30

PKG_CLIENT_MAX_CONSECUTIVE_ERROR

客户端异常中止操作之前发生瞬态传输错误的最大次数。值 0 表示不中止运行。

缺省值:4

PKG_CLIENT_MAX_REDIRECT

在传输操作期间,异常中止某个连接之前允许的最大 HTTP 或 HTTPS 重定向次数。值 0 表示不中止运行。

缺省值:5

PKG_CLIENT_MAX_TIMEOUT

客户端异常中止操作之前每台主机上的最大传输尝试次数。值 0 表示不中止运行。

缺省值:4

PKG_DEST

要将检索到的软件包保存到的目录的路径,或者要复制软件包的系统信息库或软件包归档文件的文件系统路径或 URI。

PKG_SRC

A URI or file system path representing the location of a pkg(7) repository or package archive from which to retrieve packages.

TMPDIR

在程序执行期间用于存储临时数据的目录的绝对路径。如果未设置,则存储临时数据的缺省路径为 /var/tmp

http_proxy、https_proxy

HTTP 或 HTTPS 代理服务器。使用下面的语法设置 http_proxy 或 https_proxy:

http_proxy [protocol://]host[:port]

请参见在 Oracle Solaris 11.4 中更新系统和添加软件中的“指定代理”。

no_proxy

不应经过任何代理的主机名的列表。如果仅设置为星号 (*),则与所有主机匹配:将不对任何主机进行代理操作。使用下面的语法设置 no_proxy:

no_proxy [* | host[,host]...]

退出状态

将返回以下退出值:

0

命令成功。

1

出现错误。

2

指定的命令行选项无效。

3

请求了多项操作,但只有一部分操作成功。

99

发生了意外的异常。

属性

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

ATTRIBUTE TYPE
ATTRIBUTE VALUE
可用性
package/pkg
接口稳定性
Uncommitted(未确定)

另请参见

pkgrepo(1), pkgsend(1), pkg(7)

在 Oracle Solaris 11.4 中创建软件包系统信息库

https://github.com/oracle/solaris-ips

附注

当使用基于文件系统的目标系统信息库时,在完成软件包传输后必须重新启动提供该系统信息库服务的任何 pkg.depotd 进程,以便在其 Web 界面或搜索响应中反映更改。See pkg.depotd(8) for more information.