文章
服务器与存储管理
作者:Bart Smaalders 和 Alta Elstad
2013 年 12 月发布
Oracle Solaris 11 映像包管理系统提供了各种方法来控制服务器可以升级到的操作系统版本。一种办法是提供一个自定义的 incorporation 软件包。
|
incorporation 软件包 指定可以安装的其他软件包的版本。incorporation 软件包可确保您安装该 incorporation 软件包的 incorporate 依赖软件包时,只能安装依赖软件包的规定版本。您可以创建自己的自定义 incorporation 软件包来指定想要的约束。使用自定义 incorporation 控制可安装的软件版本使您能够轻松维护不同计算机上 Oracle Solaris 的不同版本,而无需维护多个软件包信息库。每个映像可以安装自定义升级控制 incorporation 软件包的不同版本。所有系统共享同一个软件包信息库,其中包含任何系统需要的所有软件版本。
在本文示例中,使用 Oracle Solaris 11.1 新安装了一个系统。solaris 发布者源点是 Oracle Solaris 支持信息库,其中包含 Oracle Solaris 11.1 发布以来的许多更新。示例公司中的 IT 部门不符合最新支持更新的要求,他们希望限制管理员只升级适合其环境的最新更新,而不是软件包信息库中可用的最新更新。
映像中可安装的核心操作系统软件包的版本由 pkg:/entire incorporation 软件包控制。要控制系统升级,请创建一个软件包,指定特定版本的 pkg:/entire 软件包作为 incorporate 依赖项。
以下示例显示控制可安装的 pkg:/entire 软件包版本的自定义 incorporation 软件包的一个名为 upgradectrl.p5m 的清单。下面介绍该清单中的一些设置。
set name=pkg.fmri value=upgradectrl@1.0 set name=pkg.summary value="Incorporation to constrain the version of the OS" set name=pkg.description value="This package controls the version of \ pkg://solaris/entire that can be installed." set name=info.classification value="org.opensolaris.category.2008:Meta Packages/Incorporations" set name=pkg.depend.install-hold value=core-os set name=variant.opensolaris.zone value=global value=nonglobal set name=variant.arch value=sparc value=i386 depend fmri=feature/package/dependency/self type=parent variant.opensolaris.zone=nonglobal depend fmri=pkg://solaris/entire type=require depend fmri=pkg://solaris/entire@0.5.11,5.11-0.175.1.0 type=incorporate
upgradectrl 软件包,将同时自动更新 pkg:/entire 软件包。parent 依赖项的说明。pkg://solaris/entire 软件包已经安装或可以在同一操作中安装时,才能安装 upgradectrl 软件包。pkg://solaris/entire 软件包。根据指定的小数位精度的不同,可能有多个版本满足 incorporate 依赖项。在本示例中,0.175.1.0 指定 Oracle Solaris 11.1 SRU 0。此升级控制软件包将系统保持在新安装的 Oracle Solaris 11.1 版,不再安装支持更新。但此升级控制软件包将允许更新不受 pkg:/entire incorporation 约束的软件包。将 upgradectrl 软件包发布到基于本地文件的信息库。该信息库用于开发和测试这个新软件包。如果您创建一个通用的信息库,应包括额外的步骤,如为该信息库创建一个单独的文件系统。有关如何创建通用软件包信息库的信息,请参见复制和创建软件包信息库。
在系统上创建软件包开发信息库。有关 pkgrepo 命令的详细信息,请参见 pkgrepo(1) 手册页面。
$ pkgrepo create myrepo
设置该信息库的默认发布者。默认发布者是信息库的 publisher/prefix 属性的值。
$ pkgrepo -s myrepo set publisher/prefix=site
将 upgradectrl 软件包发布到开发信息库。
$ pkgsend -s myrepo publish upgradectrl.p5m pkg://site/upgradectrl@1.0,5.11:20131120T010105Z PUBLISHED
注意,信息库的默认发布者已应用于软件包 FMRI。
检查信息库,确认软件包已经发布。
$ pkgrepo -s myrepo list PUBLISHER NAME O VERSION site upgradectrl 1.0,5.11:20131120T010105Z $ pkg list -vg myrepo FMRI IFO pkg://site/upgradectrl@1.0,5.11:20131120T010105Z ---
将软件包交付到共享位置中一个单独 ZFS 文件系统中的本地信息库。
$ pkgrecv -s myrepo -d /export/IPSpkgrepos/Solaris upgradectrl Processing packages for publisher site ... Retrieving and evaluating 1 package(s)... PROCESS ITEMS GET (MB) SEND (MB) Completed 1/1 0.0/0.0 0.0/0.0
验证信息库中的软件包及其包含的 pkg:/entire 版本。
$ pkg info -g /export/IPSpkgrepos/Solaris upgradectrl
Name: upgradectrl
Summary: Incorporation to constrain the version of the OS
Description: This package controls the version of pkg://solaris/entire that
can be installed.
Category: Meta Packages/Incorporations
State: Not installed
Publisher: site
Version: 1.0
Build Release: 5.11
Branch: None
Packaging Date: November 20, 2013 01:01:05 AM
Size: 0.00 B
FMRI: pkg://site/upgradectrl@1.0,5.11:20131120T010105Z
$ pkg contents -Hro fmri -t depend -a type=incorporate upgradectrl
pkg://solaris/entire@0.5.11,5.11-0.175.1.0
有关如何创建和交付映像包管理系统软件包的详细信息,请参见使用映像包管理系统打包和交付软件中的“创建和发布软件包”。
设置 site 发布者的来源。
$ pkg set-publisher -g /export/IPSpkgrepos/Solaris site $ pkg publisher PUBLISHER TYPE STATUS P LOCATION solaris origin online F https://pkg.oracle.com/solaris/support/ site origin online F file:///export/IPSpkgrepos/Solaris/
安装升级控制软件包。在本例中,几乎不用做什么更改,因为安装的 pkg:/entire 版本与升级控制软件包包含的版本相同。
$ pkg list -v entire
FMRI IFO
pkg://solaris/entire@0.5.11,5.11-0.175.1.0.0.24.2:20120919T190135Z i--
$ zoneadm list
global
z1
$ pkg install upgradectrl
Packages to install: 1
Create boot environment: No
Create backup boot environment: No
Planning linked: 0/1 done; 1 working: zone:z1
Planning linked: 1/1 done
Downloading linked: 0/1 done; 1 working: zone:z1
Downloading linked: 1/1 done
PHASE ITEMS
Installing new actions 9/9
Updating package state database Done
Updating image state Done
Creating fast lookup database Done
Reading search index Done
Updating search index 1/1
Executing linked: 0/1 done; 1 working: zone:z1
Executing linked: 1/1 done
以下命令显示配置的 solaris 发布者提供的 pkg:/entire 版本比已安装版本高,但升级尝试受新安装的升级控制软件包控制。
$ pkg list -af entire NAME (PUBLISHER) VERSION IFO entire 0.5.11-0.175.1.13.0.6.0 --- entire 0.5.11-0.175.1.12.0.5.0 --- entire 0.5.11-0.175.1.11.0.4.0 --- entire 0.5.11-0.175.1.10.0.6.0 --- entire 0.5.11-0.175.1.10.0.5.0 --- ... $ pkg update pkg update: No solution was found to satisfy constraints Plan Creation: Package solver has not found a solution to update to latest available versions. This may indicate an overly constrained set of packages are installed. latest incorporations: ... Try specifying expected results to obtain more detailed error messages. $ pkg update -nv entire@0.5.11-0.175.1.13.0.6.0 pkg update: No matching version of entire can be installed: Reject: pkg://solaris/entire@0.5.11,5.11-0.175.1.13.0.6.0:20131108T211557Z Reason: This version is excluded by installed incorporation pkg://site/upgradectrl@1.0,5.11:20131120T010105Z
当您准备允许用户将其系统升级到新版本时,更新 upgradectrl.p5m 清单,并重新发布和重新交付新的升级控制软件包。在下面的清单中,更新了升级控制软件包的版本和 pkg:/entire incorporation 的版本。为了帮助用户,升级控制软件包的版本与 pkg:/entire 软件包的更新版本匹配。
set name=pkg.fmri value=upgradectrl@1.10 set name=pkg.summary value="Incorporation to constrain the version of the OS" set name=pkg.description value="This package controls the version of \ pkg://solaris/entire that can be installed." set name=info.classification value="org.opensolaris.category.2008:Meta Packages/Incorporations" set name=pkg.depend.install-hold value=core-os set name=variant.opensolaris.zone value=global value=nonglobal set name=variant.arch value=sparc value=i386 depend fmri=feature/package/dependency/self type=parent variant.opensolaris.zone=nonglobal depend fmri=pkg://solaris/entire type=require depend fmri=pkg://solaris/entire@0.5.11,5.11-0.175.1.10 type=incorporate
以下命令重新发布和重新交付升级控制软件包:
$ pkgsend -s myrepo publish upgradectrl.p5m pkg://site/upgradectrl@1.10,5.11:20131120T021902Z PUBLISHED $ pkgrepo -s myrepo list PUBLISHER NAME O VERSION site upgradectrl 1.10,5.11:20131120T021902Z site upgradectrl 1.0,5.11:20131120T010105Z $ pkgrecv -s myrepo -d /export/IPSpkgrepos/Solaris upgradectrl Processing packages for publisher site ... Retrieving and evaluating 1 package(s)... PROCESS ITEMS GET (MB) SEND (MB) Completed 1/1 0.0/0.0 0.0/0.0 $ pkg refresh site $ pkg list -af pkg://site/upgradectrl NAME (PUBLISHER) VERSION IFO upgradectrl (site) 1.10 --- upgradectrl (site) 1.0 i--
因为未指定软件包,以下 pkg update 命令将所有软件包更新到允许的最新可用版本。该命令更新到升级控制软件包的最新可用版本,这将升级映像,因为 upgradectrl 软件包中的 pkg.depend.install-hold 设置导致在更新 upgradectrl 软件包时更新 pkg:/entire 软件包。该映像升级到新 upgradectrl incorporation 中指定的 pkg:/entire incorporation 版本。
$ pkg update --be-name s11u1_10
Packages to remove: 1
Packages to update: 186
Mediators to change: 1
Create boot environment: Yes
Create backup boot environment: No
Planning linked: 0/1 done; 1 working: zone:z1
Linked image 'zone:z1' output:
| Packages to remove: 1
| Packages to install: 3
| Packages to update: 73
| Mediators to change: 1
| Services to change: 3
`
Planning linked: 1/1 done
DOWNLOAD PKGS FILES XFER (MB) SPEED
Completed 187/187 16139/16139 507.9/507.9 562k/s
Downloading linked: 0/1 done; 1 working: zone:z1
Downloading linked: 1/1 done
PHASE ITEMS
Removing old actions 1473/1473
Installing new actions 3451/3451
Updating modified actions 16378/16378
Updating package state database Done
Updating package cache 187/187
Updating image state Done
Creating fast lookup database Done
Reading search index Done
Building new search index 851/851
Executing linked: 0/1 done; 1 working: zone:z1
Executing linked: 1/1 done
A clone of s11u1_0 exists and has been updated and activated.
On the next boot the Boot Environment s11u1_10 will be
mounted on '/'. Reboot when ready to switch to this updated BE.
$ pkg list entire upgradectrl
NAME (PUBLISHER) VERSION IFO
entire 0.5.11-0.175.1.0.0.24.2 i--
upgradectrl (site) 1.0 i--
$ beadm mount s11u1_10 /mnt
$ pkg -R /mnt list entire upgradectrl
NAME (PUBLISHER) VERSION IFO
entire 0.5.11-0.175.1.10.0.6.0 i--
upgradectrl (site) 1.10 i--
$ beadm unmount s11u1_10
另请参见以下资源:
Bart Smaalders 是 Oracle Solaris 核心操作系统小组的一名高级工程师,他领导了映像包管理系统的开发。
Alta Elstad 是支持 Oracle Solaris 11 软件包的技术文档作家。
| 修订版 1.0,2013 年 12 月 6 日 |