8.10. オフライン環境およびエアギャップ環境でイメージモードアップデートを展開する
Red Hat Enterprise Linux のイメージモードを使用すると、外部ストレージを使用してコンテナーイメージを転送することで、オフライン環境やエアギャップ環境にある RHEL システムにアップデートをデプロイできます。
イメージモードのアップデートをホストマシンに展開するには、レジストリーにアクセスしてアップデートを取得するためのネットワーク接続が必要です。ただし、ハードウェア仕様、厳格なセキュリティー要件、場所に基づくネットワーク制限、リモートアクセスが利用できない場合のスケジュールされたアップデートなど、運用環境で特定のアーキテクチャー要素が求められる場合は、システムアップデートを完全にオフラインかつエアギャップで実行できます。
オフラインアップデートは、多くのデバイスで使用する場合、時間がかかることがあり、アップデートを展開するために現場での作業が必要になる場合もあります。
前提条件
- 実行中の RHEL システムで、システムに対して行いたいアップデートが含まれているもの。
- 対象ハードウェア上に Red Hat Enterprise Linux 9 がデプロイされた、稼働中の RHEL システム。
-
container-toolsメタパッケージがインストールされている。メタパッケージには、Podman、Buildah、Skopeo などのコンテナーツールがすべて含まれています。 - レジストリーまたはローカルに保存されたコンテナーへのアクセス。
- コンテナー用の外部ストレージデバイスのアップデートが必要です。
手順
システムにすでに接続されているストレージデバイスを確認してください。
$ lsblk NAME MAJ:MIN SIZE RO TYPE MOUNTPOINTS zram0 251:0 8G 0 disk [SWAP] nvme0n1 259:0 476.9G 0 disk ├─nvme0n1p1 259:1 600M 0 part /boot/efi ├─nvme0n1p2 259:2 1G 0 part /boot └─nvme0n1p3 259:3 475.4G 0 part外部ストレージを接続して、同じコマンドを実行してください。2 つの出力結果を比較して、システム上の外部ストレージデバイスの名前を確認してください。
$ lsblk NAME MAJ:MIN SIZE RO TYPE MOUNTPOINTS sda 8:0 28.9G 0 disk └─sda1 8:1 28.9G 0 part zram0 251:0 8G 0 disk [SWAP] nvme0n1 259:0 476.9G 0 disk ├─nvme0n1p1 259:1 600M 0 part /boot/efi ├─nvme0n1p2 259:2 1G 0 part /boot └─nvme0n1p3 259:3 475.4G 0 partこの場合、
sdaという名前の USB ドライブにはsda1パーティションがあります。マウントポイント列には、外部ストレージ上のパーティションのマウントポイントが表示されます。システムが外部ストレージを自動的にマウントする場合、有効なマウントポイントはすでに存在します。ただし、マウントポイントがない場合は、デバイスにデータを保存する前に、自分でマウントする必要があります。パーティションをマウントするには、空のディレクトリーを作成するか、既存のディレクトリーを使用してください。
$ sudo mkdir /mnt/usb/デバイスのパーティションをマウントします。
$ sudo mount /dev/sda1 /mnt/usbオプション: パーティションが正しく作成されたかどうかを確認します。
$ lsblk NAME MAJ:MIN SIZE RO TYPE MOUNTPOINTS sda 8:0 28.9G 0 disk └─sda1 8:1 28.9G 0 part /mnt/usb [...]外部ストレージデバイスにファイルをコピーする準備が整いました。
skopeoコマンドを使用して、ローカルに保存されているコンテナーをマウントされたデバイスにコピーし、コンテナーのパスと名前を自分の環境に合わせて変更してください。ローカルストレージの場合:
$ sudo skopeo copy --preserve-digests --all \ containers-storage:localhost/rhel-container:latest \ oci://mnt/usb/リモートレジストリーに保存されているコンテナーの場合:
$ sudo skopeo copy --preserve-digests --all \ docker://quay.io/example:latest \ oci://mnt/usb/注記コンテナーのサイズによっては、これらのコマンドの実行に数分かかる場合があります。
外部ストレージのマウントを解除して取り出します。
$ sudo umount /dev/sda1 $ sudo eject /dev/sda1- オフラインシステムのコンテナーにアップデートを適用してください。
-
外部ストレージデバイスをオフラインシステムに接続してください。ストレージデバイスが自動的にマウントされない場合は、
mkdir コマンドとmountコマンドを使用して外部ストレージの場所を特定し、マウントしてください。 外部デバイスからコンテナーをオフラインシステムのローカルコンテナーレジストリーにコピーします。コンテナーをオフラインマシンのローカルコンテナーストレージにコピーします。
$ skopeo copy --preserve-digests --all \ oci://mnt/usb \ containers-storage:rhel-update:latestこの場合、外部ストレージのマウントポイントは
OCIセクションへのパスとなり、コンテナーストレージセクションはコンテナーに付ける名前とタグによって異なります。Podman を使用して、コンテナーがローカルに存在することを確認してください。
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE example.io/library/rhel-update latest cdb6d... 1 min 1.48 GBbootc を使用して、オフラインシステムのコンテナーにアップデートをデプロイします。$ bootc switch --transport containers-storage \ example.io/library/rhel-update:latestコンテナーをローカルストレージにコピーできない場合は、代わりに
OCI トランスポートフラグとストレージデバイスへのパスを使用してください。$ bootc switch --transport oci /mnt/usbbootc スイッチコマンドの--transportフラグを使用すると、コンテナーの代替ソースを指定できます。デフォルトでは、
bootc はレジストリーからイメージを取得しようとします。これは、bootc-image-builder がレジストリーを使用して元のイメージをビルドするためです。bootc upgrade を使用する場合、アップデートの場所を指定する方法はありません。bootc スイッチを使用し、ローカルコンテナーストレージを使用することを指定することで、リモートレジストリーの必要性を排除できるだけでなく、将来的にこのローカルコンテナーを使用してアップデートを展開することも可能になります。ローカルコンテナーとアップデートファイルが同じ場所に保存されている場合、
bootc アップグレードを正常に実行できるようになりました。今後、リモートリポジトリーのアップデートに切り替えたい場合は、再度bootc switch コマンドを使用する必要があります。
検証
アップデートが正しく展開されたことを確認してください。
$ bootc status Staged image: containers-storage:example.io/library/rhel-update:latest Digest: sha256: 05b1dfa791... Version: 9.0 (2025-07-07 18:33:19.380715153 UTC) Booted Image: localhost/rhel-intel:base Digest: sha256: 7d6f312e09... Version: 9.0 (2025-06-23 15:58:12.228704562 UTC)出力には、現在起動しているイメージと、今後実行される予定の変更内容が表示されます。以前使用したコンテナーは表示されますが、段階的に行われた変更は次回の再起動まで反映されません。出力結果から、アップデートがコンテナーストレージから取得されることも確認できます。
システムを再起動します。
$ bootc status Booted image: containers-storage:example.io/library/rhel-update:latest Digest: sha256: 05b1dfa791... Version: 9.0 (2025-07-07 18:33:19.380715153 UTC) Rollback image: localhost/rhel-intel:base Digest: sha256: 7d6f312e09... Version: 9.0 (2025-06-23 15:58:12.228704562 UTC)正しいイメージで起動したかどうかを確認できます。
- 起動したイメージは、更新されたイメージです。
- ロールバックイメージとは、以前のイメージのことです。オフラインイメージモードのアップデートが正常に完了しました。