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

这篇具有很好参考价值的文章主要介绍了多个deb包合并成一个deb包的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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

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


一 deb基础知识

“.deb”是Debian软件包格式的文件扩展名, deb包是Unixar的标准归档,将包文件信息以及包内容,经过gzip和tar打包而成;一个deb包通常由两部分组成,控制脚本程序数据
多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作

1.1 目录结构

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

多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作
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包,如下所示:

多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,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,如下图所示:
多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作
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字段
多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作
libfltk-images1.3库文件中的Depends字段
多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作
tigervnc-viewer程序中的Depends字段。
多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作
合并后的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可以正常执行,如下图所示:
多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作
我们在kylin系统上验证该安装包时,系统可以正确的给出告警信息如下:
多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作

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

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

sudo apt-get install libfltk1.3

安装包管理器会给出错误信息,提示文件已存在
多个deb包合并成一个deb包的方法,linux,deb包合并,dpkg,tigervnc,deb制作
为了解决该问题只能使用强制安装命令:

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文章来源地址https://www.toymoban.com/news/detail-600105.html

到了这里,关于多个deb包合并成一个deb包的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何将两个pdf合并成一个?pdf合并技巧分享

    在日常工作过程当中,我们经常需要处理一些文件,而文件的处理往往是琐碎的,想要提高工作效率,需要选择一些合适的方法,并掌握一定的技巧,那么,如何将两个pdf合并成一个?pdf合并技巧有哪些呢?接下来就针对这些问题做一下介绍,希望可以帮助您更为高效的完成文

    2024年02月10日
    浏览(43)
  • 将多个单独的 Excel 文件合并成一个,并添加标题行

    要将多个单独的 Excel 文件合并成一个,并添加标题行,可以使用 Python 的 pandas 库。以下是一个示例代码,假设要合并的 Excel 文件都在同一个文件夹中: import os import pandas as pd # 指定文件夹路径 folder_path = \\\'path/to/folder\\\' # 获取文件夹中所有 Excel 文件名 excel_files = [f for f in os.l

    2024年02月13日
    浏览(38)
  • 多个word转化成PDF文件后再合并成一个PDF文件

    多个word 文档 转化成 PDF 文件, 最后合并成一个PDF文件

    2024年02月10日
    浏览(36)
  • 数据处理(11):3Dmax中如何操作可以将多个对象实体合并成一个对象实体

    在使用3Dmax中,经常会有将多个对象拼接成一个完整的对象得需求,只是看每个人的解决方法是否一致了。但是如果是合并多个对象,推荐使用下面两种方法 通过使用附加功能合并对象 在3Dmax中,虽然分组工具可以将对象组合成一个整体,但是这种分组绑定是可以随时解开的

    2024年02月04日
    浏览(45)
  • seatunnel hive source 未设置分隔符导致多个字段合并成一个的问题定位解决

    seatunnel hive source 未设置分隔符导致多个字段没有切分全保存在一个字段中了,翻看源码发现分隔符是是通过delimiter设置的,只要设置这个delimiter=\\\",\\\"就可以了。 设置这个属性 delimiter=“,” 他的默认值是u0001,如果没有设置delimiter属性则会根据文件类型判断,如果是csv则使用”,”

    2024年02月16日
    浏览(51)
  • C#利用Costura.Fody制作绿色单文件程序(含多个Dll)合并成一个Exe)

    开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了。这样交给用户很不方便,希望的效果是直接交付一个exe文件。 这时候就需要借助一款名为Fody.Costura的插件。Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中。安装

    2024年02月09日
    浏览(57)
  • 怎么将pdf合并成一个?将pdf合并成一个的方法

    在日常工作和学习中,我们经常会遇到需要将多个PDF文件合并成一个的情况。这不仅能够提高文件管理的便捷性,还能节省存储空间并使阅读更加流畅。那么,怎么将pdf合并成一个呢?在本文中,我将为您介绍几种简单实用的方法,现 在日常工作和学习中,我们经常会遇到需

    2024年02月10日
    浏览(39)
  • 将多个EXCEL 合并一个EXCEL多个sheet

    合并老版本xls using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using NPOI.HSSF.UserModel; using System.IO; using NPOI.XSSF.UserModel; namespace Merge_Excel {     public partial class Form1

    2024年02月10日
    浏览(43)
  • Matlab怎样合并两个矩阵(怎样合并多个矩阵)为一个矩阵

       Hi,科研大神,厌倦了某宝的Chat账号总是封号失联吗?需要稳定的单独账号吗?联系下方企鹅号走起来,都是科研人为大家做点有意义的事情,为您的科研助力~ 如果您需要稳定的-Chat哥婆特账号or图书文献资料- 请加企鹅号-都是科研人为大家科研助力~  

    2024年02月11日
    浏览(37)
  • 多个excel文件合并为一个excel

    Python openpyxl库实现将同一目录下的excel文件合并为一个excel功能(包含格式,不含宏),运行程序后,输入要生成的excel文件名称即可

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包