当前位置: 首页 > article >正文

内网Debian\Ubuntu服务器安装dep包,基于apt-rdepends下载相关依赖

文章目录

  • 背景
  • 一、下载依赖
  • 二、拷贝到内网
  • 三、 使用dpkg安装
  • 可能会遇到的问题

背景

由于生产服务器是Debian\Ubuntu系统且在内网环境(不联网),需要使用拷贝deb格式的包使用dpkg的方式进行安装。所以,需要现在联网的环境中将所需的软件包下载完之后,拷贝到内网环境。如果仅仅只是通过apt-get download的方式下载后,拷贝进内网直接安装,可能会安装不上,因为有些包存在依赖关系,例如A依赖B,我们只下了A,在内网安装的时候就会因为没有安装B而报错,而且有些软件包的依赖比较多,一个一个的报错再解决也不太现实。基于此,使用apt-rdepeneds工具用来分析依赖关系,一次性下载完所有依赖包之后,统一拷到内网安装。

如果有其他更好的建议,请留言指教!

一、下载依赖

如果联网环境的服务器apt-rdepends未安装,使用apt-get install apt-rdepends命令安装即可

相关文章:apt-rdepends使用

1 获取依赖项列表:首先,通过 apt-rdepends 获取所有依赖包的列表。假设你要查询包 mypackage 的依赖关系,命令如下:

apt-rdepends <包名1> <包名2>

apt-rdepends后面可以使用一个或者多个包名

2 过滤出包名apt-rdepends 的输出会包含包名和依赖关系的层级结构。你需要过滤掉重复的包名和无关信息,只保留唯一的包名列表。你可以使用 grepawk 来提取包名,并通过 sortuniq 去重:

apt-rdepends <包名1> <包名2> | grep -v "^ " | awk '{print $1}' | sort -u

3 转换为 apt-get download 命令:将上一步生成的包名列表转换为可以通过 apt-get download 下载的命令。通过 xargs 可以将包名传递给 apt-get download 进行批量下载:

apt-rdepends <包名1> <包名2> | grep -v "^ " | awk '{print $1}' | sort -u | xargs -I{} apt-get download {}

这段命令的工作方式:

  • apt-rdepends mypackage 输出包及其依赖项。
  • grep -v "^ " 过滤掉以空格开头的行(这些行通常是依赖关系的层级结构)。
  • awk '{print $1}' 提取包名。
  • sort -u 排序并去除重复项。
  • xargs -I{} sudo apt-get download {} 将每个包名传递给 apt-get download 进行下载。

这将会自动下载 mypackage 及其所有依赖项。

二、拷贝到内网

将上一步下载的依赖拷贝到内网服务器

三、 使用dpkg安装

在对应文件夹执行命令

dpkg -i *.deb

可能会遇到的问题

使用dpkg -i *.deb安装脚本时,在安装A的时候,必须有B,但是B对应的deb我们也已经下载完了

实际报错举例:A: apt_2.0.10_amd64.deb,B:ubuntu-keyring

在内网服务器安装A:apt时报错

Preparing to unpack apt_2.0.10_amd64.deb ...
Unpacking apt (2.0.10) over (2.2.4) ...
dpkg: dependency problems prevent configuration of apt:
apt depends on ubuntu-keyring; however:
Package ubuntu-keyring is not installed.
dpkg: error processing package apt (--install):
dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.31-13+deb11u3) ...
Errors were encountered while processing:
apt

这里的报错就是 在安装apt_2.0.10_amd64.deb时,由于没有ubuntu-keyring依赖,所以报错了

这种情况下先执行B的安装脚本即可,例如

dpkg -i B.deb
dpkg -i *.deb

也可以试试基于apt-cache depends的方式,初步试了一下,也是可以下载到对应的依赖包
https://blog.csdn.net/qq_41230149/article/details/128801103


http://www.kler.cn/news/337375.html

相关文章:

  • Golang | Leetcode Golang题解之第459题重复的子字符串
  • Spring Bean 生命周期 五步->七步->十步 扩展学习总结 bean作用域 Scope,手动注册自己new的对象
  • 四川音盛佳云电子商务有限公司助力商家扬帆起航
  • 产品经理内容分享(二):AI产品经理的入门路线图
  • 网页WebRTC电话和软电话哪个好用?
  • 碰撞检测 | 图解视线生成Bresenham算法(附ROS C++/Python/Matlab实现)
  • Sharding 分页原理分析
  • 传感器模块编程实践(二)W5500 SPI转以太网模块简介及驱动源码
  • C#-泛型学习笔记
  • MQ 架构设计原理与消息中间件详解(一)(上一篇只是概述)
  • Github 2024-10-07 开源项目周报 Top15
  • YoloV9改进策略:BackBone改进|CAFormer在YoloV9中的创新应用,显著提升目标检测性能
  • Linux中的网络指令:ping、netstat、watch、pidof、xargs
  • mysql 慢查询日志、设置单条数据最大 packet 插入大小指令
  • 2024Java最新面试题总结(针对于一些小厂、中厂)
  • 通信工程学习:什么是AIOT智能物联网
  • [云] Hands-on with a sample application--DockerCoins 挖矿程序!
  • 外国钞票面值检测系统源码分享
  • 【人工智能】AI人工智能的重要组成部分,深入解析CNN与RNN两种神经网络的异同与应用场景和区别
  • kubernetes get pods的STATUS字段显示ImagePullBackOff 的解决办法