KVM版 仮想HMC V9R2 インストール (RHEL8.4)


カーネル・ベース仮想マシン(KVM)ハイパーバイザーを使用して、IBM Powerシステム ハードウェア管理コンソール(HMC)仮想アプライアンス(以降、vHMC と記述する)のインストール手順を仮想化ホストの設定を中心に紹介する。

# 実行環境
以下の環境で実施した。

## ハードウェア
- IBM 7944-PKM X3550 M3
  - CPU: Xeon X5650 2.66GHz 6core
  - Memory: 48GB
  - Disk: 1TB

## ソフトウェア
- Red Hat Enterprise Linux 8.4
  - qemu-kvm.x86_64: 4.2.0-48
  - libvirt-daemon.x86_64:  6.0.0-35
  - virt-install.noarch: 2.2.1-4
- vHMC
  - Virtual HMC V9R2.950 for KVM (11/2020) 

## ネットワーク
外部接続用とPowerマシンHypervisor接続用との2インターフェースを使用する。ここではプライベートネットワークで実施している。

|物理インターフェース|用途|ネットワーク構成|備考|
|---|---|---|---|
|p11s0f0|接続用ネットワーク接続|Bridge構成|仮想化ホスト、vHMCで共用|
|p11s0f1|Powerシステム接続|Direct構成|vHMCのみ使用|

p11s0f0に対してBridge構成 (bridge1)を構成する。構成方法はここでは省略する。p11s0f1は11s0f1は仮想化ホストで使用しないのでDirect構成と使用する。

## その他
仮想化ホストシステムは、RHEL 8.4を「GUIサーバーグループ」でインストール済。リポジトリー設定済み。
```plaintext
# hostnamectl
   Static hostname: rheles249
         Icon name: computer-server
           Chassis: server
        Machine ID: 074d1dfd2cf24c23b13752b4efac0afa
           Boot ID: 37c671a9104c4a9d8079da59be72a6c1
  Operating System: Red Hat Enterprise Linux 8.4 (Ootpa)
       CPE OS Name: cpe:/o:redhat:enterprise_linux:8.4:GA
            Kernel: Linux 4.18.0-305.el8.x86_64
      Architecture: x86-64
```

# 準備作業
## 仮想化機能の使用可能化

下記仮想化パッケージ一式と関連パッケージをインストールする。

- libvirt 
- virt-install 
- virt-manager
- qemu-kvm
- qemu-img

```plaintext
# dnf install qemu-kvm qemu-img libvirt virt-install virt-manager
```

仮想化ホストの検証する。
```plaintext
# virt-host-validate
```
この環境では、IOMMUについて警告が発生したので、[付録G PCI パススルーを有効にするためのホストの設定](https://access.redhat.com/documentation/ja-jp/red_hat_virtualization/4.1/html/installation_guide/appe-configuring_a_hypervisor_host_for_pci_passthrough)を参照して解決した。

仮想化サービスを始動する。
```plaintext
# systemctl start libvirtd
# systemctl enable libvirtd
```

# vHMCのインストール
仮想化ホストの準備が整ったので仮想ゲストOSとしてHMCをインストールする。
## vHMCインストールイメージの入手
vHMCインストールイメージを入手し、展開する。
ここでは下記のイメージファイルを入手した。
```plaintext
VIRTUAL_HMC_V9.2.950_FOR_KVM.tar.gz
```
イメージ配置用ディレクトリーを作成して配置する。このディレクトリーの下にディスクイメージを展開してVMを構成する。したがって、十分なスペースがあることを確認しておく。
```plaintext
# mkdir -p /data/images
# cd /data/images
# ls
VIRTUAL_HMC_V9.2.950_FOR_KVM.tar.gz
```
ファイルを展開する。
```plaintext
# mkdir hmc01
# cd hmc01
# gunzip -c ../VIRTUAL_HMC_V9.2.950_FOR_KVM.tar.gz |tar -xvf 
```


## 仮想ゲストOS作成準備
ファイルを確認する。
```plaintext
# ls -l
total 23940676
-rw-r--r--. 1 root root         8551 Oct 23  2020 checksum
drwxr-xr-x. 5 root root          213 Apr 21 16:25 data
-rw-r--r--. 1 root root 536870912000 Oct 23  2020 disk1.img
-rw-r--r--. 1 root root         1676 Oct 23  2020 domain.xml
-rw-r--r--. 1 root root         6746 Oct 23  2020 Readme.html
-rw-r--r--. 1 root root        60801 Oct 23  2020 user_data
```

domain.xmlをエディターを使用して編集する。
該当タグの内容を使用環境に合わせてそれぞれ変更する。- がオリジナルで + が変更後を表す。

## name
任意の名前に変更する。仮想ゲストOS名になるのでわかりやすい名前にする。この例は```hmc01```とした。
```diff
- <name>vHMC</name>
+ <name>hmc01</name>
```

## os

属性 machineを```q35```に変更します。
```diff
  <os>
-   <type arch='x86_64' machine='rhel6.4.0'>hvm</type>
+   <type arch='x86_64' machine='q35'>hvm</type>
    <boot dev='hd'/>
  </os>
```
q35に変更する理由に興味がある方は文末の[【参考】osの属性をq35に変更した理由](#ref1)を参照

## disk (device='cdrom')

cdromの属性busを```sata```に変更する。
```diff
  <devices>
    <disk type='file' device='cdrom'>
-     <target dev='hdc' bus='ide'/>
+     <target dev='hdc' bus='sata'/>
      <readonly/>
    </disk>
        :
  </devices>
```

## disk (device='disk')

上述の手順で保管したディスクイメージファイルのパス```/data/images/hmc01/disk1.img```を設定する。また、ディスクドライブは1個だけなので2個目の設定は削除する。

```diff
  <devices>
        :
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
-     <source file='DISK_PATH'/>
+     <source file='/data/images/hmc01/disk1.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>
-   <disk type='file' device='disk'>
-     <driver name='qemu' type='raw'/>
-     <source file='AEDISK'/>
-     <target dev='vdb' bus='virtio'/>
-   </disk>
```


## interface

あらかじめ設定したインターフェースに合わせて変更と追加を行う。

bridge1:    外部接続用 (VMホストとvHMCで共用)
esp11s0f1:  vHMCとPowerシステムHMCポートを接続 (VMホストは不使用)

```diff
  <devices>
        :   
    <interface type='bridge'>
-     <mac address='MAC_ADDRESS'/>
-     <source bridge='eth0'/>
-     <target dev='vnet0'/>
+     <source bridge='bridge1'/>
      <model type='virtio'/>
    </interface>
+   <interface type='direct'>
+     <source dev='enp11s0f1' mode='bridge'/>
+     <model type='virtio'/>
+   </interface>
```


<details><summary>domain.xmlの設定例</summary>

```plaintext
   <domain type='kvm'>
  <name>hmc01</name>
  <uuid></uuid>
  <memory unit='GB'>8</memory>
  <currentMemory unit='GB'>8</currentMemory>
  <vcpu placement='static'>4</vcpu>
  <os>
    <type arch='x86_64' machine='q35'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='cdrom'>
      <target dev='hdc' bus='sata'/>
      <readonly/>
    </disk>
    <rng model='virtio'>
      <rate period='2000' bytes='1234'/>
      <backend model='random'>/dev/random</backend>
    </rng>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/data/images/hmc01/disk1.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <source bridge='bridge1'/>
      <model type='virtio'/>
    </interface>
    <interface type='direct'>
      <source dev='enp11s0f1' mode='bridge'/>
      <model type='virtio'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <video>
      <model type='vga'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>
```
</details>


## 仮想ゲストOSを作成する
上記で編集したdomain.xmlを用いて、ゲスト用OSを作成する。
```plaintext
# virsh define domain.xml
Domain hmc01 defined from domain.xml

# virsh list --all
 Id   Name    State
------------------------
-    hmc01   shut off
```
> **(補足) 仮想ゲストOSの削除**
> 
> 何らかの支障があった場合は仮想ゲストOSを削除して再定義する。
>```plaintext
> # virsh undefine hmc01
> Domain hmc01 has been undefined
>```
<br>

## vHMC(仮想ゲストOS)始動
vHMCを始動する。
```plaintext
# virsh start hmc01
```

VNC接続するためのアドレスを取得する。
```plaintext
# virsh vncdisplay hmc01
127.0.0.1:1
```
デスクトップ画面(GNOME)でターミナルと起動し、VNCビューアーを始動してHMCのコンソールを表示する。
```plaintext
# vncviewer 127.0.0.1:1
```

## vHMCの初期設定

VNCビューアーにコンソールが表示される。Linuxが起動され、vHMCのDisplay設定がウィンドウが表示される。
![KVM版vHMCインストール_HMC初期設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2580369/b486b2a0-e672-6888-c092-0b2e9d9eadc6.png)
30秒何も入力しないと先に進むが、最初に設定をしておく。後から再設定可能であるが、最初に設定を済ませ、再起動時間の短縮のために再度設定パネルがでないようにする。

> これ以降は通常のHMCの初期設定と同じである。

# おわりに
これにより、ハードウェア版HMCを置き換えて使用できる。現在、仮想HMCはバージョン10がリリースされているが、この手順を活用してインストールできる。

## <a name="ref1"></a> 【参考】osの属性をq35に変更した理由

  <details><summary>(詳細を参照する場合は展開する)</summary>
デフォルト設定の下記指定のままで仮想ゲストOSを作成して始動>した場合は下記のエラーが発生する。

```plaintext
error: internal error: process exited while connecting to monitor: 2022-04-21T08:17:43.712693Z qemu-kvm: -machine rhel6.4.0,accel=kvm,usb=off,dump-guest-core=off: unsupported machine type
Use -machine help to list supported machines
```

これは、RHEL8のKVMは、RHEL 7.0 以降のゲストOSをサポートしているためにrhel6.4ではサポート外のためエラーが発生する。サポートしているOSを表示すると下記のリストとなる。
```plaintext
# /usr/libexec/qemu-kvm -machine help
Supported machines are:
pc                   RHEL 7.6.0 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-rhel7.6.0)
pc-i440fx-rhel7.6.0  RHEL 7.6.0 PC (i440FX + PIIX, 1996) (default)
pc-i440fx-rhel7.5.0  RHEL 7.5.0 PC (i440FX + PIIX, 1996)
pc-i440fx-rhel7.4.0  RHEL 7.4.0 PC (i440FX + PIIX, 1996)
pc-i440fx-rhel7.3.0  RHEL 7.3.0 PC (i440FX + PIIX, 1996)
pc-i440fx-rhel7.2.0  RHEL 7.2.0 PC (i440FX + PIIX, 1996)
pc-i440fx-rhel7.1.0  RHEL 7.1.0 PC (i440FX + PIIX, 1996)
pc-i440fx-rhel7.0.0  RHEL 7.0.0 PC (i440FX + PIIX, 1996)
q35                  RHEL-8.2.0 PC (Q35 + ICH9, 2009) (alias of pc-q35-rhel8.2.0)
pc-q35-rhel8.2.0     RHEL-8.2.0 PC (Q35 + ICH9, 2009)
pc-q35-rhel8.1.0     RHEL-8.1.0 PC (Q35 + ICH9, 2009)
pc-q35-rhel8.0.0     RHEL-8.0.0 PC (Q35 + ICH9, 2009)
pc-q35-rhel7.6.0     RHEL-7.6.0 PC (Q35 + ICH9, 2009)
pc-q35-rhel7.5.0     RHEL-7.5.0 PC (Q35 + ICH9, 2009)
pc-q35-rhel7.4.0     RHEL-7.4.0 PC (Q35 + ICH9, 2009)
pc-q35-rhel7.3.0     RHEL-7.3.0 PC (Q35 + ICH9, 2009)
none                 empty machine
```

vHMC V9.2.950のベースはRHEL8なので```q35```を選択する。また、ここで```q35```とした場合は、```disk```タグのdevice```cdrom```のbus設定を```sata```に変更する。これは、```ide```をサポートしていないためで、サポートしているbusの```sata```を指定する。```ide```のままで、仮想ゲストOSを定義すると下記のエラーが発生する。
```plaintext
error: unsupported configuration: IDE controllers are unsupported for this QEMU binary or machine type
```
</details>


# 参考資料
- [KVM ハイパーバイザーを使用した HMC 仮想アプライアンスのインストール](https://www.ibm.com/docs/ja/power8?topic=ihvax-installing-hmc-virtual-appliance-by-using-kvm-hypervisor)
- [Red Hat Enterprise Linux8 仮想化の設定および管理](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_virtualization/index)