web-dev-qa-db-ja.com

Solaris 11.3非グローバルゾーンが継承しないIPSファセットの変更(バージョンロックへ)

(現在)サポート契約のないSolaris11.3システムを使用しています。したがって、私はIPSリポジトリ http://pkg.Oracle.com/solaris/release/ )を使用しています。これは、pkgrecv

多数のパッケージで_pkg change-facet_を使用して_version-lock_をfalseに変更し、これらのパッケージを最新バージョンに更新できるようにしています。これは正常に機能します。

「問題」は、これらの変更されたファセットが私の非グローバルゾーンに継承されていないことです。したがって、グローバルゾーンでは変更されたファセットが表示され、影響を受けるパッケージをアップグレードできますが、後で作成する非グローバルゾーンでは同じことが当てはまりません。元の変更されていないファセットが表示され、影響を受けるパッケージをアップグレードできません。

pkg(5)は、ファセットへの変更が、グローバルゾーンから継承する非グローバルゾーンなどの子イメージによって継承されることを示します。しかし、これは私には起こっていません。

最初はこれが問題だと思っていましたが、さらに考えてみると、実際には、グローバルのファセット変更を常に非グローバルに継承したくないと思いました。これは、すぐ後に、これらのファセットを変更せずに、ベースソフトウェアを使用してテストゾーンをインストールしたいと思ったときに証明されました。

それでも、継承することを示すドキュメントにはまだ混乱しています。理想的には、特定のファセットを継承するように構成する方法があるはずだと思います。

したがって、私の質問は次のとおりです。

  1. オプションで、特定のファセットをすべての非グローバルに継承させる方法はありますか?おそらく新しいIPSイメージを作成することによって)?
  2. IPSドキュメントがファセットdoを継承することを示しているのはなぜですか?特定のタイプのファセットについてのみ話しているのですか?

これは私が完全にやっていることです:

オラクルが提供する新しいFOSSパッケージの使用について調査してきました。私はここのガイドに従っています: Oracle Solaris 11.3用に選択されたFOSS評価パッケージにアクセスする方法

このガイドでは、パッケージを更新する前にファセット_version-lock_をfalseに変更する必要があること、および更新されたFOSSパッケージが_\*@\*-5.12.0.0.0.122_と一致するバージョン番号文字列でリリースリポジトリにまとめて表示されることを説明します。このドキュメントでは、_pkg list_の出力を操作して_pkg change-facet_コマンドを作成し、すべてのバージョンのロックを解除することを推奨しています。

私は自分のグローバルゾーンでこれを実行しましたが、その後_pkg update --accept_を実行すると、多数のアップグレードされたパッケージが正常に生成されます。

ただし、新しい非グローバルゾーンをインストールすると、デフォルトでこれらのパッケージのベースバージョンになります。そのグローバルゾーンで_pkg facet_を実行すると、ゾーン内のファセットが変更されていないことがわかります。たとえば、ここでゾーンは変更されていないバージョンを示しています-Bashのlock = True:

_root@goldenzone:~# pkg facet -a | grep version-lock.Shell/bash
version-lock.Shell/bash                                          True  system
_

そのグローバルは正しい、新しく変更されたバージョンを示していますが-lock = False:

_root@magrathea:/system/zones# pkg facet -a | grep version-lock.Shell/bash
version-lock.Shell/bash                                          False local
_

回避策:

以下の私のコメントによると、私は現在、_<facet set="false">facet.version-lock.*</facet>_を含むカスタムauto_installマニフェストを使用してゴールデンゾーンをインストールすることでこの問題を解決しています。

これは問題なく機能します(ただし、FOSSの更新があるバージョンロックだけでなく、すべてのバージョンロックのロックを解除する必要があります)が、それでも、ドキュメントに示されているように、ファセットをグローバルと非グローバルの間で継承させます。

前もって感謝します。

3
TheBloke

私は、イメージパッケージングシステムの主要な作成者および設計者の1人です。

あなたの混乱は、ドキュメンテーションが述べていることの誤解によるものだと思います。特に、pkg(5)のこの文の内容に注意してください。

...非グローバルゾーンは、グローバルゾーンからファセットを継承できます。継承されたファセットは、ローカルに設定されたファセットの前に評価され、優先されます。

canであり、willではないことに注意してください。したがって、ドキュメントにはファセットが継承されたときに何が起こるかが説明されていますが、意図的に(私は信じていますが)whenファセットが継承されるとは述べていません。つまり、(「pkgfacet」のSRC列で「親」を探すことによって)継承されるかどうかを判断する方法を示しますが、どのような条件下で継承されるかはわかりません。

https://docs.Oracle.com/cd/E53394_01/html/E54739/glmke.html

不足している部分については、一般に、継承されたファセットは通常、パッケージで使用されるfacet.version-lock。*ファセットにのみ適用されます。これは、関連するパッケージの一部が次のように親に依存しているためです。

依存タイプ=親fmri =機能/パッケージ/依存関係/自己

上記のように表現された親の依存関係は、このパッケージを非グローバルゾーンにインストールするには、最初に同じパッケージが同じバージョンでグローバルゾーンに存在する必要があることを示しています。これは、グローバルゾーンと非グローバルゾーンの間で同期する必要があるパッケージに使用されます。

つまり、継承は通常、ほとんどのファセットには適用されません。どのファセットを継承するかを決定するためのロジックは、次の場所にあります。

https://github.com/Oracle/solaris-ips/blob/master/src/modules/client/linkedimage/common.py#L3462

ゾーンは、管理者がグローバルゾーンとは異なる構成をセットアップできる分離された環境を可能にすることを目的としたコンテナテクノロジであるため、これは意図的なものでした。

そうは言っても、wantでファセット変更操作をグローバルゾーンとすべての非グローバルゾーンに適用する場合は、 '-rを使用して適用できます。 'ファセットを変更する(再帰的な)オプション:

pkg change-facet -r.。

(どうやら私は3つ以上のリンクを投稿できないので、pkg(1)を参照してください。)

-zを使用して特定のゾーンに適用することもできます。

ああ、そして最後に、あなたはreallyすべてのバージョンロックでファセットをFalseに設定したくありません。これにより、システムの更新が非常に遅くなるだけでなく、テスト済みのコンポーネントの組み合わせを実際に使用していることを確認するためのすべての安全性が失われます。

1