Openstack上でWindows10のVMを起動する。（KVM上でWindows10のVMを起動する。）〜MacからWindowsへのRDP接続まで〜

「Openstack環境下でもWindowsが使いたい！」という事で、KVM上でWindows10VMを使える状態、Openstackで管理できる状態にします。

# もくじ

* virtを使ったWindows10仮想マシンのインストール
* OpenstackへのWindows10仮想マシンの登録
* 仮想マシンディスク容量の拡張
* MacからWindow仮想マシンへのリモートデスクトップ接続

# 動作環境

* ホストマシン: Ubuntu server 18.04
 * Openstack queens(Ubuntuリポジトリからのダウンロード)
* ゲストマシン: Windows10

![Untitled1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/eab27894-b9d2-e8e8-8c58-b0a072d4f9b0.png)

# virtio-winをダウンロード
virtioは仮想化環境のためのI/Oフレームワークです。KVMでWindows10のVMを利用するために必要なのでインストールします。

以下のURLの下のほうにvirtio-win.isoのダウンロードリンクがありますので、ホストマシンにダウンロードしておきます。
StableとLatestがありますが、今回はStableを選択しました。

https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/

```shell:virtio-winのダウンロード
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
```

# windows10.isoのダウンロード

以下からwindows10のisoファイルをダウンロードします。
https://www.microsoft.com/en-us/software-download/windows10ISO

wgetで取る方法が分からなかったので、一旦メインPCであるMacでダウンロードしてscpでUbuntuに送り込みました。

# インストール用ディスクの作成

```shell

$ qemu-img create -f qcow2 ./empty-disk.qcow2 1G
Formatting './empty-disk.qcow2', fmt=qcow2 size=1073741824 cluster_size=65536 lazy_refcounts=off refcount_bits=16
$ qemu-img create -f qcow2 ./Windows10.qcow2 20G
Formatting './Windows10.qcow2', fmt=qcow2 size=21474836480 cluster_size=65536 lazy_refcounts=off refcount_bits=16
```

emptyディスクは後ほどwindows上でvirtioドライバをインストールする際に必要となります。

# windowsのインストール

ダウンロードしたwindows10のファイル名は`windows10.iso`
ダウンロードしたvirtio-winのファイル名は`virtio-win.iso`
となったときのインストールコマンドは下記です。

余裕があればCPU, メモリは増やしたほうがインストールが早めに終わるかと思います。
後ほどvirtio-winドライバをインストールするemptyディスクにはbusのタイプとしてvirtioを選択します。
ここで、

* 空のディスク
* 仮想ネットワーク

をアタッチすることでwindowsにデバイスを認識させ、そのデバイスに対してvirtio-winドライバーをインストールします。

```shell
$ virt-install --connect qemu:///system --name Windows10 --ram 4096 --vcpus 8 --network bridge=virbr0,model=virtio --disk path=Windows10.qcow2,format=qcow2,device=disk,bus=ide --disk path=./windows10.iso,device=cdrom,bus=ide --disk path=./virtio-win.iso,device=cdrom,bus=ide --disk path=empty-disk.qcow2,format=qcow2,bus=virtio,cache=none --graphics vnc,port=5901,listen=0.0.0.0 --os-type windows --os-variant win10
```

ちなみに`--os-variant`で指定出来る値は以下のコマンドで確認できます。

```
osinfo-query os
```


以下のサイトを参考にしました。ありがとうございました。
参考：http://blog.bit-isle.jp/bird/2015/12/1104

# Windows10 VMへアクセス

ここからはVMの画面にアクセスする必要があります。
手順は割愛しますが、

* (メインPCがmacなので)XQuartzをインストール・起動し
* sshで-Xコマンド付きでログイン
* コマンドラインでvirt-managerを起動

という手順でUbuntuServer上のvirt-managerがメインPCで表示されるようにします。
virt-installコマンドで実行中のVMがvirt-managerに表示されますので、"Open"をクリックしてVM画面を表示します。

<img width="562" alt="Screen Shot 2019-10-13 at 4.17.08 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/94890487-c0be-3b76-4bed-8f813187690d.png">

画面を開くとWindowsのインストール画面が出ますので、カスタムインストールとして進めましょう。

<img width="1487" alt="Screen Shot 2019-10-13 at 4.21.03 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/4f64ebd0-3f93-e058-e72f-280d438bc446.png">

ちなみにWindowsのプロダクトキーは後から入れることもできるので、一旦「プロダクトキーがありません」を選択してインストール作業を進めることもできます。
OSはWindows10 Proを選択しました。ちなみにWindows10　Proでないとリモートデスクトップができないようです。
途中でリブートが入りますが、シャットダウンだけしてブートしない事がありました。
そのときは手動で立ち上げてください。


Windowsが起動したあと、デバイスマネージャーからvirtio-winのドライバをインストールします。
<img width="1368" alt="Screen Shot 2019-10-13 at 5.21.16 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/fbdf3982-85bd-6cde-1e4f-fa947a822181.png">
ほかのデバイスに表示される全てにvirtio-winドライバをインストールします。
<img width="1368" alt="Screen Shot 2019-10-13 at 5.22.11 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/466f9261-0d1a-6337-fa5f-ef28978919d4.png">
CDドライブのEにvirtioが割り当てられていたため、選択しインストールします。
<img width="1368" alt="Screen Shot 2019-10-13 at 5.22.23 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/9647576f-9e49-51ca-dccf-41a067dcee3f.png">
<img width="1384" alt="Screen Shot 2019-10-13 at 5.22.30 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/c172af78-07fc-a986-8429-14894a15b50d.png">
<img width="1384" alt="Screen Shot 2019-10-13 at 5.22.38 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/da6b671f-be0f-0433-797f-6f187ae4f42c.png">

以上で、KVM上でWindows10を使うことができるようになりました。

# OpenstackでWindows10 VMを管理する。

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

インストールの際に利用した`Windows10.qcow2`イメージをopenstackにアップロードします。
10Gほどあったため、結構時間がかかりました。

```
openstack image create --file ./Windows10.qcow2 --disk-format qcow2 --public Windows10_Pro
```

## ボリュームの作成

イメージからボリュームを作ってインスタンス起動します。
500Gのボリュームをつくりました。これも割と時間がかかります。

![ubuntu_horizon_project_volumes_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/1a52b5dd-c2a7-4c79-f701-a075d3f84679.png)

## インスタンスの作成

ボリュームからインスタンスを起動します。

![ubuntu_horizon_project_volumes_ (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/9d8ef1af-24ca-24e3-2f36-220c31643458.png)

HorizonのVNCからもWindowsが起動できていることが認識できます。

![ubuntu_horizon_project_instances_a7061c52-878e-477f-92f9-7ba586197342_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/7db41bd6-0253-1c82-0676-a3947d6087cc.png)

## IPアドレスの確認

Openstack上では`192.168.11.102`のIPが振られていますので、当然windowsVMにも同じIPが振られています。

![ubuntu_horizon_project_instances_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/eb997bcd-e2f0-97fa-286c-97dd1529e7e3.png)
<img width="1479" alt="Screen Shot 2019-10-13 at 7.29.33 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/59dd1c6c-db41-8361-06f6-a0b96601cb39.png">

## ディスクの設定

インストール時につかったディスク(Windows10.qcow2)が20Gだったため、20GしかCドライブどして認識されていません。
５００Gのボリュームで作成したため、480G未使用領域があります。これをCドライブに結合します。

ウインドウズボタンを右クリックして、"ディスクの管理"から実施します。

<img width="1479" alt="Screen Shot 2019-10-13 at 7.30.06 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/f3bb43c7-e073-1d15-ecf7-3ac39c1a0875.png">

<img width="1479" alt="Screen Shot 2019-10-13 at 7.30.31 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/1ea4b3c5-5623-c38e-0658-27e079608753.png">

<img width="1479" alt="Screen Shot 2019-10-13 at 7.30.48 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/ffa9c750-e699-c0c6-71c3-0d850b3b5f28.png">

Cドライブに500Gが割り当てられました！

<img width="1479" alt="Screen Shot 2019-10-13 at 7.58.12 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/3d6f5e73-c32f-edd4-36f0-fd1c9e3da3e5.png">


## リモートデスクトップの設定

### Windows側でリモートデスクトップ設定をオンにする。

<img width="1479" alt="Screen Shot 2019-10-13 at 7.39.27 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/27e79599-d56d-4fcc-64c4-b3cb725dc0d0.png">
<img width="1495" alt="Screen Shot 2019-10-13 at 7.39.33 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/3cd1b64c-5e95-2041-1e01-af3de476e1af.png">

### セキュリティグループの設定を追加する。

RDPは3389のポートを使うので、3389を開放します。調べてみるとUDPの3389も使うようですが、とりあえずTCPの3389だけ開けて接続可能でした。

![ubuntu_horizon_project_security_groups_5c2b77de-b042-4b56-a0dd-c2d4c867b517_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/2a3f042e-2ce3-c784-35d7-32a3c6a6dcc5.png)

![ubuntu_horizon_project_instances_ (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/23b18649-b66e-71f1-1176-a3aba36f484c.png)


## リモートデスクトップビューワーの設定
当方のメインPCがmacなので、macからwindowsへRDP接続する方法です。利用するソフトウェアが違うだけで実質同じことをするかと思います。
Microsoft製のビューアーがAppStoreにあるのでこれをダウンロードします。
2つ種類がありますが、どちらでもアクセス可能でした。


無事、リモートデスクトップ接続できました！

![Screen Shot 2019-10-13 at 7.51.41 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/8826c179-34c4-5dab-be9a-781e4c57cae3.png)