2011 年 11 月
作者:Glynn Foster
Oracle Solaris 11 采用了一种新方法来进行生命周期和软件包管理,极大地简化了系统软件的管理过程,有助于降低操作系统维护的风险,包括减少意外停机和计划停机。使用映像包管理系统 (IPS),管理员可以使用大幅改进和现代化的流程从本地连接或远程软件包信息库安装和更新软件。
|
本文介绍使用 IPS 管理 Oracle Solaris 11 系统的基础知识。要了解有关 IPS 的更多信息,请查看 Oracle 技术网的 IPS 技术聚焦页面上的各种内容。另请参见 Oracle Solaris 11 映像包管理系统速查表。
在开始深入了解 IPS 的管理细节之前,我们先简要查看该新方法的一些优点。
在 Oracle Solaris 平台的早期版本中,管理员使用 SVR4 包管理将软件安装到系统上,然后使用一组不同的命令安装补丁来更新系统。随着 Oracle Solaris 的发展,新的技术不断被包括进来,如 Oracle Solaris 区域、Oracle Solaris ZFS 和 Solaris Service Management Facility (SMF),这就使以前用于管理系统更新和升级的流程变得越来越复杂。在如今一些大型虚拟化数据中心中,安装了数千个操作系统实例,这种情况下,手动跟踪和安装补丁的方法可能会导致错误,对应用程序的可用性和安全性产生负面影响。
IPS 是一个集成解决方案,通过将打补丁与软件包更新集成,有助于实现 Oracle Solaris 11 上系统软件管理过程自动化并降低其复杂性。它依赖于带有自动软件依赖性检查和验证的以网络为中心的高效方法,构建在以 ZFS 作为默认根文件系统的基础上。使用 IPS,管理员可以轻松可靠地在众多不同客户机之间安装或复制精确的软件包版本集,更清晰地了解系统上安装的软件版本之间的任何差异。
使用 ZFS 无需任何系统开销或只需少量系统开销就能对给定文件系统执行快照和克隆,IPS 通过对克隆或备用引导环境应用更改建立了一种更安全的系统更新,从而可以在系统生产环境中运行服务时执行更新。当可以安排计划维护窗口时,管理员只需将系统重新引导到新的引导环境,系统停机时间就可以缩短,启动和运行得更快。如果管理员在新环境中遇到任何问题,只需关闭系统,然后恢复旧的引导环境。
此外,对系统上创建的任何区域的跨区域管理也得到很大改进,因为系统会自动确保非全局区域内的软件包版本与全局区域保持一致。
管理员可以从命令行使用几种命令来管理系统或创建软件包信息库并使用软件包填充该库。表 1 概要列出了可用的不同命令行选项。
表 1:IPS 命令概要一般管理 | |
---|---|
pkg | 软件包管理客户端 |
软件包创建和发布 | |
pkgrepo | 信息库管理实用程序 |
pkgrecv | 内容检索实用程序 |
pkgsend | 软件包创建和发布 |
pkgdiff | 软件包清单比较实用程序 |
pkgmerge | 软件包合并实用程序 |
pkgmogrify | 软件包清单变换实用程序 |
pkgfmt | 程序包清单格式化实用程序 |
pkgsign | 软件包签名实用程序 |
pkglint | 软件包验证实用程序 |
在本文中,我们将详细介绍 pkg
命令。
IPS 是以网络为中心的软件包管理解决方案。软件开发人员(即发布者)通过软件包信息库提供软件,管理员可以从该库将软件安装到系统上。Oracle Solaris 11 安装配置成具有一个默认的发布者 solaris
,它从“版本”信息库 http://pkg.oracle.com/solaris/release
提供软件包。管理员可以从此信息库安装新的软件包、搜索软件包内容,或者在本地镜像此信息库的内容(如果是处于数据中心内的网络受限环境下)。管理员可以使用 pkg publisher
命令快速查看系统的已有配置:
# pkg publisher PUBLISHER TYPE STATUS URI solaris origin online http://pkg.oracle.com/solaris/release/
管理员还可以使用 pkgrepo info
命令快速查询有关此信息库的一些基本信息,也可以将信息库 URL 加载到 Web 浏览器中:
# pkgrepo info -s http://pkg.oracle.com/solaris/release/ PUBLISHER PACKAGES STATUS UPDATED solaris 4044 online 2011-06-22T12:17:33.570603Z
这里我们看到,该信息库目前有 4044 个软件包在线,输出显示了该信息库最近一次更新的时间戳。
此外,管理员还可以选择使用 pkg set-publisher
命令在配置中添加新的发布者,以允许从其他发布者来源安装软件包:
# pkg set-publisher -p http://10.1.1.5 # pkg publisher PUBLISHER TYPE STATUS URI solaris origin online http://pkg.oracle.com/solaris/release/ myrepo origin online http://10.1.1.5
在本例中,我们从系统添加了一个新的发布者,其 IP 地址为 10.1.1.5,包含某些内部开发所必需的软件包。-p
选项自动从指定地址检索发布者配置信息。我们还可以使用其他命令行选项手动提供此功能。
在有些环境中,对哪些系统能够访问外部信息库存在网络限制,而管理员不得不在其数据中心设置内部镜像(稍后将介绍),此时,配置新的发布者或更新现有发布者对管理员尤为重要。可以使用 pkg set-publisher
和 pkg unset-publisher
命令轻松修改发布者、指定其优先级或删除发布者。
如果管理员在全局区域配置了其他发布者,将在所有非全局区域自动公开这些发布者。这些发布者(又称系统发布者)之所比较特殊,是因为要依赖他们来确保非全局区域和全局区域保持同步且不能在非全局区域内修改(或删除)。
配置信息库之后,可以使用 pkg install
命令轻松安装软件包。如果只想查看将对系统进行哪些更改而不安装任何软件包,可以使用 -nv
选项。在清单 1 中,使用 pkg install -nv
执行 GCC GNU C 编译器软件包的空运行安装。
# pkg install -nv gcc-3 Packages to install: 1 Estimated space available: 122.17 GB Estimated space to be consumed: 340.45 MB Create boot environment: No Create backup boot environment: No Services to change: 1 Rebuild boot archive: No Changed packages: solaris developer/gcc-3 None -> 3.4.3,5.11-0.175.0.0.0.1.530:20111012T111222Z Services restart_fmri: svc:/application/texinfo-update:default
从输出中可以看出,只需安装一个软件包,它占用 340 MB 的空间。还可以看到,未创建新的引导环境,重新启动了一个服务,且系统无需重新构建引导存档。
默认情况下,安装软件包无需创建新的引导环境,除非软件包本身明确要求重新引导系统。将软件包操作应用于当前引导环境会影响内核状态,为了安全起见,将创建备份引导环境,但并不激活。一旦您对建议的系统更改感到满意,即可通过删除 -nv
选项来执行安装。在清单 2 中,安装 GCC GNU C 编译器软件包。
# pkg install gcc-3 Packages to install: 1 Create boot environment: No Create backup boot environment: No Services to restart: 1 DOWNLOAD PKGS FILES XFER (MB) Completed 1/1 324/324 29.6/29.6 PHASE ACTIONS Install Phase 395/395 PHASE ITEMS Package State Update Phase 1/1 Image State Update Phase 2/2 PHASE ITEMS Reading Existing Index 8/8 Indexing Packages 1/1
如果管理员希望将程序包安装到备用引导环境中,使用 pkg install
命令的一个简单扩展即可实现此目的。在清单 3 中,我们将 GCC GNU C 编译器软件包安装到一个名为 gcc-be
的新引导环境中。
# pkg install --be-name gcc-be gcc-3 Packages to install: 1 Create boot environment: Yes Create backup boot environment: No DOWNLOAD PKGS FILES XFER (MB) Completed 1/1 314/314 29.6/29.6 PHASE ACTIONS Install Phase 395/395 PHASE ITEMS Package State Update Phase 1/1 Image State Update Phase 2/2 PHASE ITEMS Reading Existing Index 8/8 Indexing Packages 1/1 A clone of solaris-1 exists and has been updated and activated. On the next boot the Boot Environment gcc-be will be mounted on '/'. Reboot when ready to switch to this updated BE.
切记,每个程序包操作都将自动创建一个文件系统的 ZFS 快照,以便在操作失败的情况下还原。由于 ZFS 快照和克隆(或引导环境)几乎为零开销,建议管理员将其作为管理系统的日常最佳实践的一部分。
每个软件包由 FMRI(故障管理资源标识符)唯一描述,FMRI 用于定义软件包的名称、版本和发布者。我们在清单 1 (pkg install -nv gcc-3
) 中已经见到 FMRI 的一部分。在本例中,完整的 FMRI 是 pkg://solaris/developer/gcc-3@3.4.3,5.11-0.175.0.0.0.1.530:201111012T111222Z
。表 2 描述了此 FMRI 的不同段。
FMRI 段 | 说明 |
---|---|
pkg:// | FMRI 方案 |
solaris | 发布者 |
developer/gcc-3 | 软件包名称 |
3.4.3 | 组件版本 |
5.11 | 内部版本 |
0.175.0.0.0.1.530 | 分支版本 |
20111012T111222Z | 软件包时间戳(ISO 8601 UTC 格式) |
组件、内部版本和分支版本都是点分隔的整数序列。
如果有别的软件包也与 gcc-3
相匹配,可能需要使用以下任何命令(以递增限定顺序显示)进一步限定要安装的程序包:
# pkg install developer/gcc-3 # pkg install pkg:/developer/gcc-3 # pkg install pkg://solaris/developer/gcc-3 # pkg install pkg://solaris/developer/gcc-3@3.4.3 # pkg install pkg://solaris/developer/gcc-3@3.4.3,5.11-0.175.0.0.0.1.530:20111012T111222Z
对于所有程序包命令,均可使用完全定义的软件包 FMRI。
使用 pkg uninstall
命令,卸载软件包就像安装一样简单,如清单 4 所示。
# pkg uninstall gcc-3 Packages to remove: 1 Create boot environment: No Create backup boot environment: No Services to restart: 1 PHASE ACTIONS Removal Phase 408/408 PHASE ITEMS Package State Update Phase 1/1 Package Cache Update Phase 1/1 Image State Update Phase 2/2 PHASE ITEMS Reading Existing Index 8/8 Indexing Packages 1/1
卸载软件包不会递归卸载其任何软件包依赖项。
还可在任何非全局区域中安装和卸载软件。根据要安装的软件包类型的不同,可能需要先在全局区域中进行安装,内核组件和驱动程序通常就是这种情况。
IPS 的一个独特功能就是确保系统上的所有软件版本(无论它们是安装在全局区域还是非全局区域中)均保持一致以确保系统正常工作。全局区域中配置的所有软件包发布者会在所有非全局区域中自动公开为系统发布者,从而允许各非全局区域管理员独立于其他非全局区域安装附加软件包。系统发布者是不可配置的,并且在安装软件包时对其进行缓存,这样,如果其他非全局区域也需要该软件,则无需重新从网络下载。管理员还可以选择在任何非全局区域中配置新的发布者。
确定在给定系统上安装哪些软件包、确定这些程序包是否有任何可用更新,以及获取有关这些程序包本身的详细信息,这一切都可通过 IPS 轻松实现。要列出系统上已安装的软件包,请使用 pkg list
命令:
# pkg list NAME (PUBLISHER) VERSION IFO SUNWcs 0.5.11-0.168 i-- SUNWcsd 0.5.11-0.168 i-- archiver/gnu-tar 1.26-0.168 i-- audio/audio-utilities 0.5.11-0.168 i-- auto_install 0.1-0.166 i-- benchmark/x11perf 1.5.3-0.168 i-- ....
该命令的输出列出了软件包名称、软件包版本和软件包的状态。
I
列中的 i
指示软件包已安装。F
列中的 f
指示该软件包被冻结。O
列中的 o
指示软件包的该版本已废弃(意味着无法安装,如果升级到该版本,则将被删除),O
列中的 r
指示该软件包现在以新的名称提供。IPS 管理指南中介绍了软件包的冻结、废弃和重命名。
我们可以使用清单 5 中所示的 pkg info
命令进一步列出有关特定软件包的一些信息。
# pkg info gzip Name: compress/gzip Summary: GNU Zip (gzip) Description: The GNU Zip (gzip) compression utility Category: Applications/Systems Utilities State: Installed Publisher: solaris Version: 1.3.5 Build Release: 5.11 Branch: 0.175.0.0.0.1.530 Packaging Date: Wed Oct 12 10:44:51 2011 Size: 215.32 kB FMRI: pkg://solaris/compress/gzip@1.3.5,5.11-0.175.0.0.0.1.530:20111012T104451Z
默认情况下,此命令仅列出系统上已安装软件包的有关信息;不过,可以使用类似的命令查询已卸载软件包的有关信息,如清单 6 所示。
清单 6:列出已卸载软件包的有关信息# pkg info -r php-52 Name: web/php-52 Summary: PHP Server 5.2 Description: PHP Server 5.2 Category: Development/PHP State: Not Installed Publisher: solaris Version: 5.2.17 Build Release: 5.11 Branch: 0.175.0.0.0.1.530 Packaging Date: Wed Oct 12 14:01:41 2011 Size: 44.47 MB FMRI: pkg://solaris/web/php-52@5.2.17,5.11-0.175.0.0.0.1.530:20111012T140141Z
可以使用 pkg contents
命令进一步轻松列出给定软件包的内容,如清单 7 所示。
# pkg contents gzip PATH usr usr/bin usr/bin/gunzip usr/bin/gzcat usr/bin/gzcmp usr/bin/gzdiff usr/bin/gzegrep usr/bin/gzexe usr/bin/gzfgrep usr/bin/gzforce usr/bin/gzgrep ....
IPS 的一个巨大优势在于能够连接到软件包信息库并轻松搜索特定内容(如某个特定文件所属软件包的名称)。最简单的形式是可以使用 pkg search
命令搜索目前已安装的任何软件包以及已配置发布者中的任何软件包,如下所示:
# pkg search stdio.h INDEX ACTION VALUE PACKAGE basename file usr/include/ast/stdio.h pkg:/shell/ksh@0.5.11-0.175.0.0.0.1.0 basename file usr/gcc/4.5/lib/gcc/i386-pc-solaris2.11/4.5.2/include/ssp/stdio.h pkg:/developer/gcc-45@4.5.2-0.175.0.0.0.1.530 basename file usr/gcc/4.5/lib/gcc/sparc-sun-solaris2.11/4.5.2/include/ssp/stdio.h pkg:/developer/gcc-45@4.5.2-0.175.0.0.0.1.530 basename file usr/include/stdio.h pkg:/system/header@0.5.11-0.175.0.0.0.1.0
在结果中可以看到,有 4 个文件符合搜索条件,分别来自 3 个不同软件包。与许多其他 IPS 命令一样,输出的类型可以使用具有相应值的 pkg search -o
命令进行控制。这将在另一篇文章中详细介绍。
现在,我们已经介绍了配置发布者、安装和卸载软件包以及搜索软件包内容的基础知识,下面来看看如何一步更新系统。可以使用 pkg update -nv
命令执行空运行,也可以使用 pkg update
命令实际更新系统软件。
# pkg update Packages to update: 28 Create boot environment: Yes Create backup boot environment: No DOWNLOAD PKGS FILES XFER (MB) Completed 28/28 389/389 28.0/28.0 PHASE ACTIONS Removal Phase 84/84 Install Phase 100/100 Update Phase 1950/1950 PHASE ITEMS Package State Update Phase 56/56 Package Cache Update Phase 28/28 Image State Update Phase 2/2 PHASE ITEMS Reading Existing Index 8/8 Indexing Packages 28/28 A clone of solaris exists and has been updated and activated. On the next boot the Boot Environment solaris-2 will be mounted on '/'. Reboot when ready to switch to this updated BE.
如果更新的是内核组件,此命令通常将创建一个新的引导环境,如清单 8 中的情况。然后对新的引导环境应用更改,该引导环境将在下次系统重新启动时被激活。如果更新导致不良结果,您可以在新旧引导环境之间轻松切换。
还有一点要特别注意,更新操作取决于系统上存在哪些现有软件包依赖项。例如,管理员可能因为业务关键应用程序始终需要某个软件包的特定版本而选择冻结该软件包的内容。如果是这种情况,pkg update
可能不尽如预期,或者可能未对系统应用任何更新,即使您知道有更新的软件包版本可用。
应用系统更新时,还将自动更新所有非全局区域。IPS 会依次递归更新每个非全局区域,使其与全局区域中存在的同一软件版本集相匹配。如果需要,更新还将为每个非全局区域创建新的区域引导环境。
Oracle Solaris 11 映像包管理系统是软件管理领域的一项重大进展,为系统更新提供集成的用户体验并提高安全性。IPS 通过提供改进的自动化和审计将管理 Oracle Solaris 的许多复杂性消弥于无形,从而允许管理员跨操作系统的虚拟和非虚拟实例灵活管理多个应用程序环境。
修订版 1.0,2011 年 10 月 27 日 |