FreeBSD 12のbhyveにWindows10をインストールする:その1(vm-bhyve使用)

Pocket

bhyveはFreeBSDで動く、つまりType 2のハイパーバイザ。

FreeBSDにはjailがある。
jailのいいところは、カーネルを共有しつつユーザランドだけ分けることで、オーバーヘッドを抑えられるところ。
悪いところはOSに制限が発生するところ。要するにLinuxやWindows、FreeBSDでも他のバージョンを動かせないところ。

仮想化は何かの目的、たとえばアプリケーションを動かすためのもので、いまどきOS依存のアプリケーションは少ない。
とはいうものの、FreeBSDは年々、本体はともかく裾野のリソースが先細りで、ports/packageがなくなったり、あったとしても情報は少なくて、まるっとLinuxごと動かしたいなと感じることがある。
もちろんWindowsについては当然FreeBSDでは動かないアプリなんて山ほどある。

そういった点では、用途に合わせて最適なOS(とアプリケーション)を使い慣れたFreeBSD上で動かせるのはかなりのメリット。
というのも、バックアップが簡単にできるからである。
ZFS上にイメージを作れば、スナップショットにロールバックはお手の物である。
壊し放題である。
ESXiなどのType 1ハイパーバイザでは、これができない。できるかもしれないけど知らない。

Windowsを物理PC上で使っていて、壊れたとする。バックアップがあったとしても、復旧が面倒。
Linuxについてはバックアップからの復旧は比較的簡単だが、俺様なんか滅多にLinuxを使わなくて操作をすぐ忘れるという点でやはり復旧が面倒。

以上のような背景があったところに、このたび宅鯖をハードウェア仮想化対応のCPUに変えたので、遅まきながらbhyveを導入する。
以下ではWindows10をインストールする。

まずはvm-bhyveを

bhyveの導入には、まず公式のFreeBSD handbookを参照するが、いろいろと面倒くさそうである。
https://www.freebsd.org/doc/handbook/virtualization-host-bhyve.html

遅れて導入すると、いろいろと環境が整っているものである。
bhyveの場合には、vm-bhyveというツールがあればこのへんは一挙解決。
virtualboxを使ったことがあれば、それをイメージしながら進めると理解しやすい。

ただ後述するが、Windowsのイメージそのものにはzfsボリュームを使えない。(ZFS上にイメージを置くことはできる)
https://github.com/churchers/vm-bhyve
https://github.com/churchers/vm-bhyve/wiki/Running-Windows

大きな流れ

  1. vm-bhyveのインストール
  2. 初期設定
  3. 初期設定(ネットワーク)
  4. 仮想マシンインストール準備(インストーラ = ISO)
  5. 仮想マシンインストール準備(仮想マシン設定)【次回】
  6. 仮想マシンインストール【次回】

vm-bhyveのインストール

pkgでインストールできる。
vm-bhyveのほか、仮想OS用のfirmwareもインストールしておく。

どんなファイルがインストールされたかは、pkg listで確認できる。
コマンドとしては/usr/local/sbin/vmを使う。
実行にはroot権限が必要。
service -lで表示されるサービス名もvm。

仮想マシン他置き場を作る。

もちろんZFSで作るよな。
ここで作った置き場には、仮想マシンのほか、ISOイメージ、テンプレート、すべての仮想マシンに共通の設定ファイルが置かれる。
ルート直下に/vmを作った。
なお本記事で”$vm_dir”と記載をする場合にはこの仮想マシン置き場を指す。

vm-bhyveの初期設定

まず/etc/rc.confへの書き込み。
ホスト起動時にvm-bhyveも起動するように。
また、先に作った仮想マシン置き場をvm-bhyveに知らせるために。

次にvm init。仮想マシン置き場にいろいろとファイル/ディレクトリが作られるとともに、必要なカーネルモジュールがロードされる。
vm initはホストが起動する都度、実行される必要がある。
この場合、vm initはカーネルモジュールのロードと、ネットワーク設定(tap)を行う。
/etc/rc.confにvm_enableをしてあれば、気にする必要なない。

仮想マシン置き場に、OSごとのテンプレートファイルもコピーする。
/usr/local/share/examples/vm-bhyve/にあるやつね。(さきほどpkg infoでも出てきた)

以上で初期設定終わり。
つぎは初期設定(ネットワーク)

初期設定(ネットワーク)

仮想マシン用ネットワークの結線を行う。
まず、仮想マシンの繋がる仮想スイッチを作り、仮想スイッチとホストマシンのネットワークインタフェースを繋ぐ。

外界 <–> ホストのインタフェース <–> 仮想スイッチ
というネットワークを作る。

先々、仮想マシンを作ると
外界 <–> ホストのインタフェース <–> 仮想スイッチ <–> 仮想マシン
というネットワークになる。
仕組み的なことをいうと、仮想スイッチはbridgeで、仮想マシンのインタフェースはtapになる。

以下の例では、publicという名前の仮想スイッチ(オプションなしでのcreateなのでbridgeインタフェース)を作成している。
名前は、vm-bhyveのテンプレートで仮想スイッチを”public”にしているからで、気に入らなければ別の名前でもよい。
# その場合は$vm_dir/.templatesにあるファイルを書き換えておくとよい。
addで仮想スイッチに物理インタフェースを追加。
物理インタフェースは、もちろんのことホストマシンのインタフェースに合わせること。

これで以下のようなネットワーク構成になった。
外界 <–> ホストのインタフェース(re0) <–> 仮想スイッチ(vm-public)

これですべての初期設定が完了。

No tags for this post.

One comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください