手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

pkgsend(1)

名称

pkgsend - 映像包管理系统发布客户机

用法概要

/usr/bin/pkgsend [options] command [cmd_options] [operands]
/usr/bin/pkgsend generate [-T pattern] [--target file]
    source ...
/usr/bin/pkgsend publish [-b bundle]... [-d source]...
    [-s repo_uri_or_path] [--key ssl_key --cert ssl_cert]...
    [-T pattern] [--no-catalog] [manifest ...]

描述

通过 pkgsend,可使用软件包清单将新软件包和新软件包版本发布到映像包管理系统信息库。要创建或管理系统信息库,请参见 pkgrepo(1)。要从现有系统信息库的软件包中创建软件包归档文件,请参见 pkgrecv(1)。有关软件包清单的更多信息,请参见 pkg(5)。

完成 pkgsend publish 操作后,如果您的 repo_uri_or_path 系统信息库必须支持 pkg search 操作,请在系统信息库上运行 pkgrepo refresh 以更新搜索索引。

选项

支持以下选项:

–?
–-help

显示用法消息。

子命令

支持以下子命令:

pkgsend generate [–T pattern] [–-target file] source ...

读取每个 source(例如,SVR4 软件包、目录或 tar 文件)并将介绍 source 的清单发送到 stdout。在输出清单中,filedir 操作将所有者设置为 root,并将组设置为 bin

然后可以注释输出清单,使用 pkgdepend 添加或分析依赖项,并在将其传递到 publish 子命令之前使用 pkglint 验证它的正确性。

    以下是支持的源:

  • 文件系统格式 SVR4 软件包

  • 数据流格式 SVR4 软件包

  • tar 文件

  • 目录

如果源中文件的基本名称与使用 –T 指定的模式匹配,则将文件的时间戳添加到该文件的操作中。pattern 使用 shell 匹配规则:

*

匹配所有内容。

?

匹配任何单个字符。

[seq]

匹配 seq 中的任何字符。

![seq]

匹配不在 seq 中的任何字符。

如果指定源是一个目录,当单个 inode 具有多个路径名称时,则没有明确的方式区分 file 操作与 hardlink 操作。通常,在文件系统遍历中发现的第一个视为文件,其余的视为硬链接。这可以是任意的,具体取决于文件系统的实现方式。要指定哪些路径名称应视为文件,请将每个路径名称作为参数传递到 –-target 选项。该选项不会影响其他类型的源,因为它们可以表明哪些路径名称是文件,哪些是硬链接。

当提供 SVR4 软件包作为源时,pkgsend 会确认不存在具有类操作脚本的文件,以及不存在安装前、安装后、删除前或删除后脚本。但与 manifest 类一起安装的任何 SMF 清单除外。将从所有可重定位路径中删除 BASEDIR

SVR4 DESC 参数将转换为 pkg.description 值。SVR4 NAME 参数将转换为 pkg.summary 值。

pkgsend publish [–b bundle]... [–d source]... [–s repo_uri_or_path] [–-key ssl_key –-cert ssl_cert]... [–T pattern] [–-no-catalog] [manifest ...]

将使用指定软件包清单的软件包发布到目标软件包系统信息库,并从提供的源中检索该软件包的文件。如果指定了多个清单,它们将以提供的顺序联接。如果未指定清单,则将从 stdin 中读取清单。

如果未指定,则 pkgsend publish 向软件包 FMRI 添加内部版本。publish 工具还向软件包 FMRI 添加时间戳(UTC 中的当前时间)。有关软件包 FMRI 的版本字符串的信息,请参见 pkg(5) 手册页。

如果可能会有多个 pkgsend publish 进程同时发布到同一 –s 系统信息库,建议指定 –-no-catalog 选项。请参见下文对 –-no-catalog 选项的说明。

–b bundle

将指定的包添加到源列表,以便在查找清单中的文件时搜索该包。包是 tar 文件和 SVR4 软件包等源。如果多次指定该选项,则以在命令行显示的顺序对源进行搜索。如果同时指定 – b–d,则首先搜索 –d 源。有关支持的包及其使用方法的说明,请参见以上的 generate 子命令。

–d source

将指定的目录添加到源列表,以便在查找清单中的文件时搜索该目录。如果多次指定该选项,则以在命令行显示的顺序对源进行搜索。有关支持的源及其使用方法的说明,请参见以上的 generate 子命令。

–s repo_uri_or_path

将软件包发布到位于给定 URI 或文件系统路径的系统信息库。有关发布限制和建议的更多信息,请参见下文的“附注”部分。另请参见“环境变量”部分。

–-key ssl_key –-cert ssl_cert

使用 –-key 选项指定用于从 HTTPS 系统信息库进行软件包检索的客户机 SSL 密钥文件。使用 –-cert 选项指定用于从 HTTPS 系统信息库进行软件包检索的客户机 SSL 证书文件。可以多次指定此选项对。

–-no-catalog

不将软件包添加到发布者的目录。当由于必须连续执行对发布者目录的更新而一次发布多个软件包时,建议使用此选项。当多个进程同时发布软件包时,如果不使用此选项,发布性能会显著降低。完成发布后,可使用 pkgrepo refresh 命令将新软件包添加到相应的发布者目录。

有关 –T 选项的说明,请参见以上的 generate 子命令。

环境变量

PKG_REPO

目标系统信息库的路径或 URI。

示例

示例 1 生成并发布软件包

使用 pkgsend generate 创建软件包并将其发布。

$ pkgsend generate /path/to/proto > /path/to/manifests/foo.p5m

example.com 发布者的软件包 FMRI 添加到 foo.p5m 的开头。

set name=pkg.fmri value=pkg://example.com/foo@1.0

结果清单应类似于以下内容:

set name=pkg.fmri value=pkg://example.com/foo@1.0
dir group=sys mode=0755 owner=root path=usr
dir group=bin mode=0755 owner=root path=usr/bin
file usr/bin/foo group=bin mode=0555 owner=root path=usr/bin/foo
$ pkgsend publish -s http://example.com:10000 -d /path/to/proto \

/path/to/manifests/foo.p5m
示例 2 创建和发布普通软件包

为包含以下行的发布者 example.com 创建清单:

set name=pkg.fmri value=pkg://example.com/foo@1.0-1
file /exdir/foo mode=0555 owner=root group=bin path=/usr/bin/foo

发布软件包:

$ pkgsend publish -s http://example.com:10000 -d /exdir
示例 3 使用已经存在的清单

使用基于文件系统的发布和已经存在的清单发布软件包。

$ pkgsend publish -s /tmp/example_repo -d /tmp/pkg_files \

/tmp/pkg_manifest

退出状态

将返回以下退出值:

0

命令成功。

1

出现错误。

2

指定的命令行选项无效。

99

发生了意外的异常。

属性

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

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

另请参见

pkgdepend(1)pkgrepo(1)pkg.depotd(1M)pkg(5)

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

https://java.net/projects/ips/pages/Home

附注

由于发布协议限制,当发布大小超过 128 MB 的单个软件包文件时,必须使用基于文件系统的发布。当需要系统信息库的访问控制时,也建议使用基于文件系统的发布。

当使用基于文件系统的发布时,在完成发布后必须重新启动提供目标系统信息库服务的任何 pkg.depotd 进程,以便在其 Web 界面或搜索响应中反映更改。有关更多信息,请参见 pkg.depotd(1M)。