Appearance
Debian 平台软件包构建完全指南

从维护者脚本到实战打包 —— 一篇读懂 Debian 软件包构建的完整知识体系。
为什么会有这个专题?
在维护和交付自研服务时,将应用打包为标准的 .deb 包是最规范、最易维护的交付方式。然而,关于 Debian 打包的中文资料要么过于碎片化,要么停留在"能跑就行"的层面,缺乏对维护者脚本生命周期的系统讲解。
本专题正是为了解决这个问题而生。
专题内容概览
本专题共 六篇正文 + 一篇导读,循序渐进地构建起 Debian 打包的完整知识体系:
| 章节 | 标题 | 核心内容 |
|---|---|---|
| 导读 | 本文 | 专题概述与阅读指引 |
| 序章 | Debian 打包入门 | control、rules、changelog 三驾马车 |
| 第一章 | postinst 脚本完整解读 | 安装后脚本的运行机制与最佳实践 |
| 第二章 | prerm 脚本的正确使用姿势 | 卸载前脚本的场景化详解 |
| 第三章 | postrm 脚本的清理逻辑 | remove vs purge 的边界与陷阱 |
| 第四章 | Golang 项目打包实战 | 多阶段 Docker 构建 + systemd 集成 |
| 第五章 | VUE 项目打包实战 | 静态资源部署 + Nginx 自动配置 |
谁适合阅读这个专题?
✅ 适合你,如果你:
- 需要将自己的应用(Go/Python/Node/VUE 等)打包为
.deb包交付 - 希望理解
postinst、prerm、postrm的生命周期和触发场景 - 想了解生产级的打包方案,包含 systemd 集成、配置保留、数据清理等
- 正在搭建 CI/CD 流水线,需要标准化构建和交付流程
⚠️ 不适合你,如果你:
- 只想用
fpm或checkinstall打个"能用的包",不关心生命周期规范 - 对 Debian 打包没有任何兴趣(那你怎么看到这里的?😄)
阅读路线图
路线一:系统学习(推荐新手)
按顺序从序章读到第五章,建立完整的知识体系。
路线二:按需跳读(适合有经验的开发者)
| 你的需求 | 推荐阅读 |
|---|---|
| 想了解维护者脚本的生命周期 | 第一章 → 第二章 → 第三章 |
| 想把 Go 项目打包为 .deb | 序章 → 第四章 |
| 想把 VUE 项目打包为 .deb | 序章 → 第五章 |
遇到 deconfigure 场景 | 第二章(重点看 deconfigure 部分) |
遇到 purge 清理问题 | 第三章(重点看 purge 部分) |
专题的核心理念
1. 理解生命周期,而非背诵脚本
postinst、prerm、postrm 不是孤立存在的,它们共同构成了软件包的完整生命周期。理解每个脚本在什么时机触发,比记住脚本模板更重要。
2. 配置保留是最高优先级
永远不要在升级时覆盖用户修改过的配置文件。 这是 Debian 打包的"第一原则"。本专题中的所有脚本都遵循这一原则。
3. 构建环境可复现
使用 Docker 多阶段构建,确保任何人在任何机器上都能构建出完全一致的 .deb 包。
实战项目概览
本专题包含两个完整的实战案例:
| 项目类型 | 技术栈 | 打包产物 | 交付形式 |
|---|---|---|---|
| 后端服务 | Golang + systemd | 二进制文件 | .deb 包 |
| 前端应用 | VUE + Nginx | 静态资源 + Nginx 配置 | .deb 包 |
两个案例都包含:
- ✅ 完整的 Docker 构建文件(
builder.Dockerfile) - ✅ 自动化构建脚本(
Makefile) - ✅ 生产级维护者脚本(
postinst、prerm、postrm) - ✅ 部署与验证指南
使用建议
1. 作为模板参考
本专题中的脚本和配置都经过了生产环境验证,可以作为你项目的打包模板直接复制使用。只需将 appname/apiserver/cms-manager 替换为你的项目名称即可。
2. 作为学习材料
如果你对 Debian 打包还很陌生,建议从序章开始,按顺序阅读。每章末尾都附有实践练习和排坑指南,可以边读边练。
3. 作为问题排查手册
如果你在实际打包中遇到了问题(比如 postrm 失败导致包无法重新安装),可以直接跳转到对应章节查看问题分析和解决方案。
相关资源
官方文档
社区工具
| 工具 | 用途 | 适用场景 |
|---|---|---|
dh-make | 生成 Debian 打包模板 | 新手入门 |
debhelper | 自动化构建工具集 | 官方推荐方案 |
fpm | 简单快速的打包工具 | 快速构建,不规范 |
checkinstall | 从源码安装生成 .deb | 个人使用 |
本专题采用 debhelper + dh + Docker 方案,兼顾规范性和可自动化。
快速开始
如果你想立即开始将 Golang 项目打包为 .deb,直接跳转到:
👉 第四章:Golang 项目打包为 Debian 包完整指南
如果你想立即开始将 VUE 项目打包为 .deb,直接跳转到:
👉 第五章:VUE 项目打包为 Debian 包与 Nginx 自动配置
如果你想从头学起,请从序章开始:
👉 序章:Debian 打包入门——debian/control、rules 与 changelog 详解
保持更新
本专题会根据 Debian 打包工具链的更新和读者的反馈持续修订。如果你有任何建议、疑问或发现了 Bug,可以联系我 🙌
祝你打包愉快! 🚀
