FreeBSD下的虚拟化技术
虚拟化软件可让一台计算机同时运行多个操作系统。这种用于个人电脑的系统软件通常涉及一个运行虚拟化软件的宿主机(host)操作系统,并支持任何数量的客户机(guest)操作系统。
FreeBSD下的虚拟解决方案包括多种技术和工具,以下是对这些虚拟解决方案的简单介绍:
- Jails :
- Jails是FreeBSD操作系统内建的虚拟化技术。
- 它类似于Linux中的chroot环境,但功能更强大,可以实现将一个系统划分成多个独立的虚拟环境。
- 每个Jail可以有自己的文件系统、网络配置和用户空间进程。
- 使用Jail时,需要安装jailkit软件包,并按照官方文档进行配置和使用。
- bhyve :
- bhyve是FreeBSD操作系统的内核级虚拟化技术。
- 它可以在FreeBSD系统中运行虚拟机,支持多种操作系统,如Linux、Windows等。
- 作为一种轻量级的虚拟化解决方案,bhyve提供了接近原生的性能。
- QEMU :
- QEMU是一款开源的虚拟化软件,可以在FreeBSD系统中使用QEMU来模拟硬件虚拟化,并运行其他操作系统。
- QEMU Guest Agent是针对FreeBSD虚拟机的一个版本,为虚拟机内部与宿主机之间搭建了一座通讯桥梁。
- 它允许宿主机与FreeBSD虚拟机进行直接交互,执行文件系统冻结等高级操作,以及获取内存状态、控制虚拟CPU等。
- VirtualBox :
- VirtualBox是一款开源的虚拟化软件,可以在FreeBSD系统中安装VirtualBox来创建和管理虚拟机。
- 作为一个成熟的虚拟化解决方案,VirtualBox提供了丰富的功能和友好的用户界面。
- 存储技术 :
- FreeBSD还支持多种虚拟化存储技术,如ZFS(Zettabyte File System)、ZVOLs(ZFS Volumes)、iSCSI、HAST(Highly Available Storage)等。
- 这些存储技术提供了数据完整性检查、压缩、快照、高可用性等功能,有助于在虚拟化环境中实现高效、可靠的数据存储和管理。
- 网络配置 :
- 在FreeBSD的虚拟化解决方案中,网络配置是一个重要的方面。
- 用户可以根据需要配置虚拟机的网络连接,包括桥接模式、NAT模式等,以实现虚拟机与宿主机、其他虚拟机或外部网络的通信。
- 管理工具 :
- FreeBSD提供了多种虚拟化管理工具,如ezjail、AppJail、bvm、cbsd等,用于创建、配置和管理虚拟机。
- 这些工具允许用户启动、停止、暂停和恢复虚拟机,以及调整资源分配等。
总结来说,FreeBSD下的虚拟解决方案包括Jails、bhyve、QEMU、VirtualBox等多种技术和工具,以及多种虚拟化存储技术和网络配置选项。用户可以根据自己的需求选择合适的虚拟化技术和工具来构建和管理虚拟化环境。
jail的简介
Jail最早在FreeBSD 4.X便可使用,并且一直在持续强化它的功能、效率、稳定性以及安全性。
Jail建立在chroot概念之上,会更改一系列程序的根目录。这可以创造一个安全的环境,将程序与系统的其他部份分隔。在chroot的环境所建立的程序不能存取该环境以外的档案或资源。也因此,渗透一个在chroot的环境执行的服务并不会让整个系统被攻击者渗透。但chroot有许多限制,只适合用在简单的工作,不需要许多弹性或复杂性、进阶功能的工作。随着时间推移,许多可以逃离chroot的环境的方法已经被找到,让这个方法不再是确保服务安全的理想方案。
Jail用许多方式改进了传统chroot环境的概念。在传统chroot环境,程序仅限制在一部份档案系统可存取的地方。其余的系统资源、系统使用者、执行的程序以及网络子系统被chroot的程序及主机系统的程序所共享。Jail透过虚拟化存取档案系统、使用者及网络子系统来扩展这个模型,可使用更多细微的控制参数来调校Jail的环境存取方式,Jail可算是一种操作系统层级的虚拟化。
Jail的四个要素:
一个子树状目录:进入Jail的起点目录,一但在Jail中,程序便没有权限离开此目录之外。
一个主机名称:将会由Jail所使用。
一个IP位址:用来分配给Jail。Jail的IP位址通常是现有网络界面的别名位址。
一个指令:要在Jail中可执行的执行档路径名称。该路径是Jail环境根目录的相对路径。
Jail管理器
在FreeBSD系统中,jail的管理器有多种
Name | License | Package | Documentation | 更新时间 | github地址 |
---|---|---|---|---|---|
BastilleBSD | BSD-3 | sysutils/bastille | Documentation | 2023.11 | GitHub - BastilleBSD/bastille: Bastille is an open-source system for automating deployment and management of containerized applications on FreeBSD. |
pot | BSD-3 | sysutils/pot | Documentation | 2023.12 | GitHub - bsdpot/pot: pot: another container framework for FreeBSD, based on jails, ZFS and pf |
cbsd | BSD-2 | sysutils/cbsd | Documentation | 2024 | GitHub - cbsd/cbsd: Yet one more wrapper around jail, bhyve, QEMU and XEN |
AppJail | BSD-3 | sysutils/appjail, for devel sysutils/appjail-devel | Documentation | 2024 | GitHub - DtxdF/AppJail: Simple and easy-to-use tool for creating portable jails. |
iocage | BSD-2 | sysutils/iocage | Documentation | 2023.12 | https://github.com/iocage/iocage |
ezjail | Beer Ware | sysutils/ezjail | Documentation | 2015.6 |
其它还有ocijail
https://github.com/dfr/ocijail
下面单独介绍几种比较流行的管理器
CBSD
cbsd 同时还可以管理jail和bhyve (Yet one more wrapper around jail, bhyve, QEMU and XEN) ,代码:GitHub - cbsd/cbsd: Yet one more wrapper around jail, bhyve, QEMU and XEN。这里还有作者关于docker的解决方法:CBSD --- FreeBSD Jail and Bhyve Management Tools
实践文档:jail管理器CBSD实践@FreeBSD-CSDN博客
BastileBSD
BastileBSD手册:Bastille --- Bastille 0.10.20231125-beta documentation 代码:GitHub - BastilleBSD/bastille: Bastille is an open-source system for automating deployment and management of containerized applications on FreeBSD.
AppJail
AppJail is an open-source BSD-3 licensed framework entirely written in POSIX shell and C to create isolated, portable and easy to deploy environments using FreeBSD jails that behaves like an application. 手册:AppJail Handbook
源码:GitHub - DtxdF/AppJail: Simple and easy-to-use tool for creating portable jails.
AppJail的特点是它可以设置一种叫tiny jail的模式,只提供相关c代码的文件即可。 它还支持LinuxJails
AppJail实践文档:Jail管理器AppJail的使用@FreeBSD-CSDN博客
AppJail主页写的几种管理器的对比图
除了没有cbsd,其它几种都在,好像就AppJail最牛
AppJail | bastille | pot | iocage | ezjail | ||
---|---|---|---|---|---|---|
ZFS support | supported | supported | required | required | supported | ZFS support |
Language | C, Bourne Shell | Bourne Shell | Rust, Bourne Shell | Python | Bourne Shell | Language |
Automation | Makejail, Initscripts, Images | Templates | Flavours, Images | Plugins | Flavours | Automation |
Jail Type | clone, copy, tiny, thin, thick, empty, linux+debootstrap | thin, thick, vnet, Linux, empty | thick | clone, basejail, template, empty, thick | basejail | Jail Type |
VNET | Supported | Supported | Supported | Supported | Not Supported | VNET |
Dynamic firewall | Yes | Requires a loopback interface | Yes | No | No | Dynamic firewall |
Resource control | Full support | Yes, but it does not support statistics and all rctl(8) actions and does not support actions by rule |
Basic: CPU and memory only | Legacy only | Not Supported | Resource control |
CPU Sets | Yes | No | Yes | Yes | Yes | CPU Sets |
IPv6 support | Yes (+SLAAC) | Yes | Yes | Yes | Yes | IPv6 support |
Linux containers | Yes | Yes | ?? | Yes | ?? | Linux containers |
Dynamic DEVFS Ruleset Management | Yes | No | No | No | No | Dynamic DEVFS Ruleset Management |
Network management | Virtual networks, Bridges | No | Subnet, requires sysutils/potnet |
No | No | Network management |
Jail dependency | Yes | No | Yes | Yes | No | Jail dependency |
Supervisor | Yes (Healthcheckers) | No | No | No | No | Supervisor |
Log management | Yes | No | No | No | No | Log management |
Parse jail.conf(5) file for syntax errors |
Yes | Not supported | Yes | Yes | Yes | Parse jail.conf(5) file for syntax errors |
Volume management | Yes | No | Basic, Only supported when using the fscomp feature |
Basic | No | Volume management |
Parallel startup | Yes (Healthcheckers, jails & NAT) | No | No | No | No | Parallel startup |
Netgraph | Yes | No | No | No | No | Netgraph |
Startup order control | Yes | Yes, but don't support priorities | Yes, but don't support priorities | Yes | Yes, using rcorder(8) |
Startup order control |
X11 support | Yes | No | No | No | No | X11 support |
import/export | Yes | Yes | Yes | Yes | Yes | import/export |
CBSD主页画的jial管理软件生命周期图
bhyve简介
自 FreeBSD 10.0-RELEASE 起,BSD 许可的 bhyve 虚拟机管理器已成为底层系统不可或缺的一部分。bhyve 强大而灵活,支持多种客户机操作系统,涵盖 FreeBSD、OpenBSD 以及多个 Linux® 发行版。在默认配置下,bhyve 提供对串行控制台的直接访问,无需模拟图形化界面,从而为用户提供了简洁而高效的交互方式。
安装使用bhyve
官网文档:Chapter 24. Virtualization | FreeBSD Documentation Portal
中文文档:24.6.使用 FreeBSD 上的 bhyve 虚拟机 --- FreeBSD Handbook 2023.09.08 documentation (fiercex.github.io)
FreeBSD准备工作
若要支持bhyve,需要cpu支持,可以通过 /var/run/dmesg.boot 文件来查看,比如对AMD芯片需要支持POPCNT ,Inter芯片需要支持 EPT
和 UG
bash
cat /var/run/dmesg.boot
显示如下:
Features2=0x7dfafbbf<SSE3,PCLMULQDQ,DTES64,MON,DS_CPL,VMX,EST,TM2,SSSE3,SDBG,F
MA,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT ,TSCDLT,XSAVE,OSXSAVE,AV
X,F16C,RDRAND>
AMD Features=0x2c100800<SYSCALL,NX,Page1GB,RDTSCP,LM>
AMD Features2=0x121<LAHF,ABM,Prefetch>
Structured Extended Features=0x21c27ab<FSGSBASE,TSCADJ,BMI1,AVX2,SMEP,BMI2,ERM
S,INVPCID,NFPUSG,RDSEED,ADX,SMAP,PROCTRACE>
XSAVE Features=0x1<XSAVEOPT>
VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID
可以看到cpu是支持POPCNT和EPT,UG
准备工作:加载 bhyve 内核模块
配置宿主机,首先,加载 bhyve 内核模块:
# kldload vmm
kldload vmm
kldstat
Id Refs Address Size Name
1 27 0xffffffff80200000 1f370e8 kernel
2 1 0xffffffff82138000 77d8 cryptodev.ko
3 1 0xffffffff82140000 5cd4d8 zfs.ko
4 1 0xffffffff831e5000 3250 ichsmb.ko
5 1 0xffffffff831e9000 2178 smbus.ko
6 1 0xffffffff83200000 33e438 vmm.ko
创建网络接口
然后,创建 tap
接口以供虚拟机中的网络设备进行连接。为了让该网络设备加入网络,另外创建一个桥接接口,其中包含 tap
接口和物理网络接口作为成员。在下面的例子中,物理网络接口为 igb0
:
# ifconfig tap0 create
# sysctl net.link.tap.up_on_open=1
net.link.tap.up_on_open: 0 -> 1
# ifconfig bridge0 create
# ifconfig bridge0 addm igb0 addm tap0
# ifconfig bridge0 up
一共5条指令:
ifconfig tap0 create
sysctl net.link.tap.up_on_open=1
ifconfig bridge0 create
ifconfig bridge0 addm igb0 addm tap0
ifconfig bridge0 up
做好这些准备工作,就可以开始配置客户机了。
创建一个FreeBSD客户机
可以创建一个单独的目录,比如~/bhyve ,将所有文件都放在这个目录里。
文档讲创建一个文件guest.img用作客户机的虚拟磁盘。指定这个虚拟磁盘的大小
truncate -s 16G guest.img
我们这里创建一个较小的客户机,名字也改成freebsd.img
bash
truncate -s 10G freebsd.img
下载 FreeBSD 的安装镜像:
到中科大FreeBSD镜像站下载iso安装盘
bash
wget https://mirrors.ustc.edu.cn/freebsd/releases/ISO-IMAGES/14.1/FreeBSD-14.1-BETA3-amd64-bootonly.iso
启动脚本
下面是一个启动 bhyve 虚拟机的示例命令,vmrun.sh是一个脚本,这个脚本将会启动虚拟机并循环执行,所以可在其崩溃时自动重新启动。这个脚本可接受数个选项来配置虚拟机:-c
控制虚拟 CPU 的数量,-m
限制客户机的可用内存,-t
定义使用的 tap 设备,-d
指定其使用的磁盘镜像,-i
控制 bhyve 从 CD 镜像引导,而非从磁盘引导,-I
指定要使用的 CD 镜像。最后一个参数是虚拟机的名称,该名称将被用来追踪运行中的虚拟机。这个例子将在安装模式下启动虚拟机:
bash
sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap0 -d guest.img -i -I FreeBSD-13.1-RELEASE-amd64-bootonly.iso guestname
具体我们的命令是:
sh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d freebsd.img -i -I FreeBSD-14.1-BETA3-amd64-bootonly.iso testfreebsd
然后命令行下面,就看到FreeBSD启动的画面了
好久没有用无头机(没有安装显示器)安装系统了,vt100真亲切啊:
Console type [vt100]
虚拟硬盘是:vtbd0 VirtIO Block Device
后面就是按部就班的安装FreeBSD。安装好后,重启,结果还是从光盘启动。
只好kill掉,当然bhyve还有专门的指令:
bhyvectl --destroy --vm=testfreebsd
装机完成后再次开机
再次进入虚拟系统,这回就不挂载光盘了,手册命令:
bash
sh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d guest.img guestname
实际执行命令:
sh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d freebsd.img testfreebsd
启动后进入了该服务器看一下:
uname -a
FreeBSD fb_bhyve 14.1-BETA3 FreeBSD 14.1-BETA3 releng/14.1-n267636-2a964a7fc34e GENERIC amd64
果然FreeBSD下用原生bhyve虚拟主机系统真的是简单又方便啊!
创建一个Linux虚拟机
要引导进入 FreeBSD 以外的系统,必须先安装 sysutils/grub2-bhyve。
bash
pkg install grub2-bhyve
接下来,创建一个文件用作客户机的虚拟磁盘:
bash
truncate -s 16G linux.img
手册里讲创建 device.map 文件,让 grub 将虚拟设备映射到宿主机上的镜像文件,文件内容:
bash
(hd0) ./linux.img
(cd0) ./ubuntu-18.04.6-server-amd64.iso
当然实际上为了简单方便,device.map文件内容如下:
bash
(hd0) ./linux.img
(cd0) ./debian.iso
下载linux安装盘
可以选择自己喜欢的linux发行版,比如可以选择ubuntu和dibian。
下载linux ubuntu安装盘:
wget https://mirrors.ustc.edu.cn/ubuntu-cdimage/releases/18.04.6/release/ubuntu-18.04.6-server-amd64.iso
下载linux debian安装盘:
wget https://mirrors.tuna.tsinghua.edu.cn/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso
为了方便建立一个文件链接:
bash
ln -s debian-12.5.0-amd64-netinst.iso debian.iso
这样不管是device.map文件里面,还是后面命令行里面,都不需要使用那么长的文件名了。
加载linux内核
使用 sysutils/grub2-bhyve 从 ISO 文件中加载 Linux® 内核,如果没有可以pkg安装:
bash
pkg install grub2-bhyve
从 ISO 文件中加载 Linux® 内核
bash
grub-bhyve -m device.map -r cd0 -M 1024M linuxguest
执行后进入光盘安装debian的选择界面,但是选了之后回车就退出了。刚开始不知道为什么会退出,还以为出问题了,其实就应该是这样。
如果没有进入光盘启动界面,就需要自己手工在grub里面输入boot:
grub> ls
(hd0) (cd0) (cd0,msdos1) (host)
grub> ls (cd0)/isolinux
boot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest
splash.jpg TRANS.TBL vesamenu.c32 vmlinuz
grub> linux (cd0)/isolinux/vmlinuz
grub> initrd (cd0)/isolinux/initrd.img
grub> boot
安装ubuntu linux
现在 Linux® 内核就加载完毕了,可以启动客户机,启动ubuntu安装:
bash
bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img -s 4:0,ahci-cd,./ubuntu-18.04.6-server-amd64.iso -l com1,stdio -c 4 -m 1024M linuxguest
当然最终我们是选择了安装dibian:
安装debian linux
bash
bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img -s 4:0,ahci-cd,./debian.iso -l com1,stdio -c 2 -m 1024M linuxguest
后面就是按部就班的安装过程了。
安装的时候可以设置软件包下载镜像,镜像源选了华为云。
安装debian完成后,选择重启机器,就会退出虚拟系统。
启动debian linux
每次启动之前,都要先加载内核:
bash
grub-bhyve -m device.map -r hd0,msdos1 -M 1024M linuxguest
然后引导进入虚拟机:
bash
bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img -l com1,stdio -c 4 -m 1024M linuxguest
启动真是简洁明快啊,也就1-2秒就进入登录界面了:
bash
rdmsr to register 0xcd on vcpu 0
wrmsr to register 0x140(0) on vcpu 0
wrmsr to register 0x140(0) on vcpu 1
wrmsr to register 0x140(0) on vcpu 2
wrmsr to register 0x140(0) on vcpu 3
rdmsr to register 0x34 on vcpu 1
rdmsr to register 0xc0011029 on vcpu 3
Unhandled ps2 mouse command 0xe1
/dev/vda1: clean, 36301/987360 files, 505236/3943936 blocks
Unhandled ps2 mouse command 0x88
rdmsr to register 0x64d on vcpu 0
Debian GNU/Linux 12 debian ttyS0
debian login: xxxx
Password:
Linux debian 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
这样就可以进入debian愉快的玩耍拉!
持久化配置¶
要配置系统在启动时运行 bhyve 虚拟机,请对相应文件进行如下配置:
/etc/sysctl.conf
net.link.tap.up_on_open=1
/etc/rc.conf
cloned_interfaces="bridge0 tap0" ifconfig_bridge0="addm igb0 addm tap0" kld_list="nmdm vmm"
安装bvm管理bhyve
为了更好的管理hbyve,我们可以安装bvm管理软件。bvm ,是FreeBSD下的一个开源的虚拟机监控器 (hypervisor),它使用FreeBSD的Capsicum沙箱框架提供安全性。
bash
pkg install bvm
在第一次运行bvm --ls 的时候,会提示做哪些操作:
bash
# bvm can't run, you need to add the following lines to /boot/loader.conf
vmm_load="YES"
if_bridge_load="YES"
if_tap_load="YES"
# In order to help you solve the NAT reflow problem,
# you need to add the following line to /boot/loader.conf
ipfw_load="YES"
ipfw_nat_load="YES"
libalias_load="YES"
net.inet.ip.fw.default_to_accept=1
# please edit '/usr/local/etc/bvm/bvm.conf' first
vmdir=/your/vm/dir/path/
也就是最主要的是先编辑/usr/local/etc/bvm/bvm.conf文件,加入vmdir目录配置。然后再将上面配置语句写入/boot/loader.conf文件中。
使用bvm创建虚拟机
bash
bvm --create Node-1
会问很多问题,就用数字回答就行
bash
Welcome to Bhyve Vm Manager
---------------------------
Enter os type:
[0]. FreeBSD
[1]. OpenBSD
[2]. NetBSD
[3]. Debian
[4]. Debian_LVM
[5]. Ubuntu
[6]. Kali
[7]. CentOS
[8]. openSUSE
[9]. openSUSE_LVM
[a]. Gentoo
[b]. Fedora
[c]. TrueOS
[d]. Windows10
[e]. WinServer2016
[f]. pfSense
[g]. OPNsense
[h]. Other
Enter os type: 5
Enter vm CPUs: 2
Enter vm RAM (e.g. 512m): 512M
Enter cd status:
[0]. on
[1]. off
Enter cd status: 0
Enter iso path for CD-ROM: /root/bhyve
Enter a iso file:
[0]. debian.iso
[1]. ubuntu.iso
[2]. FreeBSD-14.1-BETA3-amd64-bootonly.iso
[3]. ubuntu-18.04.6-server-amd64.iso
[4]. debian-12.5.0-amd64-netinst.iso
Enter a iso file: 1
Enter boot from:
[0]. cd0
[1]. hd0
Enter boot from: 0
Enter uefi type:
[0]. none
[1]. uefi
[2]. uefi_csm
Enter uefi type: 0
Enter hostbridge:
[0]. hostbridge
[1]. amd_hostbridge
Enter hostbridge: 0
Enter auto booting:
[0]. no
[1]. yes
Enter auto booting: yes
input invalid
[0]. no
[1]. yes
Enter auto booting: 1
Enter booting sequence index (1~1000): 10
Enter booting estimate time (1~1000 secs.): 10
[0]. name : Node-1
[1]. os : Ubuntu
[2]. cpus : 2
[3]. ram : 512m
[4]. CD : on
[5]. iso path : /root/bhyve/ubuntu.iso
[6]. boot from : cd0
[7]. uefi type : none
[8]. hostbridge : hostbridge
[9]. auto boot : yes
[a]. boot index : 10
[b]. boot time : 10
[c]. disk config
[d]. network config
[e]. cancel
Enter an number to edit or 'ok' to complet: c
Enter vm number of disks: 1
Enter vm disk(0) size (e.g. 5g): 10g
Enter ZFS support:
[0]. on
[1]. off
Enter ZFS support: on
input invalid
[0]. on
[1]. off
Enter ZFS support: 0
Enter zpool:
[0]. zroot/ROOT/default
[1]. zroot/tmp
[2]. zroot/home
[3]. zroot/usr/src
[4]. zroot/usr/ports
[5]. zroot/var/log
[6]. zroot
[7]. zroot/var/audit
[8]. zroot/var/crash
[9]. zroot/home/skywalk
[a]. zroot/var/mail
[b]. zroot/var/tmp
Enter zpool: 0
Enter storage interface:
[0]. SATA hard-drive [ahci-hd]
[1]. Virtio block storage interface [virtio-blk]
Enter storage interface: 1
[0]. disk number : 1
[1]. disk(0) size : 10g
[2]. ZFS support : on
[3]. ZFS pool : zroot/ROOT/default
[4]. interface : virtio-blk
[5]. go back
Enter an number: 5
---------------------------
[0]. name : Node-1
[1]. os : Ubuntu
[2]. cpus : 2
[3]. ram : 512m
[4]. CD : on
[5]. iso path : /root/bhyve/ubuntu.iso
[6]. boot from : cd0
[7]. uefi type : none
[8]. hostbridge : hostbridge
[9]. auto boot : yes
[a]. boot index : 10
[b]. boot time : 10
[c]. disk config
[d]. network config
[e]. cancel
Enter an number to edit or 'ok' to complet: d
Enter vm number of nics: 1
Enter nic-0 network mode:
[0]. Bridged
[1]. NAT
Enter nic-0 network mode: 0
Select the binding device:
[0]. igb0
[1]. switch0 10.0.1.0/24
[2]. switch1 10.0.2.0/24
[3]. switch2 10.0.3.0/24
[4]. switch3
[5]. switch4
[6]. switch5
[7]. switch6
[8]. switch7
Select the binding device: 0
Enter IP-Address:
[0]. none
[1]. dhcp
[2]. static
Enter IP-Address: 1
Enter network interface:
[0]. Intel e82545 network interface [e1000]
[1]. Virtio network interface [virtio-net]
Enter network interface: 1
[0]. NIC numbers : 1
[1]. nic-0 mode : Bridged
[2]. nic-0 bind : igb0
[3]. nic-0 ip : dhcp
[4]. interface : virtio-net
[5]. add a nic
[6]. go back
Enter an number: 6
---------------------------
[0]. name : Node-1
[1]. os : Ubuntu
[2]. cpus : 2
[3]. ram : 512m
[4]. CD : on
[5]. iso path : /root/bhyve/ubuntu.iso
[6]. boot from : cd0
[7]. uefi type : none
[8]. hostbridge : hostbridge
[9]. auto boot : yes
[a]. boot index : 10
[b]. boot time : 10
[c]. disk config
[d]. network config
[e]. cancel
Enter an number to edit or 'ok' to complet: ok
创建好就可以启动了
开始启动bvm虚拟机
bash
bvm --start Node-1
启动之后,可以用bvm --ls 看到状态信息:
bvm --ls
NAME GUEST CPU MEMORY DISK STATE
Node-1 Ubuntu 2 512M [1]10G on
可以使用bvm --login 登录虚拟机
bvm --login Node-1
然后就可以在命令行下开始装机拉!
其它bvm指令
关机命令:
bvm --poweroff Node-1
复制虚拟机,使用
bvm --clone Node-1 Node-2
如果虚拟机被关机挂住,可以ps找到进程kill掉
ps -aux |grep bvm
root 8525 0.0 0.0 13184 2696 0 I+ 09:48 0:00.00 bvm --login Node-1
root 9117 0.0 0.0 12808 2384 1 S+ 10:09 0:00.00 grep bvm
root 8430 0.0 0.0 13184 2700 2 Is+ 09:47 0:00.01 bvmb Node-1
root 9020 0.0 0.0 13184 2708 3 Ss+ 10:08 0:00.01 bvmb Node-2
root@fbhost:~/bhyve # kill 8430
CBSD创建和管理bhyve容器Ubuntu@FreeBSD
首先,创建bhyve虚拟机
cbsd bconstruct-tui
然后启动bhyve虚拟机
cbsd bstart bub22
启动后提示
init_systap: waiting for link: igb0
Looks like /usr/jails/vm/bub22/dsk1.vhd is empty.
May be you want to boot from CD?
[yes(1) or no(0)]
yes确认
然后使用cbsd blogin bub22 登录
cbsd blogin bub22
显示
Boot from CD
Waiting for first connection via VNC to starting VMs...
[debug] env LIB9P_LOGGING=/usr/jails/jails-system/bub22/cbsd_lib9p.log /usr/bin/nice -n 1 /usr/sbin/bhyve -c cpus=2,sockets=2,cores=1,threads=1 -m 2684354560 -H -A -U 6c3d474b-323f-11ef-81c3-00e2691367f6 -s 0,hostbridge -s 4,virtio-blk,/usr/jails/vm/bub22/dsk1.vhd,sectorsize=512/4096 -s 2,ahci-cd,/usr/jails/src/iso/cbsd-iso-ubuntu-22.04.3-live-server-amd64.iso,ro -s 5,virtio-net,tap2,mtu=1500,mac=00:a0:98:ca:22:95 -s 6,virtio-rnd -s 7,fbuf,tcp=127.0.0.1:5900,w=1024,h=768,wait,password=cbsd -s 30,xhci,tablet -s 31,lpc -l com1,stdio -l bootrom,/usr/local/cbsd/upgrade/patch/efi.fd,/usr/jails/jails-system/bub22/BHYVE_UEFI_VARS.fd bub22
使用vncviewer登录
发现只有本机的5900服务:
tcp4 0 0 127.0.0.1.5900 *.* LISTEN
需要进去设置一下,
设置vnc
可以使用bsdconfig 按e进入csdn管理界面,也可以使用cbsd bconfig jname=bub22 进入管理界面。
注意,这里是bconfig,但是后面还是用的jname参数。
进入bhyve_vnc_options 修改bhyve_vnc_tcp_bind ,把127.0.0.1 改成 0.0.0.0
修改之后不要忘记commit
然后就可以使用vncviewer 来登录拉!
开始安装ubuntu
vncviewer登录后,就可以看到光盘启动界面了,按照提示,一步步安装即可。
在 FreeBSD 上安装 VirtualBox™
VirtualBox™ 是一个正在活跃开发的,完备的虚拟化软件。可运行于大多操作系统,包括 Windows®,macOS®,Linux® 和 FreeBSD。它也同样能够运行 Windows® 或者类 UNIX® 客户机系统。该软件作为开源软件发行,但是在单独的扩展包中提供了闭源组件。这些组件包括对 USB 2.0 设备的支持。更多的信息可以在 VirtualBox™ 维基下载页中找到。截至目前为止,这些扩展尚不支持 FreeBSD。
24.5.在 FreeBSD 上安装 VirtualBox™ --- FreeBSD Handbook 2023.09.08 documentation
使用 FreeBSD 上的 Xen™ 虚拟机
Xen 是一个 GPLv2 许可的第 1 类虚拟机管理器,适用于 Intel® 和 ARM® 架构。FreeBSD 从 FreeBSD 8.0 开始就包含了对 i386™,AMD® 64-Bit DomU 和 Amazon EC2 非特权域(虚拟机)的支持,并在 FreeBSD 11.0 中包含了对 Dom0 控制域(宿主机)的支持。在 FreeBSD 11 中,取消了对准虚拟化(PV)域的支持,转而支持硬件虚拟化(HVM)域,这提供了更好的性能。
Xen™ 是一个裸虚拟机管理器,这意味着它是在 BIOS 之后加载的第一个程序。然后会启动一个称为 Domain-0(简称 Dom0
)的特殊权限客户机。Dom0 利用其特殊权限直接访问底层物理硬件,使其成为一个高性能的解决方案。它能够直接访问磁盘控制器和网络适配器。用于管理和控制 Xen™ 虚拟机管理器的 Xen™ 管理工具也被 Dom0 用来创建、列出和销毁虚拟机。Dom0 为非特权域提供虚拟磁盘和网络,通常称为 DomU
。Xen™ Dom0 可以比作其他虚拟机管理器解决方案的服务控制台,而 DomU 是运行单个客户虚拟机的地方。
但是现在Xen虚拟机的占比已经下降很多,不建议用Xen来虚拟化了。
调试
VirtualBox和bhyve两种虚拟机不能并存。
这个目前没有办法,就是没法并存。不过一般我们会使用jail+bhybe的解决方案。