この付録では、パッケージをインストールまたは更新する際に見られることがある次のようなエラーを処理する方法を示します。
パッケージをインストールできない
制約を満たすことができない
この付録では、まず、トラブルシューティングを始めるときに最初にチェックすべき情報について説明します。これらの推奨事項に従えば、大幅に時間を節約できます。
この付録では、パフォーマンスを向上し、格納されるメタデータを最小化するためのヒントも示します。
インストールするパッケージが構成済みのパブリッシャーから入手可能で、このイメージにインストールできるかどうかを確認します。このチェックを実行するには、次の情報が必要になります。
インストールするパッケージが構成済みのパブリッシャーから入手可能かどうかを確認するには、インストールするパッケージの名前を pkg list -af コマンドの引数として指定します。このイメージに構成されているパブリッシャーの起点の情報が必要です。pkg:/entire パッケージの更新が必要な場合もあります。パブリッシャーの起点の変更が必要な場合もあります。
このイメージにインストールされている pkg:/entire パッケージのバージョン。
$ pkg list -v entire
パッケージのインストールにおけるほとんどすべての問題について、次の 2 つの確認を最初に行う必要があります。
インストールされている pkg:/entire 制約パッケージのバージョンを確認します。
パッケージパブリッシャーの起点を確認します。
必要なパッケージが構成済みのパブリッシャーから入手可能であることが判別できたら、インストールの進捗に応じて次のステップを使用します。
インストールまたは更新を行うときは常に -nv オプションを使用して、行われる変更内容 (どのパッケージのどのバージョンがインストールまたは更新されるのかや、新しい BE が作成されるかどうかなど) を確認してください。-v オプションは、この特定のインストールまたは更新操作に適用されるリリースノートも示します。
さらに詳細なエラーメッセージを受け取るには、インストールするパッケージの FMRI を、バージョンおよびパブリッシャーも含めて詳しく指定します。
更新する場合、システムに現在インストールされているパッケージを提供するパッケージリポジトリにシステムがアクセスできる必要があります。たとえば、Oracle Solaris 11.2 から Oracle Solaris 11.3 に更新する場合は、solaris パブリッシャーに、インストールされている Oracle Solaris 11.2 パッケージと目的の Oracle Solaris 11.3 パッケージの両方へのアクセスが構成されている必要があります。パッケージが ha-cluster や solarisstudio などの別のパブリッシャーからインストールされている場合は、それらのパブリッシャーにも現在インストールされているパッケージに加えて目的の新しいパッケージへのアクセスが構成されている必要があります。
ほとんどの更新エラーの原因は不完全なパッケージリポジトリです。Best Practices for Creating and Using Local IPS Package Repositories in Copying and Creating Package Repositories in Oracle Solaris 11.3を参照してください。
IPS パッケージのバージョン管理および 2 つの異なるパッケージのバージョンの比較方法について理解することは、多くの場合、パッケージのインストールおよび更新の問題のトラブルシューティングのために非常に重要です。詳細については、Fault Management Resource IdentifiersおよびPackage Version in Packaging and Delivering Software With the Image Packaging System in Oracle Solaris 11.3を参照してください。
現在インストールされている pkg:/entire 制約パッケージのバージョンを確認するには、pkg info または pkg list コマンドを使用します。
$ pkg list -Hv entire pkg://solaris/entire@0.5.11,5.11-0.175.2.8.0.5.0:20150325T200338Z i--
この pkg:/entire 制約パッケージのバージョンは、このシステムで Oracle Solaris 11.2 SRU 8.5 が実行されていることを示しています。
pkg:/entire 制約パッケージは、使用中のサポート可能なイメージを容易に維持できるようにするために、ほかの多くのパッケージのバージョンを制約します。制約パッケージによって制約されるパッケージの詳細は、Constraint Packagesを参照してください。
pkg:/entire 制約パッケージによって制約されているパッケージを直接インストールまたは更新することはできません。pkg:/entire によって制約されているパッケージをインストールまたは更新するには、pkg:/entire パッケージを更新する必要があります。詳細は、Cannot Satisfy Constraintsを参照してください。場合によっては、Updating a Package Constrained by a Constraint Packageに示すように制約を削除できます。
パッケージパブリッシャーの起点を確認するには、pkg publisher コマンドを使用します。
$ pkg publisher PUBLISHER TYPE STATUS P LOCATION solaris origin online F http://pkg.oracle.com/solaris/release/
セキュアな URI の場合、必要な鍵および証明書が正しくインストールされていることを確認し、パブリッシャーを構成するときに -k および -c オプションを使用します。
外部の場所へのプロキシがサイトで必要な場合、pkg set-publisher コマンドの --proxy オプションを使用して、そのプロキシを設定します。手順については、Specifying a Proxyを参照してください。
鍵、証明書、プロキシなどのパブリッシャーに関する詳細な情報を表示するには、pkg publisher publisher コマンドを使用します。
有効化されたパブリッシャーのいずれかの起点 URI にアクセスできない場合、必要な場所がアクセス可能であったとしても、インストールまたは更新操作は失敗します。場所にアクセスできない原因となっている問題を修復できない場合、pkg set-publisher -G を使用してアクセスできない起点を削除するか、pkg set-publisher --disable を使用して、そのパブリッシャーを無効にすることができます。このパブリッシャーが不要になった場合、pkg unset-publisher を使用してパブリッシャーを削除します。
パッケージパブリッシャーの起点に、必要なパッケージが含まれていることを確認します。たとえば、solaris パブリッシャーの起点が公開リリースリポジトリに設定されている場合、サポートリポジトリからのみ利用可能なバージョンにパッケージを更新することはできません。
インストール済みのパッケージを更新したり、インストール済みパッケージに依存するパッケージをインストールしたり、または非大域ゾーンをインストールしたりするには、パブリッシャーの起点として設定しているリポジトリが、イメージに現在インストールされているものと同じソフトウェアを最低限含んでいる必要があります。リポジトリには古いソフトウェアまたは新しいソフトウェアを含めることもできますが、イメージにインストールされているものと同じソフトウェアを含む必要があります。
インストール済みパッケージを確認するときは、pkgrepo list コマンドを使用し、pkg list コマンドを使用しないでください。pkg list コマンドは、インストール済みパッケージが構成済みのパブリッシャーの起点から使用可能でない場合でも、パッケージを常に表示します。
次のコマンドは、pkg:/entire のインストール済みバージョンがパブリッシャーの起点から使用できないため、指定されたリポジトリはこのイメージについて適切なパブリッシャーの起点ではないことを示しています。
$ pkg list entire NAME (PUBLISHER) VERSION IFO entire 0.5.11-0.175.2.8.0.5.0 i-- $ pkg publisher PUBLISHER TYPE STATUS P LOCATION solaris origin online F http://pkg.oracle.com/solaris/release/ $ pkgrepo list -Hs http://pkg.oracle.com/solaris/release entire@0.5.11-0.175.2.8.0.5.0 pkgrepo list: The following pattern(s) did not match any packages: entire@0.5.11-0.175.2.8.0.5.0
必要なパッケージが一覧表示されない場合、pkgrepo refresh コマンドをふたたび実行して、pkgrepo list コマンドを再試行してください。
次のコマンドは、pkg:/entire のインストール済みバージョンが、指定されたリポジトリから使用できることを示しています。
$ pkgrepo list -Hs /var/share/pkgrepos/solaris entire@0.5.11-0.175.2.8.0.5.0 solaris entire 0.5.11,5.11-0.175.2.8.0.5.0:20150325T200338Z
必要なパッケージが構成済みのパブリッシャーから使用できないが、別のリポジトリの起点から使用できる場合、次のいずれかのアクションを実行します。
solaris パブリッシャーについてこの起点を追加するには、pkg set-publisher コマンドの -g オプションを使用します。
solaris パブリッシャーについての起点を変更するには、pkg set-publisher コマンドの -g および -G オプションを使用します。
必要なパッケージが別のパブリッシャーから提供される場合、pkg set-publisher コマンドを使用して、そのパブリッシャーを追加します。
検索するリポジトリのリストの最後にリポジトリを一時的に追加するには、インストールコマンド (install、uninstall、update、change-variant、および change-facet) の -g オプションを使用します。
必要なパッケージを含めるには、パッケージリポジトリを更新します。Best Practices for Creating and Using Local IPS Package Repositories in Copying and Creating Package Repositories in Oracle Solaris 11.3を参照してください。
インストールするパッケージが構成済みのパブリッシャーから入手可能かどうかを確認するには、次のコマンドを使用します。パッケージを更新する場合、現在インストールされているパッケージのバージョンと、更新後のバージョンの両方が使用可能である必要があります。
$ pkg list -af package
必要なパッケージが一覧表示されない場合、pkg refresh コマンドをふたたび実行して、pkg list コマンドを再試行してください。
引き続き必要なパッケージがリストされていない場合は、新しいパブリッシャーまたは新しいパブリッシャー起点を追加するか、パッケージリポジトリを更新します。
-af オプションを使用したときに、必要なパッケージバージョンが一覧表示された場合、-f オプションを使用せずに同じコマンドをふたたび使用します。
$ pkg list -a package
必要なバージョンが依然として一覧表示される場合、このパッケージは制約を受けておらず、ほかのパッケージをインストールまたは更新しなくても、このパッケージをインストールできるはずです。
必要なバージョンが一覧表示されない場合、このバージョンは構成済みパブリッシャーから使用できますが、このイメージにインストール可能ではありません。パッケージがインストールできない理由として、次のことが考えられます。
パッケージがバリアントまたはファセットの設定によって制約されている。
パッケージのバージョンが、制約パッケージによって制約されている。制約するパッケージを更新したり、場合によっては制約を緩和したりできます。詳細は、Cannot Satisfy Constraintsを参照してください。
パッケージのバージョンが、凍結操作によって制約されている。pkg freeze コマンドを実行します。インストールする異なるバージョンのパッケージに対して require 依存関係を持つパッケージに凍結が適用されている可能性があり、両方のバージョンを同時にインストールすることはできません。
インストールまたは更新するパッケージを指定し、パブリッシャーを指定しない場合、パッケージ FMRI またはパターンに一致するパッケージを提供する、パブリッシャーの検索順序で最初のパブリッシャーがインストールソースとして使用されます。該当するパブリッシャーがこのイメージ内にインストール可能なパッケージのバージョンを提供しない場合、使用可能な別のパブリッシャーがこのイメージ内にインストール可能なパッケージのバージョンを提供したとしても、インストール操作は失敗します。この問題に対処するには次のいずれかのアクションを実行します。
パッケージ FMRI でパブリッシャーを指定します。たとえば、フルパッケージ名の前に pkg://solaris/ を指定します。
必要なパッケージバージョンを提供するパブリッシャーを検索順序の最初のパブリッシャーに設定するには、pkg set-publisher コマンドの -P オプションを使用します。
2 つのパブリッシャーが同じ名前を持つパッケージを提供しないようにしてください。この状況が発生した場合は、次のいずれかの処置を取ってください。
パブリッシャーの 1 つのパッケージのいずれかが不要になった場合は、そのパブリッシャーを無効にするか設定解除します。現在そのパブリッシャーのパッケージがインストールされている場合は、パブリッシャーを無効にするか設定解除する前にそれらをアンインストールします。
両方のパブリッシャーが必要な場合は、次のいずれかを実行します。
優先されないパブリッシャーが固定的ではない (--non-sticky) ことを確認し、インストールするパッケージを提供するパブリッシャーが同じ名前のパッケージを提供するほかのパブリッシャーの前に来るように、パブリッシャーの検索順序を設定します。
インストールするパッケージの完全な名前を、パブリッシャーを含めて指定します。
凍結またはバージョンロックされているパッケージがインストールまたは更新を妨げているかどうかを確認するには、pkg freeze および pkg facet コマンドを使用します。
パッケージ化された内容が変更されているかどうかを確認するには、pkg verify -v コマンドを使用します。見つかったエラーを修正するには、pkg fix コマンドを使用します。
インストールまたは更新を行うときは常に -nv オプションを使用して、行われる変更内容 (どのパッケージのどのバージョンがインストールまたは更新されるのかや、新しい BE が作成されるかどうかなど) を確認してください。-v オプションは、この特定のインストールまたは更新操作に適用されるリリースノートも示します。
-nv オプションを使用してもエラーメッセージを受け取らない場合は、-n オプションなしでコマンドを再度実行して、インストールまたは更新を実際に実行します。新しい BE 内でインストールを実行するか、新しい BE またはバックアップ BE がデフォルトで作成されない場合にバックアップ BE を作成するためのオプションを指定するかどうかを検討します。
エラーメッセージを受け取る場合は、次のアクションを行います。
問題の診断および修正に役立つ多くの情報を取得するために、パッケージ FMRI に多くのバージョンを指定します。
詳細オプション -v を指定します (-nvv など)。
pkg history コマンドを使用します。-l オプションによって、変更されたパッケージの完全な FMRI が表示されます。Viewing Operation Historyを参照してください。
インストールまたは更新する複数のパッケージを指定するか、更新操作でパッケージ指定を省略したとき、いずれかのパッケージをこのイメージにインストールできない場合はインストールまたは更新操作が失敗します。1 つのパッケージをインストールできない場合、パッケージは一切インストールされません。詳細は、インストールできないパッケージのみ指定し、そのパッケージの完全な FMRI を指定し、1 つ以上の -v オプションを指定して、コマンドをふたたび呼び出してください。