Go to main content

手册页部分 1:用户命令

退出打印视图

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

pkglint(1)

名称

pkglint - 映像包管理系统软件包 lint

用法概要

/usr/bin/pkglint [-c cache_dir] [-r 
repo_uri]... [-p regexp]
    [-e extension_path] [-f config_file] [-b branch]
    [-v] [-l lint_uri]... | manifest ...
/usr/bin/pkglint -L [-v]

描述

pkglint 对一个或多个软件包清单运行一系列检查,并有选择性地引用其他系统信息库。

应该在发布软件包之前,在软件包构建期间使用 pkglint。pkglint 将对清单执行全面的测试,在 pkgsend 或 pkg.depotd 正常操作期间,执行这种测试可能会消耗过多的资源。 pkglint 检查包括对重复操作、缺少的属性和非正常文件权限的测试。

可以在命令行上将用于 lint 的清单作为本地文件的空格分隔列表进行传递,也可以从系统信息库检索清单。

When retrieving manifests from repositories, on first run pkglint creates and populates pkg(7) user images in the specified cache directory.如果提供了 –r 选项,则为引用系统信息库创建名为 cache_dir/ref_image 的用户映像。如果提供了 –l 选项,则为 lint 系统信息库创建名为 cache_dir/lint_image 的用户映像。不会在这些映像中安装任何内容。pkglint 只使用这些映像从系统信息库中检索清单。

pkglint 的后续调用可以重新使用高速缓存目录,并可以省略任何 –r 或 –l 参数。

pkglint 对在高速缓存目录中配置发布者提供有限的支持。使用 pkg 可对这些映像执行更复杂的发布者配置。

pkglint 使软件包作者能够绕过对给定清单或操作进行的检查。其中的属性 pkg.linted 设置为 True 的清单或操作不会为该清单或操作生成任何 lint 输出。

使用 pkglint 检查名称的子字符串可以进行更高粒度的 pkg.linted 设置。例如,设置为 True 的 pkg.linted. check.id 将对给定的清单或操作绕过名称为 check.id 的所有检查。

可通过指定一个 pkglintrc 文件来配置 pkglint 的行为。缺省情况下,pkglint 在 /usr/share/lib/pkg/pkglintrc 和 $HOME/.pkglintrc 中搜索配置选项。使用 –f 选项可以指定其他配置文件。

lint 运行期间,遇到的任何错误或警告将输出到 stderr。

选项

支持以下选项:

–h
–-help

显示用法消息。

–b branch

指定分支,用于细化从 lint 和引用系统信息库执行 lint 期间使用的软件包列表。如果不指定 –b 选项,将使用最新版本的软件包。另请参见 version.pattern 配置属性。

–c cache_dir

指定用于从 lint 和引用系统信息库高速缓存软件包元数据的本地目录。

–l lint_uri

指定表示 lint 系统信息库位置的 URI。支持基于 HTTP 和基于文件系统的发布。如果指定 –l,则必须还要指定 –c。可以多次指定 –l 选项。

–L

列出已知的和排除的 lint 检查,然后退出。显示每个检查的短名称和说明。与 –v 标志结合使用时,将显示实现检查的方法而不显示说明。

–f config_file

使用 config_file 配置文件来配置 pkglint 会话。

–e extension_path

Directory to add to the Python search path when loading pkglint extensions.

–p regexp

指定正则表达式,用于细化要从 lint 系统信息库检查的软件包列表。将会装入来自引用系统信息库的所有清单(假定它们与提供的 –b 值匹配),并忽略此模式。

–r repo_uri

指定表示引用系统信息库位置的 URI。如果指定 –r,则还必须指定 –c。可以多次指定 –r 选项。

–v

以详细模式运行 pkglint,覆盖配置文件中的任何 log_level 设置。

文件

pkglintrc 配置文件采用以下键/值参数:

log_level

发出 lint 消息的最低级别。低于该级别的 lint 消息将被放弃。缺省值为 INFO。

严重性从低到高的日志级别依次为 DEBUG、 INFO、WARNING、ERROR 和 CRITICAL。

do_pub_checks

如果为 True,则执行可能只对已发布的软件包有意义的检查。缺省值为 True。

pkglint.ext.*

pkglint 的插件机制允许在运行时添加其他 lint 模块。以 pkglint.ext. 开头的任何键采用必须是完全指定的 Python 模块的值。有关更多信息,请参见“开发工具”一节。The extension_path option specifies additional directory locations to search when loading extensions

extension_path

An list of directories, separated by ':' no most platforms, to search for extension modules.If the -e flag is specified on the CLI it is added higher in the search order than this config file option.

pkglint.exclude

要从执行的检查集中省略的完全指定的 Python 模块、类或函数名称的空格分隔列表。

use_progress_tracker

如果为 True,则在 lint 运行期间迭代清单时,会使用进度跟踪器。缺省值为 True。

version.pattern

指定分支以针对 (–b) 执行 lint 时使用的版本模式。如果未在配置文件中指定,–b 选项使用模式 *-(与所有分支匹配)。

开发者

扩展 pkglint、子类 pkg.lint.base.Checker 及其子类 ManifestChecker 、和 ActionChecker 执行的检查集。将包含这些类的 Python 模块名称添加到配置文件中的新 pkglint.ext. 键。

这些新子类的实例由 pkglint 在启动时创建。lint 会话过程中,将会调用带有特殊关键字参数 pkglint_id 的每个子类中的方法。这些方法应该与超类中的相应 check() 方法具有相同的签名。还应该为方法指定一个 pkglint_desc 属性,该属性用作 pkglint -L 输出的描述。

参数可用于 Checker 子类,使这些子类能够调优其行为。建议的参数命名约定为 pkglint_id.name。参数值可以存储在配置文件中,或者在使用 LintEngine.get_param() 方法检索的清单或操作中访问。从清单访问参数时,将在键名的前面附加前缀 pkg.lint,以确保 pkglint 参数不会与任何现有的操作或清单值重叠。

环境变量

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

http_proxy、https_proxy

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

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

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

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

示例

示例 1 对特定系统信息库的首次运行

对给定系统信息库上首次运行 pkglint 会话。

$ pkglint -c /space/cache -r http://localhost:10000 mymanifest.mf
示例 2 对相同系统信息库的后续运行

针对示例 1 中使用的同一系统信息库的后续运行。

$ pkglint -c /space/cache mymanifest-fixed.mf
示例 3 将 Lint 系统信息库和细化的清单集一起使用

将 pkglint 会话和 lint 系统信息库结合运行,并指定要检查的清单的子集。

$ pkglint -c /space/othercache -l http://localhost:10000 \
-p '.*firefox.*'
示例 4 指定分支

在详细模式下针对给定的分支运行 pkglint 会话。

$ pkglint -c /space/cache -r http://localhost:10000 \
-l http://localhost:12000 -b 11.4.0.0.0.147.0 -v
示例 5 修改配置文件

带有新的 lint 模块的配置文件,排除某些检查。

$ cat ~/.pkglintrc
[pkglint]

log_level = DEBUG
# log_level = INFO

pkglint.ext.mycheck = org.timf.mychecks
pkglint.ext.opensolaris = pkg.lint.opensolaris
pkglint.exclude: pkg.lint.opensolaris.OpenSolarisActionChecker
pkg.lint.pkglint.PkgActionChecker.unusual_perms pkg.lint.pkglint.PkgManifestChecker
pkg.lint.opensolaris.OpenSolarisManifestChecker

退出状态

将返回以下退出值:

0

命令成功。

1

一个或多个软件包清单包含 lint 错误。

2

清单中出现 lint 错误以外的错误。例如,可能指定了无效的命令行选项。

99

发生了意外的异常。

属性

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

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

另请参见

pkg (1)、pkg.depotd (8)、pkgsend (1)、pkg(7)

《在 Oracle Solaris 11.4 中使用映像打包系统打包和交付软件》

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