Go to main content
Oracle® Solaris 11.3 での Image Packaging System を使用したソフトウェアのパッケージ化と配布

印刷ビューの終了

更新: 2016 年 11 月
 
 

パッケージの変更が行われる方法

次の手順は、pkg が呼び出されて、イメージにインストールされているソフトウェアを変更するときに実行されます。

  • 入力にエラーがないか確認する

  • システムの終了状態を決定する

  • 基本的なチェックを実行する

  • ソルバーを実行する

  • ソルバーの結果を最適化する

  • アクションを評価する

  • 内容をダウンロードする

  • アクションを実行する

  • アクチュエータを処理する

これらの手順を大域ゾーンで実行するとき、pkg はシステム上のどの非大域ゾーンでも動作できます。たとえば、pkg は大域ゾーンと非大域ゾーンの間の依存関係が正しいことを確認し、内容をダウンロードして、非大域ゾーンに必要なアクションを実行します。ゾーンについては、非大域ゾーンの処理で詳しく説明しています。

入力にエラーがないか確認する

コマンド行に指定されたオプションについて基本的なエラーチェックが行われます。

システムの終了状態を決定する

システムの望ましい終了状態の記述が作成されます。イメージ内のすべてのパッケージを更新する場合、望ましい終了状態は「現在インストールされているすべてのパッケージ、またはそれらの新しいバージョン」のようなものになる可能性があります。パッケージを削除する場合、望ましい終了状態は「これを除く現在インストールされているすべてのパッケージ」となります。

IPS では、ユーザーがこの終了状態をどのようなものであると意図しているかを判断しようとします。場合によっては、IPS では終了状態がユーザーのリクエストしたものと一致していたとしても、その終了状態をユーザーの意図したものではないと判断することがあります。

トラブルシューティングの際は、できるだけ具体的にすることが最善です。次のコマンドは具体的ではありません。

$ pkg update

このコマンドが「このイメージに使用できる更新はありません」といったメッセージで失敗する場合は、次のコマンドのようなより具体的なコマンドを試すことをお勧めします。

$ pkg update "*@latest"

このコマンドでは、終了状態をより正確に定義しているため、より的を射たエラーメッセージが生成されます。

基本的なチェックを実行する

ソリューションが可能であることを確認するために、システムの望ましい終了状態がレビューされます。この基本的なレビュー中に、pkg はすべての依存関係の妥当なバージョンが存在すること、および目的のパッケージがお互いを除外していないことを確認します。

明らかなエラーが存在する場合、pkg は適切なエラーメッセージを出力して終了します。

ソルバーを実行する

ソルバーは、イメージ内の制約およびインストール用の新しいパッケージによって導入された制約を考慮に入れてインストール、更新、または削除できるパッケージを判断するために pkg(5) によって使用される演算処理エンジンの中核を成しています。

この問題は、ブール型の充足可能性問題の一例であり、SAT ソルバーによって解決できます。

すべてのパッケージの可能性のあるさまざまな選択肢がブール型変数に割り当てられ、それらのパッケージ間のすべての依存関係や必須パッケージなどが論理積正規形のブール式としてキャストされます。

生成された一連の式は MiniSAT に渡されます。MiniSAT がソリューションを 1 つも見つけられない場合は、エラー処理コードが、インストールされた一連のパッケージと試された操作を調べて、可能性のあるそれぞれの選択肢が除外された理由を出力します。

現在インストールされているパッケージのセットは要件を満たしており、ほかに満たしているセットがない場合、pkg は何もすることがないことを報告します。

前述のように、エラーメッセージの生成と具体性は pkg への入力によって決まります。pkg に発行されるコマンド内をできるだけ具体的にすると、もっとも役立つエラーメッセージが生成されます。

MiniSAT が可能性のあるソリューションを見つけた場合は、最適化フェーズが開始されます。

ソルバーの結果を最適化する

SAT ソルバーに対し、あるソリューションがほかのソリューションよりも望ましいと記述する方法はないため、最適化フェーズが必要になります。その代わりに、ソリューションが見つかると、IPS はその問題に制約を加えてあまり望ましくない選択肢を分離し、さらに現在のソリューションも分離します。その後、IPS は繰り返し MiniSAT を呼び出し、ソリューションがそれ以上見つからなくなるまで上記の操作を繰り返します。最後に成功したソリューションが最良のものとみなされます。

ソリューションを見つける難しさは、可能性のあるソリューションの数に比例します。望ましい結果についてより具体的にすると、ソリューションがより迅速に見つかります。

発生した問題をもっともよく満たす一連のパッケージ FMRI が見つかると、評価フェーズが開始されます。

アクションを評価する

評価フェーズでは、IPS はシステムに現在インストールされている、終了状態を含むパッケージを比較し、さらに古いパッケージと新しいパッケージのパッケージマニフェストを比較して、3 つのリストを調べます。

  • 削除されているアクション。

  • 追加されているアクション。

  • 更新されているアクション。

その後、このアクションリストは次の方法で更新されます。

  • ディレクトリアクションとリンクアクションは参照カウントの対象であるため、調停されたリンクの処理が行われます。

  • ハードリンクは、それらのターゲットファイルが更新されると、修復のためにマーク付けされます。これが行われるのは、現在実行中のプロセスにとって安全な方法でハードリンクのターゲットを更新すると、そのハードリンクが壊れてしまうからです。

  • パッケージ間を移動する編集可能なファイルは、ユーザーによる編集が失われないように適切に処理されます。

  • アクションリストは、削除、追加、および更新が正しい順序で表示されるようにソートされます。

その後、現在インストールされているパッケージが、パッケージの競合がないことを確認するために相互にチェックされます。競合の例には、ファイルを同じ場所に提供する 2 つのパッケージや、異なるディレクトリ属性を持つ同じディレクトリを配布する 2 つのパッケージなどがあります。

競合が存在する場合、その競合は報告され、pkg はエラーメッセージを出して終了します。

最後に、アクションリストがスキャンされて、この操作が行われる場合に SMF サービスを再起動する必要があるかどうか、この変更を実行中のシステムに適用できるかどうか、ブートアーカイブを再構築する必要があるかどうか、そして必要な容量が使用可能であるかどうかが判断されます。

内容をダウンロードする

pkg コマンドを -n フラグなしで実行している場合、処理はダウンロードフェーズへ進みます。

内容を必要とするアクションごとに、IPS は必要なすべてのファイルをハッシュによってダウンロードし、それらをキャッシュに入れます。取り込む内容の量が大きい場合は、この手順にしばらく時間がかかることがあります。

ダウンロードが完了したあと、ライブシステム (/ をルートに持つイメージ) に変更が適用され、さらにリブートが必要とされる場合は、実行中のシステムのクローンが作成され、ターゲットイメージはそのクローンに切り替えられます。

アクションを実行する

アクションの実行では、実際に各アクションタイプに固有のインストールメソッドまたは削除メソッドをイメージに対して実行する必要があります。

実行は、すべての削除アクションの実行から始まります。システムから削除しているディレクトリで予期しない内容が見つかった場合、その内容は /var/pkg/lost+found に入れられます。

次に、実行はインストールおよび更新アクションに進みます。すべてのアクションがすべてのパッケージにわたって混在していることに注意してください。したがって、1 つのパッケージ操作での変更はパッケージごとではなく、システムに同時に適用されます。これにより、パッケージが互いに依存し合ったり、内容を安全に交換したりすることが可能になります。ファイルがどのように更新されるかについての詳細は、ファイルアクションを参照してください。

アクチュエータを処理する

変更がライブシステムに適用されている場合、この時点で保留中のアクチュエータがすべて実行されます。これらは一般に SMF サービスの再起動とリフレッシュです。これらが起動されると、IPS はローカルの検索インデックスを更新します。アクチュエータについては、パッケージインストールの一環としてのシステム変更の自動化で詳しく説明しています。

ブートアーカイブを更新する

必要に応じて、ブートアーカイブが更新されます。