基础结构

deb 包本质上是一个 ar 归档文件,包含编译好的二进制文件、配置文件和元数据。
有两个关键组成

  • DEBIAN 目录:包含版本信息和控制文件
  • 文件系统布局:和系统目录对应结构的文件,部署后会放置到系统上对应的目录里(比如 /usr/bin,/etc 等)

常见的目录结构

myapp_1.0.0_amd64/
├── DEBIAN/          # **必须全大写!**
│   ├── control      # 元数据文件(核心)
│   └── postinst     # 安装后脚本(可选但推荐)
├── usr/
│   └── bin/
│       └── myapp    # 你的 Go 二进制
└── etc/
    └── myapp/
        └── config.yaml # 配置文件(示例)

DEBIAN 目录

control 文件

这个文件存储了最关键的包信息,包名、版本、依赖都是存在这个文件里的。

Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Depends: libc6 (>= 2.28), systemd (>= 240)
Maintainer: Your Name <you@example.com>
Description: My awesome Go service
 A production-ready service for doing important things.
 Homepage: https://github.com/yourname/myapp

维护脚本

DEBIAN 目录下还可以放置一系列维护脚本,分别在安装前、后,卸载前、后执行。比如安装后要进行配置。或者卸载完后需要删除数据。
这些脚本必须是可执行的,以 #/bin/sh 开头。
分别支持这些脚本

  • preinst: 在解压包文件之前执行。
  • postinst: 在解压包文件之后执行。最常用,常用于配置初始化、启动服务。
  • prerm: 在移除包文件之前执行。
  • postrm: 在移除包文件之后执行。常用于清理文件、停止服务。

dh_make

debian 官方提供的 dh_make 工具来方便用户构建 deb 包。它提供了大部分的文件模板,只需要简单配置即可快速构建一个合适的 deb 包。