読者です 読者をやめる 読者になる 読者になる

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

ソースコードの取得とカーネルビルド

ホスト側がインストールできたら、次にOpenBSDCVSリポジトリを取得する。

$ 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
#

参考

http://www.openbsd.org/anoncvs.html

https://marc.info/?l=openbsd-tech&m=144104398132541&w=2

http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man8/vmctl.8?query=vmctl&sec=8

http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man8/vmd.8?query=vmd&sec=8