当前位置:   article > 正文

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

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的管理器有多种

其它还有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
  1. kldload vmm
  2. kldstat
  3. Id Refs Address Size Name
  4. 1 27 0xffffffff80200000 1f370e8 kernel
  5. 2 1 0xffffffff82138000 77d8 cryptodev.ko
  6. 3 1 0xffffffff82140000 5cd4d8 zfs.ko
  7. 4 1 0xffffffff831e5000 3250 ichsmb.ko
  8. 5 1 0xffffffff831e9000 2178 smbus.ko
  9. 6 1 0xffffffff83200000 33e438 vmm.ko

创建网络接口

然后,创建 tap 接口以供虚拟机中的网络设备进行连接。为了让该网络设备加入网络,另外创建一个桥接接口,其中包含 tap 接口和物理网络接口作为成员。在下面的例子中,物理网络接口为 igb0

  1. # ifconfig tap0 create
  2. # sysctl net.link.tap.up_on_open=1
  3. net.link.tap.up_on_open: 0 -> 1
  4. # ifconfig bridge0 create
  5. # ifconfig bridge0 addm igb0 addm tap0
  6. # 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 将虚拟设备映射到宿主机上的镜像文件,文件内容:
  1. (hd0) ./linux.img
  2. (cd0) ./ubuntu-18.04.6-server-amd64.iso

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

  1. (hd0) ./linux.img
  2. (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秒就进入登录界面了:

  1. rdmsr to register 0xcd on vcpu 0
  2. wrmsr to register 0x140(0) on vcpu 0
  3. wrmsr to register 0x140(0) on vcpu 1
  4. wrmsr to register 0x140(0) on vcpu 2
  5. wrmsr to register 0x140(0) on vcpu 3
  6. rdmsr to register 0x34 on vcpu 1
  7. rdmsr to register 0xc0011029 on vcpu 3
  8. Unhandled ps2 mouse command 0xe1
  9. /dev/vda1: clean, 36301/987360 files, 505236/3943936 blocks
  10. Unhandled ps2 mouse command 0x88
  11. rdmsr to register 0x64d on vcpu 0
  12. Debian GNU/Linux 12 debian ttyS0
  13. debian login: xxxx
  14. Password:
  15. Linux debian 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64
  16. The programs included with the Debian GNU/Linux system are free software;
  17. the exact distribution terms for each program are described in the
  18. individual files in /usr/share/doc/*/copyright.
  19. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  20. 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 的时候,会提示做哪些操作:

  1. # bvm can't run, you need to add the following lines to /boot/loader.conf
  2. vmm_load="YES"
  3. if_bridge_load="YES"
  4. if_tap_load="YES"
  5. # In order to help you solve the NAT reflow problem,
  6. # you need to add the following line to /boot/loader.conf
  7. ipfw_load="YES"
  8. ipfw_nat_load="YES"
  9. libalias_load="YES"
  10. net.inet.ip.fw.default_to_accept=1
  11. # please edit '/usr/local/etc/bvm/bvm.conf' first
  12. vmdir=/your/vm/dir/path/

也就是最主要的是先编辑/usr/local/etc/bvm/bvm.conf文件,加入vmdir目录配置。然后再将上面配置语句写入/boot/loader.conf文件中。

使用bvm创建虚拟机

bvm --create Node-1

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

  1. Welcome to Bhyve Vm Manager
  2. ---------------------------
  3. Enter os type:
  4. [0]. FreeBSD
  5. [1]. OpenBSD
  6. [2]. NetBSD
  7. [3]. Debian
  8. [4]. Debian_LVM
  9. [5]. Ubuntu
  10. [6]. Kali
  11. [7]. CentOS
  12. [8]. openSUSE
  13. [9]. openSUSE_LVM
  14. [a]. Gentoo
  15. [b]. Fedora
  16. [c]. TrueOS
  17. [d]. Windows10
  18. [e]. WinServer2016
  19. [f]. pfSense
  20. [g]. OPNsense
  21. [h]. Other
  22. Enter os type: 5
  23. Enter vm CPUs: 2
  24. Enter vm RAM (e.g. 512m): 512M
  25. Enter cd status:
  26. [0]. on
  27. [1]. off
  28. Enter cd status: 0
  29. Enter iso path for CD-ROM: /root/bhyve
  30. Enter a iso file:
  31. [0]. debian.iso
  32. [1]. ubuntu.iso
  33. [2]. FreeBSD-14.1-BETA3-amd64-bootonly.iso
  34. [3]. ubuntu-18.04.6-server-amd64.iso
  35. [4]. debian-12.5.0-amd64-netinst.iso
  36. Enter a iso file: 1
  37. Enter boot from:
  38. [0]. cd0
  39. [1]. hd0
  40. Enter boot from: 0
  41. Enter uefi type:
  42. [0]. none
  43. [1]. uefi
  44. [2]. uefi_csm
  45. Enter uefi type: 0
  46. Enter hostbridge:
  47. [0]. hostbridge
  48. [1]. amd_hostbridge
  49. Enter hostbridge: 0
  50. Enter auto booting:
  51. [0]. no
  52. [1]. yes
  53. Enter auto booting: yes
  54. input invalid
  55. [0]. no
  56. [1]. yes
  57. Enter auto booting: 1
  58. Enter booting sequence index (1~1000): 10
  59. Enter booting estimate time (1~1000 secs.): 10
  60. [0]. name : Node-1
  61. [1]. os : Ubuntu
  62. [2]. cpus : 2
  63. [3]. ram : 512m
  64. [4]. CD : on
  65. [5]. iso path : /root/bhyve/ubuntu.iso
  66. [6]. boot from : cd0
  67. [7]. uefi type : none
  68. [8]. hostbridge : hostbridge
  69. [9]. auto boot : yes
  70. [a]. boot index : 10
  71. [b]. boot time : 10
  72. [c]. disk config
  73. [d]. network config
  74. [e]. cancel
  75. Enter an number to edit or 'ok' to complet: c
  76. Enter vm number of disks: 1
  77. Enter vm disk(0) size (e.g. 5g): 10g
  78. Enter ZFS support:
  79. [0]. on
  80. [1]. off
  81. Enter ZFS support: on
  82. input invalid
  83. [0]. on
  84. [1]. off
  85. Enter ZFS support: 0
  86. Enter zpool:
  87. [0]. zroot/ROOT/default
  88. [1]. zroot/tmp
  89. [2]. zroot/home
  90. [3]. zroot/usr/src
  91. [4]. zroot/usr/ports
  92. [5]. zroot/var/log
  93. [6]. zroot
  94. [7]. zroot/var/audit
  95. [8]. zroot/var/crash
  96. [9]. zroot/home/skywalk
  97. [a]. zroot/var/mail
  98. [b]. zroot/var/tmp
  99. Enter zpool: 0
  100. Enter storage interface:
  101. [0]. SATA hard-drive [ahci-hd]
  102. [1]. Virtio block storage interface [virtio-blk]
  103. Enter storage interface: 1
  104. [0]. disk number : 1
  105. [1]. disk(0) size : 10g
  106. [2]. ZFS support : on
  107. [3]. ZFS pool : zroot/ROOT/default
  108. [4]. interface : virtio-blk
  109. [5]. go back
  110. Enter an number: 5
  111. ---------------------------
  112. [0]. name : Node-1
  113. [1]. os : Ubuntu
  114. [2]. cpus : 2
  115. [3]. ram : 512m
  116. [4]. CD : on
  117. [5]. iso path : /root/bhyve/ubuntu.iso
  118. [6]. boot from : cd0
  119. [7]. uefi type : none
  120. [8]. hostbridge : hostbridge
  121. [9]. auto boot : yes
  122. [a]. boot index : 10
  123. [b]. boot time : 10
  124. [c]. disk config
  125. [d]. network config
  126. [e]. cancel
  127. Enter an number to edit or 'ok' to complet: d
  128. Enter vm number of nics: 1
  129. Enter nic-0 network mode:
  130. [0]. Bridged
  131. [1]. NAT
  132. Enter nic-0 network mode: 0
  133. Select the binding device:
  134. [0]. igb0
  135. [1]. switch0 10.0.1.0/24
  136. [2]. switch1 10.0.2.0/24
  137. [3]. switch2 10.0.3.0/24
  138. [4]. switch3
  139. [5]. switch4
  140. [6]. switch5
  141. [7]. switch6
  142. [8]. switch7
  143. Select the binding device: 0
  144. Enter IP-Address:
  145. [0]. none
  146. [1]. dhcp
  147. [2]. static
  148. Enter IP-Address: 1
  149. Enter network interface:
  150. [0]. Intel e82545 network interface [e1000]
  151. [1]. Virtio network interface [virtio-net]
  152. Enter network interface: 1
  153. [0]. NIC numbers : 1
  154. [1]. nic-0 mode : Bridged
  155. [2]. nic-0 bind : igb0
  156. [3]. nic-0 ip : dhcp
  157. [4]. interface : virtio-net
  158. [5]. add a nic
  159. [6]. go back
  160. Enter an number: 6
  161. ---------------------------
  162. [0]. name : Node-1
  163. [1]. os : Ubuntu
  164. [2]. cpus : 2
  165. [3]. ram : 512m
  166. [4]. CD : on
  167. [5]. iso path : /root/bhyve/ubuntu.iso
  168. [6]. boot from : cd0
  169. [7]. uefi type : none
  170. [8]. hostbridge : hostbridge
  171. [9]. auto boot : yes
  172. [a]. boot index : 10
  173. [b]. boot time : 10
  174. [c]. disk config
  175. [d]. network config
  176. [e]. cancel
  177. Enter an number to edit or 'ok' to complet: ok

创建好就可以启动了

开始启动bvm虚拟机

bvm --start Node-1

启动之后,可以用bvm --ls 看到状态信息:

  1. bvm --ls
  2. NAME GUEST CPU MEMORY DISK STATE
  3. 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掉

  1. ps -aux |grep bvm
  2. root 8525 0.0 0.0 13184 2696 0 I+ 09:48 0:00.00 bvm --login Node-1
  3. root 9117 0.0 0.0 12808 2384 1 S+ 10:09 0:00.00 grep bvm
  4. root 8430 0.0 0.0 13184 2700 2 Is+ 09:47 0:00.01 bvmb Node-1
  5. root 9020 0.0 0.0 13184 2708 3 Ss+ 10:08 0:00.01 bvmb Node-2
  6. 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的解决方案。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/772087
推荐阅读
相关标签
  

闽ICP备14008679号