FreeBSD jail虚拟容器里装ubuntu系统没有apt命令怎么办?

2024-06-16 14:52

本文主要是介绍FreeBSD jail虚拟容器里装ubuntu系统没有apt命令怎么办?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题

在FreeBSD jail里使用linux兼容创建了ubuntu环境,但是没有apt命令,该怎么办呢? jail的介绍:FreeBSD jail 容器手册_freebsd虚拟化-CSDN博客

系统是这样进去的:

jexec focal chroot /compat/ubuntu /bin/bash

这个问题很少碰到,大约只有两种情况会碰到:1 FreeBSD jail虚拟容器里装ubuntu系统 2 非常精简的ubuntu以至于把apt都精简掉了。

先上解决方法

 因为对ubuntu不熟,所有走了弯路,注意以下几点可以少踩坑:

1 创建ubuntu jail的时候,注意就选好版本

普通用户(非FreeBSD jail用户)可以略过这一步,不过话说回来,如果不做ubuntu jail,普通的ubuntu用户也不会碰到没有apt的情况。

比如想用focal,命令里面模板就用ubuntu_focal

cbsd jcreate jname=ubu1 jprofile=ubuntu_focal allow_raw_sockets=1
cbsd jcreate jname=ubu2 jprofile=ubuntu_jammy allow_raw_sockets=1

2  启动jail之后,直接进入/var/cache/apt/archivers目录安装所有deb包

使用cbsd jstart ubu1 启动jail,然后使用cbsd jlogin ubu1 进入jail内部

然后再用chroot /compat/ubuntu /bin/bash 进入ubuntu系统,

然后在/var/cache/apt/archivers目录安装所有deb包

dpkg -i *.deb

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

3 修复dpkg和apt

修复dpkg 

dpkg --configure -a

修复apt

apt --fix-broken install

最后apt update一下,完活拉!

apt update

 

踩坑详细过程

经过复杂的操作,安装好FreeBSD虚拟容器jail里的Ubuntu系统,但是发现没有apt,这样啥也干不了!

咨询大模型:

如果没有gpt,我如何dpkg 安装apt_1.9.3_amd64.deb这个包

如果你的系统中没有gpt命令,你可以尝试使用以下方法来安装apt_1.9.3_amd64.deb这个包:

  1. 使用dpkg命令:即使没有gpt,你仍然可以使用dpkg命令来安装.deb包。你可以在终端中运行以下命令来安装apt_1.9.3_amd64.deb包:
    sudo dpkg -i apt_1.9.3_amd64.deb
    
    这将尝试安装apt_1.9.3_amd64.deb包,但请注意,如果有其他依赖文件缺失,你可能需要手动安装这些依赖文件。

希望这个回答对你有所帮助!如果你还有其他问题,请随时提问。

因为用习惯了apt,dpkg好像好多年没有用过了,所以是help+大模型+baidu一起开干!

从网上下载apt的包安装(后来发现虚拟容器里自带)

一开始是从网上下载了apt包,而且是下了个很新的

wget http://www.ftp.ne.jp/Linux/packages/ubuntu/archive/pool/main/a/apt/apt_2.9.4_amd64.deb

因为当时容器里没有apt,当然也没有wget,所以是跑到ubuntu容器外面下载的,然后到ubuntu里面使用dpkg -i安装

dpkg -i apt_2.9.4_amd64.deb

结果发现依赖太多,不可能缺的库都到网上下载吧? 这简直是不可能完成的任务。

本地找到deb安装apt

查看debootstrap jammy /compat/ubuntu时候的log信息,发现本地有apt的包。

于是进入jammy ubuntu,发现apt的deb包放在这个目录:/var/cache/apt/archives

里面有apt的安装包,于是安装,并根据提示安装需要的包:

dpkg -i apt_2.4.5_amd64.deb 
dpkg -i libapt-pkg6.0_2.4.5_amd64.deb 
dpkg -i libstdc++6_12-20220319-1ubuntu1_amd64.deb
dpkg -i libxxhash0_0.8.1-1_amd64.deb dpkg -i libapt-pkg6.0_2.4.5_amd64.deb

dpkg不如apt好用,安装的时候一直提示缺其它依赖,缺哪个就再装哪个。尽管这个目录下有所有需要的包,但一个一个装还是很让人讨厌。

最终走了一圈弯路后,终于知道了一次安装所有包的命令:

dpkg -i *.deb

这样一次性安装好了所有的包,解决了安装apt之后的包依赖问题。 

详细描述期间走的弯路

解决apt依赖库的问题

使用dpkg -i apt_2.4.5_amd64.deb 安装apt的时候,碰到了依赖问题,本身执行apt命令的时候,它会报错自己的依赖库,但是它是顺序报错,也就是补上一个依赖库,再报下一个依赖库,所以非常麻烦非常慢。幸运的是后来找到了用一条命令来一次性找到所有的依赖,即使用dpkg -I apt_2.0.2_amd64.deb |grep Depends命令来找依赖:

/var/cache/apt/archives# dpkg -I apt_2.0.2_amd64.deb |grep DependsDepends: adduser, gpgv | gpgv2 | gpgv1, libapt-pkg6.0 (>= 2.0.2), ubuntu-keyring, libc6 (>= 2.15), libgcc-s1 (>= 3.0), libgnutls30 (>= 3.6.12), libseccomp2 (>= 2.4.2), libstdc++6 (>= 9), libsystemd0

在系统的/var/cache/apt/archivers目录,这些依赖库的deb文件都在。

I have no name!@focal:/var/cache/apt/archives# ls add*
adduser_3.118ubuntu2_all.deb
I have no name!@focal:/var/cache/apt/archives# ls gpgv_2.2.19-3ubuntu2_amd64.deb 
gpgv_2.2.19-3ubuntu2_amd64.deb
I have no name!@focal:/var/cache/apt/archives# ls liba*
libacl1_2.2.53-6_amd64.deb		libatm1_1%3a2.5.1-4_amd64.deb
libapparmor1_2.13.3-7ubuntu5_amd64.deb	libattr1_1%3a2.4.48-5_amd64.deb
libapt-pkg6.0_2.0.2_amd64.deb		libaudit-common_1%3a2.8.5-2ubuntu6_all.deb
libargon2-1_0~20171227-0.2_amd64.deb	libaudit1_1%3a2.8.5-2ubuntu6_amd64.deb
I have no name!@focal:/var/cache/apt/archives# ls libc*
libc-bin_2.31-0ubuntu9_amd64.deb      libcap2_1%3a2.32-1_amd64.deb
libc6_2.31-0ubuntu9_amd64.deb	      libcom-err2_1.45.5-2ubuntu1_amd64.deb
libcap-ng0_0.7.9-2.1build1_amd64.deb  libcrypt1_1%3a4.4.10-10ubuntu4_amd64.deb
libcap2-bin_1%3a2.32-1_amd64.deb      libcryptsetup12_2%3a2.2.2-3ubuntu2_amd64.deb
I have no name!@focal:/var/cache/apt/archives# ls libgcc*
libgcc-s1_10-20200411-0ubuntu1_amd64.deb
I have no name!@focal:/var/cache/apt/archives# ls libgnu*
libgnutls30_3.6.13-2ubuntu1_amd64.deb
I have no name!@focal:/var/cache/apt/archives# ls libsec*
libseccomp2_2.4.3-1ubuntu1_amd64.deb
I have no name!@focal:/var/cache/apt/archives# ls libsys*
libsystemd0_245.4-4ubuntu3_amd64.deb

于是使用dpkg -i 安装这些库: 

dpkg -i adduser_3.118ubuntu2_all.deb gpgv_2.2.19-3ubuntu2_amd64.deb libapt-pkg6.0_2.0.2_amd64.deb libc6_2.31-0ubuntu9_amd64.deb libgcc-s1_10-20200411-0ubuntu1_amd64.debdpkg -i libgnutls30_3.6.13-2ubuntu1_amd64.deb libseccomp2_2.4.3-1ubuntu1_amd64.deb libsystemd0_245.4-4ubuntu3_amd64.deb

dpkg -i 安装的时候又显示一大堆东西,而且也报依赖库问题。也就是依赖的库还依赖其它库....这样简直没法完成这个任务....

怒了,不管三七二十一,使用dpkg -i *.deb安装所有包:

dpkg -i *.deb

安装完所有的包之后,apt update总算可以执行了,但是有报错,apt search和apt install 也无法执行。

解决apt search和apt install 无法执行的问题

执行apt --fix-broken install 修复,结果没成功。那就执行dpkg的修复:

dpkg --configure -a

按照提示选择即可。修复完成后,再执行apt的修复:

apt --fix-broken install

期间会问到一些问题,比如


 

执行完毕,apt就算修复好了,这时候查找和安装wget试试,成功!

apt search wget
Sorting... Done
Full Text Search... Done
devscripts/focal 2.20.2ubuntu2 amd64scripts to make the life of a Debian Package maintainer easierwget/focal 1.20.3-1ubuntu1 amd64retrieves files from the webI have no name!@focal:/var/cache/apt/archives# apt install wget 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:libpsl5 publicsuffix

 总结

ubuntu没有apt,这对FreeBSD用户来说可是废了老劲了,因为FreeBSD的jail里面再精简,也有pkg这个包管理软件。退一万步,jail里面没有pkg,也可以在host主机使用jexec 来安装,如jail序号为1,那么是 jexec 1 pkg install xxpkg ,如下面jail的序号是24,主机名是focal:

root@fbhost:~ # jexec 24 pkg search wget
pkg: No SRV record found for the repo 'FreeBSD'
wget-1.24.5                    Retrieve files from the Net via HTTP(S) and FTP
wget2-2.1.0_1                  File and recursive website downloader
wgetpaste-2.34                 Paste to several pastebin services via bash script
root@fbhost:~ # jexec focal pkg search wget 
pkg: No SRV record found for the repo 'FreeBSD'
wget-1.24.5                    Retrieve files from the Net via HTTP(S) and FTP
wget2-2.1.0_1                  File and recursive website downloader
wgetpaste-2.34                 Paste to several pastebin services via bash script

FreeBSD本身不能创建ubuntu jail虚拟机(jail比虚拟机更轻量极) ,而是在FreeBSD jail虚拟机里使用了linux虚拟,这样两层虚拟操作,导致无法使用jexec 原生的命令来安装ubuntu的包,因为官方根本就没提供啊! 官方没有,jail里也没有,用户可不就不知所措了。

多亏有文心和chatgpt,反复询问这哥俩,终于弄明白了dpkg -i xx.deb的解决方法,最终跌跌撞撞的装好了apt,这样就算把ubuntu jail跑通了!

顺便,ubuntu jail里默认没有装好apt,刚开始很不理解,后来就想明白了,因为jail本身就是轻量极,用户未必需要apt那一套系统,这样就把是否安装apt选择权给了用户,可以节省系统资源。

避坑指南

因为对ubuntu不熟,所有走了弯路,注意以下几点可以少踩坑:

1 创建ubuntu jail的时候,注意选好版本

比如想用ubuntu focal,命令里面模板就用ubuntu_focal

cbsd jcreate jname=ubu1 jprofile=ubuntu_focal allow_raw_sockets=1
cbsd jcreate jname=ubu2 jprofile=ubuntu_jammy allow_raw_sockets=1

2  启动jail之后,直接进入/var/cache/apt/archivers目录安装所有deb包

dpkg -i *.deb

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

3 修复dpkg和apt

修复dpkg 

dpkg --configure -a

修复apt

apt --fix-broken install

最后update一下,完活拉!

apt update

调试

在csdn写了命令之后cp到终端执行报错

dpkg -i libgnutls30_3.6.13-2ubuntu1_amd64.deb libseccomp2_2.4.3-1ubuntu1_amd64.deb libsystemd0_245.4-4ubuntu3_amd64.deb
dpkg: error: unknown option -�

Type dpkg --help for help about installing and deinstalling packages [*];
Use 'apt' or 'aptitude' for user-friendly package management;
Type dpkg -Dhelp for a list of dpkg debug flag values;
Type dpkg --force-help for a list of forcing options;
Type dpkg-deb --help for help about manipulating *.deb files;
重复命令,将每个空格重写,问题解决。

所以命令还是要写在代码里,写在外面可能因为字符的原因而出错,尤其是命令较长,有多个空格的情况下。

apt update 有个warning

apt update
Hit:1 http://archive.ubuntu.com/ubuntu focal InRelease
Reading package lists... Done
Building dependency tree... Done
All packages are up to date.
W: No sandbox user '_apt' on the system, can not drop privileges

apt update之后无法search 和install安装

apt search wget之后直接Segmentation fault (core dumped)

apt install wget之后报一堆依赖depends问题

apt install wget
Reading package lists... Done
Building dependency tree... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:adduser : Depends: debconf (>= 0.5) but it is not going to be installed ordebconf-2.0apt : Depends: libsystemd0 but it is not going to be installedca-certificates : Depends: debconf (>= 0.5) but it is not going to be installed ordebconf-2.0console-setup-linux : Depends: keyboard-configuration (= 1.194ubuntu3) but it is not going to be installeddbus : Depends: libsystemd0 but it is not going to be installeddebconf-i18n : Depends: debconf (= 1.5.73) but it is not going to be installedDepends: liblocale-gettext-perl but it is not going to be installedinit-system-helpers : Depends: perl-base (>= 5.20.1-3) but it is not going to be installediproute2 : Depends: debconf (>= 0.5) but it is not going to be installed ordebconf-2.0isc-dhcp-client : Depends: debianutils (>= 2.8.2) but it is not going to be installedisc-dhcp-common : Depends: debianutils (>= 2.8.2) but it is not going to be installedkbd : Depends: console-setup but it is not going to be installed orconsole-setup-mini but it is not installablelibapt-pkg6.0 : Depends: libsystemd0 (>= 221) but it is not going to be installed

按照提示执行

apt --fix-broken install

执行apt --fix-broken install 修复的失败

I have no name!@focal:/var/cache/apt/archives# apt --fix-broken install 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following additional packages will be installed:console-setup coreutils debianutils e2fsprogs init keyboard-configurationliblocale-gettext-perl mount python3 python3-minimal python3.8-minimal systemd systemd-sysv
Suggested packages:gpart parted fuse2fs e2fsck-static nfs-common python3-doc python3-tk python3-venvbinfmt-support systemd-container policykit-1
Recommended packages:e2fsprogs-l10n
The following NEW packages will be installed:console-setup coreutils debianutils e2fsprogs init keyboard-configurationliblocale-gettext-perl mount python3 python3-minimal python3.8-minimal systemd systemd-sysv
0 upgraded, 13 newly installed, 0 to remove and 0 not upgraded.
111 not fully installed or removed.
Need to get 0 B/8064 kB of archives.
After this operation, 32.5 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
dpkg-preconfigure: unable to re-open stdin: No such file or directory
E: Can not write log (Is /dev/pts mounted?) - posix_openpt (2: No such file or directory)
Setting up apt (2.0.2) ...
/etc/kernel/postinst.d/apt-auto-removal: 21: awk: not found
/etc/kernel/postinst.d/apt-auto-removal: 30: awk: not found
dpkg: error processing package apt (--configure):installed apt package post-installation script subprocess returned error exit status 127
Errors were encountered while processing:apt
E: Sub-process /usr/bin/dpkg returned an error code (1)

于是决定使用dpkg --configure -a 重新配置

dpkg --configure -a

使用dpkg --configure -a 重新配置,里面好像设置了城市? 

然后执行apt 修复

apt --fix-broken install

会有菜单,选择英文,控制台等。

最后apt update一下,完活!

apt update

这篇关于FreeBSD jail虚拟容器里装ubuntu系统没有apt命令怎么办?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

豆包 MarsCode 不允许你还没有女朋友

在这个喧嚣的世界里,爱意需要被温柔地唤醒。为心爱的她制作每日一句小工具,就像是一场永不落幕的浪漫仪式,每天都在她的心田播撒爱的种子,让她的每一天都充满甜蜜与期待。 背景 在这个瞬息万变的时代,我们都在寻找那些能让我们慢下来,感受生活美好的瞬间。为了让这份浪漫持久而深刻,我们决定为女朋友定制一个每日一句小工具。这个工具会在她意想不到的时刻,为她呈现一句充满爱意的话语,让她的每一天都充满惊喜和感动

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同