What You See Is What You Get Element

命令汇总:映像包管理系统的基本操作

适用于 Oracle Solaris 11

作者:Ginny Henningsen

本文总结了 Oracle Solaris 11 中控制映像包管理系统的命令,并演示了如何使用这些命令执行基本操作。


2012 年 9 月发布

为了帮助系统管理员快速了解如何在 Oracle Solaris 11 中使用映像包管理系统 (IPS),我们在“Oracle Solaris 11 映像包管理系统速查表”中汇总了常用的 IPS 命令。本文由该速查表展开,回顾了基本的 IPS 概念,并演示了如何用这些命令执行基本操作。

想要分享一些自己喜爱的系统管理员命令?请成为 OTN 成员,并通过在 OTN 上发布文章获得报酬

再次,映像包管理系统是什么?

IPS 是 Oracle Solaris 11 引入的新软件包管理模型。它是全面的交付框架,跨越了从软件安装、系统更新、升级到软件包删除的整个软件生命周期。与 Oracle Solaris 更早版本中的 SVR4 软件包管理模型相比,IPS 从根本上改变了执行软件维护的方式,因为它消除了操作系统修补。相反,IPS 依赖于使用以网络为中心的软件信息库进行软件更新和安装。

IPS 从本地连接或远程的软件包信息库拉取软件包,同时自动检查软件的依赖项并安装所需的软件。由于 IPS 会对照全局区域对非全局区域中的软件版本进行一致性检查,因此还有助于管理系统区域软件配置。

当您添加或更新软件时,虽然 IPS 不总是生成 Oracle Solaris 11 引导环境 (BE),但通常这是一个不错的管理实践方法。由于创建新的 BE 可以利用内置的 ZFS 快照功能,因此您可以在不需要额外空间的情况下几乎瞬间生成系统克隆。即使系统是一个实际生产系统,创建 BE 也允许您执行更新。然后,您可以在下次重新启动时激活已更新的 BE,如果有问题,可以回滚到之前的软件状态。通过这种方式,IPS 可以在软件配置之间实现安全、受控的过渡。

有关 IPS 的更多技术信息,请转到 Oracle Solaris 11 IPS 技术页面

映像包管理系统

图 1. Oracle Solaris IPS 可将更新应用于当前引导环境的克隆。

安装软件包和更新系统

IPS 的主要管理接口是 pkg 命令。它的许多子命令可用于查询当前软件状态(例如 listinfocontentssearchhistory 子命令),并且可由任何用户执行。但是,只有具备权限的管理员可以执行更改系统软件映像的子命令(如 pkg installpkg uninstallpkg update)。

表 1 列出了 Oracle Solaris 11 pkg 命令及对应 SVR4 命令的一些示例。

表 1. pkg 命令示例
任务 IPS 命令 SVR4 包管理命令
安装软件包 pkg install pkgadd -a
更新当前映像中已安装的软件包 pkg update pkgadd -a
显示软件包状态和版本信息 pkg list pkginfo
验证软件包安装 pkg verify pkgchk -v
显示软件包信息,如许可 pkg info pkginfo -l
显示软件包的内容 pkg contents pkgchk -l
搜索软件包 pkg search pkgchk -l -p

在以下示例中,pkg install 命令安装 diagnostic/wireshark 软件包和依赖项(如果有的话):

# pkg install diagnostic/wireshark

pkg update 命令将已安装的软件包更新到最新版本,包括 Oracle Solaris 11 区域中安装的软件包。要预览其操作,请使用 -nv 参数,例如:

# pkg update -nv

要为 be_fix-nfs 更新创建新的引导环境,请输入以下命令:

# pkg update --be-name be_fix-nfs

通常,您可以使用 pkg listpkg infopkg contentspkg search 命令详细查看和了解已安装和已卸载的软件包。例如,在 Oracle Solaris 11 系统中,pkg list 命令可列出当前安装的软件包:

$ pkg list

要显示有关名为 wireshark 的已安装的特定软件包的信息,请输入以下命令:

$ pkg info wireshark

要在当前配置的软件信息库中搜索有关名为 xchat 的已卸载软件包的信息,请为 pkg info 命令使用 -r 参数:

$ pkg info -r xchat

要显示 wireshark 软件包的内容,请输入以下命令:

$ pkg contents wireshark 

要显示匹配字符串 gcc 的本地安装的所有软件包,请输入以下内容:

$ pkg search -l gcc

要列出已配置的软件信息库中包含头文件 gcrypt-module.h 的所有软件包,请输入以下命令:

$ pkg search 'gcrypt-module.h'

要查找依赖 library/libxml2 的本地安装的所有软件包,请输入以下内容:

$ pkg search --l -o pkg.name 'depend::library/libxml2'

了解软件包 FMRI

某些 pkg 子命令以故障管理资源标识符 (FMRI) 的格式显示有关软件包的信息。FMRI 是软件包的唯一标识符,其中包括软件包的发布者和特定的标识详细信息,如 pkg info 的输出示例所示:

$ pkg info wireshark
pkg://solaris/diagnostic/wireshark@1.4.2,5.11-0.174:20110128T0635Z

在此 FMRI 中,solaris 是发布者,diagnostic/wireshark 是软件包名称,1.4.2 是组件版本,5.11 是内部版本,0.174 是分支版本,20110128T0635Z 是软件包的时间戳。有关 FMRI 标识符的详细信息,请参见 pkg(5) 手册页面

管理信息库和发布者

软件开发人员(包括 Oracle)在软件包信息库中发布他们的软件。管理员通过访问这些信息库来安装新系统、添加或更新软件包,或搜索软件包信息。此外,如果系统位于网络受限的环境中,管理员还可以使用信息库的本地副本(见图 1)。

您可以使用 pkg publisher 命令显示当前配置的信息库:

# pkg publisher 
PUBLISHER   TYPE    STATUS   URI 
solaris     origin  online   http://pkg.oracle.com/solaris/release/ 

Oracle Solaris 11 具有一个默认的发布者 solaris,它从版本信息库 http://pkg.oracle.com/solaris/release 提供软件包。具有有效 Oracle 支持协议的客户可将默认发布者更改为指向位于 https://pkg.oracle.com/solaris/support 的 Oracle Solaris 11 支持信息库:

# pkg set-publisher -G http://pkg.oracle.com/solaris11/release \ 
-g http://pkg.oracle.com/solaris11/support -k /path/to/ssl_key \ 
-c /path/to/ssl_cert solaris
# pkg publisher 
PUBLISHER   TYPE    STATUS   URI 
solaris     origin  online   https://pkg.oracle.com/solaris/support/

在 Oracle 技术网文章“如何从 Oracle 支持信息库更新 Oracle Solaris 11 系统”中,Glynn Foster 演示了下载安全证书和密钥并切换到支持信息库的整个过程。

如果您选择设置本地信息库副本,需要在该 URI 添加新的发布者,例如:

# pkg set-publisher -p http://www.example.com/solaris11

其他命令

系统在日志文件中记录了软件包的安装、更新和修改历史。要浏览 pkg 命令的历史记录(包括使用 Package Manager 图形客户端执行的操作),请使用 pkg history 命令。-n 选项显示指定数目的最近操作:

# pkg history -n4 
START                  OPERATION               CLIENT   OUTCOME 
2011-09-07T12:15:52    update                  pkg      Succeeded 
2011-09-26T18:53:12    refresh-publishers      pkg      Succeeded 
2011-09-26T18:53:50    rebuild-image-catalogs  pkg      Succeeded 
2011-09-27T09:05:34    update                  pkg      Succeeded

要清除 pkg 命令的历史记录(这基本上会清空日志文件),请输入以下命令:

# pkg purge-history

要验证当前系统映像的完整性,请输入以下命令:

# pkg verify 

要验证已安装软件包的完整性,请输入 pkg verify 命令和软件包名称:

# pkg verify -v system/install/auto-install/auto-install-common 
PACKAGE                                                        STATUS 
pkg://solaris/system/install/auto-install/auto-install-common  ERROR              
       file: usr/share/auto_install/manifest/default.xml                 
              Missing: regular file does not exist

pkg verify 命令根据签名策略验证软件包签名。

要修复 pkg verify 有关已安装的软件包报告的错误,请使用带 --accept 选项的 pkg fix 命令,该选项指示您接受指定软件包的许可条款,如清单 1 所示。

# pkg fix --accept system/install/auto-install/auto-install-common 
Verifying: pkg://solaris/system/install/auto-install/auto-install-common    ERROR         
file: usr/share/auto_install/manifest/default.xml                 
Missing: regular file does not exist 
Created ZFS snapshot: 2011-09-28-05:34:02 
Repairing: pkg://solaris/system/install/auto-install/auto-install-common  

DOWNLOAD      PKGS       FILES    XFER (MB) 
Completed     1/1        1/1      0.0/0.0  

PHASE              ACTIONS 
Update Phase       1/1  

PHASE                         ITEMS 
Image State Update Phase      2/2

清单 1. 修复由 pkg verify 报告的错误

要防止将来更新并冻结软件包的状态,请输入以下命令:

# pkg freeze wireshark

如果您不希望全局区域更新时更新软件包,您可能想要将该软件包冻结在非全局区域中。要逆向操作并允许更新,请输入以下命令:

# pkg unfreeze wireshark

另请参见

另请参见以下资源:

关于作者

在过去 15 年里,Ginny Henningsen 一直以自由撰稿人的身份为高科技公司开发技术资料和文档。在此之前,Ginny 就职于 Sun Microsystems, Inc,曾在普鲁士王市(宾夕法尼亚州)和密尔沃基威(威斯康星州)担任系统工程师。Ginny 拥有卡内基-梅隆大学的学士学位以及维拉诺瓦大学的 MSCS 学位。

修订版 1.0,2012 年 9 月 27 日

facebook 横幅广告 twitter 横幅广告