仮想マシンでもWindows11を動かすぞい！ with Proxmox

## ことの発端

### 第一章　ESXi導入編

ぼく「ローカルマシンにWin10のVM立ててGPUパススルーするぞ」

後輩「ESXiオヌヌメ」

ぼく「よっしゃ立てたろ」

ESXiぼく「WebGUI使いやすい〜〜〜」

Win10「お前、TPM有効になってないからWin11に上がんねーぞ」

ぼく「ま？」

MVWare社「TPM使いたいならvSphere契約しろ」

ぼく「死んだわ」

後輩「草」

### 第二章　KVMを試す

ぼく「よーし、KVM使うで」

Ubuntuインストールぼく「とりあえずvirt-manager起動しようっと」

Ubuntu「CPUの仮想化がうまくいかへんねん」

ぼく「なんでや！Ryzenだからか？？」

ぼく「WSL2も使えへんし。。。」

ぼく「なんか面倒なんでWindowsをクリーンするか」

### 第三章 Proxmoxとの出会い

後輩「まだVMと格闘してんすか」

ぼく「はい」

後輩「ぞい君さぁ〜〜〜。もうProxmoxしかないですね」

ぼく「なにそれ」

後輩「WSL２起動しましたよ」

ぼく「よし入れるわ」

## ゴール

- Windows11が動くVMを立てる
- GPUパススルーする
- 仮想化をONにしてWSL2も動かす

### ホストマシン構成

| 部品 | パーツ |
|:----|:-----|
| CPU | Ryzen5 3600X |
| M/B | ASRock X570 |
| MEM | DDR4 32GB |
| SSD | m.2 SSD 1TB |
| GPU1 | GeForce 1080Ti |
| GPU2 | Radeon RX470|
| POW | 850W|

後輩「なんでGeforceとRadeon混ぜてんすか」

ぼく「例のグラボ(※1)の使い道を探したかったんよ」

後輩「まーた変なことしてる」

※１・・・「例のグラボ」とは、2019年頃に流通した出力ポートのないRadeonのことである

## Proxmoxのインストール

### インストールメディアの作成

[公式サイト](https://www.proxmox.com/en/downloads)からisoをダウンロードし、インストールUSBを作成

### Proxmoxのインストール

ぼく「メディアをさして実行したら、全自動でやってくれたぞ」

後輩「なんならブート領域まで全部よしなにしてくれるから、データ残したい時は注意っすね」

### Proxmoxの起動とアクセス

ぼく「``https://<IP>:8006```でアクセス、っと」

後輩「http's'にするのを忘れると死ぬんで気をつけてくださいね」

ぼく「（既にやらかしている）・・・当たり前やろ！」

後輩「（あー、これはやらかしてるな）」

ぼく「まずはログインして、っと。」

ぼく「パスワードは入れたんだけど、User Nameって何だ？」

ぼく「いいや、適当で。``root``、っと」

ぼく「入れたわ」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/bddd521d-b622-4b82-e66a-45e24ac5822a.png)


### VMを作成する

ぼく「とりあえずWin10のVM作ったろ」

#### isoイメージのアップロード

データセンター > ホスト名 > local > ISOイメージと選択し、「アップロード」を押すとisoをアップロードできます。
（画像は既にアップロードされているisoイメージ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/3b14c952-e618-b55f-3200-649e1abdc8e9.png)

#### VMの作成

画面の右上から「VMを作成」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/1470adcc-75cd-46a7-c3e1-3d8d6d4ddcc5.png)

OS欄タブでは、ゲストOSの種類に「Windows」を、バージョンが「10/2016/2019」であることを確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/901f72f9-ac25-f412-4e38-3c39ed62287b.png)

システム欄では、BIOS種別をUEFIにすることを忘れずに。
EFIディスクも足す必要があるので足しておく。（デフォルトのディスク指定でOK）

これを忘れると、後から変更した時にディスクを認識しなるので今のうちにやる必要あり。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/8fc38988-7a2a-d9cc-f00e-1d76aa14e193.png)

CPUにマルチコアを与える場合、ソケット数の最大を2にする必要がある。
（なんでもWindows Clientは2ソケットしか認識しないらしい）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/831e8cc4-13e1-9903-1203-73818dbc0f47.png)


なお、内部でWSL２などの仮想化を使いたい場合には、種別を「host」にする必要があるとのこと。
（後からの変更も可能です）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/bbb156a6-035f-b6f2-88bb-c20db503545a.png)


ぼく「あとは適当に指定して作成っと」

### 一旦インストールを完了させる

ぼく「いつも通りにインストールして・・・。よし、完了や」

## ProxmoxにvTPMを導入する

ぼく「ここからが本番やな」


ぼく「[こちらのサイト](https://gareth.com/index.php/2021/09/16/proxmox-secure-boot-for-windows-11-clients/)を参考に進めるやで〜」

### Proxmox機にSSHで入る

```shell
ssh root@<IP Address>
```

### vTPMのインストールスクリプトの実行

下記のコマンドを実行する

```shell
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/garjones/gareth.com/master/vTPM-install.sh)"
```

途中で、次のような内容を聞かれるのでそのまま``Enter``する

```shell
The package documentation directory ./doc-pak does not exist. 
Should I create a default set of package docs?  [y]: 
```

次に、インストールスクリプトの調整を行う必要があるらしいので、
次の画面になるまで待つ。

```shell
*****************************************
**** Debian package creation selected ***
*****************************************

This package will be built according to these values: 

0 -  Maintainer: [ root@vtpm ]
1 -  Summary: [ TPM Emulator
Private libraries for swtpm TPM emulators
Include files for the TPM emulator's CUSE interface for usage by clients
Tools for the TPM emulator
Tools for creating a local CA based on a pkcs11 device ]
2 -  Name:    [ swtpm ]
3 -  Version: [ 0.7.0 ]
4 -  Release: [ 1%{?dist} ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ swtpm ]
9 -  Alternate source location: [  ]
10 - Requires: [ trousers >= 0.3.9 bash gnutls-utils
tpm2-pkcs11 tpm2-pkcs11-tools tpm2-tools tpm2-abrmd
expect gnutls-utils trousers >= 0.3.9 ]
11 - Recommends: [  ]
12 - Suggests: [  ]
13 - Provides: [ swtpm ]
14 - Conflicts: [  ]
15 - Replaces: [  ]

Enter a number to change any of them or press ENTER to continue: 
```

そのまま実行するとエラーになるので、設定内容を調整する

#### Release Versionの調整

次のコマンドを順番に実行

``4`` -> ``Enter`` -> ``Enter``

#### Requires　の文字列調整

``10`` -> ``Enter`` -> ``Enter``

※この辺りは暫定処置なので、脳死で本番環境に持っていかないでね（原文意訳）

最後に、``Enter``を押下してインストールスクリプトの実行。

インストールが終了するまで待ちます。

### vTPMの有効化

ここまで進んだら``/root/vtpm``が作成されているハズので、次のコマンドを実行する

※一度WindowsVMを落としておくこと！！！

```shell
cd /root/vtpm
./vTPM-launch.sh <VID>
```

この状態で無事VMが起動すれば作業完了です。

システム設定から「デバイスセキュリティ」をたどり、TPM2.０が有効になっていることを確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/40c3e5ae-d26a-567d-34f4-b3e2957fcddc.png)


### Windows Update完了！

ぼく「よっしゃオラ！Windows11に上がったぞい！」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/6ff0c5b7-2390-3b7a-e0bd-f7adcb97b649.png)

## PCIをパススルーする

ぼく「ここからが本番や」

### PCIデバイスを追加

VM > ハードウェア > 追加 > PCIデバイス　と選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/aa813a46-31e0-babe-22f8-f477b00db43e.png)

一覧からGPUを選択してアタッチ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/b6c13dad-7ca8-f741-0122-a683f0b685df.png)

一覧にたされている事を確認し、マシンを再起動する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/32dd4297-6357-60a0-9312-fd544c95a11a.png)


ちなみに、GPUをアタッチするとそっちに取られるのかコンソールにでなくなる場合があるので注意。
（あらかじめRDPの設定をしないと詰むので注意しましょう）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/8a7ddf3f-5400-70a6-99ab-efe104ac49ca.png)

ぼく「よっしゃ認識した！！！」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97156/3b1f0fd6-bfec-58d3-14b6-d08ba642a893.png)


### TPMが認識しなくなった時は

マシンをシャットダウンして、もう一度``vTPM-launch``を実行すると良いみたいです。

### CPUが１００％に張り付いて死んだ時は

強制終了して、もう一度``vTPM-launch``を実行すると良いみたいです。

## さいごに

この記事のWindows11はInsider Previewで取得したPreview版のWindows11を利用しています。
また、vTPMの利用は公式でサポートされているわけでもなければ、本番リリース時に正常に動作するという保証もありません。

この記事の内容はあくまでも実験的な物であり、本番環境での実行は推奨しませんのでご注意ください。


唐突にマシンが起動しなくなっても保証ができません。というか実際かなり不安定です。
Windows11を使いたい場合には、セキュリティを無視したインストールを実施するか、Proxmox公式の声明が発表されるまでもう少し待ったほうが賢明かもしれません。