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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/758185.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在高并发场景下,怎样避免 PostgreSQL 的死锁问题?

文章目录 &#xff08;一&#xff09;不当的事务设计&#xff08;二&#xff09;不正确的锁使用&#xff08;三&#xff09;并发操作冲突&#xff08;一&#xff09;优化事务设计&#xff08;二&#xff09;正确使用锁&#xff08;三&#xff09;调整数据库参数&#xff08;四&…

热管的原理和棒芯的加工

当热管的一端受热时&#xff0c;毛细芯中的液体蒸发汽化&#xff0c;蒸汽在微小的压差下流向另一端&#xff0c;放出热量凝结成液体&#xff0c;液体再靠毛细力&#xff08;或重力&#xff09;的作用&#xff0c;沿多孔材料流回蒸发段。如此循环不已&#xff0c;热量便从一端传…

Nginx 通过代理服务器访问目标接口

需求&#xff1a;某Nginx需要通过一个http代理服务来访问目标URL。 如果下图所示&#xff1a; 服务器B仅提供一个代理出来&#xff0c;不允许在该服务器上安装和进行任何其他配置操作。 在这种需求场景下&#xff0c;网络请求过程和域名解析的工作流程大致如下&#xff1a; 1…

【软件测试】白盒测试(知识点 + 习题 + 答案)

《 软件测试基础持续更新中》 最近大家总是催更……&#xff0c;我也是百忙之中给大家详细总结了白盒测试的重点内容&#xff01; 知识点题型答案&#xff0c;让你用最短的时间&#xff0c;学到最高效的知识&#xff01; 整理不易&#xff0c;求个三连 ₍ᐢ..ᐢ₎ ♡ 目录 一、…

pp 学习一 生产模块主数据

生产成本&#xff1a;原材料是什么&#xff0c;价格多少&#xff0c;人工耗费时间&#xff0c;以及其他的费用 离散制造&#xff1a;有生产订单。工序是分开的&#xff08;可以停&#xff09; 重复制造&#xff1a;没有生产订单&#xff08;可能有客户下达的任务单或者计划订…

Unity扩展编辑器功能的特性

1.添加分组标题 用于在Unity的Inspector视图中为属性或变量组创建一个自定义的标题或头部&#xff0c;有助于在Inspector中组织和分类不同的属性&#xff0c;使其更易于阅读和管理。 [Header("Common Properties")] public float MouseSensitivity 5; public float…

STM32自己从零开始实操07:电机电路原理图

一、LC滤波电路 其实以下的滤波都可以叫低通滤波器。 1.1倒 “L” 型 LC 滤波电路 1.1.1定性分析 1.1.2仿真实验 电感&#xff1a;通低频阻高频的。仿真中高频信号通过电感&#xff0c;因为电感会阻止电流发生变化&#xff0c;故说阻止高频信号 电容&#xff1a;隔直通交。…

汽车电子工程师入门系列——AUTOSAR通信服务框架(中)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

vue使用scrollreveal和animejs实现页面滑动到指定位置后再开始执行动画效果

效果图 效果链接&#xff1a;http://website.livequeen.top 介绍 一、Scrollreveal ScrollReveal 是一个 JavaScript 库&#xff0c;用于在元素进入/离开视口时轻松实现动画效果。 ScrollReveal 官网链接&#xff1a;ScrollReveal 二、animejs animejs是一个好用的动画库…

python课程设计作业-TCP客户端-服务端通信

说明文档 目录 小组成员分工 作品功能介绍 使用的工具和方法 设计的步骤 课程设计中遇到的问题 结论 1. 小组成员分工 本次课程设计由以下小组成员完成&#xff1a; xxx 2. 作品功能介绍 本次课程设计的作品是一个简单的基于 TCP 协议的客户端-服务端通信示例。通过这个示…

什么是等级保护2.0?

等保的全称是信息安全等级保护&#xff0c;是《网络安全法》规定的必须强制执行的&#xff0c;保障公民、社会、国家利益的重要工作。 官方定义&#xff1a;等级保护是对信息和信息载体按照重要性等级分级别进行保护的一种工作&#xff0c;指对国家重要信息、法人和其他组织及公…

GuLi商城-商品服务-API-三级分类-删除-逻辑删除

注意&#xff1a;官方文档说logic配置可以省略&#xff0c;代码中直观些&#xff0c;配上吧 逻辑删除注解&#xff1a; 实体类字段上加逻辑删除注解&#xff1a; 启动nacos&#xff1a; 启动商品服务&#xff1a; postman测试&#xff1a; 数据库字段值改成了0&#xff0c;说明…

全球海洋平均质量变化的时间序海洋、冰和水文等效水高数据集

Tellus Level-4 Antarctica Mass Anomaly Time Series from JPL GRACE/GRACE-FO Mascon CRI Filtered Release 06.1 version 03 从 JPL GRACE/GRACE-FO Mascon CRI 过滤发布的 Tellus Level-4 南极洲质量异常时间序列 06.1 版本 03 简介 该数据集是全球海洋平均质量变化的时…

Linux线程同步【拿命推荐版】

目录 &#x1f6a9;引言 &#x1f6a9;听故事&#xff0c;引概念 &#x1f6a9;生产者消费者模型 &#x1f680;再次理解生产消费模型 &#x1f680;挖掘特点 &#x1f6a9;条件变量 &#x1f680;条件变量常用接口 &#x1f680;条件变量的原理 &#x1f6a9;引言 上一篇…

【Vue】单向和双向数据绑定

在 Vue.js 中&#xff0c;数据绑定可以分为单向数据绑定和双向数据绑定两种类型。 单向数据绑定 单向数据绑定是指数据从模型流向视图&#xff0c;即数据的变化会自动反映到视图中&#xff0c;但视图中的变化不会自动反映回模型。Vue.js 中的单向数据绑定主要通过以下方式实现…

深度解析RocketMq源码-消息推送、持久化、消费全流程

1.绪论 前面的几篇文章都剖析了broker的存储文件。那么生产者发送一条消息到达broker过后是如何处理的&#xff0c;这条消息结果什么处理过后&#xff0c;消费者才能够消费这条消息。接下来&#xff0c;带我们将仔细剖析一下一条消息从生产者生产消息&#xff0c;到到达broker…

机电公司管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;管理员管理&#xff0c;客户管理&#xff0c;公告管理&#xff0c;考勤管理&#xff0c;请假管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;公告&#xff0c;机电零件&…

ardupilot开发 --- 坐标变换 篇

Good Morning, and in case I dont see you, good afternoon, good evening, and good night! 0. 一些概念1. 坐标系的旋转1.1 轴角法1.2 四元素1.3 基于欧拉角的旋转矩阵1.3.1 单轴旋转矩阵1.3.2 多轴旋转矩阵1.3.3 其他 2. 齐次变换矩阵3. visp实践 0. 一些概念 相关概念&am…

聊聊如何制定互联网产品测试策略

提起互联网产品测试&#xff0c;给人的第一感觉那就是一个字“快”&#xff0c;相比于传统行业的软件&#xff0c;更新周期快的一个多月一个版本&#xff0c;慢的半年或一年一个大版本&#xff0c;从测试的角度出发&#xff0c;制定产品的测试策略侧重点有所不一样&#xff0c;…

MySQL之聚簇索引和非聚簇索引

1、什么是聚簇索引和非聚簇索引&#xff1f; 聚簇索引&#xff0c;通常也叫聚集索引。 非聚簇索引&#xff0c;指的是二级索引。 下面看一下它们的含义&#xff1a; 1.1、聚集索引选取规则 如果存在主键&#xff0c;主键索引就是聚集索引。如果不存在主键&#xff0c;将使…