RHEL8 でのモジュラー Fixlet のデプロイメント

このトピックでは、RHEL8 でモジュラー Fixlet をデプロイする方法について説明します。

  1. RHEL AppStream の概要

    RHEL-8 AppStream リポジトリーには、次の 2 つの方法でコンテンツ・パッケージが含まれています。

    • 個々の RPM パッケージ: すぐにインストールできる従来の RPM パッケージ。
    • モジュール:
      1. モジュールは、コンポーネントを表す RPM パッケージのセットです。通常は一緒にインストールされます。標準的なモジュールには、アプリケーションを含むパッケージ、アプリケーション固有の依存関係ライブラリーを含むパッケージ、アプリケーションの資料を含むパッケージ、ヘルパー・ユーティリティーを含むパッケージが含まれます。これらのパッケージは、一緒にビルド、テスト、リリースされます。
      2. YUM パッケージ管理ツールは DNF テクノロジーに基づいて構築されるようになり、新しいモジュラー機能のサポートが追加されました。個々の RPM パッケージを処理する際の YUM の使用は変更されていません。モジュラー・コンテンツを処理するために、YUM モジュール・コマンドが追加されました。
      3. YUM モジュール・コマンドは、モジュールとストリームの適切な組み合わせを選択し、パッケージの論理セットをインストールして利便性を実現するために使用する必要があります。
      1. モジュール・ストリーム:
        1. モジュール・ストリームは、AppStream 物理リポジトリー内の仮想リポジトリーと仮定できるフィルターです。AppStream コンポーネントのバージョンを表します。各ストリームは、個別に更新を受信します。
        2. モジュール・ストリームはアクティブまたは非アクティブに設定できます。アクティブなストリームは、特定のモジュール・ストリーム内の RPM パッケージにシステム・アクセスを付与し、それぞれのコンポーネント・バージョンのインストールを許可します。
        3. デフォルトとしてマークされている場合、またはユーザー・アクションによって明示的に有効になっている場合、ストリームはアクティブとなります。
        4. 特定のモジュールの 1 つのストリームのみが、特定の時点でアクティブになります。したがって、1 つのシステムにインストールできるコンポーネントのバージョンは 1 つのみです。異なるバージョンを別々のコンテナーで使用できます。
        5. 各モジュールはデフォルトのストリームを有することができます。デフォルト・ストリームを使用すると、モジュールについて学習する必要なく、通常の方法で RHEL パッケージを簡単に利用できます。モジュール全体が無効になっている場合、またはそのモジュールの別のストリームが有効になっている場合を除き、デフォルトのストリームはアクティブです。
  2. 問題の記述

    モジュール・ストリーム Fixlet は誤検出として表示されるため、RHEL 8 エンドポイントではデプロイメントが失敗します。現在、既存のモジュラー Fixlet は、クライアントで有効になっている特定のモジュール・ストリームを確認しません。デバイスで有効になっていないストリームを対象としている場合、Fixlet がそのデバイスに対応している場合でもデプロイメントは失敗します。

  3. 既存の機能
    • モジュール・ストリーム Fixlet は通常どおり生成され、異なるストリーム・バージョンでも適用可能と表示されます。エンドポイントにインストールされているパッケージのバージョンに関連度が依存するものの、エンドポイントのモジュラー・ストリーム・バージョンには依存しないためです。
    • 既存のモジュラー Fixlet には、モジュラー・ストリームのバージョンが有効かどうかを確認するための関連度がありません。すべてのモジュラー Fixlet がエンドポイントに適用され、エンドポイントでのモジュラー Fixlet のデプロイメント中に失敗します。この誤検出を回避する一時的な解決策は次のとおりです。
      • 誤検出を回避するために、すべてのモジュラー Fixlet に誤った関連度が追加されます。デフォルトでは、すべてのモジュラー Fixlet はエンドポイントに適用されません。エンド・ユーザーが FALSE の関連度を削除して適用できるようにする必要があります。
      • エンドポイントでモジュラー・ストリーム・バージョンを有効または無効にするために使用される Fixlet の「dnf module commands with RHSM download plugin - RHEL 8 - x86_64.bes)」を開発しました。
      • エンドポイントにモジュラー Fixlet を適用する前に、ユーザーは FALSE 関連度を削除し、モジュール・ストリーム・バージョンを有効にする必要があります。
  4. 提案された解決法:
    1. 前提事項
      • モジュラー Fixlet を適用する前に、クライアントでモジュラー・ストリームを有効にする必要があります。
      • モジュラー・ストリームは、Fixlet「dnf module commands with RHSM download plugin - RHEL 8 - x86_64.bes」を使用するか、エンドポイントで dnf モジュール・コマンドを手動で実行 (リセット、有効化) して、エンドポイントで有効にできます (このコマンドは、クライアントがサブスクリプション・マネージャーに登録されている場合にのみ正常に実行されます)。
    2. ソリューション設計

      このソリューションは、 次の 2 つの部分によって構成されています。第 1 の部分には、Fixlet の関連部分にモジュール・ストリーム・チェックを含むロジックが含まれています。第 2 の部分は、更新された関連度を含むよう既存のすべての Fixlet を更新するために必要です。

      1. モジュール・ストリーム・チェックに Fixlet 関連度を組み込む
        • 新しい前提条件 Fixlet があります。エンドポイントで「dnf module list」コマンドを実行する「LIST enabled modules to file using RHSM Download Plugin - RHEL 8 (Prerequisite).bes」。このコマンド (テキスト・ファイルに保管される) の出力には、モジュールとストリームのすべての組み合わせがリストされ、エンドポイントで有効になった内容 (またはデフォルト) が示されます。クライアントにモジュラー Fixlet をデプロイする前に、まずこれらの Fixlet をデプロイする必要があります。適切なプラクティスとして、モジュールとストリームの新しい画像を各エンドポイントで有効にするには、モジュラー Fixlet をデプロイする前にこの Fixlet をデプロイする必要があります (これにより、誤検出のリスクが軽減されます)。
        • 上記の前提条件 Fixlet がデプロイされると、同じ Fixlet が 1 日に 1 回自動的に再デプロイされ、モジュラー・ストリームに関する情報が読み取られます。再デプロイを停止するには、Bigfix コンソールで「アクションの停止」をクリックする必要があります。
        • ユーザーによってエンドポイントでモジュラー・ストリーム・バージョンが変更されており、上記の前提条件 Filxet が以前にデプロイされている場合、ユーザーは「停止」アクションを実行してから、前提条件 Fixlet を再度デプロイする必要があります。
        • モジュラー・ストリーム・バージョンが有効かどうかを確認するために、テキスト・ファイルから有効なモジュラー・ストリーム・バージョンを読み取るモジュラー Fixlet の関連度チェックがあります。有効になっている場合、モジュラー Fixlet はエンドポイントに適用されます。それ以外の場合、モジュラー Fixlet はエンドポイントに適用されません。
        • つまり、モジュラー Fixlet が適用可能な場合は、エンドポイントにモジュラー Fixlet をデプロイできます。適用できない場合は、エンドポイントでモジュラー・ストリーム・バージョンを有効にし、前提条件 Fixlet を再実行する必要があります。
      2. 既存のモジュラー Fixlet の更新
        • RHEL-8 用の既存のすべてのモジュラー Fixlet が更新され、再公開されます。
        • 新しいバージョンの Fixlet は、モジュール・ストリームの新規チェックの関連セクションに含まれます。
  5. モジュラー Fixlet「RHBA-2021:1911 Containers-Tools2.0 Bug Fix and Enhancement Update.bes」をデプロイするための手順を以下に示します。

    1. 初期構成
      次の図に示すように、エンドポイントでコンテナー・ツール・バージョン 2.0 が有効になっていないため、Filxet の「RHBA-2021:1911 Containers-Tools2.0 Bug Fix and Enhancement Update.bes」は適用されません。
      1. Fixlet は非関連
      2. コンテナー・ツール 2.0 (無効化)
      2.0 のコンテナー・ツール・モジュラー・ストリーム・バージョンを有効にするには、以下のスクリーンショットのとおり、Fixlet 「dnf module commands with RHSM download plugin - RHEL 8 - x86_64.bes」をデプロイする必要があります。
      3. コンテナーツール・モジュールでの Reset コマンド
      4. ストリーム 2.0 でコンテナー・ツール・モジュールの有効化
    2. デバイス上のモジュールとストリームのリスト作成:
      モジュラー Fixlet をデプロイする前に、Fixlet「List enabled modules to file using RHSM Download Plugin - RHEL 8 (Prerequisite).bes」をデプロイする必要があります。デプロイされると、次のスクリーンショットに示すように、コンテナー・ツール 2.0 が有効になっているクライアントで Make モジュラー Fixlet が関連状態になります。
      5. 関連する Fixlet
    3. これで、モジュラー Fixlet「RHBA-2021:1911 Containers-Tools2.0 Bug Fix and Enhancement Update.bes」が適用可能になり、クライアントにデプロイできるようになりました。
      注: 特定のモジュール・ストリームの エラッタは、特定のストリームのみにパッチを適用するために使用されます。他のモジュール・ストリームの更新としては使用されません。すべてのモジュラー・ストリームにおいて、この一般的なプラクティスに沿って操作してください。例えば、エンドポイントは通常、1 つのモジュール・ストリーム (nodejs:10 など) に対して構成され、同じストリームのパッケージを更新として適用する必要があります。ただし、何らかの理由で、エンドポイントにインストールされているモジュール・ストリームを nodejs:10 から nodejs:12 に切り替える場合は、すべての nodejs:10 パッケージまたは依存関係を手動で削除し、nodejs:12 パッケージでエンドポイントを更新する必要があります。これは REDHAT の制限なので、このシナリオは BigFix ではカバーできません。