CentOS on bhyve!
FreeBSD 10.
LinuxディストリビューションではRed Hat Enterprise Linux、
bhyveが動作する環境をセットアップ
bhyveが動作する環境をセットアップします。カーネルモジュールとネットワークの設定に関しては前回の
# kldload vmm # ifconfig tap1 create # sysctl net.link.tap.up_on_open=1 net.link.tap.up_on_open: 0 -> 1 # ifconfig bridge0 create # ifconfig bridge0 addm bge0 # ifconfig bridge0 addm tap1
ネットワークインターフェースにはtap1を使っています。前回、
FreeBSD以外のオペレーティングシステムをゲストオペレーティングシステムとして利用するにはgrub2-bhyveが必要ですので、
# pkg install grub2-bhyve Updating FreeBSD repository catalogue... Fetching meta.txz: 100% 944 B 0.9kB/s 00:01 Fetching packagesite.txz: 100% 5 MiB 1.1MB/s 00:05 Processing entries: 100% FreeBSD repository update completed. 24279 packages processed. The following 1 package(s) will be affected (of 0 checked): New packages to be INSTALLED: grub2-bhyve: 0.30_1 The process will require 1 MiB more space. 408 KiB to be downloaded. Proceed with this action? [y/N]: y Fetching grub2-bhyve-0.30_1.txz: 100% 408 KiB 417.6kB/s 00:01 Checking integrity... done (0 conflicting) [1/1] Installing grub2-bhyve-0.30_1... [1/1] Extracting grub2-bhyve-0.30_1: 100% #
システムを再起動して自動的にこれら設定が反映されるようにするには、
cloned_interfaces="bridge0 tap0 tap1"
ifconfig_bridge0="addm em0 addm tap0 addm tap1"
net.link.tap.up_on_open=1
これでホスト側の設定は完了です。
CentOSをインストール
CentOS 6.
# fetch http://ftp.iij.ad.jp/pub/linux/centos/6/isos/x86_64/CentOS-6.7-x86_64-minimal.iso CentOS-6.7-x86_64-minimal.iso 100% of 395 MB 2748 kBps 02m27s #
インストール用にディスクイメージファイルを作成します。
# truncate -s 32G centos-6.img
grub2-bhyveが使用する次のような設定ファイルを作成します。hd0およびcd0としてどのファイルを使用するのかを説明したマッピングファイルです。
# cat centos-6-device.map (hd0) ./centos-6.img (cd0) ./CentOS-6.7-x86_64-minimal.iso #
FreeBSD以外のオペレーティングシステムをbhyveで使用する場合には2段階のブートステップを踏みます。まずgrub2-bhyveを使ってカーネルを読み込みます。次にゲストオペレーティングシステムを起動します。
まず、
# grub-bhyve -m centos-6-device.map -r cd0 -M 2G centos-6 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) (cd0,msdos1) (host) grub> ls (cd0) Device cd0: Filesystem type iso9660 - Label \`CentOS_6.7_Final' - Last modification time 2015-08-04 21:59:24 Tuesday, UUID 2015-08-04-21-59-24-00 - Total size 808960 sectors grub> ls (cd0)/isolinux boot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest splash.jpg TRANS.TB L vesamenu.c32 vmlinuz grub> linux (cd0)/isolinux/vmlinuz grub> initrd (cd0)/isolinux/initrd.img grub> boot #
次にbhyve(8)でインストーラを実行します。
# bhyve -A \ APCIテーブルを生成 -H \ HLTインストラクション検出時に仮想CPUスレッドを生成 -P \ PAUSEインストラクション検出時にゲスト仮想CPUを強制終了 -s 0:0,hostbridge \ ホストブリッジ -s 1:0,lpc \ LPC PCI-ISAブリッジ(COM1/COM2 16550シリアルポート付き) -s 2:0,virtio-net,tap1 \ Virtioネットワークインターフェース -s 3:0,virtio-blk,./centos-6.img \ Virtioブロックストレージインターフェース -s 4:0,ahci-cd,./CentOS-6.7-x86_64-minimal.iso \ ATAPI CD/DVD接続済AHCIコントローラ -l com1,stdio \ COM1設定 -c 2 \ 仮想CPU数 -m 2G \ ゲストに割り当てるメモリサイズ centos-6 ゲスト名

インストール自体は通常のCentOS 6系のインストールと同じなので特に迷うことはないでしょう。
インストールが完了したら次のように一旦ゲストオペレーティングシステムを終了しておきます。
# bhyvectl --destroy --vm=centos-6
CentOS 6.7 on FreeBSD 10.2-RELEASE!
インストールが完了しましたので、
# grub-bhyve -m centos-6-device.map -r hd0,msdos1 -M 2G centos-6 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 (hd0) (hd0,msdos2) (hd0,msdos1) (cd0) (cd0,msdos1) (host) (lvm/VolGroup-lv_swap) (lvm/VolGroup-lv_root) grub> ls (hd0,msdos1)/ lost+found/ grub/ efi/ System.map-2.6.32-573.el6.x86_64 config-2.6.32-573.el6.x86_64 symvers-2.6.32-573.el6.x86_64.gz vmlinuz-2.6.32-573.el6.x86_64 initramfs- 2.6.32-573.el6.x86_64.img grub> linux (hd0,msdos1)/vmlinuz-2.6.32-573.el6.x86_64 root=/dev/mapper/VolGroup-lv_root grub> initrd (hd0,msdos1)/initramfs-2.6.32-573.el6.x86_64.img grub> boot #
Linuxカーネルを読み込んだら次にゲストオペレーティングシステムを起動します。
# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap3 -s 3:0,virtio-blk,./centos-6.img -l com1,stdio -c 2 -m 2G centos-6



# bhyvectl --destroy --vm=centos-6
FreeBSDカーネル以外のゲストオペレーティングシステムを起動するには2段階ステップを践む必要がありますが、
# printf "linux (hd0,msdos1)/vmlinuz-2.6.32-573.el6.x86_64 root=/dev/mapper/VolGroup-lv_root\ninitrd (hd0,msdos1)/initramfs-2.6.32-573.el6.x86_64.img\nboot\n" | grub-bhyve -m centos-6-device.map -r hd0,msdos1 -M 2G centos-6 && bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap3 -s 3:0,virtio-blk,/d/bhyve/centos-6.img -l com1,stdio -c 2 -m 2G centos-6
aliasを設定するなど個別にスクリプトに書いておくなどすれば、
# alias bhyve_centos_6='printf "linux (hd0,msdos1)/vmlinuz-2.6.32-573.el6.x86_64 root=/dev/mapper/VolGroup-lv_root\ninitrd (hd0,msdos1)/initramfs-2.6.32-573.el6.x86_64.img\nboot\n" | grub-bhyve -m centos-6-device.map -r hd0,msdos1 -M 2G centos-6 && bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap3 -s 3:0,virtio-blk,/d/bhyve/centos-6.img -l com1,stdio -c 2 -m 2G centos-6'
bhyveを使えば検証用に複数のバージョンのLinuxゲストを走らせておくといったことができて便利です。Linuxの検証作業や開発用に別途ハードウェアを用意する必要がなくなるのでその点でも効果が期待できます。
活用方法アレコレ
bhyveはシンプルで扱いやすく、
次回は
前回と今回は仮想ディスクイメージとしてUFS2上のファイルを使いましたが、