ハイパーバイザbhyve
FreeBSD 10.
今回はFreeBSDホストでFreeBSDゲストをインストールして使う方法を紹介します。同一、
bhyveが動作する環境をセットアップ
bhyveが動作するにはvmmカーネルモジュールが必要です。kldload(8)コマンドを使って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 #
システム起動時に自動的に読み込まれるようにするには、
vmm_load="YES"
次に、
# 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インターフェース経由でネットワークにアクセスできるように、
# 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はソフトウェア的に作成されたスイッチングハブ、
システム起動時に自動的にこれら作業を行うには/etc/
cloned_interfaces="bridge0 tap0"
ifconfig_bridge0="addm em0 addm tap0"
複数のゲストオペレーティングシステムを動作させる場合、
あとは、
net.link.tap.up_on_open=1
これでbhyveを使うための設定完了です。
FreeBSDゲストをインストール
ここではFreeBSD 10.
# truncate -s 32G freebsd-10.2.img
インストールに使うISOイメージをダウンロードしてきて展開します。
# fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.2/FreeBSD-10.2-RELEASE-amd64-disc1.iso.xz FreeBSD-10.2-RELEASE-amd64-disc1.iso.xz 100% of 413 MB 5844 kBps 01m13s # unxz FreeBSD-10.2-RELEASE-amd64-disc1.iso.xz
次のようにスクリプトを実行してインストールイメージから仮想環境を起動してインストール作業を行います。
# sh /usr/share/examples/bhyve/vmrun.sh \ -c 2 \ 割り当てる仮想CPUの数 -m 2G \ 割り当てるメモリサイズ -t tap0 \ 利用するtapインターフェース -d freebsd-10.2.img \ 利用する仮想ディスクファイル -i \ 指定したCDから起動するための指定 -I FreeBSD-10.2-RELEASE-amd64-disc1.iso \ 使用するCDの指定 freebsd-10.2 仮想マシンの名前を指定
スクリプトを実行すると次のようにインストーラが起動してきます。
![図7 インストーラ起動の途中でターミナルの種類を選択。そのままリターンキーを押す 図7 インストーラ起動の途中でターミナルの種類を選択。そのままリターンキーを押す](/assets/images/admin/serial/01/bsd-yomoyama/0018/thumb/TH800_007.jpg)
![図8 通常のインストール手順と同じようにインストール 図8 通常のインストール手順と同じようにインストール](/assets/images/admin/serial/01/bsd-yomoyama/0018/thumb/TH800_008.jpg)
![図9 インストール中 図9 インストール中](/assets/images/admin/serial/01/bsd-yomoyama/0018/thumb/TH800_009.jpg)
インストール自身は通常のインストールと同じなので、
インストールするゲストオペレーティングシステムがFreeBSD 10.
![図10 インストール終了後にシェルへ移行 図10 インストール終了後にシェルへ移行](/assets/images/admin/serial/01/bsd-yomoyama/0018/thumb/TH800_010.jpg)
インストール先の/etc/
ttyu0 "/usr/libexec/getty 3wire" xterm on secure
システムを再起動すると再びインストーラが起動してきますので、
![図11 ブートローダで一旦停止 図11 ブートローダで一旦停止](/assets/images/admin/serial/01/bsd-yomoyama/0018/thumb/TH800_011.jpg)
ほかのターミナルから次のように仮想マシンの名前を指定して仮想マシンを停止させます。
# bhyvectl --destroy --vm=freebsd-10.2
これでゲストオペレーティングシステムのインストールは完了です。
FreeBSD on FreeBSDを実行!
インストールが完了したらあとは次のようにスクリプトを実行して仮想環境を起動することで使用できるようになります。
# sh /usr/share/examples/bhyve/vmrun.sh -c 2 -m 2G -t tap0 -d freebsd-10.2.img freebsd-10.2
![図14 FreeBSD 10.2-RELEASE on bhyve/FreeBSD 10.2-RELEASE 図14 FreeBSD 10.2-RELEASE on bhyve/FreeBSD 10.2-RELEASE](/assets/images/admin/serial/01/bsd-yomoyama/0018/thumb/TH800_014.jpg)
ゲストオペレーティングシステム側のネットワークインタフェースは次のようにvtnet0として認識されます。
root@trybsd:~ # ifconfig vtnet0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80028<VLAN_MTU,JUMBO_MTU,LINKSTATE> ether 00:a0:98:bc:5e:c2 inet 192.168.1.29 netmask 0xffffff00 broadcast 192.168.1.255 nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> media: Ethernet 10Gbase-T <full-duplex> status: active lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6> inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 inet 127.0.0.1 netmask 0xff000000 nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> root@trybsd:~ #
Jailと違ってホスト側にはtap0にどのIPアドレスが割り当てられているかは表示されません。ただし、
複数のカーネルを混在させる
アプリケーションによっては特定のバージョンのカーネルではないと動作しないといったものがあります
同一のカーネルであっても完全に分離した動作環境が欲しいといったケース
bhyveはFreeBSD以外のオペレーティングシステムのいくつか