VMware vSphere ESXi 上の RHEL8.6 を RHEL8.10 にオフラインアップデートする

## はじめに

2024年5月22日に、 Red Hat Enterprise Linux 8.10 がリリースされました。

閉域環境等、Red Hat のリポジトリに接続できない環境から RHEL8.6 を RHEL8.10 にアップデートしましたので、参考としてその記録を残します。

単純に言うと、 VMware および Red Hat が公開しているいくつかの公式手順を組み合わせて実施しました。

RHEL の OS をオフラインアップデートする手順としては、下記を利用します。

https://access.redhat.com/support/policy/updates/errata

利用する ISO は、下記よりダウンロードします。

https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.10/x86_64/product-software

また、 RHEL の VM は ESXi 上にあったため、ISO のマウント等は vSphere Client (vCenter Server)、または VMware Host Client (ESXi Server) 経由で行います。

手順としては下記を参照しました。

https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-492D6904-7471-4D66-9555-9466CCCA6931.html

https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-C58B93A7-52CF-456D-95C1-8B5A906C9619.html

https://knowledge.broadcom.com/external/article/323155/cdrom-linux.html

## 環境

* VMware vSphere 7.0 (ESXi + vCenter Server)
* Red Hat Enterprise Linux 8.6 (構築時はインターネットに接続可能な環境で Red Hat のリポジトリを利用してインストール、その後閉鎖環境に移動)

## 流れ

大まかな流れは下記の通りです。

* Red Hat のサイトから ISO をダウンロード
* ISO をデータストアにアップロード
* VM に ISO を接続
* リポジトリの構成
* アップデートの実施
* OS 再起動の実施
* VM と ISO ファイルの接続を解除

以下、各手順について補足していきます。

## 手順

### Red Hat のサイトから ISO をダウンロード

https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.10/x86_64/product-software

のサイトから ISO ファイルをダウンロードします。

「Full installation image」と記載されている、 13.3GB のバイナリファイルをダウンロードします。ダウンロード後、 `sha256sum` コマンドを利用し、 CheckSum を確認しておくとよいでしょう。

### ISO をデータストアにアップロード

ISO をデータストアにアップロードします。

vSphere Client (vCenter Server の Web UI)、または VMware Host Client (ESXi Server の Web UI) から行えます。

手順は下記です。

https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-492D6904-7471-4D66-9555-9466CCCA6931.html

### VM に ISO を接続

VM の設定の編集をクリックし、「CD/DVD Drive」の項目から「Datastore ISO file」を選択します。

アップロードした ISO ファイルをクリックし、「Connect」のチェックボックスをクリックすることで VM に ISO を接続できます。

手順は以下の通りです。前提条件として「仮想マシンがパワーオフされていること」とありますが、私の検証環境では起動したままでも実施できました。

https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-C58B93A7-52CF-456D-95C1-8B5A906C9619.html

正常に完了すると、 VM から /dev/cdrom のパスで ISO ファイルにアクセスできるようになります。

### リポジトリの構成

下記のナレッジに従い、リポジトリを構成します。

BaseOS という名称のリポジトリと、 AppStream という名称のリポジトリを作成することができると思います。

https://access.redhat.com/support/policy/updates/errata

### アップデートの実施

リポジトリが構成できたら、アップデートを実施します。実行前後で VM のスナップショットを取得しておくとよいでしょう。

```
dnf --disablerepo=* --enablerepo=BaseOS,AppStream update
```

私の検証環境では、なぜか依存関係がうまく解決されず、以下のようなエラーが発生しました。

```
Problem: package python3-policycoreutils-2.9-25.el8.noarch requires python3-libsemanage >= 2.9-7, but none of the providers can be installed
  - package policycoreutils-python-utils-2.9-25.el8.noarch requirespython3-policycoreutils = 2.9-25.el8, but none of the providers can be installed
  ...(以下略)
```

不足していると言われたパッケージを個別にインストールすることで解消され、その後再度アップデートを実行すると正常に完了しました。

```
dnf --disablerepo=* --enablerepo=BaseOS install python3-libsemanage
```

### OS の再起動

kernel のアップデートに伴い再起動が必要なので、 OS の再起動を行います。

OS を停止、 vSphere Client 等管理コンソール画面から起動します。

```
shutdown -h now
```

### VM と ISO ファイルの接続を解除

最後に、 VM と ISO ファイルの接続を解除します。必須ではありませんが、私の作業においては 4台の VM を順次アップデートせねばならなかったため、この手順が必須でした。

VM に接続された ISO を他の VM に接続するためには、一度元の VM との接続を解除する必要があるためです。

下記の手順の通り、 VM上で `eject cdrom` コマンドを実行します。

その後 VM の設定編集画面を確認すると、「Connect」のチェックボックスのチェックが外れていることが確認できます。

手順は下記です。

https://knowledge.broadcom.com/external/article/323155/cdrom-linux.html

こちらに記載してある通り、 `eject cdrom` を実行せず、「Connect」のチェックボックスを手動で外す操作によって ISO の接続を解除しようとすると、 VM が一時的に応答を停止するため注意してください。

## おわりに

以上です。ご参考になれば幸いです。

なお実施に際しては参考程度にとどめ、 実際に実施する際は検証環境でのテスト、各種ベンダサポートの利用等をご検討いただけますようお願いします。