首页/新闻资讯/正文详情

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

发布时间:2026/9/23 23:55:33 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

从神冈到超新星:中微子探测器如何改写天体物理学
从神冈到超新星:中微子探测器如何改写天体物理学

我先把话说在前面:你此刻坐着的房间里,每秒钟都有大约十万亿个中微子穿过你的身体。这听起来像科幻小说里的设定,但它是现代物理学的日常。真正让这个“日常”变得震撼的,是上世纪八十年代的一件大事——人类第一次捕捉到来自遥远… · 2026/9/23 23:55:33

LanceDB Node.js 全文检索分词:TokenizeTableOptions 类型别名详解
LanceDB Node.js 全文检索分词:TokenizeTableOptions 类型别名详解

向量数据库数据库人工智能后端 【免费下载链接】lancedb Developer-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less. 项目地址: https://gitcode.com/gh_mirrors/la/lancedb 点击查看 免费下载 TokenizeTableOptions 是 La… · 2026/9/23 23:55:27

程序员戴耳机:不只是听歌,更是工位上的“安全气囊”
程序员戴耳机:不只是听歌,更是工位上的“安全气囊”

1. 从"摸鱼神器"到"生存刚需":耳机在程序员工位上的真正身份先说个我自己的经历。有次新来的实习生问我,是不是戴着耳机就听不见领导叫了,我说你观察挺准,但只说对了一半。后来他又问,是不是你们敲… · 2026/9/23 23:55:08

星月神产品质量怎么样,安防服务专业吗
星月神产品质量怎么样,安防服务专业吗

从新世纪之初到当下,中国房地产行业与装配式建筑产业历经了从高速扩张到高质量发展的深刻变迁,无数建材家居品牌在浪潮中起起落落,有人急功近利追求短期规模,有人沉下心打磨产品与服务。浙江星月安防科技有限公司从2001年成立至今… · 2026/9/24 0:40:47

PSO优化RBF神经网络:轻量级协同调参实战指南
PSO优化RBF神经网络:轻量级协同调参实战指南

简介:本资源是一个基于粒子群优化(PSO)算法实现RBF神经网络参数调优的轻量级Python实践项目,面向机器学习初学者与算法优化实践者,聚焦于非线性拟合与分类任务中RBF网络结构参数(如中心、宽度、权值&#x… · 2026/9/24 0:40:41

基于MediaPipe和OpenCV的手势识别与手指计数实战
基于MediaPipe和OpenCV的手势识别与手指计数实战

简介:基于Python语言,结合OpenCV与MediaPipe的手势识别及手指计数项目,面向需要完成计算机毕设或入门计算机视觉的开发者,提供可直接运行的完整代码与测试数据。资源包共5个文件,包含2个Python脚本、2个Markdown说明文… · 2026/9/24 0:40:34

深入解析 SpaceX-API v4 payloads 端点:载荷数据获取、字段模型与查询实践
深入解析 SpaceX-API v4 payloads 端点:载荷数据获取、字段模型与查询实践

后端API设计 【免费下载链接】SpaceX-API :rocket: Open Source REST API for SpaceX launch, rocket, core, capsule, starlink, launchpad, and landing pad data. 项目地址: https://gitcode.com/gh_mirrors/spa/SpaceX-API 点击查看 免费下载 导读 /v4/payloa… · 2026/9/24 0:40:16

攻克 mal 实现难点:Hints 指南中的时间戳、函数引用、I/O 与 Reader 设计
攻克 mal 实现难点:Hints 指南中的时间戳、函数引用、I/O 与 Reader 设计

示例工程 【免费下载链接】mal mal - Make a Lisp 项目地址: https://gitcode.com/gh_mirrors/ma/mal 点击查看 免费下载 mal(Make a Lisp)是一个用数十种语言逐步实现 Lisp 解释器的教学项目。在编写 step0 到 stepA 的过程中,实… · 2026/9/24 0:40:16

大数据入门学习顺序:Hadoop、Hive、Spark、Flink等九大组件最小链路搭建指南
大数据入门学习顺序:Hadoop、Hive、Spark、Flink等九大组件最小链路搭建指南

简介:这是一份面向大数据初学者与转行开发者的系统入门资料包,围绕Hadoop、Hive、Spark、Storm、Flink、HBase、Kafka、Zookeeper、Flume等主流组件展开,覆盖学习路线、技术栈思维导图、常用软件安装指南,以及环境搭建、命令实操、… · 2026/9/24 0:40:04

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码