10.2. RHEL for Edge イメージの更新

10.2.1. RHEL for Edge イメージの更新のデプロイ方法

RHEL for Edge イメージでは、更新を手動でデプロイするか、デプロイメントプロセスを自動化することができます。更新はアトミックな方法で適用されます。つまり、各更新の状態が周知され、更新は段階的に行われ、再起動時にのみ適用されます。デバイスを再起動するまで変更を確認できないため、可能な限り最大限のアップタイムを確保するために再起動をスケジュールすることができます。

イメージの更新中は、更新されたオペレーティングシステムのコンテンツのみがネットワーク経由で転送されます。これにより、イメージ全体を転送するよりもデプロイメントプロセスが効率的になります。/usr 内のオペレーティングシステムのバイナリーとライブラリーは read-only であり、read and write 状態は /var および /etc ディレクトリーで維持されます。

新しいデプロイメントに移動すると、/etc および /var ディレクトリーが新しいデプロイメントにコピーされ、read and write 権限が付与されます。/usr ディレクトリーは、新しいデプロイメントディレクトリーにソフトリンクとしてコピーされ、read-only パーミッションが設定されます。

以下の図は、RHEL for Edge イメージの更新デプロイメントプロセスを説明しています。

イメージのデプロイメント

デフォルトでは、新しいシステムは chroot 操作と同様の手順を使用して起動されます。つまり、システムは、基盤となるサーバー環境への公開を制御しながら、ファイルシステムへのアクセス制御を可能にします。新しい /sysroot ディレクトリーには、主に次の部分があります。

  • /sysroot/ostree/repo ディレクトリーにあるリポジトリーデータベース。
  • /sysroot/ostree/deploy/rhel/deploy ディレクトリーのファイルシステムリビジョン。これは、システム更新の各操作によって作成されます。
  • 前出のデプロイメントにリンクしている /sysroot/ostree/boot ディレクトリー。/ostree/sysroot/ostree へのソフトリンクであることに注意してください。/sysroot/ostree/boot ディレクトリーのファイルは複製されません。デプロイメント中に変更されていない場合は、同じファイルが使用されます。ファイルは、/sysroot/ostree/repo/objects ディレクトリーに格納されている別のファイルへのハードリンクです。

オペレーティングシステムは、次の方法でデプロイメントを選択します。

  1. dracut ツールは、initramfs root ファイルシステムの ostree カーネル引数を解析し、/usr ディレクトリーを read-only バインドマウントとして設定します。
  2. /sysroot のデプロイメントディレクトリーを / ディレクトリーにバインドします。
  3. MS_MOVE マウントフラグを使用して、dirs がすでにマウントされているオペレーティングシステムを再マウントします。

何か問題が発生した場合は、rpm-ostree cleanup コマンドを使用して古いデプロイメントを削除することで、デプロイのロールバックを実行できます。各クライアントマシンには、/ostree/repo に格納されている OSTree リポジトリーと、/ostree/deploy/$STATEROOT/$CHECKSUM に格納されている一連のデプロイメントが含まれています。

RHEL for Edge イメージのデプロイメントの更新により、複数のデバイス間でのシステムの一貫性が向上し、再現性が容易になり、システム状態の変更前と変更後の分離が改善されます。

10.2.2. コミット更新の構築

ブループリントに次のような変更を加えた後、コミット更新をビルドできます。

  • システムに必要な追加パッケージの追加
  • 既存のコンポーネントのパッケージバージョンを変更する
  • 既存のパッケージを削除します。

前提条件

手順

  1. --url--refblueprint-nameedge-commit の引数を使用して、新しいコミットイメージの作成を開始します。

    # composer-cli compose start-ostree --ref rhel/8/x86_64/edge --url http://localhost:8080/repo <blueprint-name> edge-commit

    このコマンドは、作成を開始する前に OStree リポジトリーからメタデータをフェッチするように作成プロセスに指示します。結果として得られる新しい OSTree コミットには、元の OSTree コミットの参照が親イメージとして含まれています。

  2. 作成プロセスが完了したら、.tar ファイルをフェッチします。

    # composer-cli compose image <UUID>
  3. コミット履歴を OSTree リポジトリーに保存できるように、コミットを一時ディレクトリーに抽出します。

    $ tar -xf UUID.tar -C /var/tmp
  4. tar -xf コマンドを使用して、結果の OSTree リポジトリーのコミットを検査します。tar ファイルがディスクに抽出されるので、結果の OSTree リポジトリーを検査できます。

    $ ostree --repo=/var/tmp/repo log rhel/8/x86_64/edge
    commit d523ef801e8b1df69ddbf73ce810521b5c44e9127a379a4e3bba5889829546fa
    Parent:  f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91
    ContentChecksum:  f0f6703696331b661fa22d97358db48ba5f8b62711d9db83a00a79b3ae0dfe16
    Date:  2023-06-04 20:22:28 /+0000
    Version: 8

    出力例では、リポジトリー内に親コミットを参照する OSTree コミットが 1 つあります。親コミットは、以前に作成した元の OSTree コミットからのチェックサムと同じです。

  5. ostree pull-local コマンドを使用して、2 つのコミットをマージします。

    $ sudo ostree --repo=/var/srv/httpd/repo pull-local /var/tmp/repo
    20 metadata, 22 content objects imported; 0 bytes content written

    このコマンドは、新しいメタデータとコンテンツをディスク上の場所 (/var/tmp など) から /var/srv/httpd の宛先 OSTree リポジトリーにコピーします。

検証

  1. ターゲットの OSTree リポジトリーを調べます。

    $ ostree --repo=/var/srv/httpd/repo log rhel/8/x86_64/edge
    commit d523ef801e8b1df69ddbf73ce810521b5c44e9127a379a4e3bba5889829546fa
    Parent:  f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91
    ContentChecksum:  f0f6703696331b661fa22d97358db48ba5f8b62711d9db83a00a79b3ae0dfe16
    Date:  2023-06-04 20:22:28 /+0000
    Version: 8
    (no subject)
    
    commit f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91
    ContentChecksum:  9054de3fe5f1210e3e52b38955bea0510915f89971e3b1ba121e15559d5f3a63
    Date:  2023-06-04 20:01:08 /+0000
    Version: 8
    (no subject)

    ターゲットの OSTree リポジトリーには、論理的な順序で 2 つのコミットが含まれていることがわかります。検証が成功したら、RHEL for Edge システムを更新できます。

10.2.3. RHEL for Edge イメージの更新の手動でのデプロイ

RHEL for Edge のブループリントを編集した後、イメージコミットを更新することができます。RHEL Image Builder は、更新された RHEL for Edge イメージの新しいコミットを生成します。この新しいコミットを使用して、最新のパッケージバージョンまたは追加パッケージのイメージをデプロイしてください。

RHEL for Edge イメージの更新をデプロイするには、前提条件を満たしていることを確認し、手順に従ってください。

前提条件

  • RHEL システムで、RHEL Image Builder ダッシュボードにアクセス済みである。
  • RHEL for Edge イメージのブループリントを作成済みである。
  • RHEL for Edge イメージのブループリントを編集済みである。

手順

  1. RHEL Image Builder のダッシュボードで、Create Image をクリックします。
  2. Create Image ウィンドウで、以下の手順を実行します。

    1. Image output ページで、以下を実行します。

      1. Select a blueprint ドロップダウンリストから、編集したブループリントを選択します。
      2. Image output type ドロップダウンリストから、RHEL for Edge Commit (.tar) を選択します。Next をクリックします。
    2. OSTree settings ページで、以下を入力します。

      1. Repository URL フィールドに、イメージに埋め込むコミットの OSTree リポジトリーへの URL を入力します。たとえば、http://10.0.2.2:8080/repo/ です。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。
      2. Parent commit フィールドで、以前に生成された親コミット ID を指定します。RHEL for Edge イメージのコミットの展開 を参照してください。
      3. Ref フィールドでは、コミットの名前を指定するか、空欄のままにしておくことができます。デフォルトでは、Web コンソールは Refrhel/8/arch_name/edge に指定します。Next をクリックします。
    3. Review ページでカスタマイズを確認し、Create image をクリックします。RHEL Image Builder が、更新されたブループリントの RHEL for Edge イメージの作成を開始します。イメージ作成プロセスの完了まで数分かかります。

      RHEL for Edge イメージの作成の進捗状況を確認するには、ブレッドクラムからブループリント名をクリックし、次に Images タブをクリックします。

      作成したイメージには、追加した最新のパッケージがある場合は含まれ、親としてオリジナルの commit ID を持っています。

  3. 作成した RHEL for Edge Commit (.tar) イメージをダウンロードします。

    1. Images タブで Download をクリックして、RHEL for Edge Commit (.tar) イメージをシステムに保存します。
  4. OSTree コミット (.tar) ファイルを展開します。

    # tar -xf UUID-commit.tar -C UPGRADE_FOLDER
  5. OSTree リポジトリーをアップグレードします。

    # ostree pull-local --repo http://10.0.2.2:8080/repo UPGRADE_FOLDER/repo OSTREE_REF
    # ostree summary --update --repo http://10.0.2.2:8080/repo
  6. 今回は子コミット ID を提供し、docker コンテナーをビルドします。

    # podman build -t name-of-server --build-arg commit=UUID-child_commit.tar .
  7. コンテナーを実行します。

    # podman run --rm -p 8000:80 name-of-server
  8. プロビジョニングされた RHEL システム上で、オリジナルの Edge イメージから、現在の状態を確認します。

    $ rpm-ostree status

    新しいコミット ID がない場合は、以下のコマンドを実行して、利用可能なアップグレードの有無を確認します。

    $ rpm-ostree upgrade --check

    コマンドの出力は、現在アクティブな OSTree コミット ID を提供します。

  9. OSTree を更新して、新しい OSTree のコミット ID を利用できるようにします。

    $ rpm-ostree upgrade

    OSTree は、リポジトリーに更新があるかどうかを確認します。ある場合は、更新を取得し、この新しいコミット更新のデプロイメントを有効化できるように、システムの再起動を要求します。

  10. 再度、現在の状態を確認します。

    $ rpm-ostree status

    これで、コミットが 2 つあることが分かります。

    • アクティブな親コミット。
    • アクティブではなく、差異が 1 つ追加された新しいこミット。
  11. 新しいデプロイメントを有効にし、新しいコミットを有効にするには、システムを再起動します。

    # systemctl reboot

    Anaconda インストーラーは、新しいデプロイメントで再起動します。ログイン画面では、起動に利用可能な新しいデプロイメントが表示されます。

  12. 最新のデプロイメント (コミット) で起動すると、rpm-ostree upgrade コマンドは、新しいデプロイメントが一覧内で最初に表示されるようにブートエントリーを自動的に順序を指定します。必要に応じて、キーボードの矢印キーを使用して GRUB メニューエントリーを選択し、Enter を押します。
  13. ログインユーザーのアカウント認証情報を提供してください。
  14. OSTree の状態を確認します。

    $ rpm-ostree status

    コマンド出力は、アクティブなコミット ID を提供します。

  15. 変更したパッケージが存在する場合は、親コミットと新しいコミットの間で diff を実行します。

    $ rpm-ostree db diff parent_commit new_commit

    更新により、インストールしたパッケージが利用可能になり、すぐに使用できる状態になっていることがわかります。

10.2.4. コマンドラインを使用した RHEL for Edge イメージの更新の手動によるデプロイ

RHEL for Edge のブループリントを編集した後、イメージコミットを更新することができます。RHEL Image Builder は、更新された RHEL for Edge イメージの新しいコミットを生成します。新しいコミットを使用して、最新のパッケージバージョンでイメージをデプロイするか、CLI を使用して追加のパッケージをデプロイします。

CLI を使用して RHEL for Edge イメージの更新をデプロイするには、前提条件を満たしていることを確認し、手順に従います。

前提条件

手順

  1. 以下の引数を使用して、RHEL for Edge Commit (.tar) イメージを作成します。

    # composer-cli compose start-ostree --ref ostree_ref --url URL-OSTree-repository -blueprint_name_ image-type

    ここでは、以下のようになります。

    • ref は、RHEL for Edge Container Commitの作成時に指定したリファレンスです。たとえば、rhel/8/x86_64/edge です。
    • URL-OSTree-repository は、イメージに埋め込むコミットの OSTree リポジトリーへの URL です。たとえば、http://10.0.2.2:8080/repo/ です。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。
    • image-typeedge-commit です。

      RHEL Image Builder が、更新されたブループリントの RHEL for Edge イメージを作成します。

  2. RHEL for Edge イメージの作成進捗を確認します。

    # composer-cli compose status
    注記

    イメージの作成プロセスは、最大 10 分から 30 分かかることがあります。

    作成したイメージには、最新パッケージがあれば、そのパッケージが追加され、オリジナルの commit ID を親とします。

  3. 作成した RHEL for Edge イメージをダウンロードします。詳細は、RHEL Image Builder コマンドラインインターフェイスを使用した RHEL for Edge イメージのダウンロード を参照してください。
  4. OSTree コミットを展開します。

    # tar -xf UUID-commit.tar -C UPGRADE_FOLDER
  5. httpd を使用して OSTree コミットを提供します。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。
  6. OSTree リポジトリーをアップグレードします。

    # ostree pull-local --repo http://10.0.2.2:8080/repo UPGRADE_FOLDER/repo OSTREE_REF
    # ostree summary --update --repo http://10.0.2.2:8080/repo
  7. プロビジョニングされた RHEL システム上で、オリジナルの Edge イメージから、現在の状態を確認します。

    $ rpm-ostree status

    新しいコミット ID がない場合は、以下のコマンドを実行して、利用可能なアップグレードの有無を確認します。

    $ rpm-ostree upgrade --check

    コマンドの出力は、現在アクティブな OSTree コミット ID を提供します。

  8. OSTree を更新して、新しい OSTree のコミット ID を利用できるようにします。

    $ rpm-ostree upgrade

    OSTree は、リポジトリーに更新があるかどうかを確認します。ある場合は、更新を取得し、この新しいコミット更新のデプロイメントを有効化できるように、システムの再起動を要求します。

  9. 再度、現在の状態を確認します。

    $ rpm-ostree status

    利用可能なコミットが 2 つあることが分かります。

    • アクティブな親コミット
    • アクティブではなく、1 つの違いを含む新しいコミット
  10. 新しいデプロイメントを有効にし、新しいコミットを有効にするには、システムを再起動します。

    # systemctl reboot

    Anaconda インストーラーは、新しいデプロイメントで再起動します。ログイン画面では、起動に利用可能な新しいデプロイメントが表示されます。

  11. 最新のデプロイメントで起動すると、rpm-ostree upgrade コマンドは、新しいデプロイメントがリスト内で最初に表示されるようにブートエントリーを自動的に順序を指定します。必要に応じて、キーボードの矢印キーを使用して GRUB メニューエントリーを選択し、Enter を押します。
  12. アカウントの認証情報を使用してログインします。
  13. OSTree の状態を確認します。

    $ rpm-ostree status

    コマンド出力は、アクティブなコミット ID を提供します。

  14. 変更したパッケージが存在する場合は、親コミットと新しいコミットの間で diff を実行します。

    $ rpm-ostree db diff parent_commit new_commit

    更新により、インストールしたパッケージが利用可能になり、すぐに使用できる状態になっていることがわかります。

10.2.5. ネットワーク以外のデプロイメント向けの RHEL for Edge イメージ更新の手動デプロイ

RHEL for Edge ブループリントを編集した後、それらの更新を使用して RHEL for Edge Commit イメージを更新できます。たとえば、RHEL イメージビルダーを使用して新しいコミットを生成し、VM にすでにデプロイされている RHEL for Edge イメージを更新します。この新しいコミットを使用して、最新のパッケージバージョンまたは追加パッケージのイメージをデプロイしてください。

RHEL for Edge イメージの更新をデプロイするには、前提条件を満たしていることを確認し、手順に従ってください。

前提条件

  • ホストで、ブラウザーの Web コンソールから RHEL Image Builder アプリケーションを開いている。
  • 稼働中の RHEL for Edge システムがプロビジョニングされています。
  • HTTP 経由で提供される OSTree リポジトリーがあります。
  • 以前に作成した RHEL for Edge イメージブループリントを編集しました。

手順

  1. システムホストの RHEL イメージビルダーダッシュボードで、Create Image をクリックします。
  2. Create Image ウィンドウで、以下の手順を実行します。

    1. Image output ページで、以下を実行します。

      1. Select a blueprint ドロップダウンリストから、編集したブループリントを選択します。
      2. Image output type ドロップダウンリストから、RHEL for Edge Container (.tar) を選択します。
      3. Next をクリックします。
    2. OSTree settings ページで、以下を入力します。

      1. Repository URL フィールドに、イメージに埋め込むコミットの OSTree リポジトリーへの URL を入力します。たとえば、http://10.0.2.2:8080/repo/ です。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。
      2. Parent commit フィールドで、以前に生成された親コミット ID を指定します。RHEL for Edge イメージのコミットの展開 を参照してください。
      3. Ref フィールドでは、コミットの名前を指定するか、空欄のままにしておくことができます。デフォルトでは、Web コンソールは Refrhel/8/arch_name/edge に指定します。
      4. Next をクリックします。
    3. Review ページでカスタマイズを確認し、Create をクリックします。

      RHEL Image Builder が、更新されたブループリントの RHEL for Edge イメージを作成します。

    4. Images タブをクリックして、RHEL for Edge イメージの作成の進行状況を表示します。

      注記

      イメージ作成プロセスの完了まで数分かかります。

      作成したイメージには、最新パッケージがあれば、そのパッケージが追加され、オリジナルの commit ID を親とします。

  3. 結果として得られる RHEL for Edge イメージをホストにダウンロードします。

    1. Images タブで Download をクリックして、RHEL for Edge Container (.tar) イメージをホストシステムに保存します。
  4. 元のエッジイメージからプロビジョニングされた RHEL システムで、次の手順を実行します。

    1. 今回は子コミット ID を提供して Podman に RHEL for Edge Container イメージを読み込みます。

      $ cat ./child-commit_ID-container.tar | sudo podman load
    2. Podman を実行します。

      #  sudo podman run -p 8080:8080 localhost/edge-test
    3. OSTree リポジトリーをアップグレードします。

      # ostree pull-local --repo http://10.0.2.2:8080/repo UPGRADE_FOLDER/repo OSTREE_REF
      # ostree summary --update --repo http://10.0.2.2:8080/repo
    4. プロビジョニングされた RHEL システム上で、オリジナルの Edge イメージから、現在の状態を確認します。

      $ rpm-ostree status

      新しいコミット ID がない場合は、以下のコマンドを実行して、利用可能なアップグレードの有無を確認します。

      $ rpm-ostree upgrade --check

      利用可能な更新がある場合は、コマンドの出力は、現在アクティブな OSTree コミット ID など、OSTree リポジトリーで利用可能な更新に関する情報を提供します。その他に、利用可能な更新がないことをメッセージに通知するよう求められます。

    5. OSTree を更新して、新しい OSTree のコミット ID を利用できるようにします。

      $ rpm-ostree upgrade

      OSTree は、リポジトリーに更新があるかどうかを確認します。ある場合は、更新を取得し、この新しいコミット更新のデプロイメントを有効化できるように、システムの再起動を要求します。

    6. 現在のシステムステータスを確認します。

      $ rpm-ostree status

      これで、コミットが 2 つあることが分かります。

      • アクティブな親コミット。
      • アクティブではなく、差異が 1 つ追加された新しいこミット。
    7. 新しいデプロイメントを有効にし、新しいコミットを有効にするには、システムを再起動します。

      # systemctl reboot

      Anaconda インストーラーは、新しいデプロイメントで再起動します。ログイン画面では、起動に利用可能な新しいデプロイメントが表示されます。

    8. 最新のコミットで起動するには、次のコマンドを実行して、新しいデプロイメントがリストの先頭になるようにブートエントリーを自動的に並べ替えます。

      $ rpm-ostree upgrade

      必要に応じて、キーボードの矢印キーを使用して GRUB メニューエントリーを選択し、Enter を押します。

  5. ログインユーザーのアカウント認証情報を提供してください。
  6. OSTree の状態を確認します。

    $ rpm-ostree status

    コマンド出力は、アクティブなコミット ID を提供します。

  7. 変更したパッケージが存在する場合は、親コミットと新しいコミットの間で diff を実行します。

    $ rpm-ostree db diff parent_commit new_commit

    更新により、インストールしたパッケージが利用可能になり、すぐに使用できる状態になっていることがわかります。