前回までで仮想マシンをインストールする準備が整った。
さっそくWindows10のインストールに取り掛かるが、準備すべきものがある。
- Windows10インストールイメージ
- TigerVNC(Viewer)
一つ目は言わずもがな。
https://www.microsoft.com/ja-jp/software-download/windows10
二つ目は、GUI操作のため。
Windowsのような、GUI操作が必須のOSをbhyve上の仮想マシンとして動かす場合には、VNCでその画面を見ることになる。
ただ、bhyveのVNCは癖があるようで、VNC viewerによっては途中で切れてしまうんである。
WindowsでもProであればリモートデスクトップという手もあるが、それにしたってインストールの時にはVNCで繋ぐほかない。
TigerVNCなら問題なく接続できるのでこれを準備しておくこと。
https://tigervnc.org/
https://github.com/TigerVNC/tigervnc/releases
2019/5/12時点では1.9.0が最新だからしてバイナリはこちら。Viewerでよい。
https://bintray.com/tigervnc/stable/tigervnc/1.9.0
初回には少し混乱したので記しておくが、VNCで接続する先のIPアドレスは、bhyveホストのIPアドレスである。
仮想マシンが自立して起動すると、そっちはそっちで独自のIPアドレスを取得する。
VNCはbhyveが用意する仮想マシンへのGUIアクセスなのでbhyveホストに接続する必要があるわけ。
一方で、仮想マシンそのものでリモートデスクトップやら、VNC Serverを用意すれば、そのときは当然、仮想マシンのIPアドレスを接続先として指定することになる。
ではISOの準備から。
仮想マシンインストール準備(インストーラ = ISO)
インストーラの準備。
ISOイメージを登録する。VirtualBoxでもそういう操作あるよね。
ISOイメージがあるなら$vm_dir/.isoに移す
sudo vmとして確認する
sudo vm とすれば、ダウンロードしてそこに置いてくれる。ちょっと驚き。
$ sudo mv ./files/Windows10_18090.iso /vm/.iso/
$ sudo vm iso
DATASTORE FILENAME
default Windows10_18090.iso
$ sudo vm iso https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-bootonly.iso
/vm/.iso/FreeBSD-11.2-RELEASE-amd64-bootonly.iso 308 MB 2228 kBps 02m22s
$ sudo vm iso
DATASTORE FILENAME
default FreeBSD-11.2-RELEASE-amd64-bootonly.iso
default Windows10_18090.iso
仮想マシンインストール準備(仮想マシン設定)
前提。
仮想マシンは$vm_dir/(仮想マシン名)/に置かれる。
設定ファイルは$vm_dir/(仮想マシン名)/(仮想マシン名).confである。
なお仮想マシンのログは$vm_dir/(仮想マシン名)/vm-bhyve.log。
仮想マシン置き場が/vmで、仮想マシン名がwin10だと、/vm/win10/win10.conf
などとなる。
で、vm createでまず仮想マシンの枠を作る。
このとき、-tでテンプレートを指定し、-sでディスクイメージのサイズを指定できる。
デフォルトだと20Gなので余程のことがない限り指定は必須。
作った仮想マシンはvm listで確認。
$ sudo vm create -t windows -s 64G win10
$ sudo vm list
NAME DATASTORE LOADER CPU MEMORY VNC AUTOSTART STATE
win10home default uefi 2 2G - No Stopped
$ ls -lah /vm/win10/
total 13366199
drwxr-xr-x 2 root wheel 6B May 11 14:10 .
drwxr-xr-x 6 root wheel 6B May 4 20:34 ..
-rw------- 1 root wheel 64G May 11 14:10 disk0.img
-rw-r--r-- 1 root wheel 299B May 5 21:35 win10.conf
vm configureで設定(win10.conf)を変更。
vi操作で書き換える。
以下のように。
uefi="yes"
graphics="yes"
graphics_wait="yes"
cpu=1
memory=4G
network0_type="e1000"
network0_switch="public"
disk0_type="ahci-hd"
disk0_name="disk0.img"
uuid="ff31650b-6ef0-11f9-963c-6cfffff61323"
utctime="no"
xhci_mouse="yes"
WindowsなのでBIOSはuefi。
graphicsをYesにするとVNCで接続できる。
デフォルトではbhyveホストのIPアドレス:5900で待ち受け。
変更したければそれぞれgraphics_listen、graphics_portで指定する。
また、解像度は800x600。graphics_res=“WxH"で変更できる。
graphics_waitを設定しておくと、VNC接続するまでゲストの起動を待ってくれる。
設定しなくても、仮想マシンをインストールモードで立ち上げたときには待ってくれるが、それは初回だけ。
Windowsのようにインストール時に複数回再起動するものはwaitしてもらったほうがいいだろうと。
Windows10homeの場合はcpuを1。(後述)
network0_typeにはe1000を指定。
インストールが無事に済んだらvirtioに変更するが、まずはe1000で。
network0_switchで本仮想マシンを繋ぐ仮想スイッチを指定する。
vm-bhyveのデフォルト、publicにしておく。
なお、起動した暁には、仮想マシンにはtapX(Xは数字)インタフェースが割り当てられ、publicに接続される。
disk0_type="ahci-hd"
としていて、本来ならディスクイメージをzfsのボリュームにしてvirtio-blkと指定したいが、以下の通りahci-hdしかダメ。
https://github.com/churchers/vm-bhyve/wiki/Supported-Guest-Examples
the disk emulation needs to be ahci-hd.
vm-bhyveは標準で仮想マシンの時刻をUTCに設定するので、utctime="no"
とする。xhci_mouse="yes"
にしておかないと、後々VNCで接続したときにまともにマウスが動かない。
仮想マシンインストール
さあインストール。vmにinstallサブコマンドを与えて起動。
状態はvm listで確認。
bhyveホスト側では$vm_dirにあるvm-bhyve.logをtailして状況を確認しつつ進めるがよいだろう。
$ sudo vm install win10home Windows10_18090.iso
Starting win10home
* found guest in /vm/win10home
* booting...
$ sudo vm list
NAME DATASTORE LOADER CPU MEMORY VNC AUTOSTART STATE
win10home default uefi 1 2G 0.0.0.0:5900 No Locked (camazotz)
lockedの通り、VNC待ち。
TigerVNCで接続し、インストールを進める。
繰り返すがこのときの接続先はbhyveホスト。
$ sudo tail -f ./vm-bhyve.log
Password:
May 12 17:44:20: dynamically allocated port 5900 for vnc connections
May 12 17:44:20: booting
May 12 17:44:20: [bhyve options: -c 1 -m 4G -Hwl bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd -U 9e31650b-6e60-11e9-963c-6c4b90a61323]
May 12 17:44:20: [bhyve devices: -s 0,hostbridge -s 31,lpc -s 4:0,ahci-hd,/vm/win10/disk0.img -s 5:0,virtio-net,tap0,mac=58:9c:fc:02:b6:f3 -s 6:0,fbuf,tcp=0.0.0.0:5900 -s 7:0,xhci,tablet]
May 12 17:44:20: [bhyve console: -l com1,/dev/nmdm-win10.1A]
May 12 17:44:20: [bhyve iso device: -s 3:0,ahci-cd,/vm/.config/null.iso]
May 12 17:44:20: starting bhyve (run 1)
インストール後(ネットワークドライバの変更他)
無事にインストールが済んだら、ネットワークドライバを変更する。
ネットワークドライバの変更なのでVNCから接続しておく。
ドライバの配布先には、仮想マシンから直接、行ってしまってよい。
場所はここだが、「virtio-win fedora」あたりで検索すれば辿り着けるはず。
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/
5/12時点では0.1.164が最新。
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.164-2/virtio-win-0.1.164.iso
Dにマウントしたら、以下のパスがドライバの場所。パスの通りWindows10, 64bitね。
こちらに強制的に変更する。ネットワークが切断されるがお構いなしで。D:\NetKVM\w10\amd64
シャットダウンしたら、bhyve側の設定ファイルでネットワークタイプをe1000からvirtio-netに変更する。
graphics_waitも忘れずに削除。
uefi="yes"
graphics="yes"
# graphics_wait="yes"
cpu=1
memory=4G
network0_type="virtio-net"
network0_switch="public"
disk0_type="ahci-hd"
disk0_name="disk0.img"
uuid="ff31650b-6ef0-11f9-963c-6cfffff61323"
utctime="no"
xhci_mouse="yes"
ゲストWindowsに与えるCPU数
Windows10の場合、割り当てられるCPUは、Homeだと1つ、Proだと2つまで。
コア/スレッドはHomeだと32、Proだと256。
コアを二つ以上与えようとしても、vm-bhyveでの指定はCPU数でのみ可能。
1.3からはより細かい設定ができるようになるそうだが、pkgからインストールするvm-bhyveは1.2なので1のままにしておく。
https://github.com/churchers/vm-bhyve/wiki/Guest-Example:-Windows
なお/boot/loader.confに以下の設定をすることで、CPU一つあたりのコア数を指定できるが、手元ではうまく動かないので特に説明はしない。
hw.vmm.topology.cores_per_package=4
上記パラメータの詳しい説明はこちら。
https://forums.freebsd.org/threads/bhyve-cpu-vcpu-cores-nad-threads.60169/
ホスト起動時に仮想マシンも起動させるには。
/etc/rc.confに以下の行を追加。
複数ある場合にはスペースを置いて起動させたい順に記載。
vm_delayは、複数の仮想マシンを起動する場合のインターバルを秒で指定。
vm_list="win10"
vm_delay="5"