FreeBSD虚拟化解决之道:高效、安全、灵活的虚拟解决方案全览

FreeBSD下的虚拟化技术

虚拟化软件可让一台计算机同时运行多个操作系统。这种用于个人电脑的系统软件通常涉及一个运行虚拟化软件的宿主机(host)操作系统,并支持任何数量的客户机(guest)操作系统。

FreeBSD下的虚拟解决方案包括多种技术和工具,以下是对这些虚拟解决方案的简单介绍:

  1. Jails:
    • Jails是FreeBSD操作系统内建的虚拟化技术。
    • 它类似于Linux中的chroot环境,但功能更强大,可以实现将一个系统划分成多个独立的虚拟环境。
    • 每个Jail可以有自己的文件系统、网络配置和用户空间进程。
    • 使用Jail时,需要安装jailkit软件包,并按照官方文档进行配置和使用。
  2. bhyve:
    • bhyve是FreeBSD操作系统的内核级虚拟化技术。
    • 它可以在FreeBSD系统中运行虚拟机,支持多种操作系统,如Linux、Windows等。
    • 作为一种轻量级的虚拟化解决方案,bhyve提供了接近原生的性能。
  3. QEMU:
    • QEMU是一款开源的虚拟化软件,可以在FreeBSD系统中使用QEMU来模拟硬件虚拟化,并运行其他操作系统。
    • QEMU Guest Agent是针对FreeBSD虚拟机的一个版本,为虚拟机内部与宿主机之间搭建了一座通讯桥梁。
    • 它允许宿主机与FreeBSD虚拟机进行直接交互,执行文件系统冻结等高级操作,以及获取内存状态、控制虚拟CPU等。
  4. VirtualBox:
    • VirtualBox是一款开源的虚拟化软件,可以在FreeBSD系统中安装VirtualBox来创建和管理虚拟机。
    • 作为一个成熟的虚拟化解决方案,VirtualBox提供了丰富的功能和友好的用户界面。
  5. 存储技术:
    • FreeBSD还支持多种虚拟化存储技术,如ZFS(Zettabyte File System)、ZVOLs(ZFS Volumes)、iSCSI、HAST(Highly Available Storage)等。
    • 这些存储技术提供了数据完整性检查、压缩、快照、高可用性等功能,有助于在虚拟化环境中实现高效、可靠的数据存储和管理。
  6. 网络配置:
    • 在FreeBSD的虚拟化解决方案中,网络配置是一个重要的方面。
    • 用户可以根据需要配置虚拟机的网络连接,包括桥接模式、NAT模式等,以实现虚拟机与宿主机、其他虚拟机或外部网络的通信。
  7. 管理工具:
    • 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的管理器有多种

NameLicensePackageDocumentation更新时间github地址

BastilleBSD

BSD-3

sysutils/bastille

Documentation

2023.11GitHub - 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.12GitHub - bsdpot/pot: pot: another container framework for FreeBSD, based on jails, ZFS and pf

cbsd

BSD-2

sysutils/cbsd

Documentation

2024GitHub - cbsd/cbsd: Yet one more wrapper around jail, bhyve, QEMU and XEN

AppJail

BSD-3

sysutils/appjail, for devel sysutils/appjail-devel

Documentation

2024GitHub - DtxdF/AppJail: Simple and easy-to-use tool for creating portable jails.

iocage

BSD-2

sysutils/iocage

Documentation

2023.12https://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最牛

AppJailbastillepotiocageezjail
ZFS supportsupportedsupportedrequiredrequiredsupportedZFS support
LanguageC, Bourne ShellBourne ShellRust, Bourne ShellPythonBourne ShellLanguage
AutomationMakejail, Initscripts, ImagesTemplatesFlavours, ImagesPluginsFlavoursAutomation
Jail Typeclone, copy, tiny, thin, thick, empty, linux+debootstrapthin, thick, vnet, Linux, emptythickclone, basejail, template, empty, thickbasejailJail Type
VNETSupportedSupportedSupportedSupportedNot SupportedVNET
Dynamic firewallYesRequires a loopback interfaceYesNoNoDynamic firewall
Resource controlFull supportYes, but it does not support statistics and all rctl(8) actions and does not support actions by ruleBasic: CPU and memory onlyLegacy onlyNot SupportedResource control
CPU SetsYesNoYesYesYesCPU Sets
IPv6 supportYes (+SLAAC)YesYesYesYesIPv6 support
Linux containersYesYes??Yes??Linux containers
Dynamic DEVFS Ruleset ManagementYesNoNoNoNoDynamic DEVFS Ruleset Management
Network managementVirtual networks, BridgesNoSubnet, requires sysutils/potnetNoNoNetwork management
Jail dependencyYesNoYesYesNoJail dependency
SupervisorYes (Healthcheckers)NoNoNoNoSupervisor
Log managementYesNoNoNoNoLog management
Parse jail.conf(5) file for syntax errorsYesNot supportedYesYesYesParse jail.conf(5) file for syntax errors
Volume managementYesNoBasic, Only supported when using the fscomp featureBasicNoVolume management
Parallel startupYes (Healthcheckers, jails & NAT)NoNoNoNoParallel startup
NetgraphYesNoNoNoNoNetgraph
Startup order controlYesYes, but don't support prioritiesYes, but don't support prioritiesYesYes, using rcorder(8)Startup order control
X11 supportYesNoNoNoNoX11 support
import/exportYesYesYesYesYesimport/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 

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

truncate -s 10G freebsd.img

下载 FreeBSD 的安装镜像:

到中科大FreeBSD镜像站下载iso安装盘

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 镜像。最后一个参数是虚拟机的名称,该名称将被用来追踪运行中的虚拟机。这个例子将在安装模式下启动虚拟机:

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

装机完成后再次开机

再次进入虚拟系统,这回就不挂载光盘了,手册命令:

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

pkg install grub2-bhyve

接下来,创建一个文件用作客户机的虚拟磁盘:

truncate -s 16G linux.img
手册里讲创建 device.map 文件,让 grub 将虚拟设备映射到宿主机上的镜像文件,文件内容:
(hd0) ./linux.img
(cd0) ./ubuntu-18.04.6-server-amd64.iso

当然实际上为了简单方便,device.map文件内容如下:

(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

为了方便建立一个文件链接:

ln -s debian-12.5.0-amd64-netinst.iso debian.iso

这样不管是device.map文件里面,还是后面命令行里面,都不需要使用那么长的文件名了。 

加载linux内核

使用 sysutils/grub2-bhyve 从 ISO 文件中加载 Linux® 内核,如果没有可以pkg安装:

pkg install grub2-bhyve
从 ISO 文件中加载 Linux® 内核
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安装:

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

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

后面就是按部就班的安装过程了。

安装的时候可以设置软件包下载镜像,镜像源选了华为云。

mirrors.huaweicloud.com

安装debian完成后,选择重启机器,就会退出虚拟系统。

启动debian linux

每次启动之前,都要先加载内核:

grub-bhyve -m device.map -r hd0,msdos1 -M 1024M linuxguest

然后引导进入虚拟机:

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秒就进入登录界面了:

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 虚拟机,请对相应文件进行如下配置:

  1. /etc/sysctl.conf

    net.link.tap.up_on_open=1
    
  2. /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沙箱框架提供安全性。

pkg install bvm

在第一次运行bvm --ls 的时候,会提示做哪些操作:

# 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创建虚拟机

bvm --create Node-1

 会问很多问题,就用数字回答就行

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虚拟机

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的解决方案。

 

 

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值