多个deb包合并成一个deb包的方法

news2024/11/25 16:21:18

文章目录

  • 前言
  • 一 deb基础知识
    • 1.1 目录结构
    • 1.2 包结构说明
  • 二、多个deb包合并一个deb包
    • 2.1 下载离线deb包
    • 2.2 解压安装包
    • 2.3 deb包合并
  • 三、使用合并deb包可能存在的问题
  • 四、总结


前言

在UOS系统中默认没有开启开发者模式,此时若需要安装多个deb包时,只能通过手动一个个点击deb包并输入密码进行安装,若依赖包很多时,这种方法非常的麻烦;我们需要提供一种方法将多个deb合并成一个deb包提供给用户使用。

下面将一步步说明如何通过dpkg-deb管理工具实现deb提取和重新打包的工作。


一 deb基础知识

“.deb”是Debian软件包格式的文件扩展名, deb包是Unixar的标准归档,将包文件信息以及包内容,经过gzip和tar打包而成;一个deb包通常由两部分组成,控制脚本程序数据
在这里插入图片描述

1.1 目录结构

下面以tigervnc-viewer程序的目录结构为例进行说明,如下图所示:

在这里插入图片描述
tigervnc-viewer是当前工程的根目录,被当做Linux系统的root目录,deb安装时也会按照当前的目录结构将需要程序、库以及各种脚本文件安装到实际的linux系统中;DEBIAN是控制脚本目录,usr目录是程序数据目录。

1.2 包结构说明

DEBIAN目录中主要存放控制脚本,在该目录中至少有control文件,还可能有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版权)、changlog (修订记录)和conffiles等。

最常用的 5 个脚本文件:
• control,用了记录软件标识,版本号,平台,依赖信息等数据;
• preinst,在安装数据包之前运行的脚本,需要有执行权限
• postinst,在安装数据包之后运行的脚本,需要有执行权限;
• prerm,卸载时,在删除文件之前运行的脚本,需要有执行权限;
• postrm,在删除文件之后运行的脚本,需要有执行权限.

control文件:描述软件包的名称(Package),版本(Version),描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引

为了能将软件包进行充分的管理,可能还具有以下字段 :
  Section:申明软件的类别,常见的有utils, net, mail, text, x11 等;
  Priority:申明软件对于系统的重要程度,如required, standard, optional, extra 等;
  Essential:申明是否是系统最基本的软件包(选项为yes/no),如果是的话,这就表明该软件是维持系统稳定和正常运行的软件包,不允许任何形式的卸载(除非进行强制性的卸载)
  Architecture:软件包结构,如基于i386, amd64,m68k, sparc, alpha, powerpc’ 等;
  Source:软件包的源代码名称;
  Depends:软件所依赖的其他软件包和库文件。如果是依赖多个软件包和库文件,彼此之间采用逗号隔开;
  Pre-Depends:软件安装前必须安装、配置依赖性的软件包和库文件,它常常用于必须的预运行脚本需求;
  Recommends:这个字段表明推荐的安装的其他软件包和库文件;
  Suggests:建议安装的其他软件包和库文件。

二、多个deb包合并一个deb包

下面以tigervnc-viewer为例说明,将多个deb包合并成一个deb包,系统UOS 1050教育版。

2.1 下载离线deb包

先清空/var/cache/apt/archives目录下deb包然后在安装tigervnc-viewer。

sudo apt-get clean                   #清空/var/cache/apt/archives目录下deb包
sudo apt-get install tigervnc-viewer #安装tigervnc-viewer安装包和依赖包

若在当前系统下未安装过 tigervnc-viewer和缺失的相关依赖包,则会在/var/cache/apt/archives目录下下载多个deb包,如下所示:

在这里插入图片描述
从信息以上可以知道在当前系统下,tigervnc-viewer程序还缺少libfltk1.3和libfltk-images1.3两个依赖库。

2.2 解压安装包

将这三个安装包cp到其他目录下,进行安装包解压和重新打包动作,这里目录为jx目录。
解压命令如下:

dpkg-deb -R tigervnc-viewer_1.9.0.1-1+dde_amd64.deb  tigervnc
dpkg-deb -R libfltk-images1.3_1.3.4-9_amd64.deb  tk-images
dpkg-deb -R libfltk1.3_1.3.4-9_amd64.deb  tk

执行命令后会新生成三个目录,分别是tigervnc、tk-images、tk,如下图所示:
在这里插入图片描述
dpkg-deb可以从deb包中提取出控制脚本和程序数据,以便下一步用于合并deb包,相关内容可以参考篇文章。Linux dpkg和dpkg-deb常用参数使用说明

2.3 deb包合并

从2.1步骤中知道,当前tigervnc-viewer程序还缺少libfltk1.3和libfltk-images1.3两个依赖库文件,而本次需要将这两个依赖库文件合并到tigervnc-viewer;为了保证合并后的安装包可以正确识别出依赖,我们需要修改tigervnc的control文件中的Depends字段;

整体合并打包流程如下:

1. 提取libfltk库文件中的control文件中的Depends字段
2. 提取libfltk-images1.3库文件中的control文件信息中的Depends段
3. 移除tigervnc-viewer control文件中关于libfltk和libfltk-images1.3 Depends信息。
4. 合并这三个目录下的control 文件中的Depends信息,有重复的需要删掉
5. 合并libfltk、libfltk-images1.3、tigervnc-viewer程序数据到vncviewer目录下
6. 执行打包命令dpkg-deb -b vncviewer vncviewer.deb 

libfltk库文件中的Depends字段
在这里插入图片描述
libfltk-images1.3库文件中的Depends字段
在这里插入图片描述
tigervnc-viewer程序中的Depends字段。
在这里插入图片描述
合并后的Depends信息如下:

libc6 (>= 2.15), libfontconfig1 (>= 2.12.6), libgcc1 (>= 1:3.0), libgnutls30 (>= 3.6.6), 
libjpeg62-turbo (>= 1.3.1), libpam0g (>= 0.99.7.1), libstdc++6 (>= 5), libx11-6, libxcursor1 (>> 1.1.2),libxext6, 
libxfixes3, libxft2 (>> 2.1.1), libxinerama1, libxrender1, zlib1g (>= 1:1.1.4),  libpng16-16 (>= 1.6.2-1), 

在纯净的UOS系统上经过验证vncviewer.deb可以正常执行,如下图所示:
在这里插入图片描述
我们在kylin系统上验证该安装包时,系统可以正确的给出告警信息如下:
在这里插入图片描述

三、使用合并deb包可能存在的问题

如果我们的UOS系统上已安装了vncviewer.deb安装包,后续在单独安装libfltk-images1.3和libfltk库时

sudo apt-get install libfltk1.3

安装包管理器会给出错误信息,提示文件已存在
在这里插入图片描述
为了解决该问题只能使用强制安装命令:

dpkg -i  --force-overwrite xx.deb

四、总结

以上就是使用dpkg-deb命令实现多个deb包合并成一个deb包的方法,大家根据自己的需要进行使用,整体过程还是比较简单,多注意control文件中的Depends字段的准确。

参考文章:
https://www.cnblogs.com/Genesis-007/p/5219960.html
https://blog.csdn.net/GW569453350game/article/details/49301427

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

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

相关文章

最短路算法(Dijkstra Bellman-Ford SPFA Floyd)

目录 最短路算法总览Dijkstra算法1.朴素Dijkstra算法算法步骤算法应用Dijkstra求最短路Ⅰ 2.堆优化Dijkstra算法算法步骤算法应用Dijkstra求最短路Ⅱ Bellman-Ford算法算法步骤算法应用有边数限制的最短路 SPFA算法算法步骤算法应用1. spfa求最短路2. spfa判断负环 Floyd算法算…

STM32MP157驱动开发——GPIO 和 和 Pinctrl 子系统的概念

文章目录 Pinctrl 子系统重要概念概述重要概念pin controller:client device: 代码中怎么引用 pinctrl GPIO 子系统重要概念概述在设备树中指定引脚在驱动代码中调用 GPIO 子系统头文件常用函数实例: BSP工程师针对芯片的寄存器写Pinctrl子系…

代码随想录day25

216. 组合总和 III 这道题和昨天的相似的地方,但是也有不同的特点。这道题规定了数字范围是从1-9,并且一个组合中,不能出现同样的元素,比如说[1,2,2]这个就不可以,如果取过2之后,就只…

在Visual C++中进行类设计的通行做法(下)——类的运行

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下在Visual C中进行类设计的通行做法,这一篇帖子来看看在搭建好基本架构并调整好重复定义问题后,怎么个运行法。程序员新手会去看很多书,但是书中往往…

安装centos7 ping不通宿主机

1、安装Virbox虚拟机 2、安装centos 7镜像 主要有两点配置需要注意: A:磁盘分区 B:网络设置,今天的实验主要是卡在网络配置这里 网络设置,使用的是仅主机模式且是手动分配静态IP,要点说明 看宿主机所用的网络是哪个,查看window的…

OC时钟/BC时钟介绍、Windows/Linux环境查看时钟频率

一、OC时钟和BC时钟介绍 OC时钟和BC时钟是指计算机体系结构中的两种不同的时钟信号。 OC时钟(Off-chip clock)是指在计算机系统的主板或外部设备上产生的时钟信号,它通过总线传输到CPU中,控制着CPU与主板或外部设备之间的数据传…

Vue简介、生命周期、模版语法、条件渲染、列表渲染、style和class绑定

目录 简介 Vue基本渲染-插值和数据模型 MVVM 生命周期 模版语法 条件渲染 v-if ​编辑 v-show 列表渲染 key style绑定 class绑定 简介 Vue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只…

Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

加载Ubuntu开发环境-iTOPRK3568开发板

配套视频: 安装虚拟机 ubuntu 系统:B站搜索北京迅为RK3568开发板 在 2.3 小节解压了迅为提供的 ubuntu 镜像,然后打开虚拟机,如下图所示: 点击上图中的红色框,选择在 2.3 小节中解压的 Ubuntu18 文件夹下…

oracle单个用户最大连接数限制

项目经理反馈,现场已做了单个用户的最大连接数2000的限制,但数据库还是报无法连接,故障用户的连接数已3800多了。 查看日志报错如下 2023-07-20T13:07:57.79465308:00 Process m000 submission failed with error 20 Process m000 submiss…

Matlab对FS32K144编程--串口通讯

1、配置系统运行周期10ms 2、设置串口通讯通道为通道1,波特率设为9600 3、设置串口发送-100ms发送一次 4、设置接收中断接收数据 5、编译下载,串口发送消息

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…

共享汽车管理系统nodejs+vue

语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 前端nodejsvueelementui, 共享汽车管理系统的系统管理员可以管理用户,可以对用户信息修改删除以及查询操作。具体界面的展…

JQ-3 jQuery事件处理(click和on的区别、事件冒泡、事件对象、事件委托、小案例); jQuery动画(常见动画函数、动画队列、小案例)

目录 1_ jQuery事件处理1.1_认识事件(Event)1.2_click和on的区别1.3_ jQuery的事件冒泡1.4_jQuery的事件对象( Event Object)1.5_ jQuery的事件委托(event delegation)1.6_ jQuery常见的事件1.7_小案例 2_ jQuery 动画2.1_介绍2.2…

【力扣每日一题】2023.7.23 接雨水

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 接雨水是力扣里非常经典的一道单调栈的题目,使用单调栈的做法就是从左到右将高度依次入栈,保持栈内从栈顶…

《零基础入门学习Python》第060讲:论一只爬虫的自我修养8:正则表达式4

有了前面几节课的准备,我们这一次终于可以真刀真枪的干一场大的了,但是呢,在进行实战之前,我们还要讲讲正则表达式的实用方法和扩展语法,然后再来实战,大家多把持一会啊。 我们先来翻一下文档:…

【iOS安全】iOS 14.3越狱教程

iOS 14.3越狱教程 通过MacBook越狱iPhone 8 方案:AltStore unc0ver 实验环境 手机:iPhone 8 OS版本:iOS 14.3 型号号码:A1863 PC型号:MacBook 实验步骤 Mac安装AltServer https://altstore.io/ 解压后启动 …

【ES】---ES的聚合(aggregations)

目录 一、前言1、聚合分类2、聚合的实现方式二、RestAPI--bucket聚合案例11、按照类型分bucket2、按照(String)时间分bucket三、RestAPI-- metric聚合案例11、metric指标统计四、RestAPI-- pipeline聚合案例1一、前言 聚合是对文档数据的统计、分析、计算。 注意:参与聚合的字…

Clion开发STM32之W5500系列(NTP服务封装)

概述 在w5500基础库中进行封装,获取服务端的时间,来校准本地时间。本次使用的方案是通过ntp获取时间定时器更新保证时间准确。 NTP封装 头文件 /*******************************************************************************Copyright (c) [sc…

【动态规划part03】| 343.整数拆分、96.不同的二叉搜索树

目录 🎈LeetCode343.整数拆分 🎈 LeetCode96.不同的二叉搜索树 🎈LeetCode343.整数拆分 链接:343.整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些…