ESXi ARM on Rasberry Pi 4B

## 概要
* ESXi(ARM版)がラズパイ上で動くことをしったので試してみます。
* ラズパイと備品があれば、OSは無償なのですぐに試せます。
* ドキュメントありますが、英語だったので備忘録として残します。

## 準備
* OS
  * ESXi Arm Edition
      * [VMware Flings](https://flings.vmware.com/esxi-arm-edition)からダウンロードが可能です。
      * バージョンは、7.0.0-17839012でした。
* ラズパイ4B
  * ラズパイは 4G or 8G が必要とのことなので注意です。
  * 個人の事情により今回は8Gを使っています。
  * Amazomより購入: [正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK 技適マーク入 ヒートシンク（3個）付き](https://www.amazon.co.jp/gp/product/B0894KF95L)
* micro SD x 1(2個あった方が良い)
  * EEPROM用
  * UEFI用
      * 1個でも良いが後述するパーティションの削除が必要
* USBメモリ(SDカード) x 2
  * ISOインストーラー用
  * OSインストール先のローカルディスク用

## 手順
### EEPROMの最適化（やらなくてもいいかも）
* 初めて知りましたが、USBの安定動作につながるようです。

1. [Raspberry Pi Imager Tool](https://www.raspberrypi.org/software/)をダウンロード
2. Raspberry Pi Imager Toolを起動して micro SDカードへラズパイをインストールします。
3. インストールしたSDカードを利用してラズパイを起動させるとOSが起動するのでウィザードに従って初期設定をすると自動的にアップデートされます。
4. 起動したらシャットダウンしてmicro SDカードの役目は終了

### UEFI用のmicro SDカードの作成
1. 下記の2種類をダウンロードします。
  * [Raspberry Pi Firmware](https://github.com/raspberrypi/firmware/archive/master.zip)
  * [Raspberry Pi 4 UEFI firmware](https://github.com/pftf/RPi4/releases/download/v1.20/RPi4_UEFI_Firmware_v1.20.zip)
2. micro SDカードをフォーマット(初期化)します。
  * 私はEEPROMの最適化で利用したmicro SDカードを利用しました。
      * **SDカードを再利用する場合は本作業の前に必ずbootパーティションを削除してください。**
      * 削除しないとカーネルパニックになり正常に起動しなくなります。
          * `kernel panic (Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2))`
  * Windows PCならSDカードを挿入するとウィザードが表示されるため画面の指示に従うだけでOKです。
  * やることは2つ
     * ラベル: UEFI
     * ファイルシステム: FAT32
     
  　![format.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894039/dd81bb2e-a421-465d-fcb8-d86d39fb97f0.png)

3. Raspberry Pi Firmwareを展開し下記をmicro SDカードへコピーします。
    * コピー元: `firmware-master.zip\firmware-master\boot`配下すべて
       * その際ファイル名が`kernel*.img`のものは削除しておいてください
    * コピー先: 2.でフォーマットしたmicro SDカード直下

4. Raspberry Pi 4 UEFI firmwareを展開し下記をmicro SDカードへコピーします。
    * コピー元: `RPi4_UEFI_Firmware_v1.20.zip`配下すべて
    * コピー先: 3.でコピーした場所と同じ
       * 同じファイル名の場合は上書きすること

5. ラズパイのメモリが4GBの人のみ実施
    * 4.で作成したmicro SDに`config.txt`があるので末尾に下記を追加する
    * `gpu_mem=16`

6. UEFI SDのイメージ
    *  上記作業が完了すると下記のようになります。

     ![sd.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894039/19d4434a-92f7-4211-f5fc-089a06a363f3.png)

### ラズパイでUEFIを起動&設定変更
1. ラズパイへ下記を接続し電源を入れます。
    * 上記で作成したUEFI用micro SD
    * キーボード
    * モニター

2. 起動するとバックグラウンドが黒のラズパイロゴが表示されるので、`ESC`キーでsettingへ移動します。
    * ロゴが表示されない場合は電源を入れる前にモニターを接続していない、UEFI用SDカードが正常に作成されていないなどが考えられます。

3. メモリ利用制限を解除します。
    * `Device Manager` > `Raspberry Pi Configuration` > `Advanced Configuration` > `Limit RAM to 3 GB`
      * `Enabled` から `Disabled` へ変更
      * `F10` > Y を押して保存 

4. `ESC`キーを連打して元の画面り`Continue`
5. そのほかにもドキュメントにはシリアルコンソールなどの設定がありますが、今回はつかなわないのでスキップしました。


### ESXiのインストール
1. ダウンロードしておいたESXiのisoを適当なUSBメモリ（SDでもOK）に書き込みインストール用USBメモリを作成します。
    * 本題ではないのでスキップしますが、[Etcher](https://www.balena.io/etcher/)を利用しました。
        * ソースファイルとターゲットデバイスを選ぶだけなので楽

2. ラズパイへ下記を接続し電源を入れます。
    * 1.で作成したUSBメモリ(ESXiインストーラー)
    * USBメモリ(OSインストール先のローカルディスク用)
    * UEFI用SDカード（さしっぱなしのはず）
    * キーボード

3. **注意** ESXiのインストーラーが起動したら下記を実行します。
    * `shit` + `o` を押し修正して`Enter`
    * 編集前: `> runweasel cdromBoot`
    * 編集後: `> runweasel cdromBoot autoPartitionOSDataSize=8192`
    * これを実施しないとUSBメモリ（OSインストール先）にVMFS-Lなるパーティションで埋め尽くされデータストアが作成できない。
        * 容量の小さいものをにインストールしようとしているため

4. 後は画面の指示に従いインストールを行います。
    * インストールは通常のESXiと変わりありません。

5. IPアドレスなどを設定するといつも通りwebブラウザでアクセスが可能です。
    * ログインしてみるとラズパイで動いていることとARM版OSで動いていることが確認できました。
![esxi.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894039/982f3ee4-8273-ba47-d5d3-17b7f090861f.png)

### 補足(インストール後)
* この後、vCenterに接続しました。
* 手順は通常のESXiと同じですが、下記を実施しておくことをお勧めします。

#### NTPの設定
* ラズパイでESXiを起動するとNTP（時間）がかなりずれているため、vCenterの接続に失敗しました。
* vCenterの要件ではありますが、事前にNTPを設定し同期をしておきましょう。
  * エラー: `Unable to push signed certificate to host rh01.pi`

#### データストアの設定
* USBメモリをデータストアとして扱う場合は、追加設定が必要です。
* 通常だとUSBデバイスはパススルーされてしまうため、ESXi側では利用できまないためです。
* 対象のESXiへSSHログインして下記コマンドを実行することでパススルーを無効化できます。

```
$ /etc/init.d/usbarbitrator stop
$ chkconfig usbarbitrator off
```