15.2. RHEL for Edge イメージの更新
15.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
ディレクトリーに格納されている別のファイルへのハードリンクです。
オペレーティングシステムは、次の方法でデプロイメントを選択します。
-
dracut
ツールは、initramfs root
ファイルシステムのostree
カーネル引数を解析し、/usr
ディレクトリーをread-only
バインドマウントとして設定します。 -
/sysroot
のデプロイメントディレクトリーを/
ディレクトリーにバインドします。 -
MS_MOVE
マウントフラグを使用して、dirs
がすでにマウントされているオペレーティングシステムを再マウントします。
何か問題が発生した場合は、rpm-ostree
cleanup コマンドを使用して古いデプロイメントを削除することで、デプロイのロールバックを実行できます。各クライアントマシンには、/ostree/repo
に格納されている OSTree
リポジトリーと、/ostree/deploy/$STATEROOT/$CHECKSUM
に格納されている一連のデプロイメントが含まれています。
RHEL for Edge イメージのデプロイメントの更新により、複数のデバイス間でのシステムの一貫性が向上し、再現性が容易になり、システム状態の変更前と変更後の分離が改善されます。
15.2.2. コミット更新の構築
ブループリントに次のような変更を加えた後、コミット更新をビルドできます。
- システムに必要な追加パッケージの追加
- 既存のコンポーネントのパッケージバージョンを変更する
- 既存のパッケージを削除します。
前提条件
- RHEL Image Builder を実行しているシステムを更新した。
- ブループリントの更新を作成した。
- 以前に OSTree リポジトリーを作成し、HTTP 経由でそれを提供した。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。
手順
--url
、--ref
、blueprint-name
、edge-commit
の引数を使用して、新しいコミットイメージの作成を開始します。# composer-cli compose start-ostree --ref rhel/9/x86_64/edge --url http://localhost:8080/repo <blueprint-name> edge-commit
このコマンドは、作成を開始する前に OStree リポジトリーからメタデータをフェッチするように作成プロセスに指示します。結果として得られる新しい OSTree コミットには、元の OSTree コミットの参照が親イメージとして含まれています。
作成プロセスが完了したら、
.tar
ファイルをフェッチします。# composer-cli compose image <UUID>
コミット履歴を OSTree リポジトリーに保存できるように、コミットを一時ディレクトリーに抽出します。
$ tar -xf UUID.tar -C /var/tmp
tar -xf
コマンドを使用して、結果の OSTree リポジトリーのコミットを検査します。tar ファイルがディスクに抽出されるので、結果の OSTree リポジトリーを検査できます。$ ostree --repo=/var/tmp/repo log rhel/9/x86_64/edge commit d523ef801e8b1df69ddbf73ce810521b5c44e9127a379a4e3bba5889829546fa Parent: f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91 ContentChecksum: f0f6703696331b661fa22d97358db48ba5f8b62711d9db83a00a79b3ae0dfe16 Date: 2023-06-04 20:22:28 /+0000 Version: 9
出力例では、リポジトリー内に親コミットを参照する OSTree コミットが 1 つあります。親コミットは、以前に作成した元の OSTree コミットからのチェックサムと同じです。
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 リポジトリーにコピーします。
検証
ターゲットの OSTree リポジトリーを調べます。
$ ostree --repo=/var/srv/httpd/repo log rhel/9/x86_64/edge commit d523ef801e8b1df69ddbf73ce810521b5c44e9127a379a4e3bba5889829546fa Parent: f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91 ContentChecksum: f0f6703696331b661fa22d97358db48ba5f8b62711d9db83a00a79b3ae0dfe16 Date: 2023-06-04 20:22:28 /+0000 Version: 9 (no subject) commit f47842de7e6859cee07d743d3c67949420874727883fa9dbbaeb5824ad949d91 ContentChecksum: 9054de3fe5f1210e3e52b38955bea0510915f89971e3b1ba121e15559d5f3a63 Date: 2023-06-04 20:01:08 /+0000 Version: 9 (no subject)
ターゲットの OSTree リポジトリーには、論理的な順序で 2 つのコミットが含まれていることがわかります。検証が成功したら、RHEL for Edge システムを更新できます。
15.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 イメージのブループリントを編集済みである。
手順
- RHEL Image Builder のダッシュボードで、 をクリックします。
Create Image ウィンドウで、以下の手順を実行します。
Image output ページで、以下を実行します。
- Select a blueprint ドロップダウンリストから、編集したブループリントを選択します。
-
Image output type ドロップダウンリストから、
RHEL for Edge Commit (.tar)
を選択します。 をクリックします。
OSTree settings ページで、以下を入力します。
- Repository URL フィールドに、イメージに埋め込むコミットの OSTree リポジトリーへの URL を入力します。たとえば、http://10.0.2.2:8080/repo/ です。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。
- Parent commit フィールドで、以前に生成された親コミット ID を指定します。RHEL for Edge イメージのコミットの展開 を参照してください。
-
Ref フィールドでは、コミットの名前を指定するか、空欄のままにしておくことができます。デフォルトでは、Web コンソールは
Ref
をrhel/9/arch_name/edge
に指定します。 をクリックします。
Review ページでカスタマイズを確認し、 をクリックします。RHEL Image Builder が、更新されたブループリントの RHEL for Edge イメージの作成を開始します。イメージ作成プロセスの完了まで数分かかります。
RHEL for Edge イメージの作成の進捗状況を確認するには、ブレッドクラムからブループリント名をクリックし、次に Images タブをクリックします。
作成したイメージには、追加した最新のパッケージがある場合は含まれ、親としてオリジナルの
commit ID
を持っています。
作成した RHEL for Edge Commit (
.tar
) イメージをダウンロードします。-
Images タブで をクリックして、RHEL for Edge Commit (
.tar
) イメージをシステムに保存します。
-
Images タブで をクリックして、RHEL for Edge Commit (
OSTree コミット (
.tar
) ファイルを展開します。# tar -xf UUID-commit.tar -C UPGRADE_FOLDER
OSTree リポジトリーをアップグレードします。
# ostree --repo=/usr/share/nginx/html/repo pull-local UPGRADE_FOLDER # ostree --repo=/usr/share/nginx/html/repo summary -u
プロビジョニングされた RHEL システム上で、オリジナルの Edge イメージから、現在の状態を確認します。
$ rpm-ostree status
新しいコミット ID がない場合は、以下のコマンドを実行して、利用可能なアップグレードの有無を確認します。
$ rpm-ostree upgrade --check
コマンドの出力は、現在アクティブな OSTree コミット ID を提供します。
OSTree を更新して、新しい OSTree のコミット ID を利用できるようにします。
$ rpm-ostree upgrade
OSTree は、リポジトリーに更新があるかどうかを確認します。ある場合は、更新を取得し、この新しいコミット更新のデプロイメントを有効化できるように、システムの再起動を要求します。
再度、現在の状態を確認します。
$ rpm-ostree status
これで、コミットが 2 つあることが分かります。
- アクティブな親コミット。
- アクティブではなく、差異が 1 つ追加された新しいこミット。
新しいデプロイメントを有効にし、新しいコミットを有効にするには、システムを再起動します。
# systemctl reboot
Anaconda インストーラーは、新しいデプロイメントで再起動します。ログイン画面では、起動に利用可能な新しいデプロイメントが表示されます。
-
最新のデプロイメント (コミット) で起動すると、
rpm-ostree
upgrade コマンドは、新しいデプロイメントが一覧内で最初に表示されるようにブートエントリーを自動的に順序を指定します。必要に応じて、キーボードの矢印キーを使用して GRUB メニューエントリーを選択し、 を押します。 - ログインユーザーのアカウント認証情報を提供してください。
OSTree の状態を確認します。
$ rpm-ostree status
コマンド出力は、アクティブなコミット ID を提供します。
変更したパッケージが存在する場合は、親コミットと新しいコミットの間で diff を実行します。
$ rpm-ostree db diff parent_commit new_commit
更新により、インストールしたパッケージが利用可能になり、すぐに使用できる状態になっていることがわかります。
15.2.4. コマンドラインを使用した RHEL for Edge イメージの更新の手動によるデプロイ
RHEL for Edge のブループリントを編集した後、イメージコミットを更新することができます。RHEL Image Builder は、更新された RHEL for Edge イメージの新しいコミットを生成します。新しいコミットを使用して、最新のパッケージバージョンでイメージをデプロイするか、CLI を使用して追加のパッケージをデプロイします。
CLI を使用して RHEL for Edge イメージの更新をデプロイするには、前提条件を満たしていることを確認し、手順に従います。
前提条件
- RHEL for Edge イメージブループリントを作成している。
- RHEL for Edge イメージブループリントを編集している。コマンドラインインターフェイスを使用した RHEL for Edge イメージのブループリントの編集 を参照してください。
手順
以下の引数を使用して、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/9/x86_64/edge
です。 -
URL-OSTree-repository
は、イメージに埋め込むコミットの OSTree リポジトリーへの URL です。たとえば、http://10.0.2.2:8080/repo/ です。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。 image-type
はedge-commit
です。RHEL Image Builder が、更新されたブループリントの RHEL for Edge イメージを作成します。
-
RHEL for Edge イメージの作成進捗を確認します。
# composer-cli compose status
注記イメージの作成プロセスは、最大 10 分から 30 分かかることがあります。
作成したイメージには、最新パッケージがあれば、そのパッケージが追加され、オリジナルの
commit ID
を親とします。- 作成した RHEL for Edge イメージをダウンロードします。詳細は、RHEL Image Builder コマンドラインインターフェイスを使用した RHEL for Edge イメージのダウンロード を参照してください。
OSTree コミットを展開します。
# tar -xf UUID-commit.tar -C upgrade_folder
- httpd を使用して OSTree コミットを提供します。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。
OSTree リポジトリーをアップグレードします。
# ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo # ostree --repo=/var/www/html/repo summary -u
プロビジョニングされた RHEL システム上で、オリジナルの Edge イメージから、現在の状態を確認します。
$ rpm-ostree status
新しいコミット ID がない場合は、以下のコマンドを実行して、利用可能なアップグレードの有無を確認します。
$ rpm-ostree upgrade --check
コマンドの出力は、現在アクティブな OSTree コミット ID を提供します。
OSTree を更新して、新しい OSTree のコミット ID を利用できるようにします。
$ rpm-ostree upgrade
OSTree は、リポジトリーに更新があるかどうかを確認します。ある場合は、更新を取得し、この新しいコミット更新のデプロイメントを有効化できるように、システムの再起動を要求します。
再度、現在の状態を確認します。
$ rpm-ostree status
利用可能なコミットが 2 つあることが分かります。
- アクティブな親コミット
- アクティブではなく、1 つの違いを含む新しいコミット
新しいデプロイメントを有効にし、新しいコミットを有効にするには、システムを再起動します。
# systemctl reboot
Anaconda インストーラーは、新しいデプロイメントで再起動します。ログイン画面では、起動に利用可能な新しいデプロイメントが表示されます。
-
最新のデプロイメントで起動すると、
rpm-ostree upgrade
コマンドは、新しいデプロイメントがリスト内で最初に表示されるようにブートエントリーを自動的に順序を指定します。必要に応じて、キーボードの矢印キーを使用して GRUB メニューエントリーを選択し、 を押します。 - アカウントの認証情報を使用してログインします。
OSTree の状態を確認します。
$ rpm-ostree status
コマンド出力は、アクティブなコミット ID を提供します。
変更したパッケージが存在する場合は、親コミットと新しいコミットの間で diff を実行します。
$ rpm-ostree db diff parent_commit new_commit
更新により、インストールしたパッケージが利用可能になり、すぐに使用できる状態になっていることがわかります。
15.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 イメージブループリントを編集しました。
手順
- システムホストの RHEL イメージビルダーダッシュボードで、 をクリックします。
Create Image ウィンドウで、以下の手順を実行します。
Image output ページで、以下を実行します。
- Select a blueprint ドロップダウンリストから、編集したブループリントを選択します。
-
Image output type ドロップダウンリストから、
RHEL for Edge Container (.tar)
を選択します。 - をクリックします。
OSTree settings ページで、以下を入力します。
- Repository URL フィールドに、イメージに埋め込むコミットの OSTree リポジトリーへの URL を入力します。たとえば、http://10.0.2.2:8080/repo/ です。RHEL for Edge イメージをインストールするための Web サーバーの設定 を参照してください。
- Parent commit フィールドで、以前に生成された親コミット ID を指定します。RHEL for Edge イメージのコミットの展開 を参照してください。
-
Ref フィールドでは、コミットの名前を指定するか、空欄のままにしておくことができます。デフォルトでは、Web コンソールは
Ref
をrhel/9/arch_name/edge
に指定します。 - をクリックします。
Review ページでカスタマイズを確認し、 をクリックします。
RHEL Image Builder が、更新されたブループリントの RHEL for Edge イメージを作成します。
Images タブをクリックして、RHEL for Edge イメージの作成の進行状況を表示します。
注記イメージ作成プロセスの完了まで数分かかります。
作成したイメージには、最新パッケージがあれば、そのパッケージが追加され、オリジナルの
commit ID
を親とします。
結果として得られる RHEL for Edge イメージをホストにダウンロードします。
-
Images タブで をクリックして、RHEL for Edge Container (
.tar
) イメージをホストシステムに保存します。
-
Images タブで をクリックして、RHEL for Edge Container (
元のエッジイメージからプロビジョニングされた RHEL システムで、次の手順を実行します。
今回は子コミット ID を提供して Podman に RHEL for Edge Container イメージを読み込みます。
$ cat ./child-commit_ID-container.tar | sudo podman load
Podman
を実行します。# sudo podman run -p 8080:8080 localhost/edge-test
OSTree リポジトリーをアップグレードします。
# ostree --repo=/var/www/html/repo pull-local /tmp/ostree-commit/repo # ostree --repo=/var/www/html/repo summary -u
プロビジョニングされた RHEL システム上で、オリジナルの Edge イメージから、現在の状態を確認します。
$ rpm-ostree status
新しいコミット ID がない場合は、以下のコマンドを実行して、利用可能なアップグレードの有無を確認します。
$ rpm-ostree upgrade --check
利用可能な更新がある場合は、コマンドの出力は、現在アクティブな OSTree コミット ID など、OSTree リポジトリーで利用可能な更新に関する情報を提供します。その他に、利用可能な更新がないことをメッセージに通知するよう求められます。
OSTree を更新して、新しい OSTree のコミット ID を利用できるようにします。
$ rpm-ostree upgrade
OSTree は、リポジトリーに更新があるかどうかを確認します。ある場合は、更新を取得し、この新しいコミット更新のデプロイメントを有効化できるように、システムの再起動を要求します。
現在のシステムステータスを確認します。
$ rpm-ostree status
これで、コミットが 2 つあることが分かります。
- アクティブな親コミット。
- アクティブではなく、差異が 1 つ追加された新しいこミット。
新しいデプロイメントを有効にし、新しいコミットを有効にするには、システムを再起動します。
# systemctl reboot
Anaconda インストーラーは、新しいデプロイメントで再起動します。ログイン画面では、起動に利用可能な新しいデプロイメントが表示されます。
最新のコミットで起動するには、次のコマンドを実行して、新しいデプロイメントがリストの先頭になるようにブートエントリーを自動的に並べ替えます。
$ rpm-ostree upgrade
必要に応じて、キーボードの矢印キーを使用して GRUB メニューエントリーを選択し、
を押します。
- ログインユーザーのアカウント認証情報を提供してください。
OSTree の状態を確認します。
$ rpm-ostree status
コマンド出力は、アクティブなコミット ID を提供します。
変更したパッケージが存在する場合は、親コミットと新しいコミットの間で diff を実行します。
$ rpm-ostree db diff parent_commit new_commit
更新により、インストールしたパッケージが利用可能になり、すぐに使用できる状態になっていることがわかります。