Image Packaging Systemを使用したサーバー構成の制御

Bart Smaalders、Alta Elstad著

この記事では、パッケージ・パブリッシャにより新しいバージョンが提供されても、規定のバージョンよりも新しいバージョンにシステムをアップグレードできないように、Oracle Solaris 11システムのアップグレードを制御する方法について説明します。


2013年12月公開


Oracle Solaris 11 Image Packaging Systemは、サーバーのアップロードが可能なオペレーティング・システムのバージョンを制御するための各種手法を提供します。その1つの手法が、カスタム結合パッケージの提供です。

この記事についてコメントする場合は、リンクをFacebookのOTN Garageのページに投稿してください。同様の記事を共有する場合は、FacebookまたはTwitterに投稿してください。みんなで議論しましょう。

結合パッケージとは、インストール可能な他のパッケージのバージョンを指定するパッケージのことです。結合パッケージによって、その結合パッケージのincorporate依存関係パッケージをインストールする場合に、依存関係のあるパッケージの規定バージョンのみがインストール可能であるということが保証されます。管理者は独自のカスタム結合パッケージを作成して、必要な制約を指定できます。カスタム結合機能を使用してインストール可能なソフトウェアのバージョンを制御することで、複数のパッケージ・リポジトリを維持管理しなくても、異なるマシンにインストールされたさまざまなバージョンのOracle Solarisを容易に維持管理できます。各イメージにより、異なるバージョンのアップグレード制御用のカスタム結合パッケージをインストールできます。すべてのシステムが、いずれかのシステムで必要となるソフトウェアに関するすべてのバージョンを格納した同じパッケージ・リポジトリを共有します。

この記事の例では、Oracle Solaris 11.1が新たにインストールされたシステムを使用します。solarisパブリッシャの元の場所は、Oracle Solarisサポート・リポジトリです。このリポジトリにはOracle Solaris 11.1のリリース以降の多数の更新プログラムが含まれます。この例の企業のIT部門は最新のサポート更新プログラムについてまだ認定しておらず、パッケージ・リポジトリから入手可能な最新の更新プログラムではなく、同社の環境で認定されている最新の更新プログラムにのみ管理者がアップグレードできるように制限をかけようとしています。

カスタム結合パッケージの作成

イメージ内にインストールできるコア・オペレーティング・システム・パッケージのバージョンは、pkg:/entire結合パッケージによって制御します。システムのアップグレードを制御するには、pkg:/entireパッケージの特定のバージョンをincorporate依存関係として指定するパッケージを作成します。

次の例は、あるカスタム結合パッケージのマニフェスト(upgradectrl.p5m)です。このカスタム結合パッケージは、インストール可能なpkg:/entireパッケージのバージョンを制御します。このマニフェストの設定の一部について、下で説明します。


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

  • pkg.depend.install-hold:この設定により、ユーザーがupgradectrlパッケージを更新する場合に、pkg:/entireパッケージも自動的に更新されます。
  • variant.opensolaris.zone:この設定により、このパッケージを大域ゾーンと非大域ゾーンの両方にインストールできるようになります。parent依存関係の説明も参照してください。
  • variant.arch:この設定により、このパッケージをSPARCシステムとx86システムの両方にインストールできるようになります。
  • parent dependency:このパッケージは、大域ゾーンにすでにインストールされている場合にのみ、非大域ゾーンにインストールできます。
  • require dependencypkg://solaris/entireパッケージがすでにインストールされているか、この同じ操作でインストールできる場合にのみ、upgradectrlパッケージをインストールできます。
  • incorporate dependency:指定したバージョンのpkg://solaris/entireパッケージをインストールする必要があります。指定しているバージョン精度の桁数によっては、複数のバージョンがincorporate依存関係を満たすこともあります。この例では、0.175.1.0はOracle Solaris 11.1 SRU 0を表します。このアップグレード制御パッケージによって、システムは新たにインストールしたOracle Solaris 11.1バージョンのまま維持され、サポート更新プログラムは含まれません。ただし、このアップグレード制御パッケージによって、pkg:/entire結合による制約を受けないパッケージの更新が可能です。

upgradectrlパッケージをローカルのファイルベース・リポジトリにパブリッシュします。このリポジトリは、この新しいパッケージの開発およびテストに使用します。汎用のリポジトリを作成する場合は、リポジトリ用の個別のファイル・システムを作成するなどの追加手順を実行することをお勧めします。汎用のパッケージ・リポジトリの作成について詳しくは、Oracle Solaris 11.1パッケージ・リポジトリのコピーおよび作成を参照してください。

システム上に開発用のパッケージ・リポジトリを作成します。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

Image Packaging Systemパッケージの作成と送信の詳細については、Oacle Solaris 11.1でのImage Packaging Systemを使用したソフトウェアのパッケージ化および配布の"パッケージの作成および発行"の項を参照してください。

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

次の一連のコマンドは、インストール済みのバージョンよりも新しいpkg:/entireのバージョンを構成済みのsolarisパブリッシャから入手できるけれども、アップグレードができるかどうかは新たにインストールしたアップグレード制御パッケージによって制御されることを示しています。

$ 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結合パッケージのバージョンが更新されます。補足情報として、アップグレード制御パッケージのバージョンは、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結合に指定されたpkg:/entire結合のバージョンにアップグレードされます。


$ 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 Core OSグループのシニア・エンジニアであり、Image Packaging Systemの開発リーダーです。

Alta Elstadは、Oracle Solaris 11のパッケージングをサポートするテクニカル・ライターです。

リビジョン1.0、2013年12月06日

オラクルの最新情報をフォロー:
ブログ | Facebook | Twitter | YouTube

false