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

news2024/10/5 21:15:46

简介

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-skel

To 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 ubjammy

Creating 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/pro

This 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-skel

To 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 ubu

Creating 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.coloradmin.cn/o/1833148.html

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

相关文章

YOLOv5目标检测——基于YOLOv5的吊车安全监测

移动式起重机是建筑施工中使用的重要设备。 遵守正确的操作程序对于防止事故很重要。 然而,其中存在人为错误的因素。 这里我将举一个例子来说明计算机视觉(CV)如何帮助解决这个问题。 1、移动式起重机操作的安全问题 为简单起见&#xff0…

室内外一体化定位系统的创新与应用

随着科技的飞速发展,人们对定位技术的需求日益增强。传统的定位技术主要依赖于室外环境,如GPS等卫星定位技术。然而,在室内环境下,由于信号遮挡和多径效应等问题,这些技术往往难以发挥有效作用。因此,室内外…

记录一次基于Vite搭建Vue3项目的过程

Vue2已经于2023年12月31日停止维护了,2024年算是vue3的崭新的一年,我们的项目也基本从vue2逐渐向着Vue3过渡,Vue3相较于vue2有更好的开发体验,和ts的自然融合使得项目的结构、功能拆分变得更加的清晰;组合式声明有种MV…

【吉林大学Java程序设计】第7章:对象的容纳

第7章:对象的容纳 1.数组 Arrays1.1 数组的创建、初始化和使用(1)数组的声明(2)数组初始化静态初始化动态初始化对象数组的初始化 (3)数组的使用 1.2 多维数组1.3 数组与数组的引用1.4 数组工具…

Python学习从0开始——Kaggle深度学习002

Python学习从0开始——Kaggle深度学习002 一、单个神经元1.深度学习2.线性单元示例 - 线性单元作为模型多个输入 3.Keras中的线性单元 二、深度神经网络1.层多种类型的层 2.激活函数3.堆叠密集层4.构建Sequential模型 三、随机梯度下降1.介绍2.损失函数3.梯度下降法1.梯度下降法…

Spring Boot 优雅关机时异步线程安全优化

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

【Python】在运行中使用warnings.filterwarnings,可以忽略测试中遇到的问题

在 Python 中,warnings 是一个内置模块,用于发出有关程序执行的警告信息,这些警告信息通常是关于程序行为的潜在问题。 不过,这些问题通常不是致命的错误,只不过是展示我们代码中潜在的问题,或不推荐的做法…

红酒:家庭环境中如何创造理想的红酒储存环境

对于热爱品鉴红酒的人来说,如何在家庭环境中创造一个理想的红酒储存环境是至关重要的。理想的储存环境能够确保红酒的品质和口感长时间保持理想状态。下面云仓酒庄雷盛红酒将介绍一些在家庭环境中创造理想红酒储存环境的建议: 温度控制:红酒的…

2024年ERP软件公司排名前十!

在当今的商业环境中,ERP(企业资源规划)系统已成为企业日常运营不可或缺的一部分。然而,如何在这众多的ERP系统软件中筛选出最适合自己的一款,成为许多企业共同面临的挑战。今天,我将带大家盘点erp软件公司的…

生成式AI新篇章:亚马逊云科技助力重塑数字未来

编辑:阿冒 设计:沐由 “任何非常先进的技术,初看都与魔法无异。”对于这句话,想必科幻迷们应该不会感到陌生。这则广为人知的定律,是著名科幻小说作家亚瑟克拉克在《2001太空漫游》中提出的。 正因为如此,当…

知识图谱存在的挑战---隐私、安全和伦理相关和测试认证相关

文章目录 隐私、安全和伦理相关测试认证相关 隐私、安全和伦理相关 从部署拓扑结构而言,知识图谱技术以数据为核心、数据库为载体的方式来存储,有单机、云平台、集群及其组合的部署方式,结合大数据平台、云平台、业务系统、灾备、网络系统及其…

【代码随想录】【算法训练营】【第41天】 [416]分割等和子集

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 40,休息,休息一下~ day 41,艰难的周一~ 题目详情 [416] 分割等和子集 题目描述 416 分割等和子集 解题思路 前提:是否可以将数组分为和相等的…

cloud_enum:一款针对不同平台云环境安全的OSINT工具

关于cloud_enum cloud_enum是一款功能强大的云环境安全OSINT工具,该工具支持AWS、Azure和Google Cloud三种不同的云环境,旨在帮助广大研究人员枚举目标云环境中的公共资源,并尝试寻找其中潜在的安全威胁。 功能介绍 当前版本的cloud_enum支…

VBA学习(2):Excel VBA初学者编写第一个宏

要在Excel中编写宏程序,首先需要了解VBA语言,而快速入门的技巧就是使用宏录制器。 宏录制器就像一台录音机,可以使用VBA监听和记录你在Excel中所做的一切操作。对于初学者来说,你可能不了解VBA,这里,我们会…

如何利用被动DNS(Passive DNS)加强网络安全

通过收集和分析被动DNS数据,可以帮助识别恶意站点,打击钓鱼和恶意软件,本文将介绍如何利用被动DNS(Passive DNS)加强网络安全。 在过去的一些年里,我们目睹了对DNS基础设施的攻击日益增多:对权…

【S32K 进阶之旅】 将 EB 配置生成的 MCAL 代码集成到 S32DS 中

本文介绍如何使用 S32DS 进行 AUTOSAR MCAL 工程的编译和调试,重点在于将 EB 配置生成的 MCAL 代码集成到 S32DS 中。 虽然配置过程较为繁琐,实操过一遍就会熟悉整个工程的框架。以后每次在 EB 中更新配置,生成代码的文件夹已经集成在 S32DS…

Selenium+Pytest自动化测试框架能碰撞出什么样的火花

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象,封装继承 一定的selenium基础——本篇不讲selenium,不会的可以自己去看selenium中文翻译网 一、测试框架简介 测试框架有什么优点呢: 代码复用率高…

从多线程设计模式到对 CompletableFuture 的应用

大家好,我是 方圆。最近在开发 延保服务 频道页时,为了提高查询效率,使用到了多线程技术。为了对多线程方案设计有更加充分的了解,在业余时间读完了《图解 Java 多线程设计模式》这本书,觉得收获良多。本篇文章将介绍其…

《C++ Primer》导学系列:第 4 章 - 表达式

4.1 基础 4.1.1 基本概念 组合运算符和运算对象 组合运算符是指将两个或多个操作数结合在一起进行运算的符号。在C中&#xff0c;常见的组合运算符包括算术运算符&#xff08;如, -, *, /, %&#xff09;、关系运算符&#xff08;如<, >, <, >, , !&#xff09;…

docker-compose jira、bugzilla、zentao

参见文章&#xff0c;这里是对之前的内容进行了改动&#xff0c;主要讲怎么将zentao容器融入到已有的docker-compose.yml中 一、zentao镜像 从官网上拉取&#xff1a;https://hub.docker.com/r/easysoft/zentao/tags 可以选择自己想要的版本&#xff0c;这里我选择的是开源版…