VMware ESXi arm editionで各種Linuxディストリビューションを試す+USBブートしてみる

#始めに

VMwareのESXiのarm editionがraspberry pi 4で動作するようになりました。インストール方法は[公式](https://flings.vmware.com/esxi-arm-edition)に詳しく出ているので、それに沿って行えばできます。しかし、そこからvmを作成するのに右往左往したので、メモに残します。ただ、実験的に方法を探っただけで、公式的なやり方とは思えないので、公式があるようでしたらコメントいただけるとありがたいです。
あと、USBブートが意外と簡単にできたので、それもレポートします。

#参考ページ

[ESXi arm edition公式](https://flings.vmware.com/esxi-arm-edition)

[Ubuntu 20.10 aarch64](http://cdimage.ubuntu.com/ubuntu/releases/20.10/release/)

[CentOS 8 aarch64 generic image](https://people.centos.org/pgreco/CentOS-Userland-8-stream-aarch64-generic-Minimal/)

[Fedora 33 aarch64 image](https://getfedora.org/ja/workstation/download/)

#用意するもの

- raspberry pi 4版ESXi arm edition
  [公式](https://flings.vmware.com/esxi-arm-edition)に従ってインストール、動作確認をしてください。このページの左のDownloadボタンの上のメニューから「Fling-on-Raspberry-pi.pdf」を選択してダウンロードすると、詳細なインストラクションがあります。なお、インストールにはPi4 8GB or 4GB、SDカード、USB接続のSSD/HDDが必要となります。
- Linux PC vmイメージのさばけるHDDの容量があって、qemuがインストールされている必要があります。筆者はRaspberry Pi 4にHDDをつけてUbuntuを動作させている環境で行いました。
- Windows PC 各種作業用

#VMのクリエイト①　Ubuntu編

Ubuntuにはaarch64のインストーラISOイメージがあり、機能するので、通常の方法でインストール可能です。FedoraもインストーラISOがあり、インストールするのですが、grabのインストールに失敗し、動きません。

(1) まず[Ubuntu 20.10 aarch64](http://cdimage.ubuntu.com/ubuntu/releases/20.10/release/)から、インストーラISOを作業用PCにダウンロードします。

(2) ブラウザのESXi画面左からStorageを選択して、Data Store browserを開きます。

![スクリーンショット 2020-10-31 101045.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/cece170d-4c1d-a562-126b-94be5eee6778.jpeg)

Uploadを開いてダウンロードしたISOファイルをアップロードします。

![スクリーンショット 2020-10-31 101244.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/e61ad4c1-c48d-88b8-7336-e76caf44656a.jpeg)

(3) VMのCreateをします。Virtural Machines->Create/Register VMを選択します。

![スクリーンショット 2020-10-31 102645.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/375b73bc-dafc-b441-aae8-9a5bf47600d4.jpeg)

Create a new virtural machineを選択してnext

![スクリーンショット 2020-10-31 103023.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/17654c5f-204e-3262-ae89-0b984526df20.jpeg)

適当な名前と、ESXi 7.0 virtural machine、Linux、Ubuntu Linux (64bit)を選択してnext

![スクリーンショット 2020-10-31 103504.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/1f7eb55f-6c32-abe1-d93e-7e4095432a81.jpeg)

次は適当なストレージを選択して（多分１つしかない）next
次でISOファイルを選択します。
まずCPUは適当に2くらいにします。多分４は無理です。（ずっとESXiがとっている）メモリは4GB版なら2GBくらいにしておきます。HDDは使用しているディスクと相談の上、小さすぎないようにします。実験であればデフォルトでOK。
下の方のCD/DVD Drive 1の選択肢をDatastore ISOファイルにします。ファイル選択画面になるので、先ほどアップロードしたファイルを選択します。

![スクリーンショット 2020-10-31 104230.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/826c11ca-fe39-e065-dd22-9079223ffbb4.jpeg)

Connectにチェックが入っていることを確認してnext

![スクリーンショット 2020-10-31 104425.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/50849820-2e97-b60f-566b-0d668c33d1b3.jpeg)

next、finishで終わりです。多分virturalboxとかの経験ある人は特に問題ないと思います。

(4)新しくCreateされたVMを起動します。クリックしてPower on、指示に従ってください。

#VMのクリエイト②　CentOS編
CentOSでは、探したところaarch 64はインストーラISOが無く、インストールされたディスクrawイメージが配布されています。これをESXiに持っていく必要があるのですが、ここで試行錯誤して起動成功させました。まず、イメージとしてraspberry pi用のイメージはNGのようです。どうやらブートが特殊でブートしません。Arm一般向けのgenericイメージが動作しました。以下、手順です。

(1)前準備、ESXiのsshポートを開きます。ESXiブラウザ画面左NavigatorのManageを開きます。項目の中からTSM-SSHを選択し、Startを押します。Runningになればsshできます。
ログインの仕方も癖があります。teratarmを開いて、ホストを選択後、ユーザー名（ここではroot）を書いたあと、その下にパスワードを入れてもダメです。メニューの下の方にあるキーボードインタラクティブ認証を使う　を選択してください。次にパスワードを入れる画面になるので、パスワードを入れるとログインできます。あとでコンソールを使います。

![スクリーンショット 2020-10-31 091724.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/6f2402c5-9246-9678-d134-f75e6f838515.jpeg)


![スクリーンショット 2020-10-31 092222.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/b66b8d8b-074d-b935-7d53-6496e615ff01.jpeg)

VMデータを置くストレージは以下の場所になります。

```
# cd /vmfs/volumes/datastore1/
```

(1)作業用Linux PCにrawイメージをダウンロードして解凍します。

```
$ wget https://people.centos.org/pgreco/CentOS-Userland-8-stream-aarch64-generic-Minimal/CentOS-Userland-8-stream-aarch64-generic-Minimal-sda.raw.xz
$ unxz CentOS-Userland-8-stream-aarch64-generic-Minimal-sda.raw.xz
```

(2) qemuを使って、VMware用のディスクイメージであるvmdkファイルを作成します。

```
$ qemu-img convert -f raw -O vmdk CentOS-Userland-8-stream-aarch64-generic-Minimal-sda.raw centos.vmdk
```

(3)SCP を使ってvmdkファイルをESXiに転送します。(0)のsshポートが開いていることに注意してください。

```
$ scp centos.vmdk root@<ESXiのアドレス>:/vmfs/volumes/datastore1/
```

(4) (1)で開いたESXiのsshコンソールに行き、転送したファイルがあることを確認してください。そして以下を実行。

```
# vmkfstools -i centos.vmdk centos_2.vmdk
Destination disk format: VMFS zeroedthick
Cloning disk 'centos.vmdk'...
Clone: 100% done.
```

これは、qemuで作成できる.vmdkファイルがESXiでは動作しないバージョンのため変換が必要とのことです。

(5)これでやっとブラウザからの作業になります。VMのCreateをします。Virtural Machines->Create/Register VMを選択します。OSはCentOS 8を選択してください。Customize Settingsで、Hard Disk 1の右端にある×を押して消去します。代わりに新しいハードディスクを登録します。Add hard disk->Existing hard diskでファイルを選択できるようになるので、変換後のvmdk(この場合centos_2.vmdk)を選択してください。あとはいいように調整をして、Createを完了してください。あとは、VMを選択して起動すればOSが起動するはずです。

#Fedora 33
CentOSと全く同じ方法で起動しました。
ファイルは以下を使用しました。

```
$ wget https://dl.fedoraproject.org/pub/fedora/linux/releases/33/Workstation/aarch64/images/Fedora-Workstation-33-1.3.aarch64.raw.xz
```

#ESXiのUSB HDDからの起動
公式のESXiインストールでは、次回ブートもSDカードが必要となります。せっかくRaspberry Pi 4がUSBブート可能なのにもったいないと思いまして、少し検討をしました。最初はESXiのHDDのpartitionを少しずつずらしてスペースを作り、SDカードのブートを入れようとしましたが、gpartedでは歯が立たない。よく観察すると、HDD BOOTパーティションがあり、bootableフラッグも設定されています。中をのぞくとEFIのブート関連が入っており、直下はEFIディレクトリのみです。もしかしたら、ここにRaspberry Piのブート、つまりSDカードの中身を入れればうまくいくかと思い、やってみたところ、SDカード無しでブートしました。ちょっと便利になりました。
上の文章でやり方わからない人のために。
(1) Linux PCにSDカードの中身をコピーしておきます。USBメモリ等を使用してください。
(2) Linux PCにESXiのHDDを接続します。fdisk -lで確認します。

```
$ sudo su
# fdisk -l
```

　接続したHDDのデバイス名を確認します。ここでは/dev/sdbとします。

(3) /dev/sdb1をマウントします。コピーしてきたSDカードのファイルが/home/pi/boot/の下にあるとすると、以下のようになります。

```
# mount /dev/sdb1 /mnt
# cp -r /home/pi/boot/* /mnt
# umount /mnt
```

取り外して、sdカード無しでブートするかどうか試して下さい。

#終わりに
VMwareは仕事でユーザとして使ったことがあるくらいであったため、最悪壊してもいいホストOS環境を構築できて、いろいろ実験できるのはなかなか楽しいものです。個人的にはvirtualboxのホストがPi4にできるといいかも、と思っております。