FreeBSD通过CBSD管理低资源容器jail来安装Ubuntu子系统实践

简介

FreeBSD、CBSD、Jail和Ubuntu,四者的组合方案可以说是强强联合,极具性价比和竞争力!同时安装简单方便,整体方案非常先进。

CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案的单一集成工具,用于使用预定义的软件集以最少的配置快速构建和部署计算机虚拟环境。

FreeBSD jail系统容器本身是FreeBSD子系统的低资源解决方案,但是因为FreeBSD支持Linux模拟,就使得jail容器也支持了Linux,比如可以在jail里建立Ubuntu子系统。整个解决方案非常丝滑,简单方便。

一、安装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 — FreeBSD Jail and Bhyve Management Tools 

还有这篇文档: jail管理器CBSD实践@FreeBSD-CSDN博客

二、使用CBSD菜单方式安装Ubuntu子系统

创建Ubuntu子系统

使用命令

cbsd jconstruct-tui 

进入菜单后,配置profile选择ubuntu_jammy

名字jname 自定义,比如ubjammy

其它使用默认即可,如下图:

然后选择“2 GO”,按回车,很快就创建成功了:

Please wait: this will take a while...
Applying custom skel system dir template from: /usr/local/cbsd/share/Linux-jail-ubuntu-jammy-system-skel
customskel dir specified but not found: /usr/local/cbsd/share/Linux-jail-ubuntu-jammy-skelTo edit VM properties use: cbsd jconfig jname=ubjammy
To start VM use: cbsd jstart ubjammy
To stop VM use: cbsd jstop ubjammy
To remove VM use: cbsd jremove ubjammy
For attach VM console use: cbsd jlogin ubjammyCreating ubjammy complete: Enjoy!
jcreate done in 9 seconds

可以看到6秒创建好了。使用cbsd jls可以看到还是关机状态,于是使用cbsd jstart ubjammy命令开机:

cbsd jstart ubjammy
Check environment script: 00.check_distribution.sh
populate jails data from: /usr/jails/basejail/base_amd64_amd64_jammy ...
Applying custom skel dir template from: /usr/jails/basejail/base_amd64_amd64_jammy
Default NIC automatically selected: web
set resource limit: [ ]
jail renice: 1
Starting jail: ubjammy, parallel timeout=5
ubjammy: created
CBSD setup: jail ipfw counters num: 107/108
jstart done in 6 seconds

开机速度也很快,只需要6秒就开机成功!

登录Ubuntu子系统

这里要注意,使用常规登录方法是不行的

cbsd jlogin ubjammy
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0 x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/proThis system has been minimized by removing packages and content that are
not required on a system that users do not log into.To restore this content, you can run the 'unminimize' command.The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.Cannot execute /bin/bash: No such file or directory

常规登录会报错没有/bin/bash文件,而导致无法登到虚拟子系统。这时候要用jail原装命令“jexec ubjammy sh”登录:

root@fbhost:~ # jexec ubjammy sh 
# uname -a
Linux ubjammy.my.domain 5.15.0 FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC x86_64 x86_64 x86_64 GNU/Linux

登录之后,通过使用uname命令,可以看到这是一台5.15.0内核版本Linux系统,到这里安装就算完成了

装好apt管理软件

装好内核后,并不能干什么事情,因为我们习惯了在Ubuntu下使用apt来管理软件,所以要

首先更新apt

apt update

然后就可以越快的玩耍拉!

三、使用CBSD命令方式安装Ubuntu子系统

可以直接用一条命令创建Linux子系统,但是如果需要Ubuntu子系统,则需要创建好之后再到里面安装Ubuntu虚拟子系统。

先用命令创建Linux虚拟子系统

使用命令创建:

cbsd jcreate jname=ubu jprofile=ubuntu_focal allow_raw_sockets=1

 一会儿就创建好了。注意,如果想后面装哪个版本的Ubuntu,就要在jprofile这里调用哪个版本的配置文件(怀疑如果不一致后面库会发生不一致的问题,实际上这里应该影响后面网上下载base.txz库的链接)。所以这里的例子是Ubuntu的focal版本。

cbsd jcreate jname=ubu jprofile=ubuntu_focal allow_raw_sockets=1
Please wait: this will take a while...
Applying skel dir template from: /usr/jails/share/FreeBSD-jail-skelTo edit VM properties use: cbsd jconfig jname=ubu
To start VM use: cbsd jstart ubu
To stop VM use: cbsd jstop ubu
To remove VM use: cbsd jremove ubu
For attach VM console use: cbsd jlogin ubuCreating ubu complete: Enjoy!
/usr/jails/jails/ubu/etc already mounted
/usr/jails/jails/ubu/root already mounted
/usr/jails/jails/ubu/tmp already mounted
/usr/jails/jails/ubu/home already mounted
/usr/jails/jails/ubu/usr/local already mounted
/usr/jails/jails/ubu/compat already mounted
/usr/jails/jails/ubu/var already mounted
jcreate done in 1 minutes and 9 seconds

启动子系统

cbsd jstart ubu
Default NIC automatically selected: web
set resource limit: [ ]
jail renice: 1
Starting jail: ubu, parallel timeout=5
ubu: 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 motd:.
Creating and/or trimming log files.
Clearing /tmp (X related).
Updating /var/run/os-release done.
Starting syslogd.
Starting cron.Fri Jun 14 14:17:01 CST 2024
CBSD setup: jail ipfw counters num: 99/100
jstart done in 5 seconds

登录Linux子系统

与进入菜单方式安装的Ubuntu子系统不同,命令方式建立的子系统,既可以使用jexec指令进入,也可以用常规的cbsd指令进入。

使用jexec 指令直接进入Linux子系统

jexec ubu chroot /compat/linux /bin/bash
bash-4.2# uname -a
Linux ubu.my.domain 5.15.0 FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC x86_64 x86_64 x86_64 GNU/Linux

使用cbsd命令需要两步

首先使用cbsd进入FreeBSD虚拟子系统

cbsd jlogin ubu

这时候系统是FreeBSD的。进入FreeBSD虚拟子系统后,再执行chroot进入Linux子系统

chroot /compat/linux/ /bin/bash

这样就进入了Linux子系统,但是如果想用Ubuntu,还需要手工安装Ubuntu子系统。

手工安装Ubuntu子系统

在FreeBSD子系统里面,安装Ubuntu子系统

首先安装debootstrap

pkg install debootstrap

 然后使用debootstrap安装Ubuntu

debootstrap focal /compat/ubuntu

安装好后

执行chroot进入Ubuntu子系统

chroot /compat/ubuntu /bin/bash
groups: cannot find name for group ID 0
groups: cannot find name for group ID 5
I have no name!@ubu:/# uname -a
Linux ubu.my.domain 5.15.0 FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC x86_64 x86_64 x86_64 GNU/Linux

好了,Ubuntu子系统就安装好了。

登录ubuntu子系统

要使用这个子系统,可以直接在宿主FreeBSD主机使用命令进入:

jexec ubu chroot /compat/ubuntu /bin/bash

检查一下,确实是Ubuntu linux

root@ubu:/# uname -a
Linux ubu.my.domain 5.15.0 FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC x86_64 x86_64 x86_64 GNU/Linux

这样不需要再进入FreeBSD子系统周转,管理起来特别简单方便。当然可以采用先登录FreeBSD子系统,再进入Ubuntu子系统的方法:

root@fbhost:~ # cbsd jlogin ubu
Last login: Sun Jun 16 19:21:31 on pts/1
FreeBSD 14.1-RELEASE (GENERIC) releng/14.1-n267679-10e31f0946d8
ubu:/root@[19:33] # chroot /compat/ubuntu/ /bin/bash
root@ubu:/# uname -a
Linux ubu.my.domain 5.15.0 FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC x86_64 x86_64 x86_64 GNU/Linux

由于jail是特别轻量级的容器,所以Ubuntu子系统竟然连apt也没有装.....(其实这里是误会了,正常安装的话都是有apt的,我没有安装出来,是因为使用的base.txz里面没装apt,啥都没装)

如果没有apt,那么要装apt也是一个费脑筋的活。

四、安装Ubuntu子系统下的apt管理软件

可以参考这个文档:FreeBSD jail虚拟容器里装ubuntu系统没有apt命令怎么办?-CSDN博客

一般大家不会碰到我这个问题,我是因为使用的base.txz里面没装apt,啥都没装导致的。

不过万一碰到了没有apt的情况,可以使用如下方法安装: 

首先进入Ubuntu子系统

jexec ubu chroot /compat/ubuntu /bin/bash

root@fbhost:~ # cbsd jlogin ubu
Last login: Sun Jun 16 19:21:31 on pts/1
FreeBSD 14.1-RELEASE (GENERIC) releng/14.1-n267679-10e31f0946d8
ubu:/root@[19:33] # chroot /compat/ubuntu/ /bin/bash
root@ubu:/# uname -a
Linux ubu.my.domain 5.15.0 FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC x86_64 x86_64 x86_64 GNU/Linux

直接进入/var/cache/apt/archivers目录dpkg安装所有deb包

进入目录

cd /var/cache/apt/archives

然后使用dpkg -i 命令安装所有deb包

dpkg -i *.deb

这样就不用一个一个安装deb包了,当然如果能精确控制最好,但是对大多数项目不需要这一点半点的空间,即使对单片机,也不在乎这区区几十几百M的空间了 

3 修复dpkg和apt

修复dpkg 

dpkg --configure -a

修复apt

apt --fix-broken install

最后apt update一下,完活拉!

apt update

五、总结

FreeBSD、CBSD、Jail和Ubuntu,四者的组合方案可以说是强强联合,极具性价比和竞争力!同时安装简单方便,整体方案非常先进。

但是第一次实践的时候,估计会走一些弯路,因为说明书实在太简单了,忽略了很多细节,这导致新手会踩好几个坑。好消息就是坑被我踩过了,大家可以愉快的实践拉!

调试

apt update 报错

apt update
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
E: Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. Current value: 25165824. (man 5 apt.conf)
Reading package lists... Error!
E: Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. Current value: 25165824. (man 5 apt.conf)
E: Error occurred while processing libsurgescript0.5.4.4 (NewVersion1)
E: Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_jammy_universe_binary-amd64_Packages
E: The package lists or status file could not be parsed or opened.

尝试更新dpkg 

dpkg --configure -a

没反应

尝试修复apt

apt --fix-broken install
E: Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. Current value: 25165824. (man 5 apt.conf)
Reading package lists... Error!
E: Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. Current value: 25165824. (man 5 apt.conf)
E: Error occurred while processing libsurgescript0.5.4.4 (NewVersion1)
E: Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_jammy_universe_binary-amd64_Packages
E: The package lists or status file could not be parsed or opened.

这好象是因为空间不够造成的。

先搁置。

有时候因为中文空格或拼写错误导致命令会报错

比如

root@ubu:/var/cache/apt/archives# cd /var/cache/apt/archivers
bash: cd: /var/cache/apt/archivers: No such file or directory

这是拼写错误。

有时候是因为中文空格,这时候把命令中间的空格在终端重新输入一下即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wondershaper 一款限制 linux 服务器网卡级别的带宽工具

文章目录 一、关于奇迹整形器二、文档链接三、源码下载四、限流测试五、常见报错1. /usr/local/sbin/wondershaper: line 145: tc: command not found2. Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs.. 一、关于奇迹整形…

Langchain中使用Ollama提供的Qwen大模型进行Function Call实现天气查询、网络搜索

Function Call,或者叫函数调用、工具调用,是大语言模型中比较重要的一项能力,对于扩展大语言模型的能力,或者构建AI Agent,至关重要。 Function Call的简单原理如下: 按照特定规范(这个一般是L…

多尺度特征提取:原理、应用与挑战

多尺度 多尺度特征提取:原理、应用与挑战**原理****应用****挑战****总结** 多尺度特征提取:原理、应用与挑战 在计算机视觉、自然语言处理和信号处理等领域,有效地捕捉和解析数据的多种尺度特性是至关重要的。多尺度特征提取是一种技术&…

融资融券有哪些交易技巧,两融利率现在最低多少?4.0%!

融资融券交易技巧 授信额度技巧 当我们账户净资产有显著增长时,最好主动申请增加信用额度,这样在后面行情好转入资金需要进行更多融资融券交易时就不会受限于授信额度,避免因为临时申请增加额度而错过交易机会。 买入委托技巧 现金的折算率…

小孟再接盲盒小程序,3天开发完!

大家好,我是程序员小孟。 前面开发了很多的商业的单子,私活联盟的小伙伴慢慢的逐渐搞自己的产品。 前面的话,开发了盲盒小程序,最近又接了一款盲盒小程序。因为前面有开发过,所以我们的成本也少了很多。 盲盒小程序…

2024.6.17 作业 xyt

今日作业: 升级优化自己应用程序的登录界面。 要求: 1. qss实现 2. 需要有图层的叠加 (QFrame) 3. 设置纯净窗口后,有关闭等窗口功能。 4. 如果账号密码正确…

Marin说PCB之orcad-capture原理图封装库的创建总结----01

今天是个不错的日子,我早上一出门刚骑车到半路就开始下大雨了,可是天气预报上明明说的没有雨啊,所以说天气预报就像是女人的脾气一样,难以揣摩啊,也尽量少去揣摩吧。 小编我刚刚到公司,就收到美国分部同事J…

【C语言】排序算法 -------- 计数排序

个人主页 创作不易,感谢大家的关注! 文章目录 1. 计数排序的概念2. 计数排序使用场景3. 计数排序思想4. 计数排序实现过程5. 计数排序的效率6. 总结(附源代码) 1. 计数排序的概念 计数排序是一种非比较的排序算法,其…

分享三款AI智能修图工具,超实用!

随着AI技术的飞速发展,图像处理领域正经历着一场颠覆性的革新。如今,众多繁琐的图像处理任务,诸如修图、抠图以及高清修复等,均可以借助先进的AI技术实现自动化处理。相较于传统的人工操作,AI图像工具不仅极大地提升了…

3d中毒了打不开模型怎么办---模大狮模型网

3D中毒了打不开模型怎么办?这是很多3D爱好者都会遇到的问题。在使用3D建模软件时,有时会出现打不开模型的情况,这可能是由于软件本身的问题,也可能是由于电脑配置不够高导致的。下面我们就来看看如何解决这个问题。 首先&#xff…

探索未来通信的新边界:AQChat一款融合AI的在线匿名聊天

探索未来通信的新边界:AQChat一款融合AI的在线匿名聊天 在数字时代,即时通讯变得无处不在,但隐私和性能仍旧是许多用户和开发者关注的焦点。今天,我要介绍一个开创性的开源项目 —— AQChat,它不仅重定义了在线匿名聊…

Ollama+Open WebUI本地部署Llama3 8b(附踩坑细节)

先展示一下最终结果,如下图所示: 1. 添加环境变量 在下载 ollama 之前,先去配置环境变量,确保模型下载到我们想要的地方 win10 和 win11 输入path或者环境变量: 增加系统环境变量 变量名不可更改,必须是O…

[ARM-2D 专题]3. ##运算符

C语言的宏系统相当强大,它允许使用##符号来处理预处理期的文本替换。这种用法被称为标记连接(token pasting)操作,其结果是将两个标记紧紧地连接在一起,而省略掉它们之间的所有空格。在复杂的宏定义中,运用…

Debian/Ubuntu linux安装软件

1、官方软件商店安装 2、deb包安装 报错不是sudoers,首先将用户添加到sudo su -l adduser USERNAME sudo exit然后,退出桌面环境并再次登录。 您可以通过输入以下内容来检查上述过程是否成功: groups下载deb包 altshiftf4或右键打开命令行…

10.无代码爬虫软件做网页数据抓取流程——工作流程设置与数据预览

首先,多数情况下免费版本的功能,已经可以满足绝大多数采集需求,想了解八爪鱼采集器版本区别的详情,请访问这篇帖子:https://blog.csdn.net/cctv1123/article/details/139581468 八爪鱼采集器免费版和个人版、团队版下…

安卓实现输入快递单号生成二维码,摄像头扫描快递单号生成的二维码,可以得到快递信息

背景: 1、实现二维码的生成和识别2、实现andriod(或虚拟机)部署,调用摄像头3、实现网络管理,包括数据库【取消】2、3可以组队实现,1必须单人实现 过程: 安卓APP主界面 输入快递单号信息&#…

关于伪标头那些事

前言 看到伪标头,不少同学可能会比较陌生,因为谁让它默默无闻呢? 当然博主把它比喻为一个来自传输层的“共享盒子”。提到共享,我想大家有所体会了。这里给大家贴一张直观的图例,可以静静观摩之。 Q:什么是…

MFC扩展库BCGControlBar Pro v35.0新版亮点:重新设计的工具栏编辑器等

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.0已全新发布了,这个版本改进类Visual Studio 2022的视觉主题、增强对多个…

网络安全:SQL注入防范

文章目录 网络安全:SQL注入防范引言防范措施概览使用参数化查询示例代码 输入验证和过滤示例代码 使用ORM框架示例代码 其他防范措施结语 网络安全:SQL注入防范 引言 在上一篇文章中,我们介绍了SQL注入攻击的基础知识。本文将重点讨论如何防…

C++之函数重载

函数重载概念&#xff1a; 是函数的一种特殊情况&#xff0c; C 允许在 同一作用域中 声明几个功能类似 的同名函数 &#xff0c;这 些同名函数的 形参列表(参数个数 或 类型 或 类型顺序)不同 &#xff0c;常用来处理实现功能类似数据类型 不同的问题。 #include<iostre…