BSD界隈四方山話

第18回 使ってみようハイパーバイザbhyve

この記事を読むのに必要な時間:およそ 4 分

ハイパーバイザbhyve

FreeBSD 10.0-RELEASEからFreeBSDにはbhyve(ビハイブ)と呼ばれるハイパーバイザが導入されました。この機能を使うとFreeBSDホスト上で複数のゲストオペレーティングシステムを実行することができます。Jailと異なり,異なるカーネルを同時に実行することが可能です。

今回はFreeBSDホストでFreeBSDゲストをインストールして使う方法を紹介します。同一,または異なるバージョンのFreeBSDを同時に実行する必要がある場合や,特定のカーネルオプションを有効にしたカーネルが必要になる場合などに便利です。

bhyveが動作する環境をセットアップ

bhyveが動作するにはvmmカーネルモジュールが必要です。kldload(8)コマンドを使ってvmmカーネルモジュールを読み込みます。

図1 vmmカーネルモジュールの読み込み

# kldload vmm
# kldstat
Id Refs Address            Size     Name
 1    9 0xffffffff80200000 179ddb0  kernel
 2    1 0xffffffff81a11000 56aa     fdescfs.ko
 3    1 0xffffffff81a17000 2baa     uhid.ko
 4    1 0xffffffff81a1a000 1b1baf   vmm.ko
#

システム起動時に自動的に読み込まれるようにするには,/boot/loader.confファイルに次の設定を追加します。

リスト1 /boot/loader.confに追加する設定

vmm_load="YES"

次に,ゲストオペレーティングシステムが使用するネットワークインターフェースを作成します。まず,次のようにifconfig(8)コマンドを使ってtapインターフェースを作成します。

図2 tapインターフェースを作成

# ifconfig tap0 create
# ifconfig tap0
tap0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        ether 00:bd:06:ae:69:00
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect
        status: no carrier
# sysctl net.link.tap.up_on_open=1
net.link.tap.up_on_open: 0 -> 1
# 

このtapインターフェース経由でネットワークにアクセスできるように,次のようにブリッジを作成して,そこに実際に利用できるネットワークインターフェースと,先ほど作成したtapインターフェースの双方を追加します。次の例ですと,bge0がホストに物理的に存在しているネットワークインターフェースです。

図3 ブリッジの作成

# ifconfig bridge0 create
# ifconfig bridge0 addm bge0 addm tap0 up
# ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 02:2f:69:94:60:00
        nd6 options=9<PERFORMNUD,IFDISABLED>
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 4 priority 128 path cost 2000000
        member: bge0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 1 priority 128 path cost 20000
#

bridgeはソフトウェア的に作成されたスイッチングハブ,tap0はソフトウェア的に作成されたスイッチングハブのポートだとイメージしてみてください。ゲストオペレーティングシステム側にtap0を割り当てることで,ゲストオペレーティングシステムからネットワークが利用できるようになります。

システム起動時に自動的にこれら作業を行うには/etc/rc.confに次の設定を追加します。

リスト2 /etc/rc.confに追加する設定

cloned_interfaces="bridge0 tap0"
ifconfig_bridge0="addm em0 addm tap0"

複数のゲストオペレーティングシステムを動作させる場合,tap0のところをtap0 tap1 tap2のように増やすとともに,addm tap0 addm tap1 addm tap2のようにそれぞれ追加してください。

あとは,/etc/sysctl.confに次の設定を追加します。

リスト3 /etc/sysctl.confに追加する設定

net.link.tap.up_on_open=1

これでbhyveを使うための設定完了です。

コメント

コメントの記入