OpenBSD vmmを動かしてみる
vmmはOpenBSD上で開発されているVMM(Virtual Machine Monitor)である。 ここではvmmを実際に動かしてその上でOpenBSDが動くことを確認する。
vmmはVMMとしてはもっとも後発であり、FreeBSDで開発されているbhyveによく似ており、 x86のハードウェア仮想化支援を前提としている。
vmmはOpenBSDの-currentツリーにあるものの、-releaseの現時点での最新版である5.8には入っていない。 そのため、最新のsnapshotをインストールする。ここでは2016年2月4日変更を参照する。
環境
Mac OS X 10.11.3上のVMware Fusion 7.1.3で「ハイパーバイザー アプリケーション」を有効にしたVM上に OpenBSDをインストールした。インストールされたOpenBSDがvmmのホスト側として動作する。
ホスト側のOpenBSDのdmesgでVMXが有効であることを確認する。
$ dmesg | grep VMX
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,MMX,FXSR,SSE,SSE2,SS,SSE3,PCLMUL,VMX,SSSE3,CX16,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,HV,NXE,LONG,LAHF,PERF,ITSC,FSGSBASE,SMEP,ERMS,SENSOR,ARAT
ソースコードの取得とカーネルビルド
ホスト側がインストールできたら、次にOpenBSDのCVSリポジトリを取得する。
$ cvs -qd anoncvs@anoncvs.jp.openbsd.org:/cvs get -P src
-currentツリーであっても、vmmはデフォルトでは有効になっていない。 また、OpenBSDは現在ではLoadable Kernel Modulesのサポートをやめてしまったため、 vmmを有効にしたカーネルをビルドする必要がある。
sys/arch/amd64/conf/GENERIC
のvmm0の項目をコメントアウトする。
以下のようにconfigしてmakeしてinstallして再起動。
$ cd sys/arch/amd64/conf
$ config GENERIC
$ cd ../compile/GENERIC
$ make clean && make
$ su -m
# make install
# reboot
再起動後にdmesgでvmmが有効になっていることを確認する。
$ dmesg | grep vmm
vmm0 at mainbus0: VMX/EPT
vmdの起動とVMの起動
ここでは/bsd.rd
をカーネルとして起動してみる。
以下ではrootでvmdを立ち上げ、“myvm"という名前のVMにを起動し、
512MBをメモリに割り当て、自動的にコンソールに接続している。
$ su -m
# vmd
# vmctl start "myvm" -c -k /bsd.rd -m 512M
実行結果は以下の通り。確かにゲストとしてOpenBSDが起動できることが確認できた。
vmctl: starting without disks
vmctl: starting without network interfaces
Connected to /dev/ttyp4 (speed 9600)
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
Copyright (c) 1995-2016 OpenBSD. All rights reserved. http://www.OpenBSD.org
OpenBSD 5.9 (RAMDISK_CD) #1701: Thu Feb 4 09:56:05 MST 2016
deraadt@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/RAMDISK_CD
RTC BIOS diagnostic error 20<config_unit>
real mem = 520093696 (496MB)
avail mem = 502673408 (479MB)
mainbus0 at root
bios0 at mainbus0
acpi at bios0 not configured
cpu0 at mainbus0: (uniprocessor)
cpu0: Intel(R) Core(TM) i7-3820QM CPU @ 2.70GHz, 8449.70 MHz
cpu0: FPU,VME,DE,PSE,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,MMX,FXSR,SSE,SSE2,SS,SSE3,PCLMUL,SSSE3,CX16,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,AES,AVX,F16C,RDRAND,HV,ITSC,FSGSBASE,SMEP,ERMS
pvbus0 at mainbus0: OpenBSD
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "OpenBSD VMM PCI Host Bridge" rev 0x00
virtio0 at pci0 dev 1 function 0 "Qumranet Virtio RNG" rev 0x00
viornd0 at virtio0
virtio0: irq 3
isa0 at mainbus0
com0 at isa0 port 0x3f8/8 irq 4: ns8250, no fifo
com0: console
softraid0 at root
scsibus0 at softraid0: 256 targets
root on rd0a swap on rd0b dump on rd0b
WARNING: invalid time in clock chip
WARNING: CHECK AND RESET THE DATE!
erase ^?, werase ^W, kill ^U, intr ^C, status ^T
Welcome to the OpenBSD/amd64 5.9 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? s
#