Linux 制作 deb 包
.deb 是 Debian 及其衍生发行版(如 Ubuntu)使用的软件包格式。它包 含了软件的所有文件、元数据信息以及安装脚本,可以方便地在 Debian/Ubuntu 系统上安装、升级和卸载软件。
什么是 deb 包
deb 包(Debian Package)是 Debian 及其衍生发行版的标准软件包格式。deb 包的主要特点包括:
- 标准化:遵循 Debian 策略,确保兼容性
- 依赖管理:自动处理软件依赖关系
- 版本控制:支持版本管理和升级
- 安装脚本:支持安装前后执行自定义脚本
- 广泛支持:所有基于 Debian 的发行版都支持
适用场景:
- Debian/Ubuntu 系统软件分发
- 系统级软件安装
- 需要依赖管理的软件
- 需要集成到包管理系统的软件
必备知识
在开始制作 deb 包之前,你需要了解:
- Linux 基础知识:熟悉命令行操作和文件系统结构
- Debian 文件系统层次标准(FHS):了解系统目录结构
- 包管理基础:了解
dpkg、apt等工具的基本使用 - Shell 脚本:能够编写简单的安装脚本
deb 包结构
deb 包结构包含两部分:
- 控制信息(DEBIAN 目录):包含包的元数据和安装脚本
- 安装内容:按照 Linux 文件系统标准组织的文件(etc、usr 等目录)
DEBIAN 目录通常包含以下文件:
| 文件名 | 描述 |
|---|---|
| control | 主要描述软件包的名称(Package)、版本(Version)以及描述(Description)等,是 deb 包必须具备的描述性文件,以便于软件的安装管理和索引。同时为了能将软件包进行充分的管理。 |
| postinst | 该脚本的主要任务是完成安装包时的配置工作。许多 postinst 脚本负责执行有关命令为新安装或升级的软件重启服务。 |
| postrm | 软件卸载后需要执行的脚本,主要负责修改软件包链接文件、或删除创建的文件。 |
| preinst | 在 Deb 包文件解包之前,将会运行该脚本。许多 preinst 脚本的任务是停止作用于待升级软件包的服务,直到软件包安装或升级完成。 |
| prerm | 软件卸载前需要执行的脚本,主要负责停止与软件包相关的 daemon 服务。 |
| copyright | 版权许可。 |
| changelog | 修订记录。 |
| conffiles | 配置文件列表,这些文件在卸载时会被保留。 |
准备工作
安装必要工具:
# Ubuntu/Debian
sudo apt update
sudo apt install -y dpkg-dev debhelper build-essential fakeroot
# 可选:用于从源码创建 deb 包
sudo apt install -y dh-make
制作 deb 包的方法
deb 包的制作有三种主要情况:
- 源码包制作 deb 包:从源代码编译并打包
- deb-src 包制作 deb 包:从 Debian 源码包重新构建
- 修改现有的 deb 包制作新的 deb 包:解包、修改、重新打包
方法一:使用 checkinstall(简单快速)
checkinstall 是一个简单的工具,可以在编译安装过程中自动生成 deb 包。