本文主要是介绍vm-bhyve:bhyve虚拟机的管理系统@FreeBSD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先说情况,刚开始创建虚拟机后网络没有调通....不明白是最近自己点背,还是确实有难度...大约用了5天时间才搞定。主要原因就是一个物理网卡不能放进两个网桥配置里,至少ifconfig分配的网卡不能再被vm-bhyve分配。网络踩坑见:https://blog.csdn.net/skywalk8163/article/details/139359520
缘起:
前段时间学习bhyve虚拟机,发现bvm这个虚拟机管理系统,但是实践下来发现网络方面好像有问题,至少我花了两天时间都没有配置成功。于是继续寻找,通过pkg search bhyve,发现了vm-bhyve这个虚拟机的管理系统。
pkg search bhyve
bhyve+-0.1.0 BHyVe with unofficial extensions
bhyve-firmware-1.0_1 Collection of Firmware for bhyve
bhyve-rc-4 FreeBSD RC script for starting bhyve guests in tmux
edk2-bhyve-g202308_4 EDK2 Firmware for bhyve
grub2-bhyve-0.40_10 Grub-emu loader for bhyve
rubygem-vagrant-bhyve-0.1.0 Vagrant provider plugin to support bhyve
u-boot-bhyve-arm64-2023.10_1 Cross-build das u-boot for model bhyve-arm64
uefi-edk2-bhyve-csm-0.2_4,1 UEFI EDK2 firmware for bhyve with CSM (16-bit BIOS)
vm-bhyve-1.5.0 Management system for bhyve virtual machines
vm-bhyve-devel-1.5.0.26
vm-bhyve介绍
vm-bhyve是FreeBSD下的虚拟化解决方案的管理器,它使用命令行操作,帮助用户轻松创建、启动和停止虚拟机。官网:https://github.com/churchers/vm-bhyve.git
快速使用
1. pkg install vm-bhyve
2. zfs create pool/vm
3. sysrc vm_enable="YES"
4. sysrc vm_dir="zfs:pool/vm"
5. vm init
6. cp /usr/local/share/examples/vm-bhyve/* /mountpoint/for/pool/vm/.templates/
7. vm switch create public
8. vm switch add public em0
9. vm iso https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-bootonly.iso
10. vm create myguest
11. vm install [-f] myguest FreeBSD-11.2-RELEASE-amd64-bootonly.iso
12. vm console myguest
下面是详细安装使用过程。
安装
直接使用pkg进行安装
pkg install vm-bhyve
安装之后提示:
--
To enable vm-bhyve, please add the following lines to rc.conf,
depending on whether you are using ZFS storage or not. Please note
that the directory or dataset specified should already exist.
vm_enable="YES"
vm_dir="zfs:pool/dataset"
OR
vm_enable="YES"
vm_dir="/directory/path"
Then run 'vm init'.
因此我们需要按照提示进行相应的配置。
配置
设置启动配置
按照提示进行配置,可以直接使用命令:
sysrc vm_enable="YES"
sysrc vm_dir="/root/vmbhyve"
也可以将以下两句写入/etc/rc.conf文件,然后执行 sh /etc/sh 即可。
vm_enable="YES"
vm_dir="/root/vmbhyve"
然后进行初始化:
vm init
将例子文件拷贝到主目录
cp /usr/local/share/examples/vm-bhyve/* /root/vmbhyve/.templates/
配置网络
vm switch create public
vm switch add public em0
对我的机器来说,是igb0网口
wm switch add public igb0
启动
配置安装光盘
vm iso https://mirrors.ustc.edu.cn/freebsd/releases/ISO-IMAGES/14.1/FreeBSD-14.1-BETA3-amd64-bootonly.iso
vm install myguest http://FreeBSD-14.1-BETA3-amd64-bootonly.iso
后来发现RC1版本发布,所以最终用的命令是:
vm iso https://mirrors.ustc.edu.cn/freebsd/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RC1-amd64-bootonly.iso
开始启动
vm install myguest FreeBSD-14.1-BETA3-amd64-bootonly.iso
Starting myguest
* found guest in /root/vmbhyve/myguest
* booting...
root@fbhost:~/vmbhyve #
最终用的命令是:
vm install -f myguest FreeBSD-14.1-RC1-amd64-bootonly.iso
使用-f参数,可以自动连接虚拟机,省去下面的命令。
连接虚拟机
vm console myguest
不出意外的出意外了。
dhcp拿不到ip地址
dhcp总算拿到ip地址了
在安装的过程中,多次重新安装,因此需要注意安装不成功之后的操作。
在安装的时候碰到过网络不通的情况,即使重新配置,网络通了,但是硬盘因为前面配置了zfs,导致看不见硬盘,无法进行下一步。
这时候就要重新“完全重新启动”安装过程,需要在虚拟机里关机。如果关机后进入下面状态
Consoles: userboot FreeBSD/amd64 User boot lua, Revision 1.2
ERROR: cannot open /boot/lua/loader.lua: no such file or directory.Type '?' for a list of commands, 'help' for more detailed help.
OK
需要输入
quit
退出。
安装完毕之后的正常启动
vm start myguest
vm console myguest
当然也可以用一条命令,启动并登录虚拟机
vm start -f myguest
关机
关机使用
vm stop myguest
总结
vm-bhyve管理虚拟机还是相当好用的,尽管网络设置那边走了一些弯路,安装盘也走了一些弯路,但用熟练之后,vm-bhyve真是太方便了!
调试
绑定igb0网络出错
vm switch add public igb0
/usr/local/sbin/vm: ERROR: failed to add member igb0 to the virtual switch public
好像这台机器的虚拟网那边有些乱了。强制虚拟机运行起来,也是无法拿到dhcp地址,手工设地址也连不上。
最后才知道是因为网卡已经分配给bridge0,不能同时分配给两个桥,解决的方法是删掉bridge0的igb0 绑定,具体见:https://blog.csdn.net/skywalk8163/article/details/139359520
启动虚拟机报错
vm install testvm freeBSD-14.1-BETA3-amd64-bootonly.iso
/usr/local/sbin/vm: ERROR: unable to locate iso file - 'freeBSD-14.1-BETA3-amd64-bootonly.iso'
不明白这里为什么没有这个iso
后来怎么又不报错了呢? 反正又从中科大重新配了一下启动光盘,就好了:
vm iso https://mirrors.ustc.edu.cn/freebsd/releases/ISO-IMAGES/14.1/FreeBSD-14.1-BETA3-amd64-bootonly.iso
网络不通
把这两句配上试试
network0_type="virtio-net"
network0_switch="public"
还是不通,最近调的虚拟机网络都不通...
vm console myguest 无法连接虚拟主机
/usr/local/sbin/vm: ERROR: myguest doesn't appear to be a valid virtual machine
但是换了一个控制台,就登上去了。
命令报错-su: switch: not found
而且用其它的没有的命令测试,也是有-su的报错:
-su: ldde: not found
为什么发的命令会报错:-su: ldde: not found ,如果没有ldde这个命令,也不应该有-su 什么事啊
原来命令前面少了vm,不是 switch add public igb0, 而整个命令是:
vm switch add public igb0
安装的时候多次遇到获取base.txz失败的问题
或者说就卡在这里,一度以为网卡没有起来,后来专门测试这个地址:
https://download.freebsd.org/ftp/releases/amd64/amd64/14.1-BETA3/base.txz
发现没有这个文件,原来这几天FreeBSD的14.1-RC1发布了,所以BETA3的软件没有了。
重新下载14.1的安装盘:
https://mirrors.ustc.edu.cn/freebsd/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RC1-amd64-bootonly.iso
使用14.1-RC1光盘启动后无法进入安装界面
不能进入安装界面,直接进入login登录界面,而且root账户登进去还会报错退出
Fri May 31 12:52:56 UTC 2024
FreeBSD/amd64 (Amnesiac) (ttyu0)
login: root
g_vfs_done():iso9660/14_1_RC1_AMD64_BO[READ(offset=456009728, length=2048)]error = 5
2024-05-31T12:53:09.464378+00:00 - login 560 - - login on ttyu0 as root
2024-05-31T12:53:09.466283+00:00 - login 560 - - ROOT LOGIN (root) ON ttyu0
Can't mkdir /var/run/xdg
2024-05-31T12:53:09.470018+00:00 - login 560 - - pam_open_session(): Session failure
FreeBSD/amd64 (Amnesiac) (ttyu0)
login: root
2024-05-31T12:54:43.240502+00:00 - login 561 - - login on ttyu0 as root
2024-05-31T12:54:43.242543+00:00 - login 561 - - ROOT LOGIN (root) ON ttyu0
Can't mkdir /var/run/xdg
2024-05-31T12:54:43.245788+00:00 - login 561 - - pam_open_session(): Session failure
FreeBSD/amd64 (Amnesiac) (ttyu0)
login:
重新获取软件:vm iso https://mirrors.ustc.edu.cn/freebsd/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RC1-amd64-bootonly.iso
然后再次安装,就正常了。
有时候vm console myguest无法登录
报错
vm console myguest
/usr/local/sbin/vm: ERROR: myguest doesn't appear to be a valid virtual machine
原来是myguest后面不小心有了空格...去掉空格,就能登录了。
vm console myguest登录上去之后控制台是乱的
vm console myguest登上去是乱的,当然可以盲打登录,可以盲打关机....
ssh上去是正常的
解决方法:要么ssh上去,要么开机的时候直接-f登录,那个不会乱
vm start -f myguest
这篇关于vm-bhyve:bhyve虚拟机的管理系统@FreeBSD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!