7.11. オフライン環境およびエアギャップ環境でイメージモード更新をデプロイする
Image Mode for Red Hat Enterprise Linux を使用すると、コンテナーイメージを外部ストレージで転送することで、オフライン環境やエアギャップ環境の RHEL システムに対しても更新をデプロイできます。
イメージモードの更新をホストマシンにデプロイするには、レジストリーにアクセスして更新を取得するためのネットワーク接続が必要です。ただし、ハードウェア仕様、厳格なセキュリティー要件、場所に基づくネットワーク制限、リモートアクセスが利用できない場合のスケジュールされた更新など、運用環境で特定のアーキテクチャー要素が求められる場合は、システム更新を完全にオフラインかつエアギャップで実行できます。
オフライン更新を多数のデバイスに対して実行する場合、多大な時間を要する可能性があります。また、更新のデプロイにはオンサイト対応が必要になる場合があります。
前提条件
- システムに対して行いたい更新が実行中の RHEL システムに含まれている。
- 対象ハードウェア上に、Red Hat Enterprise Linux 10 がデプロイされた稼働中の RHEL システム。
-
container-toolsメタパッケージがインストールされている。meta-packageには、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パーティションがあります。MOUNTPOINTS列には、外部ストレージ上のパーティションのマウントポイントがリスト表示されます。システムが外部ストレージを自動的にマウントする場合、有効なマウントポイントはすでに存在します。ただし、マウントポイントがない場合は、デバイスに保存する前に、自身分でマウントする必要があります。パーティションをマウントするには、空のディレクトリーを作成するか、既存のディレクトリーを使用します。
$ 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セクションへのパスとなります。containers-storageセクションの内容は、コンテナーに付ける名前やタグによって異なります。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 transportフラグとストレージデバイスへのパスを使用します。$ bootc switch --transport oci /mnt/usbbootc switchコマンドの--transportフラグを使用すると、コンテナーの代替ソースを指定できます。デフォルトでは、
bootcはレジストリーからイメージをプルしようとします。これは、bootc-image-builderがレジストリーを使用して元のイメージをビルドするためです。bootc upgradeを使用する場合、更新の場所を指定できません。bootc switchを使用し、ローカルコンテナーストレージを使用することを指定することで、リモートレジストリーの必要性を排除できるだけでなく、将来的にこのローカルコンテナーを使用して更新をデプロイすることも可能になります。ローカルのコンテナーと更新が同じ場所に配置されている場合、
bootc upgradeを正常に実行できるようになりました。今後、リモートリポジトリーの更新に切り替えたい場合は、再度bootc switchを使用する必要があります。
検証
更新が正しくデプロイされたことを確認します。
$ bootc status Staged image: containers-storage:example.io/library/rhel-update:latest Digest: sha256: 05b1dfa791... Version: 10.0 (2025-07-07 18:33:19.380715153 UTC) Booted Image: localhost/rhel-intel:base Digest: sha256: 7d6f312e09... Version: 10.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: 10.0 (2025-07-07 18:33:19.380715153 UTC) Rollback image: localhost/rhel-intel:base Digest: sha256: 7d6f312e09... Version: 10.0 (2025-06-23 15:58:12.228704562 UTC)正しいイメージで起動したか確認できます。
- 起動したイメージは、更新されたイメージです。
- ロールバックイメージは、以前のイメージです。オフラインイメージモードの更新が正常に完了しました。