debian打包干货

Debian 官方规范:https://www.debian.org/doc/debian-policy/

Debian 官方教程(内含中文):https://www.debian.org/doc/manuals/packaging-tutorial/

1. 概述

👉 Debian 打包的相关文件及作用:

bash 复制代码
debian/control → 类似 Python 的 pyproject.toml。描述这个包是什么的元信息(如包名,版本,依赖,架构,描述,通过 man 5 deb-postinst 查用法,)

debian/rules → 构建阶段起作用:规定了如何构建软件包。控制如何build, 安装路径等

debian/postinst(可选)
debian/postrm  (可选) → postxxx 等维护脚本 安装时起作用 → 控制安装行为
.........      
debian/changelog → 版本记录,dpkg 用它决定版本号

debian/compat    → ⚠️(旧方式,半必须,比如就写个13)指定 debhelper 版本,新项目通常用:debhelper-compat 写在 control 里

usr/... → 真正安装的文件

!TIP

debian/rules本质是个特殊的Makefile (用户执行dpkg-buildpackage -us -uc -A时起作用)作用在构建阶段(build time):一般做的工作包括:编译 Python / C++、生成 .whl、拷贝到 `/usr/ 等。

  • 它使用了 Debian 的 debhelper 工具链语法混合了 Makefile 和 Shell 命令。
  • man 手册查细节:man 5 deb-src-rules

当用户执行如dpkg-buildpackage -us -uc -A命令时,执行的步骤链:

  1. 读取 debian/changelog(确定版本)
  2. 检查 debian/control(依赖、包信息)
  3. 执行 debian/rules clean
  4. 执行 debian/rules build
  5. 执行 debian/rules install
  6. 执行 debian/rules binary
  7. 调用 dpkg-deb 生成 .deb
  8. 生成 .changes / .buildinfo

!TIP

Debian 一共有 4个维护脚本(本质是shell脚本) (在用户执行dpkg -i xxx.deb时起作用):

文件 执行时机 man手册查细节
preinst 安装前 man 5 deb-pretinst
postinst 安装后(启动服务,安装依赖,创建配置,修改权限) man 5 deb-postinst
prerm 删除前 man 5 deb-prerm
postrm 删除后(删除残留,清理配置,停止服务) man 5 deb-postrm

2. 打包工具了解

我了解到有多个工具,但我只用过dpkg-deb与dpkg,他们什么关系?

复制代码
【高级构建命令】 dpkg-buildpackage ← 顶层调度器,读取 debian/ 目录,可通过 debian/rules 来调用 debhelper
【自动化构建工具集】 debhelper   ← 工具集,核心是命令是dh(debhelper), 本质是一组"自动化构建步骤工具",如dh_install,dh_python3,dh_clean,dh_strip
【用户简单解包】 dpkg-deb    ← 负责打包 / 解包    (手动搬砖盖房)
【用户,只是用】 dpkg        ← 负责安装 / 卸载 / 管理

下面是我常用的命令:

shell 复制代码
dpkg-deb -R my.deb tmp   # 解包,将my.deb解包到 tmp 目录
dpkg-deb -b tmp xxx.deb   # 打包,将tmp 目录打包到 my.deb 文件

比如:
        mkdir pkg
        写 DEBIAN/control
        写 postinst
        cp 文件
        dpkg-deb -b pkg
shell 复制代码
dpkg -i xxx.deb
dpkg -P xxx   删除包,将安装的deb文件连根拔起,彻底删除
dpkg -r xxx   删除包,但保留配置文件,如/etc目录下的内容
dpkg -L xxx   包安装好后,查看安装位置
dpkg -l

3. 你自己做 deb 的最小步骤


1️⃣ 创建目录结构

Shell 复制代码
mkdir -p mypkg/DEBIAN
mkdir -p mypkg/usr/local/bin

2️⃣ 写 control

Shell 复制代码
vim mypkg/DEBIAN/control

3️⃣ 写脚本(可选)

shell 复制代码
vim mypkg/DEBIAN/postinst

chmod +x mypkg/DEBIAN/postinst

4️⃣ 放程序文件

Shell 复制代码
cp myapp mypkg/usr/local/bin/

5️⃣ 打包

Shell 复制代码
dpkg-deb -b mypkg mypkg.deb
相关推荐
皓月盈江3 天前
Linux Debian下STM32CubeProgrammer串口连接失败解决方案
linux·stm32·debian·串口下载·stm32f103c8t6·usb转ttl·stm32cubepro
qetfw10 天前
Debian iptables 防火墙:默认拒绝、SNAT 与 DNAT 验证
linux·服务器·debian·php
qetfw11 天前
Debian SSH 安全配置:端口、来源限制与免密登录
linux·安全·debian·ssh
quweiie15 天前
debian13安装meson和libvips
debian·meson·libvips
qetfw17 天前
Debian iSCSI Target 与 open-iscsi:LVM 后端、ACL 与客户端验证
linux·服务器·debian·php
qetfw19 天前
Debian Chrony 时间同步、RAID5 与 LUKS 磁盘加密配置
linux·debian
ZMacros20 天前
Live-build方法构建debian和ubuntu
linux·ubuntu·debian
皓月盈江20 天前
Linux Debian系统安装Google Chrome谷歌浏览器教程
linux·chrome·debian·谷歌浏览器
qetfw21 天前
Debian 综合服务实训:Apache2、Samba、LDAP、vsftpd 与 OpenVPN
linux·服务器·debian