第六十七回 宋公明夜打曾头市 卢俊义活捉史文恭-FreeBSD虚拟化解决之道:高效、安全、灵活的虚拟解决方案全览

https://guoxue.httpcn.com/html/book/PWTBAZME/MEXVCQXVTB.shtml

大家回到梁山,关胜引单廷圭、魏定国与大家相见。李逵把下山杀了韩伯龙,遇到焦挺、鲍旭,一同去打破凌州的事说了一遍。宋江听了很高兴,然后段景住把马被“险道神”郁保四劫到曾头市的事一说,宋江大怒,派石迁打探之后,决定攻打曾头市。

卢俊义请缨出战,吴用派他去平川埋伏。又派出东西南北中五路大军,攻打曾头市。曾头市史文恭、苏定商议,在村口挖了陷阱陷坑。

小温候吕方与曾涂交锋,落于下风,郭盛上前帮忙,花荣射中曾涂左臂,吕方、郭盛合力杀死曾涂。史文恭打伤秦明,宋江送他回山寨休息,又调来大刀关胜、金枪手徐宁、单廷圭、魏定国来协助。

史文恭晚上劫营,被宋江埋伏打败。于是史文恭写信说要投降,宋江不肯,吴用相劝不能因为生气而不讲大义。于是写信要求曾头市返回两次夺取的马匹,交出郁保四,犒劳军士。

曾长官说若要郁保四,也请来一个人质。宋江、吴用就差了石迁、李逵、樊瑞、项充、李衮前去。史文恭说吴用差这五个人来,一定没啥计谋。李逵大怒,揪住史文恭就要打,被曾长官劝住。石迁说李逵虽然是个粗人,却是宋江哥哥的心腹。于是五人就被酒肉款待。

曾升带着郁保四到宋江大寨讲和,宋江说段景住的那匹千里白龙驹“照夜玉狮子马”怎么没看到? 增升说我师傅史文恭乘坐着,于是又写书讨这匹马,来回几次,终于定了宋江退军就还马。结果发现青州、凌州两路有军马过来。宋江吴用知道有援军来曾涂那边肯定会变卦,于是策反郁保四,许他做个头领。

郁保四假装逃回了曾头市,说宋江无心讲和,劝说史文恭劫寨。又暗中给石迁等人通了消息。当晚史文恭带了苏定、曾密、曾魁等去劫寨,中了埋伏,史文恭骑着千里马逃跑,被卢俊义抓住。

郁保四加入梁山,梁山108将就快全齐了。梁山好汉们各有特长,共同为了一个目标而聚集在一起。在虚拟化技术的世界中,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环境根目录的相对路径。

bhyve简介

自 FreeBSD 10.0-RELEASE 起,BSD 许可的 bhyve 虚拟机管理器已成为底层系统不可或缺的一部分。bhyve 强大而灵活,支持多种客户机操作系统,涵盖 FreeBSD、OpenBSD 以及多个 Linux® 发行版。在默认配置下,bhyve 提供对串行控制台的直接访问,无需模拟图形化界面,从而为用户提供了简洁而高效的交互方式。

安装使用bhyve

FreeBSD准备工作

若要支持bhyve,需要cpu支持,可以通过 /var/run/dmesg.boot  文件来查看,比如对AMD芯片需要支持POPCNT ,Inter芯片需要支持 EPT 和 UG 

cat /var/run/dmesg.boot

需要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虚拟主机系统真的是简单又方便啊!

虚拟机管理器CBSD实践@FreeBSD

CBSD介绍

CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案的单一集成工具,用于使用预定义的软件集以最少的配置快速构建和部署计算机虚拟环境。
虽然CBSD没有提供额外的操作系统级功能,但它极大地简化了原本需要用户通过命令行界面(CLI)手动执行数十甚至数百个命令的复杂过程。CBSD的存在正是为了解决这一繁琐任务,让人能够更高效、更便捷地管理您的虚拟化环境,而非陷入无休止的命令行操作中。

官网:CBSD — FreeBSD Jail and Bhyve Management Tools

视频:FOSDEM 2021 - Managing virtual resources with CBSD, and beyond 

CBSD安装

pkg安装

pkg install cbsd

CBSD初始化

如果是使用zfs系统,需要先执行:

/sbin/zfs create -o mountpoint=/usr/jails -o atime=off zroot/jails

 然后进行初始化即可:

env workdir=/usr/jails /usr/local/cbsd/sudoexec/initenv

按照提示一步步作答就行,

CBSD管理jail

创建一个jail

执行命令:

cbsd jconstruct-tui

首先进入配置画面

可以选择安装的软件包,cpu架构等。如果安装了qemu-devel,那么可以选择armv6、aarch64甚至riscv64       

配置好之后提示:

no base dir in: /usr/jails/basejail/base_amd64_amd64_14.1
Select base sources:
 0 .. CANCEL
 a .. build 
 b .. extract 
 c .. pkg 
 d .. populate 
 e .. repo 
选e         

自动去下载base.txz文件了

retrieve base.txz from download.freebsd.org, size: 198m
/usr/jails/tmp/src.71323/base.txz                      198 MB 2646 kBps 01m17s
然后到这一步有点慢,需要等一下:

Please wait: this will take a while...
Applying skel dir template from: /usr/jails/share/FreeBSD-jail-skel

最后安装完成:

To edit VM properties use: cbsd jconfig jname=jail1
To start VM use: cbsd jstart jail1
To stop VM use: cbsd jstop jail1
To remove VM use: cbsd jremove jail1
For attach VM console use: cbsd jlogin jail1

Creating jail1 complete: Enjoy!
/usr/jails/jails/jail1/etc already mounted
/usr/jails/jails/jail1/root already mounted
/usr/jails/jails/jail1/tmp already mounted
/usr/jails/jails/jail1/home already mounted
/usr/jails/jails/jail1/usr/local already mounted
/usr/jails/jails/jail1/compat already mounted
/usr/jails/jails/jail1/var already mounted
jcreate done in 6 minutes and 34 seconds
 

完成之后还有命令提醒,告知几个最常用的管理命令,真贴心!

启动CBSD jail

cbsd jstart jail1


Default NIC automatically selected: web
set resource limit: [ ]
jail renice: 1
Starting jail: jail1, parallel timeout=5
jail1: created
ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/local/lib /usr/local/lib/compat/pkg /usr/local/lib/compat/pkg
32-bit compatibility ldconfig path: /usr/lib32 /usr/lib32
Updating /var/run/os-release done.
Creating and/or trimming log files.
Clearing /tmp (X related).
Updating motd:.
Starting syslogd.
Starting cron.

Fri Jun  7 00:13:02 CST 2024
CBSD setup: jail ipfw counters num: 99/100
jstart done in 5 seconds
启动也很快

登录 jail

cbsd jlogin jail1

速度好快

登进去之后,尽管无法ping通,但是网络是通了,可以使用pkg、curl 、wget等指令。太棒了!

CBSD创建和管理bhyve

首先,创建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登录后,就可以看到光盘启动界面了,按照提示,一步步安装即可。

回到梁山,宋江说卢俊义抓住了史文恭,报了晁盖的仇,应该为寨主。卢俊义谦让,李逵、鲁智深等也都不同意。宋江说我有个办法......
欲知后事如何,且听下回分解。
 

好的,首先我们需要将《水浒传》的文本文件读入Python程序中。代码如下: ```python with open('shuihuzhuan.txt', 'r', encoding='utf-8') as f: txt = f.read() ``` 然后,我们需要对文本进行词处理。这里我们可以使用jieba库来进行中文词。代码如下: ```python import jieba words = jieba.lcut(txt) ``` 接下来,我们需要将好的词进行统计,找到出现次数最多的前10个人名。这里我们可以使用Python的collections库中的Counter类。代码如下: ```python from collections import Counter name_list = ['林冲', '宋江', '吴用', '卢俊义', '公孙胜', '关胜', '秦明', '呼延灼', '花荣', '柴进'] name_count = Counter() for word in words: if word in name_list: name_count[word] += 1 top10 = name_count.most_common(10) ``` 最后,我们将结果输出即可: ```python for i, item in enumerate(top10): print('第{}名:{},出场{}次。'.format(i+1, item[0], item[1])) ``` 完整代码如下: ```python import jieba from collections import Counter name_list = ['林冲', '宋江', '吴用', '卢俊义', '公孙胜', '关胜', '秦明', '呼延灼', '花荣', '柴进'] name_count = Counter() with open('shuihuzhuan.txt', 'r', encoding='utf-8') as f: txt = f.read() words = jieba.lcut(txt) for word in words: if word in name_list: name_count[word] += 1 top10 = name_count.most_common(10) for i, item in enumerate(top10): print('第{}名:{},出场{}次。'.format(i+1, item[0], item[1])) ``` 运行代码后,就可以得到出场次数最多的前10个人物的姓名了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值