個人レヴェルでもそこそこ使えるように成ってきた bhyve を、現役を退いたワークマシンを用いて SDG'S の観点から再利用する為の実験をしてみた👏
google 先生で bhyve と尋ねると sysutils/vm-bhyve の使用例がてんこ盛りw
という訳で、内藤さん作の sysutils/bmd で環境構築からのザックリした手順書を書いてみた(うぇい✌)
対象者
daemon 使いとして自負の有る人
FreeBSD が大好きな人
環境(古)
今回の記事で使用した実環境の仕様か以下の通り
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
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 を使う前提
ifconfig_em0_ipv6="inet6 accept_rtadv"
ifconfig_em1_ipv6="inet6 -ifdisabled up"
インスコ
pkg install bmd
仮想環境の置き場所作るよ
zfs create -V で zfs 上にブロックデバイスを作ってみる
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 するとか...
置き場の確保
zfs create -omountpoint=/iso zroot/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 君の起こし方
service bmd enable
一旦 boot をしないように config を書く
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 見ませう✌