Ubuntu 20.04  に VMWare Player をインストールする

# Ubuntu 20.04  に VMWare Player をインストールする

Ubuntu 20.04  に VMWare Player をインストールするための手順を説明する。

※ ゲストOS に Ubuntu 20.04 を使う話ではなく、ホストOS に Ubuntu 20.04 を使う手順である。

## 処理の流れ

1. VMWare Player をダウンロードする
2. ビルドツールをインストールする
3. VMWare Player をインストールする
4. **(セキュアブート有効時)** Machine-Owner Key(=MOK) を作成する
5. **(セキュアブート有効時)** VMWARE 関連のドライバを署名する
6. **(セキュアブート有効時)** MokManager (MokPW) のパスワードを設定する
7. **(セキュアブート有効時)** Linux にMachine-Owner Key をインストールする
8. **(セキュアブート有効時)** PCを再起動する
9. **(セキュアブート有効時)** UEFI console でMachine-Owner Key をインストールする

なお、デジタル署名に関するところがめんどくさい場合、セキュアブートを OFF にして、起動することで **(セキュアブート有効時)** と記載している手順は省略できる。

## 注意事項

### 前提知識

* VMWare Player を Ubuntu で使う場合、ホスト環境でコンパイルしたカーネルモジュールが必要である。
* カーネルモジュールはホスト環境で **VMWare Player をインストール時に** 内部でビルドするため、**VMWare Player をインストール前に** ビルドツールのインストールが必要である。
* セキュアブートの機能が有効になっている PC では、デジタル署名のないドライバをインストールすることができない。

### 対策

* 事前にビルド環境をインストールする
* ビルドしたドライバにデジタル署名を行うためのルート証明書を生成する。
* ビルドしたドライバに対してMachine-Owner Key(=MOK)署名をつける。
* (Linux, UEFI の両方に対して) Machine-Owner Key(=MOK)をインストールする。

もしセキュアブートが有効な環境で、デジタル署名がないと ["Cannot open /dev/vmmon: No such file or directory" error when powering on a VM (2146460)](https://kb.vmware.com/s/article/2146460) にあるように仮想マシンの起動時に `/dev/vmmon` がロードできないというエラーになって仮想マシンの起動に失敗する。


## 1. VMWare Player をダウンロードする

https://my.vmware.com/jp/web/vmware/downloads/info/slug/desktop_end_user_computing/vmware_workstation_player/15_0 から `VMware Workstation 15.5.6 Player` をダウンロードする。

### 参考

* [Ubuntu で VMware Workstation Player バージョン 15 のインストール](https://www.kkaneko.jp/tools/vmware/vmwareplayerubuntu.html)

## 2. ビルドツールをインストールする

後の手順に関係してくるが、VMWare Player は内部でカーネルモジュール `vmmon.ko` と `vmnet.ko` を使用する。
`vmmon.ko` と `vmnet.ko` を VMWare Player をインストール環境でコンパイルする必要があるため、VMWare Player をインストールする前に **事前にビルドツールをインストール必要がある。**

```
$ sudo apt install build-essential -y
```

## 3. VMWare Player をインストールする

```
$ sudo sh VMware-Player-15.5.6-16341506.x86_64.bundle
```


## 4. (セキュアブート有効時) Machine-Owner Key(=MOK) を作成する

Machine-Owner Key(=MOK) として使う自己署名証明書を作成する。


```
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware/"
```

### 参考

* [Ubuntu Wiki SecureBoot](https://wiki.ubuntu.com/UEFI/SecureBoot)
* ["Cannot open /dev/vmmon: No such file or directory" error when powering on a VM (2146460)](https://kb.vmware.com/s/article/2146460)


## 5. (セキュアブート有効時) VMWARE 関連のドライバを署名する

```
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)
```


## 6. (セキュアブート有効時) MokManager (MokPW) のパスワードを設定する

mokutil を使って MokManager のパスワードを設定する。
ここで設定したパスワードは、Machine-Owner Key をインポートするときや UEFI console で鍵を取り込むときに使用する。

```
$ sudo mokutil --password
input password: 
input password again: 
```

## 7. (セキュアブート有効時) Linux にMachine-Owner Key をインストールする

`mokutil --import` を使用して、Machine-Owner Keyをインストールする。
ここで 単なる `sudo` では `mokutil --import` でインストールできないのでいったん `sudo su` で root になってからインストールする。

`MokManager (MokPW) のパスワードを設定する` で設定した MokManager のパスワードを入力する。

```
$ sudo su
# mokutil --import MOK.der
input password: 
input password again: 
```

### 参考リンク

* [kernel module mokutil: failed to enroll new keys](https://stackoverflow.com/questions/39226185/kernel-module-mokutil-failed-to-enroll-new-keys)

## 8. (セキュアブート有効時) PCを再起動する

インストールした Machine-Owner KeyをUEFI に適用するためにPCを再起動する。

## 9. (セキュアブート有効時) UEFI console で Machine-Owner Key をインストールする

### 9.1 Press Enter Key の画面でリターンキーを押す

再起動すると Press Enter Key というテキストが表示されるので、リターンキーを入力する。

### 9.2 MOK をインストールする

テキストベースで以下のメニュー項目を選択する画面になる。

* Continue boot
* Enroll MOK
* Enroll key from disk
* Enroll hash from disk

**Enroll MOK** を選択してリターンキーを押す

### 9.3 MOK を確認するか、インストールを続行するか確認する。

テキストベースで以下のメニュー項目を選択する画面になる。

* View key 0
* Continue

**Continue** を選択してリターンキーを押す

View key 0 を選択すると、鍵の情報を確認できる。確認したらリターンキーを押すことでもとの画面に戻ることができる。


### 9.4 MOK のインストールを実行する

テキストベースで以下のメニュー項目を選択する画面になる。

* No
* Yes

**Yes** を選択してリターンキーを押す

### 9.5 MokManager のパスワードを入力する

テキストベースでパスワードを入力する画面になる。


`MokManager (MokPW) のパスワードを設定する` で設定したパスワードを入力してリターンキーを押す

### 9.6 再起動する

テキストベースで以下のメニュー項目を選択する画面になる。

* Reboot
* Enroll key from disk
* Enroll hash from disk

**Reboot** を選択してリターンキーを押す


## 参考リンク

* ["Cannot open /dev/vmmon: No such file or directory" error when powering on a VM (2146460)](https://kb.vmware.com/s/article/2146460)
* [mokutil - utility to manipulate machine owner keys](http://manpages.ubuntu.com/manpages/focal/man1/mokutil.1.html)
* [Ubuntu Wiki SecureBoot](https://wiki.ubuntu.com/UEFI/SecureBoot)
* [kernel module mokutil: failed to enroll new keys](https://stackoverflow.com/questions/39226185/kernel-module-mokutil-failed-to-enroll-new-keys)

## トラブルシュート

### ビルドツールをインストールする前に VMware-Player をインストールしてしまった場合

VMware-Player を以下の手順でアンインストールして、ビルドツールをインストール後に、再度 VMware-Player をインストールする。

```
$ sudo sh VMware-Player-15.5.6-16341506.x86_64.bundle --uninstall-component=vmware-player
Extracting VMware Installer...done.
All configuration information is about to be removed. Do you wish to
keep your configuration files? You can also input 'quit' or 'q' to
cancel uninstallation. [yes]: no

Uninstalling VMware Installer 3.0.0
    Deconfiguring...
[######################################################################] 100%
Uninstallation was successful.
```