BitVisor入門 -- Getting started

[前回](https://qiita.com/mmi/items/0b4fc2ac77a9d8e6ef9d)の続きです．今回はBitVisorをとりあえず動かしてみましょう．

## BitVisorの動作条件
BitVisorの動作には，ハードウェアによる仮想化支援機構が有効なIntelまたはAMDのCPUが必要です．仮想化支援機構はIntelの場合はIntel VT-x, AMDの場合はAMD-V (AMV SVM)と呼ばれます．おそらく最近のデスクトップ向けCPUであれば対応しているでしょう．

Linuxの場合，使用しているCPUが仮想化支援機構に対応しているかどうかは以下のコマンド確認できます．

```sh
grep -E 'svm|vmx' /proc/cpuinfo
```

場合によっては仮想化支援機構がBIOSで無効化されていることがあります．もし仮想化支援機構に対応しているはずのCPUで上記のコマンドなどで仮想化支援機構が確認できない場合は，BIOSの設定を見直してみてください．

BitVisorは原則任意のOSに対応できます．特にWindows, Linux, Mac, FreeDOSでは動作確認が取れています．ただし，BitVisorの開発はツールの関係上Linuxを使用するのが便利です．
## 仮想マシン内でのBitVisorの利用
一部の仮想マシンはネステッド仮想化と呼ばれる，仮想マシン内で仮想化支援機構を利用する機能をサポートしています．これにより仮想マシン内でBitVisorを実行することができます．なお，QEMUを除きこの機能を利用するには物理CPUが仮想化支援機構に対応している必要があります．

現在BitVisorをまともに動作させることのできるのは，VMWareのみです．QEMU, KVM/QEMUでは限定的に動作，Hyper-V, VirtualBoxでは動作確認が取れていません．詳細は以下の記事を参考にしてください．

- [VMware製品上でBitVisorは動作するか?](https://qiita.com/hdk_2/items/246c7d443b98bf8cb66c)
- [VMWare GDB stubを利用したBitVisorのデバッグ](https://qiita.com/mmi/items/d3ddb0ca468a7c5e6337)
- [QEMU上でBitVisorは動作するか?](https://qiita.com/hdk_2/items/760ed04a7ca65b04ade3)
- [QEMU上でBitVisorは動作するか? リベンジ編](https://qiita.com/hdk_2/items/dab49edf80975f4cc7d0)
- [QEMU上でBitVisorの準パススルードライバーを動かす](https://qiita.com/hdk_2/items/2c9dc7be324d53ea8699)
- [HyperV 上で BitVisor は動くのか？](https://qiita.com/deep_tkkn/items/7f55e507cbe2009c854c)
- [BitVisor on HyperV 再挑戦](https://qiita.com/deep_tkkn/items/c79850a0acffaf92d86f)
- [BitVisor on VirtualBox チャレンジ (Intel編)](https://qiita.com/mmi/items/27ef3d2b3de64d0170a3)
- [BitVisor on VirtualBox チャレンジ (AMD編)](https://qiita.com/hdk_2/items/b44ef64d3027b02f5453)

筆者的にはVMWare (Workstation)を使うと楽に実験できるのでおすすめです．

## BitVisorのコンパイル
BitVisorのソースは https://bitbucket.org/bitvisor/bitvisor にあります．基本はこれをmakeしてできるbitvisor.elfがBitVisor本体です．

以下にコンパイル方法についての説明があります．

- [BitVisor のコンパイル](https://qiita.com/shina/items/8579d1c17962b0842431)
- [macOS SierraでBitVisorのコンパイル](https://qiita.com/mmi/items/daa1b03f5a68834771b6)

makeの前に`make config`により，BitVisorのオプションを設定します．また，ソースのルートディレクトリに配置したdefconfig（deffconfig.tmplをコピーして利用する．もしmake時になければ自動で作成されます）もBitVisorの一部の設定に影響します．とりあえずBitVisorを試すだけならデフォルト設定で十分なので，ここでは細かい設定については割愛します．

## BitVisorのインストール・起動方法
BitVisorのインストール・起動方法として主に以下の方法があります．

- ローカルのディスクにインストールして起動
- USBメモリにBitVisorをインストールして起動
- (i)pxeを利用したネットワークブート

また，BIOSから起動するか，UEFIから起動するかで起動方法が異なります．自身の環境に合わせてインストールしてください．とりあえず試すだけならUSBブートが楽です．

以下に各種インストール・起動情報の情報があります．

- ローカルディスク
  - [BitVisor のインストール（ローカルディスク）](https://qiita.com/shina/items/97b0ede50a6c1e85eb0a)
     - BIOSの場合．なお作成した`/etc/grub.d/99_bitvisor`には`update-grub`実行前に実行権限を付与しておく必要があります．
  - [BitVisorをUbuntu 18.04.1でビルドしてUEFIブートする(GRUB2)](https://qiita.com/morimolymoly/items/a571942880d8ba55f037)
     - UEFIの場合
- USBメモリからの起動
  - [BitVisor のインストール（USBメモリ）](https://qiita.com/shina/items/91b24aea331214650c54)
- ネットワークブート
  - [PXEブートによるBitVisor開発環境の構築](https://qiita.com/n_kane/items/0f55218371f2b1b6bb9f)
  - [BitVisorをネットワークブートする](https://qiita.com/nvsofts/items/62f96dff5340b9d7c851)
  - [UEFI環境でiPXEからBitVisorを起動する](https://qiita.com/hdk_2/items/5bcebcb979ca83b33b6a)

## dbgshによる動作確認
BitVisorのインストールに成功して，BitVisorが起動すれば，起動時に画面にBitVisorが出力するメッセージが表示されるはずです．ただし，このメッセージは起動時のごく短い時間しか表示されないため，見逃してしまうかもしれません．

dbgshを利用することで，BitVisorの動作が確認できます．dbgshはBitVisorのソースの`tools/dbgsh`に含まれています．`tools/dbgsh`に移動してmakeすれば`dbgsh`という実行ファイルができるので，これを実行するだけです．dbgshの起動に成功すると，プロンプトが表示されます．このdbgshはBitVisorとメッセージをやりとりするための仕組みです．`log`というコマンドを実行すると，BitVisorのログメッセージが確認できます．BitVisorが起動していない場合は，`vmmcall "dbgsh" failed`というメッセージが表示されます．dbgshは`exit`で終了できます．

## まとめ
BitVisorのインストール・起動方法を紹介しました．次回はBitVisorの構成・動作について詳しくみていきましょう．