dpkg制作deb包详解

article/2025/9/15 8:15:50

1 deb包文件结构

       deb 软件包里面的结构,它具有DEBIAN和软件具体安装目录(如etc, usr, opt, tmp等)。在DEBIAN目录中至少必须包括control文件,还有可能postinst(postinstallation)postrm(postremove)preinst(preinstallation)prerm(preremove)copyright (版权)、changlog (修订记录)和conffiles等。

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:建议安装的其他软件包和库文件。

control文件完整示例: dh_make 命令为我们创建的为例,请参考

1 Source: gentoo

 2 Section: unknown

 3 Priority: optional

 4 Maintainer: Josip Rodin <joy-mg@debian.org>

 5 Build-Depends: debhelper (>=10)

 6 Standards-Version: 4.0.0

 7 Homepage: <insert the upstream URL, if relevant>

 8

 9 Package: gentoo

10 Architecture: any

11 Depends: ${shlibs:Depends}, ${misc:Depends}

12 Description: <insert up to 60 chars description>

13  <insert long description, indented with spaces>

说明:第 1–7 行是源代码包的控制信息。第 9–13 行是二进制包的控制信息。

 

postinst文件:包含了软件在进行正常目录文件拷贝到系统后,所需要执行的配置工作。
prerm文件:软件卸载前需要执行的脚本。
postrm文件:软件卸载后需要执行的脚本。

一个DEBIAN目录的完整架构如下,请参考

|----DEBIAN

       |-------changelog             

     |-------compat

     |-------copyright

       |-------control

       |-------postinst

       |-------postrm

     |-------rules

     |-------***.install

     |-------source

各文件内容说明如下:

Changelog提供版本修改信息,帮助下载软件包的人了解软件包中是否有他们需要知道的信息

Compat定义兼容级别,Ubuntu Kylin下保持默认值即可,默认值为9

Copyright:包含源码的版权和许可,dh_make可以给出一个 copyright 文件的模板

Control: 决定着deb包的包名、编译依赖和运行依赖,这个文件是必须的

Postinst:软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限。

Postrm 软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限

PreinstDebian软件包(".deb")解压前执行的脚本,为正在被升级的包停止相关服务。

Rulesrules文件本质上是一个Makefile文件,这个Makefile文件定义了创建deb格式软件包的规则。打包工具按照rules文件指定的规则,完成编译,将软件安装到临时安装目录,清理编译目录等操作,并依据安装到临时目录的文件来生成deb格式的软件包。

***.install一些文件可以通过该install脚本,在软件安装时安装到系统的指定路径下。

Source写明了此源码包的格式,我们使用写“3.0 (quilt)”即可,意思是其他所有软件

更加详实的说明,可参考https://www.debian.org/doc/manuals/maint-guide/index.zh-cn.html

1.1、deb包制作过程

    以在实际的源代码中为例

步骤一:确定deb相应的依赖已安装

    apt-get install debhelper devscripts automake dh-make

步骤二:创建DEBIAN相应的文件,

创建的脚本如图1-1,以sysrepo源码为例,git clone https://github.com/sysrepo/sysrepo.git

图1-1 local-deb脚本

    Debian.rule的内容如图1-2,写dh-make的Makefile的规则,可以根据自己的软件的需要做相应的变动,欲了解更加详实的使用说明,请参考https://www.debian.org/doc/manuals/maint-guide/dreq.zh-cn.html 第 4 章 debian 目录中的必须内容的第4.4. rules

图1-2 rule脚本

Debian.control的内容如图1-3:

图1-3 control

特别说明:1、Source需要与源码名字相同,这个Source取的是CMakelist.txt中定义的包

2、Package是指生成的包名,必须与***.install相同,这里的install文件名必须命令为server.install

    Debian.postinst的内容格式要求如下图1-4,主要用于主要完成软件包(".deb")安装完成后所需的配置工作。通常,postinst 脚本要求用户输入, /或警告用户如果接受默认值,应该记得按要求返回重新配置这个软件。一个软件包安装或升级完成后,postinst 脚本驱动命令,启动或重起相应的服务。

   图1-4 postinst

Debian. postrm的内容格式要求如下图1-5,用于修改相关文件或连接,和/或卸载软件包所创建的文件。

图1-5 postrm

此外,常用的还有Debian. Preinst的内容格式要求如1-6,主要用于Debian软件包(".deb")解压前执行的脚本,为正在被升级的包停止相关服务,直到升级或安装完成(成功后执行 'postinst' 脚本)

图1-6 preinst

以及Debian.prerm,其内空格式要求如1-7,主要在停止一个软件包的相关进程,要卸载软件包的相关文件前执行

图1-7 prerm

特别说明:1、这几个脚本都必须有可执行权限,请查看图3-1的第11行代码,更改权限,否则,deb包安装时,不可执行

        2、deb包安装后,可以通过ll /var/lib/dpkg/info/***.*查看,相应的脚本是否存在,如图1-8所示

图1-8 sysrepo实例

Debian. Compat:文件定义了debhelper的兼容级别,不要使用任何低于9的兼容等级,在新建的软件包中也需要避免

Debian.source/format只包含一行,写明了此源代码包的格式通过查看dpkg-source可获得完整列表,默认写成3.0 (quilt)即可。

查看图1-1,第11行,第12行内容即可

Debian. Copyright:可以预先写好的一个授权信息,也可以从源码处copy,没有过多的要求。

Debian.***.install:指定要安装的文件与目录,将已经编译到debian/tmp目录下的可执行程序相应的文件安装,内容格式如图1-9所示:

图1-9 install

编译生成对就的deb时,可以可能dpkg -c ***.dep命令查看包中的内容以及安装的目录路径,如图1-10所示

    图1-10 dpkg查看示例

Debian. Changelog:源码的修改记录,文件第一行的格式一定一定要注意,第一行要带上相应的版本号,最后一行的格式,版本号为空,最后一行格式不对,不能继续编译否则。示例参考如图1-11所示

图1-11 changelog内容示例

 

步骤三:集成DEBIAN文件到编译环境中,CMakeLists.txt做如下如下几处修改

   1、确保debuild软件包已安装

      2、设置package编译的配置文件

    3、设置build-deb编译开关

步骤四:开始编译

1、mkdir -p build

2、cd build

3、cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE:String="debug" ..

4、make build-deb

步骤五:查看编译结果

编译结束后,在/build/debs/目录下有相应的deb包生成,可以通过dpkg -c ***.dep查看包的内容

 

1.2、dpkg常用命令

    1、安装deb包

    $dpkg -i mydeb.deb

    2、卸载deb包:

            $dpkg -r   mysoftware 

    3、查看deb包是否安装

          $dpkg -s   mysoftware

    4、查看deb包文件内容:

           $dpkg   -c   mydeb.deb

   5、查看当前目录某个deb包的信息

          $dpkg --info mydeb.deb

6、解压deb包中所要安装的文件

    $dpkg -X mydeb.deb mydeb #第一个参数为所要解压的deb包,这里为 mydeb.deb

                                                  #第二个参数为将deb包解压到指定的目录,这里为 mydeb

7、解压deb包中DEBIAN目录下的文件(至少包含control文件)

    $dpkg -e mydeb.deb mydeb/DEBIAN #第一个参数为所要解压的deb包,这里为 mydeb.deb

                                                             #第二个参数为将deb包解压到指定的目录,这里为 #mydeb/DEBIAN

8、列出已安装的软件包列表

      $dpkg -l

9 、显示已安装软件包的版本

      $dpkg -l mysoftware 

10、查找软件包是否已安装

     $dpkg -l | grep mysoftware 

PS:列出的只是dpkg的常用命令,欲更加详尽了解,请man dpkg


http://chatgpt.dhexx.cn/article/uOFMlaXT.shtml

相关文章

dpkg命令的用法

dpkg命令的用法 dpkg 是Debian package的简写&#xff0c;为”Debian“ 操作系统 专门开发的套件管理系统&#xff0c;用于软件的安装&#xff0c;更新和移除。 所有源自"Debian"的Linux的发行版都使用 dpkg, 例如"Ubuntu" 阅读目录 安装软件列出与该…

dpkg说明

dpkg与centos中的rpm相似&#xff0c;被用于安装&#xff0c;卸载及查询deb包信息。下面简单介绍基础命令。 已有安装包&#xff1a;test.deb。 安装命令: dpkg -i test.deb 安装test.deb软件包 dpkg -c test.deb #查看test.deb软件包中包含的文件结构 安装后查询命令&#xff…

大数据生态和Spark简介

一、大数据时代 1.第三次信息化浪潮&#xff1a;根据IBM前首席执行官郭士纳的观点&#xff0c;IT领域每隔十五年就会迎来一次重大变革。 2.数据产生方式的变革促成大数据时代的来临&#xff1a; ①存储设备容量不断增加 ②CPU处理能力大幅提升 ③网络带宽不断增加 等等&#…

Spark大数据计算引擎介绍

本文内容参考《Spark与Hadoop大数据分析》[美]文卡特安卡姆 著&#xff1b;《大数据架构详解 从数据获取到深度学习》 朱洁 罗华霖 著。 大数据生态的两个主要部分是Hadoop软件框架和Spark内存级计算引擎。Hadoop包含四个项目&#xff1a;Hadoop common&#xff0c;HDFS&#…

大数据之spark_spark简介

什么是Spark Spark是一种快速、通用、可扩展的大数据分析引擎&#xff0c;2009年诞生于加州大学伯克利分校AMPLab&#xff0c;2010年开源&#xff0c;2013年6月成为Apache孵化项目&#xff0c;2014年2月成为Apache的顶级项目&#xff0c;2014年5月发布spark1.0&#xff0c;201…

开源项目_springboot的答题系统+spark大数据实时分析

一、项目展示 在这里&#xff0c;主要展示大数据图表分析的几个页面。更多精彩由您自己发掘&#xff01; 图1 饼状图 图2 堆叠图 图3 柱状图 二、项目介绍 本项目分为两个模块&#xff0c;第一个为java语言基于springboot实现的答题模块&#xff0c;另一个为scala语言基于spar…

Spark大数据开发技术简介

Spark大数据开发技术简介 轻量级的内存集群计算平台 文章目录 Spark大数据开发技术简介历史沿革Spark的优点对比Apache Spark堆栈中的不同组件基本原理架构组成部署和体系结构Spark运行模式 页面 历史沿革 Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架最…

【大数据】【Spark】Spark概述

由于Spark程序的编写最好使用Scala语言&#xff0c;可参照博主以下Scala入门文章 链接&#xff1a;https://blog.csdn.net/treesorshining/article/details/124697102 文章目录 1.Spark概念2.Spark与Hadoop的关系1.从时间节点上来看2.从功能上来看 3.Spark与Hadoop的比较4.Spar…

Spark大数据系列教程持续更新

Spark大数据系列教程 想学习大数据的福利来了&#xff0c;由于近期工作繁忙&#xff0c;本人已将自己学习大数据的过程陆续开始更新&#xff1a; Spark大数据系列&#xff1a;一、RDD详解Spark大数据系列 二、Spark入门程序WordCount详解(Scala版本)Spark大数据系列&#xff…

大数据面试题——spark

文章目录 讲一下spark 的运行架构一个spark程序的执行流程讲一下宽依赖和窄依赖spark的stage是如何划分的Spark的 RDD容错机制。checkpoint 检查点机制&#xff1f;RDD、DAG、 Stage、 Task 、 Job Spark的shuffle介绍Spark为什么快&#xff0c;Spark SQL 一定比 Hive 快吗Spar…

引爆Spark大数据引擎的七大工具

原文名称&#xff1a;7 tools to fire up Sparks big data engine Spark正在数据处理领域卷起一场风暴。让我们通过本篇文章&#xff0c;看看为Spark的大数据平台起到推波助澜的几个重要工具。 Spark生态系统众生相 Apache Spark不仅仅让大数据处理起来更快&#xff0c;还让大…

大数据面试题Spark篇(1)

目录 1.spark数据倾斜 2.Spark为什么比mapreduce快&#xff1f; 3.hadoop和spark使用场景&#xff1f; 4.spark宕机怎么迅速恢复&#xff1f; 5. RDD持久化原理&#xff1f; 6.checkpoint检查点机制 7.checkpoint和持久化的区别 8.说一下RDD的血缘 9.宽依赖函数&#…

大数据_Spark常见组件

Spark 是一个分布式数据处理引擎&#xff0c;其各种组件在一个集群上协同工作&#xff0c;下面是各个组件之间的关系图。 Spark驱动器 作为 Spark 应用中负责初始化 SparkSession 的部分&#xff0c;Spark 驱动器扮演着多个角色&#xff1a;它与集群管理器打交道&#xff1b;它…

大数据Spark框架

Spark 是一种基于内存快速、通用、可扩展的大数据分析计算引擎。 Spark 优势&#xff1a; Spark核心单元RDD适合并行计算和重复使用&#xff1b;RDD模型丰富&#xff0c;使用灵活&#xff1b;多个任务之间基于内存相互通信&#xff08;除了shuffle会把数据写入磁盘&#xff0…

Windows下的Spark环境配置(含IDEA创建工程--《Spark大数据技术与应用》第九章-菜品推荐项目)

文章目录 前言一、下载资源二、本地配置步骤1.解压2.引入本地环境3.启动HADOOP文件4.进行Spark测试 三、IDEA引入Spark项目1.idea按照scala插件2.新建scala项目3.配置项目4.新建scala类 前言 本文适用于《Spark大数据技术与应用》第九章-菜品推荐项目环境配置&#xff1a; 跟…

Spark开发:Spark大数据开发编程示例

大数据开发人员&#xff0c;根据企业大数据处理的需求&#xff0c;进行大数据平台系统的搭建&#xff0c;比如说Hadoop&#xff0c;比如说Spark&#xff0c;而不同的大数据处理框架&#xff0c;采取不同的编程语言和编程模型&#xff0c;这就需要技术开发人员要掌握相关的技术。…

《Spark大数据技术与应用》肖芳 张良均著——课后习题

目录 教材知识汇总课后习题第一章 Spark概述Spark的特点Spark生态圈Spark应用场景 第二章 Scala基础匿名函数SetMapmapflatMapgroupBy课后习题 第三章 Spark编程教材52页任务3.2及之后的任务 重点复习sortBy排序collect查询distinct去重zip实训题实训1实训2选择题编程题 第四章…

Spark大数据技术与应用 第一章Spark简介与运行原理

Spark大数据技术与应用 第一章Spark简介与运行原理 1.Spark是2009年由马泰扎哈里亚在美国加州大学伯克利分校的AMPLab实验室开发的子项目&#xff0c;经过开源后捐赠给Aspache软件基金会&#xff0c;成为了Apache Spark。由Scala语言实现的专门为大规模数据处理而设计的快速通用…

大数据之Spark:Spark 基础

目录 1、Spark 发展史2、Spark 为什么会流行3、Spark 特点4、Spark 运行模式 1、Spark 发展史 2009 年诞生于美国加州大学伯克利分校 AMP 实验室&#xff1b; 2014 年 2 月&#xff0c;Spark 成为 Apache 的顶级项目&#xff1b; Spark 成功构建起了一体化、多元化的大数据处…

大数据之spark详解

目录 什么是spark&#xff1a; 功能历史上和hadoop的区别&#xff1a; spark的五大核心模块&#xff1a; ➢ Spark Core 什么是spark&#xff1a; 简单一点Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。属于mapreduce的加强版本&#xff0c;结合了其优点…