可使用 pkg verify 命令验证映像中的软件包安装。如果相关发布者的当前签名策略不是 ignore,则会根据策略验证每个软件包的签名。有关如何应用签名策略的说明,请参见签名的软件包的映像属性。已安装软件包内容的验证基于定制的内容分析,该分析可能会返回与其他程序不同的结果。
如果不提供软件包名称,则检查所有已安装的软件包。-v 选项提供信息性消息,每个已安装的软件包至少占用一行。以下示例仅是一个小型输出示例。pkg/depot 软件包的安装存在一个错误。
$ pkg verify -v PACKAGE STATUS pkg://solaris/archiver/gnu-tar OK pkg://solaris/audio/audio-utilities OK pkg://solaris/benchmark/x11perf OK ... pkg://solaris/package/pkg/depot ERROR dir: var/cache/pkg/depot Group: 'pkg5srv (97)' should be 'bin (2)' file: var/log/pkg/depot/access_log editable file has been changed file: var/log/pkg/depot/error_log editable file has been changed ... pkg://solaris/security/sudo OK file: etc/sudoers editable file has been changed ... pkg://solaris/x11/xlock OK pkg://solaris/x11/xmag OK pkg://solaris/x11/xvidtune OK
可使用 pkg fix 命令修复 pkg verify 命令报告的软件包错误。
pkg verify 的输出显示已安装的 sudo 软件包的组件与打包的组件不同,但未将这些区别报告为验证错误。pkg fix 未进行任何更改。没有替换 /etc/sudoers 文件。
$ pkg fix pkg://solaris/security/sudo No repairs for this image.
如果删除 /etc/sudoers 文件,则软件包无法通过验证且 pkg fix 会替换该文件。
$ pkg fix pkg://solaris/security/sudo Verifying: pkg://solaris/security/sudo ERROR file: etc/sudoers Missing: regular file does not exist Created ZFS snapshot: 2014-03-13-22:05:42 Repairing: pkg://solaris/security/sudo Creating Plan (Evaluating mediators): DOWNLOAD PKGS FILES XFER (MB) SPEED Completed 1/1 1/1 0.0/0.0 990B/s PHASE ITEMS Updating modified actions 1/1 Updating package state database Done Updating package cache 0/0 Updating image state Done Creating fast lookup database Done
仅会替换缺少的文件:如示例所示,仅下载了一个文件并修改了一项操作(file 操作)。不会替换 sudo 软件包的其他内容。在执行修复前,该操作会保存当前安装的快照。请参见 pkg fix 输出的 "Created ZFS snapshot" 行。修复是在当前映像中执行的。
$ zfs list -r rpool/ROOT/s11 NAME USED AVAIL REFER MOUNTPOINT rpool/ROOT/s11 16.3G 22.5G 26.1G / rpool/ROOT/s11@2014-03-13-23:52:19 249M - 26.1G -
pkg verify 的输出显示已安装的 pkg/depot 软件包中某个目录的所有权存在错误。pkg fix 的输出只显示了 "Verifying" 部分中的错误,未显示与打包的组件的其他区别。
$ ls -ld /var/cache/pkg/depot drwxr-xr-x 3 pkg5srv pkg5srv 3 Dec 2 19:47 /var/cache/pkg/depot/ $ pkg fix pkg://solaris/package/pkg/depot Verifying: pkg://solaris/package/pkg/depot ERROR dir: var/cache/pkg/depot Group: 'pkg5srv (97)' should be 'bin (2)' Created ZFS snapshot: 2014-03-13-22:18:52 Repairing: pkg://solaris/package/pkg/depot Creating Plan (Evaluating mediators): PHASE ITEMS Updating modified actions 1/1 Updating package state database Done Updating package cache 0/0 Updating image state Done Creating fast lookup database Done
以下输出只显示了已修复的错误。已安装的和打包的组件间的其他区别仍然存在。
$ ls -ld /var/cache/pkg/depot drwxr-xr-x 3 pkg5srv bin 3 Dec 2 19:47 /var/cache/pkg/depot/ $ pkg verify -v pkg://solaris/package/pkg/depot PACKAGE STATUS pkg://solaris/package/pkg/depot OK file: var/log/pkg/depot/access_log editable file has been changed file: var/log/pkg/depot/error_log editable file has been changed