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

2024-06-16 21:04

本文主要是介绍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这里调用哪个版本的配置文件(怀疑如果不一致后面库会发生不一致的问题)。所以这里的例子是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虚拟子系统后,再执行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,那么要装apt也是一个费脑筋的活。

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

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

首先进入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

这是拼写错误。

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

这篇关于FreeBSD通过CBSD管理低资源容器jail来安装Ubuntu子系统实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067544

相关文章

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py