BSD界隈四方山話

第24回bhyveでNetBSDを使ってみよう

NetBSD on bhyve

bhyveを使うとFreeBSD以外のオペレーティングシステムを実行できます。今回はbhyveでNetBSDを利用する方法を紹介します。NetBSDプロジェクトは先日、NetBSDの最新メジャーアップグレードバージョンとなるNetBSD 7.0を公開しましたので、今回はこの最新版をインストールする方法を紹介します。

次の条件でセットアップを行います。

  • ホスト:FreeBSD 10.2-RELEASE/amd64
  • ゲスト:NetBSD 7.0/amd64
  • ホストNIC:bge0
  • ゲストNIC:tap0 (via bridge0)
  • 仮想CPU:1個
  • 仮想メモリ:2GB
  • 仮想ディスク(32BG):/dev/zvol/z/netbsd-7.0
  • インストーラ:/d/bhyve/NetBSD-7.0-amd64.iso
  • grub-bhyve設定ファイル:/d/bhyve/netbsd-7.0-device.map

細かい説明はこれまでのbhyve記事を参考にしてください。

ホストのセットアップ

ホストのセットアップを行います。vmmカーネルモジュールを読み込み、bridge0にtap0とbge0を追加します。

図1 ホスト環境をセットアップ
# kldload vmm
# ifconfig tap0 create
# sysctl net.link.tap.up_on_open=1
net.link.tap.up_on_open: 0 -> 1
# ifconfig bridge0 create
# ifconfig bridge0 addm bge0 addm tap0 up

再起動したときも同じコマンドが実行されるように3つの設定ファイルにそれぞれ次のような設定を追加します。

リスト1 /boot/loader.confに追加する設定
vmm_load="YES"
リスト2 /etc/sysctl.confに追加する設定
net.link.tap.up_on_open=1
リスト3 /etc/rc.confに追加する設定
oned_interfaces="bridge0 tap0"
ifconfig_bridge0="addm bge0 addm tap0"

ゲストのインストール

FreeBSD以外のオペレーティングシステムをbhyveで使う場合、カーネルのローディングにgrub-bhyveを使います。grub-bhyveで使う設定ファイルを次のように用意します。

リスト4 grub-bhyve for NetBSDのマッピングファイル netbsd-7.0-device.map
(hd0) /dev/zvol/z/netbsd-7.0
(cd0) /d/bhyve/NetBSD-7.0-amd64.iso

NetBSD 7.0のインストールイメージファイルをダウンロードするとともに、次のようにZFSを使って仮想ディスクを作成します。

図2 仮想ディスクの作成
# cd /d/bhyve/
# fetch ftp://ftp2.jp.netbsd.org/pub/NetBSD/NetBSD-7.0/iso/NetBSD-7.0-amd64.iso
NetBSD-7.0-amd64.iso                          100% of  371 MB 5616 kBps 01m08s
# zfs create -V 32G -o volmode=dev z/netbsd-7.0

次のようにgrub-bhyveを実行してNetBSDカーネルを読み込みます。

図3 NetBSD 7.0カーネルの読み込み
# grub-bhyve -m netbsd-7.0-device.map -r cd0 -M 2G netbsd-7.0

                             GNU GRUB  version 2.00

   Minimal BASH-like line editing is supported. For the first word, TAB
   lists possible command completions. Anywhere else TAB lists possible
   device or file completions.


grub> ls (cd0)
Device cd0: Filesystem type iso9660 - Label `NETBSD_70' - Last modification
time 2015-09-25 08:28:59 Friday, UUID 2015-09-25-08-28-59-00 - Total size
761284 sectors
grub> ls (cd0)/
amd64/ bin/ boot boot.cfg dev/ etc/ install.sh lib/ libdata/ libexec/ mnt/ mnt2
/ netbsd sbin/ stand/ sysinst sysinstmsgs.de sysinstmsgs.es sysinstmsgs.fr sysi
nstmsgs.pl targetroot/ tmp/ usr/ var/
grub> knetbsd -h -r cd0a (cd0)/netbsd
grub> boot
#
図4 NetBSD 7.0インストーラの起動
# bhyve \
    -H -P -A \
    -W -c 1 \
    -m 2G \
    -l com1,stdio \
    -s 0:0,hostbridge \
    -s 1:0,lpc \
    -s 2:0,virtio-net,tap0 \
    -s 3:0,ahci-cd,/d/bhyve/NetBSD-7.0-amd64.iso \
    -s 4:0,virtio-blk,/dev/zvol/z/netbsd-7.0 \
    netbsd-7.0
図5 NetBSD on bhyveインストールのようす
図5 NetBSD on bhyveインストールのよう
図6 NetBSD on bhyveインストールのようす
図6 NetBSD on bhyveインストールのよう
図7 NetBSD on bhyveインストールのようす
図7 NetBSD on bhyveインストールのよう

インストールが完了したらshutdownコマンドを実行して仮想環境を終了します。

図8 shutdown(8)コマンドでインストールを終了
# shutdown -p now
Shutdown NOW!
shutdown: [pid 268]
sh: /usr/bin/wall: not found
shutdown: poweroff by root:
#
System shutdown time has arrived

About to run shutdown hooks...
cron not running? (check /var/run/cron.pid).
inetd not running? (check /var/run/inetd.pid).
random_seed: /var/db/entropy-file: Bad file system type tmpfs
Removing block-type swap devices
swapctl: Cannot open `/etc/fstab': No such file or directory
Tue Oct 13 12:28:31 GMT 2015

Done running shutdown hooks.
syncing disks... done
com1: detached
pchb0: detached
attimer1: detached
audio0: detached
cd0: detached
atapibus0: detached
atabus0: detached
acpi0: entering state S5

インストールはとくに困ることはないと思います。インストーラの指示にしたがってそのままインストールしてみてください。

NetBSD 7.0を使ってみよう

以降は次のようにgrub-bhyveとbhyveコマンドを実行することでNetBSD 7.0が起動できるようになります。

図9 grub-bhyveによるカーネルの読み込み
# grub-bhyve -m netbsd-7.0-device.map -M 2G netbsd-7.0

                             GNU GRUB  version 2.00

   Minimal BASH-like line editing is supported. For the first word, TAB
   lists possible command completions. Anywhere else TAB lists possible
   device or file completions.

grub> knetbsd -h -r cd0a (hd0,netbsd1)/netbsd
grub> boot
#
図10 bhyveによるNetBSDの実行
# bhyve \
    -H -P -A \
    -W -c 1 \
    -m 2G \
    -l com1,stdio \
    -s 0:0,hostbridge \
    -s 1:0,lpc \
    -s 2:0,virtio-net,tap0 \
    -s 3:0,virtio-blk,/dev/zvol/z/netbsd-7.0 \
    netbsd-7.0

起動スクリプトを組むか、または次のようにエイリアスを設定しておけば、コマンド1つでNetBSD環境を起動できるようになります。

リスト5 NetBSD 7.0 on bhyveのエイリアス
alias bhyve_netbsd_7.0='sudo bhyvectl --destroy --vm=netbsd-7.0; printf "knetbsd -h -r cd0a (hd0,netbsd1)/netbsd\nboot\n" | sudo grub-bhyve -m /d/bhyve/netbsd-7.0-device.map -M 2G netbsd-7.0; sudo bhyve -W -c 1 -m 2G -H -P -A -l com1,stdio -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap7 -s 3:0,virtio-blk,/dev/zvol/z/netbsd-7.0 netbsd-7.0; sudo bhyvectl --destroy --vm=netbsd-7.0'

bhyve活用あれこれ

これまでFreeBSD bhyveでゲストオペレーティングシステムとしてFreeBSD、CentOS、OpenBSD、NetBSDをインストールして使用する方法を紹介してきました。また、ディスク性能が引き上がるので、仮想ディスクとして通常のファイルを使うのではなくZFSでデバイスファイルを作成して使用したほうがよいことも紹介しました。

bhyveがどういった仕組みで動作しているのか、カーネルの読み込みや起動処理がどうなっているのか、コマンドと操作を通じてなんとなくつかめてきたのではないかと思います。起動時のオプションが多いので最初は戸惑うかもしれませんが、起動に関してはシェルスクリプトやエイリアスにまとめれば一発でいけるようになりますので、一度作成してしまえばあとはコピーして編集するだけで済みます。

FreeBSD bhyveはいろいろと活用できる機能ですので、まだ使っていないのであれば、ぜひ一度試してみてください。

おすすめ記事

記事・ニュース一覧