資料: OpenBSD FAQ - Virtualization
ハードウェアが対応しているか確認
# dmesg | egrep '(VMX/EPT|SVM/RVI)'
ファームウェアをインストール
# fw_update -v # vmm-firmwareがインストールされるのを確認
vmdを有効化
# rcctl enable vmd # rcctl start vmd
ディスクイメージを作成
# vmctl create -s 4G OpenBSD78.img # フォーマットは raw か qcow2
(ネットワークブリッジを使用しなければ)設定ファイルなしで動く。
# vmctl start -c -i 1 -L -m 2G -B cdrom -r install78.iso -d OpenBSD78.img obsd78
# vmctl start -i 1 -L -m 2G -d OpenBSD78.img obsd78
設定を/etc/vm.confに記述する。
# cat /etc/vm.conf
switch "uplink" {
interface veb0
}
vm "obsd78" {
disable
memory 2G
disk "/opt/vmd/OpenBSD78.img"
interfaces 1
interface { switch "uplink" }
}
(他にもVMがある場合は以下同様に記述)
前項のvm.confの設定ではVMをブリッジに接続し、外のネットワークに出られるようにしている。 これについて、ネットワークの追加設定が必要。
OpenBSDでは汎用ブリッジデバイス/仮想ポートとしてbridge(4)、vether(4)があるが、ここでは、vmm/vmd用に特化されたveb(4)、vport(4)を使用する。
/etc/hostname.veb - veb(4) (Virtual Ethernet Bridge)の設定
add re0 add vport0 up
/etc/hostname.re0 - 実機のNICの設定
up # 有効化するだけ
/etc/hostname.vport - vebに接続する仮想ポート。vebに接続した実機のNICではアドレス設定ができないため、このvportに設定する。
inet autoconf # DHCP inet6 autoconf # SLAAC
イメージ図

VMが起動すると、tap(4)経由でveb0に接続される。
# vmctl start obsd78
vmctl: started vm 1 successfully, tty /dev/ttyp1
# vmctl status
ID PID VCPUS MAXMEM CURMEM TTY OWNER STATE NAME
1 25809 1 516M 156M ttyp1 root running obsd78
/dev/ttyp1はVMのシリアルコンソール。以下のようにアクセスする。
# vmctl console obsd78
または、起動時に、
# vmctl start -c obsd78
内部的にcu(1)を呼び出している。
| 区画 | OS | マウントポイント | 用途 |
| sd0a | 河豚板7.1 | ブートセレクタ/メンテ用 | |
| sd0b | swap | スワップ | |
| sd0d | 河豚板の環境保存用 | ||
| sd0e | OpenBSD 7.8/i386 | / | ビルド環境 |
| sd0f | OpenBSD 7.8/amd64 | / | ビルド環境 |
| sd0g | OpenBSD 7.8 | /opt/build | 生成物 |
| sd0k | OpenBSD 7.7/i386 | / | ビルド環境 |
| sd0l | OpenBSD 7.7/amd64 | / | ビルド環境 |
| sd0m | OpenBSD 7.7 | /opt/build | 生成物 |
| ホスト | ゲストOS | VM ID |
| 河豚板-7.8-amd64 Core i7 2.6GHz*6CPU mem 32GB HDD 1.8TB+1TB | OpenBSD 7.8/i386 | build32 |
| OpenBSD 7.8/amd64 | build64 | |
| OpenBSD 7.8-current/amd64 | build64c |
| 区画 | OS | マウントポイント | 用途 |
| MFS | 河豚板7.8-current | /ram | OpenBSD-currentビルド用 (すべてオンメモリ) |
boot> set tty com0インストール時に、
Change the default console to com0?に対しyesを指定する
| 基盤 | VM | ID |
| 河豚板-7.8-amd64 | OpenBSD 7.8/i386 | build32 |
| OpenBSD 7.8/amd64 | build64 | |
| OpenBSD 7.8-current/amd64 | build64c | |
| 河豚板-7.1-i386 | tempsensor |
実験&学習目的でLinuxを追加
| RHEL系 (Alma Linux or Rocky Linux) | ||
| バージョン10(現行) | UEFI起動のみサポート | 起動不可 |
| バージョン9, 8 | カーネル起動途中でpanic | |
| Debian | ||
| バージョン13 | カーネル起動途中でpanic | |
| バージョン12 | 起動成功 | |
| 基盤 | VM | ID |
| 河豚板-7.8-amd64 | OpenBSD 7.8/i386 | build32 |
| OpenBSD 7.8/amd64 | build64 | |
| OpenBSD 7.8-current/amd64 | build64c | |
| 河豚板-7.1-i386 | tempsensor | |
| Debian12 Linux | debian12 |
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,9600 ttyS0 - $TERMその後、systemctl enable/start
※)今回は行わなかったが、過去にPlamo Linux, Alpine Linuxも動作実績あり。
構築中に、VMが最大4つまでしか起動できず、5個目からはエラーとなる現象に遭遇した。
現象の再現状況:
# rcctl start vmd
vmd(ok)
# vmctl status
ID PID VCPUS MAXMEM CURMEM TTY OWNER STATE NAME
1 - 1 512M - - root stopped OpenBSD-7.8-01
2 - 1 512M - - root stopped OpenBSD-7.8-02
3 - 1 512M - - root stopped OpenBSD-7.8-03
4 - 1 512M - - root stopped OpenBSD-7.8-04
5 - 1 512M - - root stopped OpenBSD-7.8-05
6 - 1 512M - - root stopped OpenBSD-7.8-06
7 - 1 512M - - root stopped OpenBSD-7.8-07
8 - 1 512M - - root stopped OpenBSD-7.8-08
# vmctl start 1
vmctl: started vm 1 successfully, tty /dev/ttyp1
# vmctl start 2
vmctl: started vm 2 successfully, tty /dev/ttyp2
# vmctl start 3
vmctl: started vm 3 successfully, tty /dev/ttyp3
# vmctl start 4
vmctl: started vm 4 successfully, tty /dev/ttyp4
# vmctl start 5
vmctl: start vm command failed: No such file or directory
# vmctl start 6
vmctl: start vm command failed: No such file or directory
# vmctl start 7
vmctl: start vm command failed: No such file or directory
# vmctl start 8
vmctl: start vm command failed: No such file or directory
# vmctl status
ID PID VCPUS MAXMEM CURMEM TTY OWNER STATE NAME
4 32605 1 516M 123M ttyp4 root running OpenBSD-7.8-04
3 31865 1 516M 123M ttyp3 root running OpenBSD-7.8-03
2 7926 1 516M 156M ttyp2 root running OpenBSD-7.8-02
1 25809 1 516M 156M ttyp1 root running OpenBSD-7.8-01
5 - 1 512M - - root stopped OpenBSD-7.8-05
6 - 1 512M - - root stopped OpenBSD-7.8-06
7 - 1 512M - - root stopped OpenBSD-7.8-07
8 - 1 512M - - root stopped OpenBSD-7.8-08
ネットワークの設定を行わないと、正常に起動することが判明した。
vm.conf
vm "OpenBSD-7.8-05" {
disable
memory 512M
disk "/home/vmtest/OpenBSD-7.8-05.raw"
# interfaces 1 ←コメントアウトすると
# interface { switch "uplink" } ←動く
}
この現象をOpenBSD ML (misc@、あるいはbugs@)に報告するべく、報告の英訳と推敲のためのやりとりをAIと行っているなかで「そういえば/dev/tap?はどうなっている?」となり、調査。
$ ls -l /dev/tap* crw------- 1 root wheel 93, 0 Nov 8 08:59 /dev/tap0 crw------- 1 root wheel 93, 1 Nov 8 08:59 /dev/tap1 crw------- 1 root wheel 93, 2 Nov 8 08:59 /dev/tap2 crw------- 1 root wheel 93, 3 Nov 8 08:59 /dev/tap3
tap(4)のデバイスファイルが4つまでしか作られていないのが原因と判明。MAKEDEV tap4とし、解決。
先に説明したように、vmctlのエラーメッセージは、
vmctl: start vm command failed: No such file or directory
となっていた。これが、
vmctl: start vm command failed: /dev/tap4: No such file or directory
などとなっていれば、より迅速にトラブルシューティングできたと思われる
→ エラーメッセージの表示方法、重要
| 従来(実機) | |||
| min(W) | max(W) | 運用形態 | |
| 河豚板ビルドシステム | 18 | 60 | 通常はminに近い |
| 河豚板ビルドシステム(-current) | 55 | 135 | 数時間/週程度 |
| 温度測定IoTサーバ | 19 | 45 | 通常はminとmaxの中間程度 |
| トータル | 38 | 113 | |
| 更新後(仮想) | |||
| min(W) | max(W) | 運用形態 | |
| 仮想基盤 | 55 | 135 | 通常はminに近い |
これより、集約によって著しく電力効率が改善されたわけでも、悪化したわけでもない。
ただし、河豚板のビルドだけに限ってみると、概ね
となり、処理時間が短縮された分、効率は上がった。
VMが増設されれば、改善する方向にゆくと思われる。
河豚板のファイルシステム構成に沿った設計とした。
仮想基盤の動作モニタ結果