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

Eclipse Mosquitto 自建 Debian .deb 包实战:源码打包、参数定制与安装验证

发布时间:2026/9/25 3:09:32 来源:云帆数科 栏目:资讯中心
Eclipse Mosquitto 自建 Debian .deb 包实战:源码打包、参数定制与安装验证
物联网消息队列后端网络/通信【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mo/mosquitto点击查看免费下载对于需要在新特性TLS、WebSockets、$CONTROL 等尚未进入发行版仓库的环境中部署 Mosquitto 的开发者自行构建 Debian 软件包是最直接的路径。本文以 Mosquitto 官方博客《Making Mosquitto packages for Debian yourself》为基础结合当前仓库版本 2.1.0见 config.mk 中的VERSION定义的构建系统与依赖声明完整讲解从源码 tarball 到可安装.deb包的全流程如何准备符合 Debian 规范的源码归档、复用发行版已有的debian/打包文件、安装构建依赖、用debuild出包以及如何通过源码中的install目标核对安装产物。背景为什么要自己打包原博文写于 2012 年当时的直接原因是Debian 自 Mosquitto 1.0 发布之前就进入了功能冻结feature freeze新版 Mosquitto 迟迟无法进入 Debian 仓库。即使如今发行版仓库的更新节奏已快于当年自打包能力依然有用典型场景包括需要运行最新 tag当前仓库为 2.1.0 系列或打了私 patch 的构建而发行版源只有旧版本需要在构建时定制功能开关例如关闭 TLS、切换 WebSocket 实现为 libwebsockets而发行版包的开关是固定的在无法访问外部仓库的受限环境中用离线 tarball 打包文件生成.deb做批量部署。Mosquitto 的 Linux 构建以 Makefile 为主CMake 主要用于 Windows/Mac这一点在 README-compiling.md 中明确说明Where possible use the Makefiles to compile。Debian 打包流程正是围绕这套 Makefile 体系展开的。第一步准备并规范化源码 tarball原博文给出的核心操作是下载官方源码 tarball解压然后把归档重命名为 Debian 要求的orig.tar.gz格式# 原博文以 1.1.2 为例当前仓库版本为 2.1.0实际操作时以实际版本号为准 wget 官方源码包下载地址/mosquitto-VERSION.tar.gz tar -zxf mosquitto-VERSION.tar.gz # Debian source package 要求归档名为 package_version.orig.tar.gz mv mosquitto-VERSION.tar.gz mosquitto_VERSION.orig.tar.gz这里的mv不是随意命名。Debian 的 3.0 (quilt) 源码格式要求debian/changelog声明的原版归档必须是mosquitto_版本号.orig.tar.gzdebuild会据此校验名字不对会直接报错。值得对照的是仓库自身的出包目标。根目录 Makefile 的dist目标展示了官方 tarball 的构成dist : reallyclean set -e; for d in ${DISTDIRS}; do $(MAKE) -C $${d} dist; done mkdir -p dist/mosquitto-${VERSION} cp -r ${DISTFILES} dist/mosquitto-${VERSION}/ cd dist; tar -zcf mosquitto-${VERSION}.tar.gz mosquitto-${VERSION}/DISTFILES变量列明了打包进 tarball 的内容src/broker 源码、lib/客户端库、apps/、client/、plugins/、common/、include/、man/、config.mk、mosquitto.conf等。理解这一点有两个实际用处自行打 patch 后如需发布自定 tarball可直接跑make dist无需手工凑文件排查包缺少某文件问题时先确认该文件是否在DISTFILES列表内——不在列表里的文件如www/、fuzzing/不会进入官方 tarball。第二步获取现成的 debian/ 打包文件自己从零写一套debian/control、rules、changelog、copyright等工作量不小且容易出错。原博文给出的捷径是直接从 Debian 官方源码包页面搜索 mosquitto 源码包取对应版本下载其.debian.tar.xz打包归档解压到源码目录即得到一个与上游 tarball 配套的debian/目录。使用时的两点注意版本号对齐debian/changelog声明的版本必须与mosquitto_版本.orig.tar.gz的版本一致否则会触发dpkg-buildpackage的源码校验失败若上游 tarball 与 Debian 收录版本之间有差异quilt补丁集debian/patches/可能无法干净应用。此时可用quilt手工调整补丁——这正是原博文构建依赖里安装quilt的原因。第三步安装构建依赖原博文给出的基础依赖命令sudo apt-get install build-essential python quilt libwrap0-dev libssl-dev devscripts python-setuptools逐项说明其在构建中的角色并结合 README-compiling.md 与 config.mk 补充当前版本可能需要的组件包用途build-essentialgcc/g/make 等基础工具链编译src/、lib/全部 C 代码python/python-setuptoolsDebian 打包脚本debian/内的常规依赖quilt应用/调整debian/patches/补丁集libwrap0-dev可选开启WITH_WRAPtcp-wrappers时需要config.mk 中默认注释关闭libssl-dev必须WITH_TLS:yesconfig.mk时 broker 与客户端都链接-lssl -lcrypto见 make/broker.mk、lib/Makefiledevscripts提供debuild本文构建流程的核心命令结合当前仓库的默认构建选项建议追加的依赖xsltproc与docbook-xslWITH_DOCS:yes时构建 man 页面config.mk 说明 man 页面生成依赖这两个工具Makefile 中XSLTPROCxsltproc --nonet。缺失时打包可能跳过文档或失败libsystemd-dev仅当以WITH_SYSTEMDyes构建时需要make/broker.mk 会追加-lsystemd链接项。Debian 包通常自行处理 systemd 通知方式按打包文件实际要求决定libargon2-dev或发行版对应名称WITH_ARGON2:yesconfig.mk时src/会链接-largon2见 src/Makefile 中的${LIB_ARGON2}libcjson-devbroker 默认链接-lcjsonsrc/Makefile、lib/Makefile若发行版包名不同按dpkg -l实际结果核对。可选特性与构建开关的对应关系均位于 config.mk 用户配置区WITH_TLS_PSK、WITH_WEBSOCKETS内置 picohttpparser 或lws、WITH_SOCKS、WITH_SRV需 c-ares、WITH_EPOLL等。这些开关决定了链接库集合也决定了.deb的运行时依赖声明是否完整——自打包后建议用ldd抽查二进制确认无not found。第四步debuild 构建软件包将debian/目录放入mosquitto-VERSION/源码目录后cd mosquitto-VERSION/ debuilddebuild实际执行dpkg-buildpackage的全流程应用 quilt 补丁、按debian/rules编译内部调用 Makefile 体系、按debian/control拆分成多个二进制包、签名并输出到父目录。构建完成后父目录中会看到形如以下的一组产物具体拆分取决于该版本debian/control的定义以下为典型构成mosquitto_ver-arch.deb # broker 本体 mosquitto-client-libs...deb # libmosquitto 客户端库 mosquitto-dev...deb # 头文件与静态库 mosquitto_..._source.changes安装到目标机器sudo dpkg -i deb file # 若依赖未装齐可追加 sudo apt-get install -f构建参数定制config.mk 的注释明确支持命令行覆盖# Can also be overriden at the command line, e.g.: # make WITH_TLSno例如最小化构建可执行make WITH_TLSno WITH_WEBSOCKETSno WITH_DOCSno。注意 config.mk 的警告关闭WITH_TLS后密码只能以明文存储强烈建议只在完全不使用密码认证时才关闭。通过debuild构建时最终生效的开关由debian/rules传递给 Makefile因此定制开关时应对照该版本打包文件确认传递方式并以debuild输出的构建日志中实际的LOCAL_CPPFLAGS/LOCAL_LDADD为准验证。验证安装产物对照源码 install 目标装完包后可以用源码中的install目标作为应装文件清单逐项核对这也是判断打包文件是否完整最可靠的依据根 Makefile 的install目标安装mosquitto.conf、aclfile.example、pwfile.example、pskfile.example到/etc/mosquitto/mosquitto.conf以.conf.example形式放置安装全部公共头文件到${prefix}/include/mosquitto/包括 include/mosquitto_broker.hbroker 插件开发、include/mosquitto_plugin.h、mqtt_protocol.h等src/Makefilebroker 二进制装入${prefix}/sbin/mosquitto即/usr/sbin/mosquittolib/Makefile共享库libmosquitto.so.${SOVERSION}及符号链接装入${libdir}SOVERSION1config.mk客户端与工具mosquitto_pub、mosquitto_sub、mosquitto_rr、mosquitto_passwd、mosquitto_ctrl、db_dump分别由 client/ 与 apps/ 的install目标装入/usr/bin。验证命令示例dpkg -L mosquitto | grep -E sbin|etc|share/man /usr/sbin/mosquitto -h # 确认二进制可运行 mosquitto_pub -h # 确认客户端可用服务化运行与配套文件Debian 包的典型服务化布局可在仓库自带材料中找到参照。service/systemd/mosquitto.service.simple 展示了最小可用的 service 单元[Service] ExecStart/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf ExecReload/bin/kill -HUP $MAINPID Restarton-failure ExecStartPre/bin/mkdir -m 740 -p /var/log/mosquitto ExecStartPre/bin/chown mosquitto:mosquitto /var/log/mosquittoservice/systemd/README 还指出按编译开关选择mosquitto.service.notify启用WITH_SYSTEMD或mosquitto.service.simple使用前需重命名为mosquitto.service且若改过默认构建路径需同步修改单元内的路径。其他发行方式可作为对照参考仓库自带 snap/snapcraft.yamlmake 插件 WITH_WEBSOCKETSlws WITH_ADNSyes的构建参数并列出 build-packages/stage-packages与 docker/ 各版本镜像它们体现了同一套构建开关在不同发行载体中的典型取值但本文主线仍是.deb自打包。常见失败与排查要点dpkg-buildpackage报源码归档名不符检查是否执行了mv mosquitto-ver.tar.gz mosquitto_ver.orig.tar.gz以及debian/changelog版本是否一致补丁应用失败quilt上游 tarball 与打包文件对应的版本不对齐需改用匹配版本的.debian.tar.xz或手工quilt refreshman 页面构建失败补装xsltproc、docbook-xsl或按上文方法临时关闭WITH_DOCS链接错误找不到-largon2、-lcjson、-lssl对照 config.mk 中已启用的开关补齐对应开发包装包后运行时缺库用ldd /usr/sbin/mosquitto检查apt-get install -f修复依赖。小结Mosquitto 的 Debian 自打包流程可归纳为四步规范化orig.tar.gz→ 复用版本匹配的.debian.tar.xz打包文件 → 备齐依赖后debuild→ 父目录取.deb并dpkg -i。流程本身简短但成败关键在版本对齐与构建开关/依赖的一致性。当前仓库的 config.mk 是所有功能开关的唯一权威来源Makefile 的dist/install目标则分别界定了 tarball 内容与安装产物两者配合即可覆盖从打包到验证的完整闭环。赞分享物联网消息队列后端网络/通信【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mo/mosquitto点击查看免费下载相关推荐Mosquitto 源码自打包指南在 Debian 上使用 debuild 构建自己的 .deb 包Mosquitto 源码自打包指南在 Debian 上使用 debuild 构建自己的 .deb 包 本文是一份面向 Debian/Ubuntu 用户的 Mo后端消息队列消息路由Eclipse Mosquitto 的 Debian 打包与安装指南从二进制包、自打包到官方仓库Eclipse Mosquitto 的 Debian 打包与安装指南从二进制包、自打包到官方仓库 导读 本文以 Mosquitto 项目最早发布的 Debia后端消息队列消息路由AppFlowy Debian 打包实战用 dpkg-deb 将 Flutter 构建产物封装为 .deb 安装包AppFlowy Debian 打包实战用 dpkg deb 将 Flutter 构建产物封装为 .deb 安装包 本文基于 AppFlowy 仓库中 fro前端后端企业应用内容协同知识管理AI 应用上一篇Postal vs 云服务商成本节约90%的自建邮件系统实战测评含 deliverability 对比下一篇TWINT数据采样方法大规模数据集中的代表性抽取创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

BAML C NuGet 包冒烟测试全解析:精确版本恢复、RID 门禁与多形态部署验证
BAML C NuGet 包冒烟测试全解析:精确版本恢复、RID 门禁与多形态部署验证

编程语言AI Agent编译器CLI人工智能 【免费下载链接】baml The programming language for agents 项目地址: https://gitcode.com/gh_mirrors/ba/baml 点击查看 免费下载 baml-bridge 是 BAML(The programming language for agents)为 C# 生… · 2026/9/25 3:09:32

拆解《庄园合合》:合成+经营玩法的留存设计与商业化密码
拆解《庄园合合》:合成+经营玩法的留存设计与商业化密码

做休闲游戏的朋友应该都注意到了,在苹果App Store免费榜和畅销榜上,有一款叫《庄园合合》的产品长期占据着一个很显眼的位置。第一眼看过去,它好像没什么特别的:一块草地、几件道具、点点点、合合合,再套一个装修庄园的… · 2026/9/25 3:09:26

Codex桌面端不是浏览器插件:MCP代理与第三方API接入全解析
Codex桌面端不是浏览器插件:MCP代理与第三方API接入全解析

1. Codex 桌面端不是浏览器插件,但很多人误把它当成了“能装进 Chrome 的 AI 助手”Codex 桌面端(Codex Desktop)这个名字本身就藏着一个普遍误解——它压根不是浏览器扩展(Browser Extension),而是一个独立… · 2026/9/25 3:09:26

SpringBoot+Vue前后端分离高校固定资产管理系统设计与实现
SpringBoot+Vue前后端分离高校固定资产管理系统设计与实现

一说到Java Web毕设,很多同学的第一反应是图书管理、新闻发布这类经典题目,做出来千篇一律,答辩时老师问两句业务逻辑就卡住了。我这次做完的是SpringBootVue前后端分离的高校固定资产管理系统,整套包括完整项目源码、SQL脚本和接… · 2026/9/25 3:37:17

内蒙古路网shp数据处理实战:从坐标系到格式转换全解析
内蒙古路网shp数据处理实战:从坐标系到格式转换全解析

简介:内蒙古路网矢量数据(shp格式)是一份面向GIS开发者、交通规划师与科研工作者的空间数据集,以线矢量要素完整描绘自治区内高速、国道、省道、县道等道路网络的几何路径与属性信息,可用于地图制图、交通流量分析、环… · 2026/9/25 3:37:17

内存取证实战:Volatility2/3完整命令与恶意痕迹分析
内存取证实战:Volatility2/3完整命令与恶意痕迹分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:37:17

rsuite Animation.Transition 自定义动画完全指南:从状态机原理到 Zoom / Flip / Rotate / Bounce 实战
rsuite Animation.Transition 自定义动画完全指南:从状态机原理到 Zoom / Flip / Rotate / Bounce 实战

前端UI组件 【免费下载链接】rsuite 🧱 A suite of React components . 项目地址: https://gitcode.com/gh_mirrors/rs/rsuite 点击查看 免费下载 rsuite 内置了 Animation 组件族,其中 Animation.Transition 是自由度最高的底层组件&#… · 2026/9/25 3:37:11

C++ 代码风格完整指南:命名规范、clang-format 与初始化实践(cppbestpractices Style 章精讲)
C++ 代码风格完整指南:命名规范、clang-format 与初始化实践(cppbestpractices Style 章精讲)

文档教程 【免费下载链接】cppbestpractices Collaborative Collection of C Best Practices. This online resource is part of Jason Turners collection of C Best Practices resources. See README.md for more information. 项目地址: https://gitcode.com/gh_… · 2026/9/25 3:37:11

华为昇腾推理引擎开源:边缘AI部署与性能优化实战
华为昇腾推理引擎开源:边缘AI部署与性能优化实战

1. 昇腾推理引擎开源这件事,到底在解决什么问题第一次在昇腾社区看到推理引擎开源的消息时,我正蹲在一个边缘计算项目上折腾模型部署。当时手里的活儿是把一个视觉检测模型塞进一台功耗受限的工控机里,芯片用的是昇腾310P3。那会儿最头疼的不… · 2026/9/25 3:37:11

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

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

企业微信二维码