deb文件是包含数据的存档。用于轻松分发和安装Linux Debian及其衍生发行版适合的程序。当您的应用程序需要处理其他依赖项、将自身与桌面集成、运行安装前和安装后脚本等时,Deb文件非常方便。(与deb格式功能类似的另一种包格式是Fedora系列发行版常用的rpm文件。)

1 deb包命名约定

<软件名称>_<主版本号>-<修订版本号>_<硬件架构>.deb

alt text

  • 软件包名称libglfw3

  • 主版本号3.3.6

  • 修订版本号1

  • 硬件架构amd64

2 deb包介绍

alt text

deb包本身有三部分组成:

  1. control.tar.zst:安装信息及控制脚本包,包含 deb 的安装说明,标识,脚本等。

    • control:用了记录软件标识,版本号,平台,依赖信息等数据,这是最主要的文件配置,必不可少;
    • preinst:在解包data.tar.gz 前运行的脚本;
    • postinst:在解包数据后运行的脚本;
    • prerm:卸载时,在删除文件之前运行的脚本;
    • postrm:在删除文件之后运行的脚本;
  2. data.tar.zst:数据包,包含实际安装的程序数据。

  3. debian-binary:文件是 Debian 软件包的控制文件之一,其中包含一个版本号,一般都是2.0。

3 制作deb包

  1. 创建一个工作目录
     mkdir hellodeb_1.0-1_amd64
    
  2. 创建内部结构,将程序放在目标系统上应安装的位置
     mkdir -p hellodeb_1.0-1_amd64/usr/bin
    
  3. 复制 hellodeb 程序到 bin 目录
     cp hellodeb hellodeb_1.0-1_amd64/usr/bin
    
  4. 创建control文件存放目录
     mkdir hellodeb_1.0-1_amd64/DEBIAN
    
  5. 创建空文件control
     touch hellodeb_1.0-1_amd64/DEBIAN/control
    

    填写control内容:

     # Package (软件包): 这一部分指定了软件包的名称,例如 apache2。
        
     # Version (版本): 这一部分指定了软件包的版本号,例如 2.4.52-1ubuntu4.8。
        
     # Architecture (架构): 这一部分指定了软件包的目标架构,例如 amd64 表示 64 位的 x86 架构。
    
     # Maintainer (维护者): 这一部分指定了软件包的维护者和联系方式。
    
     # Installed-Size (已安装大小): 这一部分指定了安装软件包后占用的磁盘空间大小,以 KB 为单位。
    
     # Pre-Depends (预依赖): 这一部分指定了在安装软件包之前需要满足的先决条件。
    
     # Depends (依赖): 这一部分指定了软件包运行所需的依赖项。
        
     # Recommends (建议): 这一部分指定了软件包建议安装的附加组件,但不是必需的。
    
     # Suggests (建议): 这一部分指定了软件包可能会有用但并不是必需的软件包。
    
     # Conflicts (冲突): 这一部分指定了与当前软件包冲突的其他软件包。
    
     # Replaces (替换): 这一部分指定了当前软件包替代的其他软件包。
    
     # Provides (提供): 这一部分指定了当前软件包提供的功能或服务,通常用于兼容性目的。
    
     # Section (分类): 这一部分指定了软件包在软件仓库中的分类,例如 httpd 表示 Web 服务器。
    
     # Priority (优先级): 这一部分指定了软件包的安装优先级,例如 optional 表示可选。
    
     # Homepage (主页): 这一部分指定了软件包的主页网址。
        
     # Description (描述): 这一部分提供了关于软件包的详细描述,包括其功能、用途等信息。
    
     # Original-Maintainer (原始维护者): 这一部分指定了软件包最初由哪个组织或个人维护。
    

    alt text

  6. 编写安装和删除前后自动运行的脚本

    alt text

  7. 构建deb包

     dpkg-deb --build --root-owner-group hellodeb_1.0-1_amd64
    
  8. 系统安装deb包后,信息存储在哪里?

    • /var/lib/dpkg/info目录存储脚本文件和安装了那些文件信息。
    • /var/lib/dpkg/status文件存储control里面的信息。

    alt text

    alt text

参考

参考1:Linux制作一个deb包如此简单:Ubuntu的deb安装包文件的内部组成分析与使用原理

参考2:Linux制作deb包的方法