monolithic kernel

KVMの上でBitVisorを動かしたい

動かしたい。

ということで最終的に動くところまで到達していないのですが、起動してpanicで落ちるところまで試したのでメモ。前回の記事でNested SVM環境を構築したところからスタートしています。

依存ライブラリのインストール

sudo apt-get install libssl-dev libusb-dev

コンパイル

今回はとりあえず動作確認がしたいのでシンプルなパスワード認証を行うような環境を構築します。

wget http://downloads.sourceforge.net/bitvisor/bitvisor-1.1.1.tar.gz
tar vzxf bitvisor-1.1.1.tar.gzcd bitvisor-1.1.1make config

make configの設定でTTY_SERIALを有効にし、qemu-system-x86_64の起動オプションに-serial stdioを追加すると、BitVisorのメッセージをホストOSの標準入出力で見ることができるようになり便利です。

make
sudo cp bitvisor.elf /boot
cd boot/login-simple
cp bitvisor.conf.tmpl bitvisor.conf
vi Makefile
make
sudo cp module*.bin /boot

64bit環境でそのままmakeするとasm.sのところでコンパイルエラーになっていたのでMakefileを書き換え。とりあえずエラーを潰しただけなのでこれでいいのか分かりません。

module1.bin : asm.s main.c
  $(INC)gcc -m32 -Wall -s -Wl,-Ttext,0x8000 -nostdlib -nostdinc -idirafter ../../include -o module1.bin asm.s main.c

GRUBの設定

ここではGRUB2向けの設定を示します。set rootのところは構成によって変わると思うので、マシンの構成や/etc/grub.d以下の他のファイルを参考にして書き換えてください。

sudo vi /etc/grub.d/11_bitvisor
sudo update-grub
#!/bin/sh

echo "Found BitVisor-1.1.1" >&2

cat <<EOF
menuentry "BitVisor-1.1.1" {
  insmod part_msdos
  insmod ext2
  set root='(hd0,msdos1)'
  multiboot /bitvisor.elf
  module /module1.bin
  module /module2.bin
}
EOF

起動

起動してみると無事BitVisorが立ち上がり、パスワード入力画面が表示されました!

Screenshot-QEMU

しかし、パスワードを入力するとその直後に以下のようなpanicが発生してしまいます。

Starting BitVisor...Copyright (c) 2007, 2008 University of TsukubaAll rights reserved.1073333248 bytes (1023 MiB) RAM available.VMM will use 0x37C00000-0x3FC00000 (128 MiB).ACPI DMAR not found.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOODisable ACPI S3Disable \_SB_.PCI0.ISA_.COM2._DISDisable \_SB_.PCI0.ISA_.COM1._DISIniting Virtual Ethernet (VE) for VPN Client Module...Virtual Ethernet (VE): Ok.Processor 0 (BSP)VMX operation is not supported.Processor 0 2900016541 HzStarting a virtual machine.Loading drivers.AES/AES-XTS Encryption Engine initialized (AES=openssl)Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.PCI: finding devices ...... 6 devices foundpanic: unsupported exitcodeHypervisor registers of cpu 0 -----------------RAX 00000030    RCX 000003F8    RDX 00000000    RBX 00000001RSP 40A4FD34    RBP 40A4FDBC    RSI 00000000    RDI 40A4FDF8R8  00000000    R9  00000000    R10 00000000    R11 00000000R12 00000000    R13 00000000    R14 00000000    R15 00000000CR0 80000019    CR2 00000000    CR3 38622000    CR4 000000A0RFLAGS 00200006  GDTR 409AA2A0+000000FF  IDTR 408C1FA0+00000800backtrace&lt;-0x4012166C&lt;-0x40121E13&lt;-0x4012687F&lt;-0x4011C3FF&lt;-0x401198A1&lt;-0x4011BE0B&lt;-0x4010D2F5&lt;-0x0&lt;-bad.------------------------------------------------Guest state and registers of cpu 0 ------------RAX 00008230    RCX 00000101    RDX 00008503    RBX 00000FFERSP 00000001    RBP 00000000    RSI 00007C05    RDI 00000000R8  00000000    R9  00000000    R10 00000000    R11 00000000R12 00000000    R13 00000000    R14 00000000    R15 00000000CR0 00000010    CR2 00000000    CR3 00000000    CR4 00000000ACR   ES 00000093 CS 0000009B SS 00000093 DS 00000093 FS 00000093 GS 00000093LIMIT ES 0000FFFF CS 0000FFFF SS 0000FFFF DS 0000FFFF FS 0000FFFF GS 0000FFFFBASE  ES 00000000 CS 00000000 SS 00000000 DS 00000000 FS 00000000 GS 00000000SEL   ES 00000000 CS 00000000 SS 00000000 DS 00000000 FS 00000000 GS 00000000RIP 0000823E  RFLAGS 00000216  GDTR 00000000+0000FFFF  IDTR 00000000+000003FFEFER 00001000VMCB 0x40a66000 (phys 38666000)EXITCODE: 127=0x7F (VMEXIT_SHUTDOWN)EXITINFO1 00000000  EXITINFO2 00000000  EXITINTINFO 80000308------------------------------------------------panic: unsupported exitcodeUnrecoverable error.

vmexitでゲストからホストに制御が戻る時の戻り値が想定しない値(VMEXIT_SHUTDOWN)になっているようですが、詳しいことはわからずここで断念。仮想マシンは難しい。

参考