1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

bhyve を bmd でキメる✨

Last updated at Posted at 2025-03-05

個人レヴェルでもそこそこ使えるように成ってきた bhyve を、現役を退いたワークマシンを用いて SDG'S の観点から再利用する為の実験をしてみた👏
google 先生で bhyve と尋ねると sysutils/vm-bhyve の使用例がてんこ盛りw
という訳で、内藤さん作の sysutils/bmd で環境構築からのザックリした手順書を書いてみた(うぇい✌)

対象者

daemon 使いとして自負の有る人
FreeBSD が大好きな人

環境(古)

今回の記事で使用した実環境の仕様か以下の通り

dmesg の抜粋
FreeBSD 14.2-RELEASE-p1 GENERIC amd64
CPU: Intel(R) Xeon(R) CPU E31225 @ 3.10GHz (3093.06-MHz K8-class CPU)
real memory  = 21474836480 (20480 MB)
em0: <Intel(R) Gigabit CT 82574L> port 0x4000-0x401f mem 0xfbee0000-0xfbefffff,0xfbed0000-0xfbed3fff irq 16 at device 0.0 on pci4
em1: <Intel(R) Gigabit CT 82574L> port 0x5000-0x501f mem 0xfbfe0000-0xfbffffff,0xfbfd0000-0xfbfd3fff irq 17 at device 0.0 on pci5
ada0: <VB0250EAVER HPG7> ATA8-ACS SATA 2.x device
ada1: <VB0250EAVER HPG7> ATA8-ACS SATA 2.x device
ada2: <VB0250EAVER HPG7> ATA8-ACS SATA 2.x device
ada3: <VB0250EAVER HPG9> ATA8-ACS SATA 2.x device
zfs pool 構成
pool status
  pool: zroot
 state: ONLINE
config:

	NAME	STATE     READ WRITE CKSUM
	zroot       ONLINE       0     0     0
	  raidz2-0  ONLINE       0     0     0
	    ada0p3  ONLINE       0     0     0
	    ada1p3  ONLINE       0     0     0
	    ada2p3  ONLINE       0     0     0
	    ada3p3  ONLINE       0     0     0

em0 には管理用としての IPv6 アドレスが割り振ってあり、bhyve の通信用として em1 を使う前提

/etc/rc.conf.local
ifconfig_em0_ipv6="inet6 accept_rtadv"
ifconfig_em1_ipv6="inet6 -ifdisabled up"

インスコ

bmd をインスコ
pkg install bmd

仮想環境の置き場所作るよ

zfs create -V で zfs 上にブロックデバイスを作ってみる

とりま 20G 程度の箱を用意
zfs create zroot/bhyve
zfs create -V 20g zroot/bhyve/13-i386
zfs create -V 20g zroot/bhyve/13-amd64
zfs create -V 20g zroot/bhyve/14-i386
zfs create -V 20g zroot/bhyve/14-amd64
zfs create -V 20g zroot/bhyve/15-i386
zfs create -V 20g zroot/bhyve/15-amd64

以下のデバイスファイルが出来ていれば桶

/dev/zvol/zroot/bhyve/13-amd64
/dev/zvol/zroot/bhyve/13-i386
/dev/zvol/zroot/bhyve/14-amd64
/dev/zvol/zroot/bhyve/14-i386
/dev/zvol/zroot/bhyve/15-amd64
/dev/zvol/zroot/bhyve/15-i386

インスコ用 iso ファイルを置く

CHECKSUM.SHA256 とか CHECKSUM.SHA512 の確認はご自由に→野良イメージ置き場からの取得は非推奨✌
手元に有る人は適宜、実環境から読み出せる状態にする
ex. nfs で共有するとか cp するとか...

置き場の確保

置き場所は任意でおk
zfs create -omountpoint=/iso zroot/iso
2025/3/5現在の iso イメージ在処
cd /iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/13.4/CHECKSUM.SHA256-FreeBSD-13.4-RELEASE-amd64
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/13.4/CHECKSUM.SHA512-FreeBSD-13.4-RELEASE-amd64
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/13.4/FreeBSD-13.4-RELEASE-amd64-bootonly.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/13.4/FreeBSD-13.4-RELEASE-amd64-disc1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/13.4/FreeBSD-13.4-RELEASE-amd64-dvd1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/14.2/CHECKSUM.SHA256-FreeBSD-14.2-RELEASE-amd64
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/14.2/CHECKSUM.SHA512-FreeBSD-14.2-RELEASE-amd64
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-bootonly.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-disc1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-dvd1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/snapshots/amd64/amd64/ISO-IMAGES/15.0/CHECKSUM.SHA256-FreeBSD-15.0-CURRENT-amd64-20250227-8a85584785e3-275712
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/snapshots/amd64/amd64/ISO-IMAGES/15.0/CHECKSUM.SHA512-FreeBSD-15.0-CURRENT-amd64-20250227-8a85584785e3-275712
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/snapshots/amd64/amd64/ISO-IMAGES/15.0/FreeBSD-15.0-CURRENT-amd64-20250227-8a85584785e3-275712-disc1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/13.4/CHECKSUM.SHA256-FreeBSD-13.4-RELEASE-i386
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/13.4/CHECKSUM.SHA512-FreeBSD-13.4-RELEASE-i386
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/13.4/FreeBSD-13.4-RELEASE-i386-bootonly.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/13.4/FreeBSD-13.4-RELEASE-i386-disc1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/13.4/FreeBSD-13.4-RELEASE-i386-dvd1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/14.2/CHECKSUM.SHA256-FreeBSD-14.2-RELEASE-i386
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/14.2/CHECKSUM.SHA512-FreeBSD-14.2-RELEASE-i386
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-i386-bootonly.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-i386-disc1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-i386-dvd1.iso
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/snapshots/i386/i386/ISO-IMAGES/15.0/CHECKSUM.SHA256-FreeBSD-15.0-CURRENT-i386-20250227-8a85584785e3-275712
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/snapshots/i386/i386/ISO-IMAGES/15.0/CHECKSUM.SHA512-FreeBSD-15.0-CURRENT-i386-20250227-8a85584785e3-275712
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/snapshots/i386/i386/ISO-IMAGES/15.0/FreeBSD-15.0-CURRENT-i386-20250227-8a85584785e3-275712-disc1.iso

今回の選抜隊 iso イメージ群1

/iso/FreeBSD-13.4-RELEASE-amd64-bootonly.iso
/iso/FreeBSD-13.4-RELEASE-i386-bootonly.iso
/iso/FreeBSD-14.2-RELEASE-amd64-bootonly.iso
/iso/FreeBSD-14.2-RELEASE-i386-bootonly.iso
/iso/FreeBSD-15.0-CURRENT-amd64-20250227-8a85584785e3-275712-disc1.iso
/iso/FreeBSD-15.0-CURRENT-i386-20250227-8a85584785e3-275712-disc1.iso

おまじない😋

ifconfig bridge0 create addm em1 up

再起動で消えない為にも

/etc/rc.conf.local
cloned_interfaces="bridge0"
ifconfig_bridge0="addm em1"

daemon 君の起こし方

このワンライナーで /etc/rc.conf に bmd_enable="YES" が追記されるん最近まで気づかなかった
service bmd enable

一旦 boot をしないように config を書く

/usr/local/etc/bmd.conf
global {
	cmd_socket_mode = 0660;
	$imgpath = /dev/zvol/zroot/bhyve;
	$isopath = /iso;
}

template default_disk {
	disk = ${imgpath}/${NAME};
}

template graphics {
	graphics = yes;
	graphics_port = $((5900 + ${ID}));
	xhci_mouse = yes;
}

template serial {
	comport = auto;
}

template internet {
	network = bridge0;
}

template grub_inspect {
	loader = grub;
	loadcmd = auto;
	installcmd = auto;
}

vm 13-amd64 {
#       boot = yes;
	ncpu = 1;
	memory = 2G;
	iso = ${isopath}/FreeBSD-13.4-RELEASE-amd64-bootonly.iso;
	loader = uefi;
	.apply default_disk, serial, internet, graphics;
}

vm 13-i386 {
#       boot = yes;
	ncpu = 1;
	memory = 2G;
	iso = ${isopath}/FreeBSD-13.4-RELEASE-i386-bootonly.iso;
	loader = bhyveload;
	.apply default_disk, serial, internet, graphics;
}

vm 14-amd64 {
#       boot = yes;
	ncpu = 1;
	memory = 2G;
	iso = ${isopath}/FreeBSD-14.2-RELEASE-amd64-bootonly.iso;
	loader = uefi;
	.apply default_disk, serial, internet, graphics;
}

vm 14-i386 {
#       boot = yes;
	ncpu = 1;
	memory = 2G;
	iso = ${isopath}/FreeBSD-14.2-RELEASE-i386-bootonly.iso;
	loader = bhyveload;
	.apply default_disk, serial, internet, graphics;
}

vm 15-amd64 {
#       boot = yes;
	ncpu = 1;
	memory = 2G;
	iso = ${isopath}/FreeBSD-15.0-CURRENT-amd64-20250227-8a85584785e3-275712-disc1.iso;
	loader = uefi;
	.apply default_disk, serial, internet, graphics;
	graphics_res = 1280x720;
}

vm 15-i386 {
#       boot = yes;
	ncpu = 1;
	memory = 2G;
	iso = ${isopath}/FreeBSD-15.0-CURRENT-i386-20250227-8a85584785e3-275712-disc1.iso;
	loader = bhyveload;
	.apply default_disk, serial, internet, graphics;
	graphics_res = 1280x720;
}
#.include "bmd.d/*";

bmd 実行👏

service bmd start

ここで tap? の仮想 nic が環境分(今回の例だと6つ)出て来ていれば桶

ifconfig | grep "tap[0-9]:"
tap0: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
tap1: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
tap2: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
tap3: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
tap4: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
tap5: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500

仮想環境に OS をインスコ1

bmdctl install -c 13-amd64
bmdctl install -c 13-i386
bmdctl install -c 14-amd64
bmdctl install -c 14-i386
bmdctl install -c 15-amd64
bmdctl install -c 15-i386

インスコが終わった直後は仮想環境は停止している

確認方法
bmdctl list
id                name ncpu memory    loader       state       owner
 --- ------------------- ---- ------ --------- -----------  ----------
   0            13-amd64    1     2G      uefi        STOP        root
   1             13-i386    1     2G bhyveload        STOP        root
   2            14-amd64    1     2G      uefi        STOP        root
   3             14-i386    1     2G bhyveload        STOP        root
   4            15-amd64    1     2G      uefi        STOP        root
   5             15-i386    1     2G bhyveload        STOP        root

インスコが整えば自動起動で再起動もスムーズに✌

/usr/local/etc/bmd.conf のファイルでコメントアウトしていた boot = yes; 行のコメントを bmd に認識してもらいましょ

service bmd restart

裏で daemon 君が淡々と設定ファイルに従って仮想環境を構築してくれる筈🍡

活動中👹

bmdctl list
id                name ncpu memory    loader       state       owner
 --- ------------------- ---- ------ --------- -----------  ----------
   0            13-amd64    1     2G      uefi         RUN        root
   1             13-i386    1     2G bhyveload         RUN        root
   2            14-amd64    1     2G      uefi         RUN        root
   3             14-i386    1     2G bhyveload         RUN        root
   4            15-amd64    1     2G      uefi         RUN        root
   5             15-i386    1     2G bhyveload         RUN        root

OS のインスコが終わったら、個別設定をする

インスコの時点でユーザの追加とか sshd を enable してたら、外から普通に設定すればいいが、ズボラ噛まして後から設定したい我儘な daemon 使いの人はコンソールを実環境から扱う

bmdctl console 13-amd64
bmdctl console 13-i386
bmdctl console 14-amd64
bmdctl console 14-i386
bmdctl console 15-amd64
bmdctl console 15-i386

各々コマンド入力後は cu -l でシリアルコンソール接続と同じ状況になっているので、

root⏎
パスワード⏎

とタイプして root でログイン出来る(筈)

logout 後に実環境へ戻りたいよね

cu -l の脱出コマンドで華麗に👋出来る

~ Ctrl+D

bmd.conf がミスってたら...

/var/log/daemon.log 見ませう✌

  1. 執筆現在ではkernelの読み込み時にpanicしてインスコ出来ない🤣 2

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?