Mosquitto 源码自打包指南:在 Debian 上使用 debuild 构建自己的 .deb 包

发布时间:2026/9/23 23:55:32
Mosquitto 源码自打包指南:在 Debian 上使用 debuild 构建自己的 .deb 包 后端消息队列消息路由【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mos/mosquitto点击查看免费下载本文是一份面向 Debian/Ubuntu 用户的 Mosquitto 自打包实战指南源自 making-mosquitto-packages-for-debian-yourself.md。当发行版官方源中的 Mosquitto 版本落后、或你需要按自己的编译选项定制 broker 时可以遵循下载源码 → 套用官方打包元数据 → debuild → dpkg -i这条命令行路线在十几分钟内得到可直接安装的 .deb 包。读完本文你将掌握 Debian 包命名规范、构建依赖清单、debuild 完整流程以及 Mosquitto 仓库中与打包相关的编译开关与构建体系。为什么需要自己动手打包 Debian 包这篇发布于 2012-11-27 的博文解释了问题的起因Debian 在 Mosquitto 1.0 发布之前就已进入 feature freeze特性冻结这意味着官方源中的 Mosquitto 版本会在很长时间内停留在旧版本等不到上游的新功能与修复。与其干等不如把打包工作自己做——而且这个流程fairly straightforward相当直接全程只需命令行操作。需要说明的是这条自打包路线是当时1.1.2 时代的解决方案但从源码自行构建 .deb 的通用方法论至今依然成立且与当前仓库的 Makefile/CMake 构建体系完全兼容。当前仓库的版本号为 2.1.2见 config.mk 中的VERSION2.1.2操作步骤中的版本号替换为实际版本即可。准备工作下载源码并整理打包元数据1. 下载并解压 Mosquitto 源码包从官方下载页获取对应版本的源码 tarball各版本源码包地址见 www/pages/download.md然后解压# 从官方下载页获取 mosquitto-1.1.2.tar.gz将版本号替换为你需要的版本 wget 官方下载页中 mosquitto-1.1.2.tar.gz 的地址 tar -zxf mosquitto-1.1.2.tar.gz解压后会得到一个包含完整源码的mosquitto-1.1.2/目录。这个 tarball 也可以通过仓库自身的make dist目标生成仓库根 Makefile 中定义了dist : reallyclean规则它会将DISTFILES列出的全部目录与文件libcommon、lib、apps、client、plugins、src、man、test 等汇总并打包成dist/mosquitto-${VERSION}.tar.gz。2. 重命名 tarball 以符合 Debian 命名规范Debian 对上游源码包有严格的命名约定必须命名为源码包名_版本号.orig.tar.gz下划线分隔、带.orig标记这样dpkg-buildpackage才能识别出原始上游源码与Debian 打包补丁的边界mv mosquitto-1.1.2.tar.gz mosquitto_1.1.2.orig.tar.gz注意文件名中包名与版本号之间是下划线mosquitto_1.1.2.orig.tar.gz这与常规源码包名中的连字符不同拼写错误会导致后续构建步骤无法识别源码。3. 获取 Debian 官方的打包文件.debian.tar.xz打包所需的 Debian 元数据debian/目录无需自己从零编写。当时可以从 Debian 软件包站点的 mosquitto 源码包页面下载.debian.tar.xz其中包含debian/control包描述、依赖关系、维护者信息debian/rulesdebuild实际执行的构建规则脚本debian/changelog打包版本历史debian/patches/由 quilt 管理的对上游源码的补丁序列各种 init 脚本、systemd 单元、配置文件等。把这个.debian.tar.xz解包到源码目录内即可得到完整的debian/目录结构。qult 补丁机制由下面要安装的quilt工具驱动Debian 的构建流程会自动将其应用到上游源码上。安装构建依赖正式构建前需要安装一套完整的编译与打包工具链。原文档给出的命令如下sudo apt-get install build-essential python quilt libwrap0-dev libssl-dev devscripts python-setuptools各软件包的用途软件包作用build-essentialgcc/g、make 等基础编译工具链python/python-setuptoolsMosquitto 构建与测试脚本依赖如run_tests.py、buildtest.pyquilt管理debian/patches/下的源码补丁系列libwrap0-devTCP wrapperstcpd/libwrap头文件对应 config.mk 中的WITH_WRAP选项libssl-devOpenSSL 开发头文件对应WITH_TLS选项用于编译 TLS/SSL 支持devscripts提供debuild等一整套 Debian 开发工具这些依赖与 README-compiling.md 中列出的平台依赖清单相互印证在 Debian 系系统上OpenSSL 对应libssl-dev而测试还需要 cunit、googletest/gmock、python 等。若你的打包目标是裁剪某些特性可以结合 config.mk 中的WITH_*开关如WITH_TLSno、WITH_WEBSOCKETSno调整依赖但一般建议保持官方 Debian 包的默认配置。使用 debuild 构建软件包依赖就绪后进入源码目录执行debuildcd mosquitto-1.1.2/ debuilddebuild是devscripts包提供的封装工具它按顺序完成以下工作以fakeroot权限调用dpkg-buildpackage自动应用debian/patches/中的 quilt 补丁按debian/rules执行构建对应仓库中各子目录的 Makefile运行lintian对生成的包做静态检查输出.deb、.dsc、.changes、.buildinfo等产物。构建完成后父目录中会出现一组 .deb 文件例如mosquitto_1.1.2-1_amd64.debbroker 主程序libmosquitto1_1.1.2-1_amd64.deb客户端 C 库mosquitto-clients_1.1.2-1_amd64.debmosquitto_pub/mosquitto_sub等命令行客户端以及libmosquitto-dev、mosquitto-doc等配套包。这对应着仓库的模块化构建结构根 Makefile 中的DIRSlibcommon lib apps client plugins src依次构建公共库、客户端库、命令行工具、插件与 broker 主体最终由debian/rules把它们组织成多个独立的二进制包。安装生成的 .deb 包在父目录中找到需要的 .deb 文件用dpkg -i逐个安装sudo dpkg -i deb 文件例如sudo dpkg -i mosquitto_1.1.2-1_amd64.deb sudo dpkg -i mosquitto-clients_1.1.2-1_amd64.deb如果dpkg提示缺少运行时依赖可随后执行sudo apt-get -f install让 apt 自动补齐。安装后broker 的可执行文件位于/usr/sbin/mosquitto见 src/Makefile 中install目标对prefix/sbin的安装规则默认配置示例为/etc/mosquitto/mosquitto.conf仓库根目录的 mosquitto.conf 即其来源安装时以.example后缀存放。仓库源码视角打包背后发生了什么编译开关与发行版策略config.mk 是纯 Makefile 构建体系Linux 上make编译的用户配置中心几乎所有特性都可以在打包时按需裁剪WITH_TLSbroker 与客户端的 SSL/TLS 支持对应依赖libssl-devWITH_WRAPtcpd/libwrap 支持对应依赖libwrap0-devWITH_BRIDGEbroker 的桥接bridge能力用于连接其他 brokerWITH_PERSISTENCE持久化数据库支持将 retained 消息与持久订阅写入文件WITH_SYSTEMDsystemd 集成开启后需要libsystemd-devWITH_WEBSOCKETSWebSocket 支持yes/lws/noWITH_DOCSman 手册构建需要 xsltproc 与 docbook-xsl。Debian 官方包通常会按发行版策略启用大部分特性而自打包的最大价值正是在于可以自由开关这些选项例如为嵌入式环境关闭WITH_BRIDGE、WITH_SYS_TREE以减小体积。从make dist到.orig.tar.gz仓库根 Makefile 的dist目标展示了上游发布 tarball 的生成方式make reallyclean后把DISTFILES中列出的目录拷贝进dist/mosquitto-${VERSION}/再打包成mosquitto-${VERSION}.tar.gz。这就是自打包流程中mosquitto_1.1.2.orig.tar.gz的来源——你既可以从官方下载页获取也可以自己执行make dist现场生成。构建体系的演进README-compiling.md 明确说明到 2.1 版本为止官方推荐在 Windows/Mac 上用 CMake、其他平台用纯 Makefile而 2.1 之后官方推荐全面转向 CMake纯 Makefile 将在 3.0 版本移除。因此如果你要打包的是 2.1.x 及更新版本也可以基于CMakeLists.txt使用cmakecpack或 debhelper 的 cmake 支持来构建本文介绍的 debuild 流程套用 Debian 官方元数据对两种构建后端都适用因为debian/rules本身可以调用任意构建工具。后续演进从自打包到官方仓库自打包只是权宜之计Mosquitto 的 Debian 分发此后经历了几个阶段仓库中的历史博文记录了完整脉络手工二进制包2010-09作者最初手工编译发布 i386/amd64 的 Debian 包见 debian-packages.md进入 Debian/Ubuntu 官方源2011-07mosquitto 0.10 被打包进 Debian testing 与 Ubuntu见 debian-and-ubuntu-packaging.md官方实验性 apt 仓库2013-01自打包turned out to be a bit problematic有些麻烦作者随后搭建了官方实验性 Debian 仓库提供 i386、amd64、armel 与树莓派 armhf 架构的包用户只需导入签名密钥、添加 sources.list 条目后apt-get install mosquitto即可完整步骤见 mosquitto-debian-repository.md正式进入 Debian当前如今 Mosquitto 已进入 Debian 官方源见 www/pages/download.md新版本发布后经正常 Debian 流程即可进入发行版。即便如此自打包仍有不可替代的场景需要比发行版源更新的版本、需要定制编译选项、或在无网络/内网环境中离线部署。此时本文的 debuild 流程依然是最直接的手段。常见问题与注意事项orig 包命名务必使用下划线mosquitto_1.1.2.orig.tar.gz格式否则dpkg-buildpackage无法识别上游源码构建会报 native package 相关的错误。quilt 补丁未应用如果构建日志中出现 patch 应用失败通常是因为.debian.tar.xz版本与源码版本不匹配应获取与目标源码版本对应的打包元数据。缺少构建依赖debuild早期失败多数源于依赖缺失按报错补齐即可若裁剪了WITH_*特性对应的-dev包可以不装。版本选择原文档以 1.1.2 为例当前仓库为 2.1.2自打包时从官方下载页或make dist获取与你需要的功能版本一致的源码打包元数据也应尽量匹配。架构产物生成的 .deb 文件名中的架构字段如amd64由构建机架构决定跨架构部署需在对应架构的机器或 chroot/容器中构建。赞分享后端消息队列消息路由【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mos/mosquitto点击查看免费下载相关推荐Apache Thrift Debian 打包实战基于 dpkg-buildpackage 从源码构建 .deb 软件包Apache Thrift Debian 打包实战基于 dpkg buildpackage 从源码构建 .deb 软件包 Apache Thrift 仓库自带后端微服务API设计Eclipse Mosquitto 的 Debian 打包与安装指南从二进制包、自打包到官方仓库Eclipse Mosquitto 的 Debian 打包与安装指南从二进制包、自打包到官方仓库 导读 本文以 Mosquitto 项目最早发布的 Debia后端消息队列消息路由AppFlowy Debian 打包实战用 dpkg-deb 将 Flutter 构建产物封装为 .deb 安装包AppFlowy Debian 打包实战用 dpkg deb 将 Flutter 构建产物封装为 .deb 安装包 本文基于 AppFlowy 仓库中 fro前端后端企业应用内容协同知识管理AI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考