Skip to content


FreeBSD bhyve + vm-bhyveでゲストにFreeBSD環境を入れてみる

FreeBSDでは長らくjailで仮想環境が使えてきた訳だけれども、仮想スイッチのVIMAGEが待てど暮らせど一向にプロダクションリリースにならないおかげでOSのセキュリティアップデートの度にkernel再構築が発生し結構大変。

コンテナ型仮想化環境であるjailにはリソース負荷が軽いメリットがあるが使っていると困った点も多い。

  • HOST環境とjail環境が同じkernelなのでバージョンを混在させられない。
  • jail環境も基本的にFreeBSD一択。
  • VIMAGEがなかなかプロダクションリリースになっていないのできちんと使おうとするとkernelからrebuildが必須。→OSアップデートの度にmake buildkernel。
  • jail環境の運用で楽をしようと共用化してると、ホストサーバを新しいH/Wの移行作業が割と大変。

そこでそろそろ使い物になっているかもとbhyveに手を出してみようとしたら、これがまた資料が少ない。本当に使えるのかと言うくらいない。探しても日本語の情報では手動操作でインスタンスを立ち上げるものしか出てこない。
普通bhyveでゲストをたちあげようとするなら

  1. ifconfig tapX createでtapデバイスを作り
  2. sysctl net.link.tap.up_on_open=1 で有効化し
  3. ifconfige bridgeX create でbridge I/Fを作り
  4. ifconfig bridgeX addm em0 addm tapX upでやっとネットワークの準備が完了し
  5. truncate -s XXg disk.imgでイメージ領域を確保し
  6. sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 256M -t tap0 -d disk.img -i -I FreeBSD-10.3-RELEASE-amd64-dvd1.iso <vmName> でインストール作業行って
  7. sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 256M -t tap0 -d disk.img <vmName>でインストール後のインスタンスが立ち上がる様に自動起動の仕組みを考え‥‥

そこそこ手間。テストで一つだけならまだしも、複数インスタンスの管理を行うとなると正直面倒。
これだからこそ使おうと思う人も増えないし、ますます情報が増えない悪循環。これではお試しにはいいけれども運用を考えたら使い難く過ぎる。
でも、もうちょっと簡単になって欲しいということでezjailみたいな管理ツールがないものか色々試してみた結果、vm-bhyveがそこそこ良さそうなので入れてみたら、想像以上に極楽だった。
実際にインスタンスの作成からFreeBSD 10.3をインストールしたところまでの操作がこちら。

結論を先に断言しますが、bhyveが動作できるH/W環境ならjailよりbhyveの方が簡単で使いやすい。仮にホストマシンを移行することになっても殆ど仮想イメージファイルのコピーだけで作業が終わるのであっという間。

1. bhyveのためのその一

bhyveを使うためにはvmm.ko(vmmカーネルモジュール)を読み込ませないといけない。

いきなり/boot/loader.confに入れるのは怖いので、まずはコマンドラインからお試し。

こんな感じでvmm.koが上がってればOK。
良さそうなら/boot/loadr.conに以下を追加。

2. vm-bhyveの導入

bhyveのvmを管理するvm-bhyveをインストールする。

使い方は”man vm”とするとずらずらっと出てくるズラけれども、とりあえず導入まで一気に行うつもりで突っ走る。
まずvmの管理領域をzfs上に”data/vm”として用意する。単なるディレクトリでも可能だけど、zfsの方が何かと便利。

次に/etc/rc.confに以下の5行を追加。

vm-bhyve環境の初期化を実行(一度だけ)。

init実行でdata/vmの配下はこのような感じになる。

どんどん行きます。
テンプレート設定ファイルをexsampleよりコピー。

生成するvmからネットワークに接続可能とするために仮想スイッチ(bridge)を作成しネットワークI/Fを接続する。
この例ではホスト環境のネットワークI/Fがem0なので、bge0とか他の環境では適宜置き換える事。

ifconfigで確認すると”bridge0″が作成され”em0″が接続されているのが確認できる。
インスタンス起動後にはさらにインスタンスの仮想ポート(tap0)が接続される。
この作業は.config/switchファイルに記録されて残り、/etc/rc.confの設定でシステム起動時の自動インスタンス開始などに参照されるので都度作成する必要は無い。

vmにOSイメージをインストールするためのISOファイルをどこかから入手する。
既にISOファイルを持っているならvm/.isoディレクトリの下に直接コピーしても可。

3. ゲストOSのインスタンス生成

いよいよvmインスタンスの生成。今回は”vmtest”。(テストだけに)

生成しただけでまだ実行していないので状態はStoppedのまま。

-tはテンプレートの指定。defaultを指定、あるいは-tの指定が何も無い場合はFreeBSD。
-sは割り当てるディスクイメージファイルのサイズ。無指定時は20GB。
どちらもデフォルトでいいなら”# vm create <インスタンス名>”でも良い。
関連ファイルは$vm_dir/vmtestの下に以下のように生成される。

createで”-s 20g”と指定しているので、disk0.imgが20GBになっている。
デフォルトのテンプレートのままではCPUの割り当ては1つ、メモリも256Mだけなので必要ならば修正する。
テンプレート”freebsd-zvol”はディスクデータがsparse fileの扱いになるので、zvolの方が良ければ-tの指定は”freebsd-zvol”に変更する。(“default.conf”,”freebsd-zvol.conf”,”config.sample”の中も確認すると参考になる筈)
vmtest.confが実際の設定ファイルで直接viで編集しても良いが、下記の方法だとカレントディレクトリに依らず修正できるので楽。

内容は見れば大体判ると思うので省略。”man vm”するとパラメータの説明があるので首っ引きしてみてください。
とりあえず今回はそのまま。

いよいよインストール開始。

状態がStoppedからBootloaderに変わった。
放置しているとさらに”Running“に変わります。
このままだと何も出来ないのでコンソールに接続。

なお、”vm install~“の代わりに”vm -f install~“と”-f”オプションを指定するといきなりコンソールに接続されるので少し楽というかわかりやすい。
コンソールに接続するとスタートメッセージが流れていきコンソールタイプを聞いてくる。

そのままEnterでvt100のままでも良いが好みなのでPuTTYだとxtermを選んで先に進む。
consoleへの接続はcuコマンドで行われている様なので、”~+Ctrl+D”(チルダの後にCtrl+D)か、”~.”で抜けられる。

インストール画面
ここから先は特に説明いらないと思いますが、要するにいつものインストール作業が始まります。
特にどうという事もありませんので説明省略。

OSのインストールが出来てしまえばあとは以下のコマンドで基本的な管理が可能。

4. システム立ち上げのインスタンス自動起動

システムを再起動する度に毎回コンソールからログインして手動でvm start~とやるのは面倒なので自動起動の設定を行う。
設定は/etc/rc.confのvm_listにスペースで区切って記入するだけ。

一覧もこのように変わる。

jailもそれなりにお手軽でしたが、bhyve + vm-bhyveの環境はさらにお気楽でした。
なによりOSのセキュリティアップデートが

だけで済むというのがとてもありがたい。特に最近はpxxの数字が増えるのが早いから‥。
ただ消費リソースは確実にjailよりbhyveの方が多いのでその辺は用途によって考える事が必要。

Posted in FreeBSD.

Tagged with , .


3 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. qph says

    ネット検索でこちらにたどり着きました。
    仮想マシンに初挑戦の身には簡潔明瞭、
    しかも必要十分な情報で大変助かりました。

Continuing the Discussion

  1. My Scrap book » FreeBSD 10.0でVIMAGEなjail(手抜き編) linked to this post on 2016年6月26日

    […] なお、FreeBSD 10.2以降ではbhyveを使った仮想化がお手軽になっているので、リソースが厳しくてjailでないと困るという様な理由が無ければそちらがおすすめ。 […]

  2. My Scrap book » FreeBSD bhyve + vm-bhyve 仮想ディスク増設 linked to this post on 2016年6月26日

    […] 今回は前回テスト用に作成した環境(vmtest)を例に試してみる。 […]



Some HTML is OK

or, reply to this post via trackback.