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
相关推荐
2601_967987373 天前
Debian如何配置Python调试工具
python·debian·pdb·调试工具·ipdb
jiecy7 天前
在 ARM 的 UOS 系统里布署 WebDav
arm开发·docker·debian
小雉系统10 天前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
谙弆悕博士10 天前
debian快速换源
linux·运维·windows·debian·下载·换源·网络问题
木子欢儿14 天前
Debian 13 + vsftpd 搭建FTP服务
linux·服务器·前端·网络·debian
hqzing19 天前
在鸿蒙 PC 上使用 apt 安装 Debian 软件包(非虚拟机、非容器)
华为·debian·harmonyos
皓月盈江23 天前
Linux Debian下STM32CubeProgrammer串口连接失败解决方案
linux·stm32·debian·串口下载·stm32f103c8t6·usb转ttl·stm32cubepro
qetfw1 个月前
Debian iptables 防火墙:默认拒绝、SNAT 与 DNAT 验证
linux·服务器·debian·php
qetfw1 个月前
Debian SSH 安全配置:端口、来源限制与免密登录
linux·安全·debian·ssh