場合によっては、許可される最新バージョンに更新したくないこともあります。このセクションでは、許可される最新バージョンより古いバージョンに更新する方法を説明します。
更新コマンドにバージョンを指定します。これは永続的な副作用のないもっとも単純な方法です。
更新コマンドを指定する前にバージョン制限を指定します。この方法では pkg freeze を使用するため、あとで新しいバージョンに更新する場合は必ず凍結を解除する必要があります。
カスタムの制約パッケージを使用します。これはもっともスケーラブルで制御可能であり、追跡可能な方法です。
許可される最新バージョンより古いバージョンに更新するための簡単な方法は、pkg update コマンドでパッケージ名 (バージョン文字列の部分を含む) を指定することです。次の例は、新しいバージョンが許可される場合でも、Oracle Solaris 11 11/11 SRU 13 に更新するために pkg:/entire 制約パッケージのバージョンを指定する方法を示しています。
$ pkg update -nv entire@0.5.11,5.11-0.175.0.13 '*' Packages to remove: 2 Packages to install: 1 Packages to update: 486 Estimated space available: 48.39 GB Estimated space to be consumed: 2.50 GB Create boot environment: Yes Activate boot environment: Yes Create backup boot environment: No Rebuild boot archive: Yes Changed packages: solaris ... entire 0.5.11,5.11-0.175.0.10.0.5.0:20120803T182627Z -> 0.5.11,5.11-0.175.0.13.0.4.0:20121106T194623Z ...
実際の更新を実行する前に、必ず -nv オプションを使用し、出力を確認してください。実際の更新を実行するときは、--be-name オプションを使用して、新しい BE にわかりやすい名前を付けます。
一部のインストール済みパッケージは、entire 制約パッケージによって制約されたパッケージに依存しない場合もあります。これらのパッケージは、entire パッケージだけを更新しても更新されません。これらのパッケージを同じ pkg update コマンドに名前で追加するか、entire@version に加えて * を指定できます。
任意の Oracle Solaris 11.2 バージョンへの更新は許可するが、Oracle Solaris 11.3 への更新を許可しない場合は、次のコマンドに示すように pkg:/entire 制約パッケージを凍結できます。0.175.2 を指定すると、entire パッケージを 0.175.3 にではなく、たとえば 0.175.2.15 に更新できることを示します。
$ pkg freeze -c "Keep this image at 11.2." entire@0.5.11,5.11-0.175.2 entire was frozen at 0.5.11,5.11-0.175.2 $ pkg freeze NAME VERSION DATE COMMENT entire 0.5.11,5.11-0.175.2 30 Jan 2014 15:50:01 PST Keep this image at 11.2. $ pkg list entire NAME (PUBLISHER) VERSION IFO entire 0.5.11,5.11-0.175.2.10.0.5.0 if-
パッケージの凍結の詳細は、Locking Packages to a Specified Versionを参照してください。
Oracle Solaris 11.2 を越えて更新するには、pkg unfreeze entire を実行するか、entire をより新しいバージョンで凍結する必要があります。
前のセクションで示した pkg freeze コマンドを使用するのと同じように、インストール可能な pkg:/entire のバージョンを制約するパッケージをインストールできます。制約パッケージと、Oracle Solaris でのその使用についての詳細は、Constraint Packagesを参照してください。
Oracle Solaris 11.3 には、pkg:/entire を Oracle Solaris 11.3 の任意のバージョンに制約するパッケージが用意されています。
$ pkg list -s solaris-11.3 NAME (PUBLISHER) SUMMARY release/constraint/solaris-11.3 Constraint Package for Oracle Solaris 11.3
このパッケージの内容は、このパッケージをインストールした場合、システムを Oracle Solaris 11.3 SRU など任意の Oracle Solaris 11.3 リリース (entire@0.5.11-0.175.3) には更新できるが、より新しい Oracle Solaris 11.n リリースには更新できないことを示しています。
$ pkg contents -m solaris-11.3 set name=pkg.fmri value=pkg://solaris/release/constraint/solaris-11.3@0,5.11:20161021T222558Z set name=pkg.summary value="Constraint Package for Oracle Solaris 11.3" set name=variant.arch value=sparc value=i386 set name=pkg.depend.install-hold value=core-os depend fmri=entire@0.5.11-0.175.3 type=incorporate depend fmri=entire type=require
solaris-11.3 パッケージをインストールしたあとで、入手可能な最新の Oracle Solaris 11.3 リリースがすでにインストールされているときに更新を試みると、使用可能な更新が存在しないというメッセージを受け取ります。
solaris-11.3 パッケージをインストールしたあとで、より新しい Oracle Solaris 11.n リリースへの更新を試みると、システムが過度に制約されているというメッセージを受け取ります。より新しい Oracle Solaris 11.n リリースに更新するには、まず solaris-11.3 制約パッケージをアンインストールする必要があります。
前のセクションで示した Oracle Solaris 制約パッケージを使用するのと同じように、独自のカスタム制約パッケージを作成して、必要な制約を指定できます。Oracle Solaris パッケージ内で使用可能な制約とは異なる制約を指定する場合もあります。
制約パッケージを作成し、ローカルの IPS パッケージリポジトリまたはパッケージアーカイブファイルからパッケージをインストールします。
制約を変更するには、カスタム制約パッケージを変更および再提供し、pkg update を使用して、新しい制約パッケージをインストールします。
カスタム制約パッケージを使用して、インストール可能なソフトウェアのバージョンを制御することにより、複数のパッケージリポジトリを維持しなくても、異なるシステム上でさまざまなバージョンの Oracle Solaris を容易に維持できます。各システムに、異なるバージョンのカスタム更新制御パッケージをインストールできます。それぞれのシステムで必要なすべてのソフトウェアバージョンを格納する同一のパッケージリポジトリが、すべてのシステムで共有されます。
イメージにインストール可能なコアのオペレーティングシステムパッケージのバージョンは、pkg:/entire 制約パッケージによって制御されます。システムのアップグレードを制御するには、特定バージョンの entire パッケージを incorporate 依存関係として指定するパッケージを作成します。
次の例は、インストール可能な pkg:/entire パッケージのバージョンを制御するカスタム制約パッケージに対する 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
ユーザーが pkg update upgradectrl コマンドを入力すると、pkg:/entire パッケージも自動的に更新されます。
このパッケージは、大域ゾーンと非大域ゾーンの両方にインストールできます。parent 依存関係の説明も参照してください。
このパッケージは、SPARC と x86 の両方のシステムにインストールできます。
このパッケージは、大域ゾーンにすでにインストール済みの場合に限り、非大域ゾーンにインストールできます。
upgradectrl パッケージは、pkg://solaris/entire パッケージがすでにインストールされているか、これと同じ操作でインストール可能である場合に限りインストールできます。
pkg://solaris/entire パッケージを指定のバージョンでインストールする必要があります。指定された精度の桁数によっては、複数のバージョンが incorporate 依存関係を満たす場合があります。この例では、0.175.1.0 は Oracle Solaris 11.1 SRU 0 を指定します。このアップグレード制御パッケージは、サポート更新のない Oracle Solaris 11.1 にシステムを維持します。ただし、このアップグレード制御パッケージは、pkg:/entire 制約パッケージによる制約を受けないパッケージの更新を許可します。
upgradectrl パッケージをファイルベースのローカルリポジトリに公開します。このリポジトリは、この新しいパッケージを開発およびテストするためのものです。一般的な用途のリポジトリを作成する場合、リポジトリ用の別個のファイルシステムを作成するなどの追加のステップを含める必要があります。一般的な用途のパッケージリポジトリを作成することについては、Copying and Creating Package Repositories in Oracle Solaris 11.3を参照してください。
システム上にパッケージ開発リポジトリを作成します。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:20131104T072336Z PUBLISHED
リポジトリのデフォルトパブリッシャーが、パッケージ FMRI に適用されていることに注意してください。
リポジトリを調べて、パッケージが公開されたことを確認します。
$ pkgrepo -s myrepo list PUBLISHER NAME O VERSION site upgradectrl 1.0,5.11:20131104T072336Z $ pkg list -vg myrepo FMRI IFO pkg://site/upgradectrl@1.0,5.11:20131104T072336Z ---
O 列の値は、パッケージが廃止されている (o) か、または名前が変更されている (r) かを示します。
パッケージを、共有されている場所にある別個の ZFS ファイルシステム内のローカルリポジトリに提供します。
$ pkgrecv -s myrepo -d /var/share/pkgrepos/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
リポジトリ内のパッケージと、パッケージが incorporation で指定する pkg:/entire のバージョンを確認します。
$ pkg info -g /var/share/pkgrepos/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
IPS パッケージの作成と提供についての詳細は、Creating and Publishing a Package in Packaging and Delivering Software With the Image Packaging System in Oracle Solaris 11.3を参照してください。
site パブリッシャーの起点を設定します。システムリポジトリはこの情報で自動的に更新されるため、非大域ゾーンでは site パブリッシャーからパッケージにアクセスできるようになります。
$ pkg set-publisher -g /var/share/pkgrepos/solaris site $ pkg publisher PUBLISHER TYPE STATUS P LOCATION solaris origin online F https://pkg.oracle.com/solaris/support/ site origin online F file:///var/share/pkgrepos/solaris/
パッケージをインストールします。このケースでは、インストール済みの pkg:/entire のバージョンが、アップグレード制御パッケージによって incorporation 指定されたバージョンと同じであるため、変更はほとんどありません。パッケージは非大域ゾーンにもインストールされることに注意してください。
$ 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 制約パッケージのバージョンが更新されています。ユーザーへの支援として、アップグレード制御パッケージのバージョン 1.10 は、entire パッケージの更新済みバージョン 0.175.1.10 に対応するように設定されます。
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 /var/share/pkgrepos/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.
現在の BE が変更されていないこと、および新しい 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