【树莓派不吃灰】基础篇⑨ 搭建emqx MQTT Broker_树莓派3b emqx-程序员宅基地

技术标签: 树莓派不吃灰  linux  服务器  物联网  树莓派  

在这里插入图片描述

  • ️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者
  • ️ 本篇创建记录 2022-10-29 ️
  • ️ 本篇更新记录 2022-10-29 ️
  • 欢迎关注 点赞 收藏 ️留言
  • 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
  • Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志

1. 前言

之前我们在个人电脑部署过emqx,那么树莓派理论上只要资源允许也可以部署一套。

当然,由于系统差异,我们需要找到适用于树莓派系统的镜像文件(deb文件)。

而一般在学习物联网中,emqx是提及最多的开源免费mqtt服务器,部署简单。

在这里插入图片描述

2. 搭建emqx MQTT Broker

这里介绍一条有用的命令,用于查看树莓派系统信息:

cat /etc/os-release

在这里插入图片描述
言归正传,搭建emqx分为几个步骤:

  • 下载 deb文件
  • 安装软件
  • 启动软件,也可以设置开机自启动

2.1 下载 deb文件

我们去到github下载对应的软件版本,目前博主找到多个适用于树莓派3B。尽量装新不装旧。

这里以 V4.4.3版本为例子:

获取到文件下载地址:

https://github.com/emqx/emqx/releases/download/v4.4.3/emqx-edge-4.4.3-otp24.1.5-3-raspbian10-arm.deb

在树莓派终端输入命令下载该文件:

sudo wget https://github.com/emqx/emqx/releases/download/v4.4.3/emqx-edge-4.4.3-otp24.1.5-3-raspbian10-arm.deb

在这里插入图片描述
在这里插入图片描述

2.2 安装软件

我们需要使用dpkg命令来安装包。输入命令:

sudo dpkg -i deb文件名

在这里插入图片描述
额外知识点:

1、使用dpkg命令进行安装:sudo dpkg -i deb文件名
2、根据经验,通常情况下会报依赖关系的错误,我们可以使用以下的命令修复安装:sudo apt-get install -f
3、如果要卸载安装的应用我们通过“sudo dpkg -l”查看已经安装的软件,并找到自己的安装的软件名。
4、最后使用"sudo dpkg -r 软件名"进行卸载

在这里插入图片描述
注意这个版本是自动启动了,有一些版本需要进行第三步。

在这里插入图片描述

2.3 启动软件

2.3.1 Service命令原理

在讲启动软件之前,我们先来了解一个叫做service的命令。

  • service命令用于对系统服务进行管理,比如启动(start)、停止(stop)、重启(restart)、查看状态(status)等。
  • 相关的命令还包括chkconfigntsysv等,chkconfig用于查看、设置服务的运行级别,ntsysv用于直观方便的设置各个服务是否自动启动。
  • service命令本身是一个shell脚本,它在/etc/init.d/目录查找指定的服务脚本,然后调用该服务脚本来完成任务。

service xxx start来启动某个进程,那么它背后究竟执行了什么?
其实service的绝对路径为/sbin/service ,打开这个文件cat /sbin/service,我们会发现其实它就是一个很普通的shell脚本。

在这里插入图片描述
在这里插入图片描述
其实这个脚本service主要作了如下两点:

  • 1.初始化执行环境变量PATHTERM
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    TERM,为显示外设的值,一般为xterm
  • 2.调用/etc/init.d/文件夹下的相应脚本,脚本的参数为service命令第二个及之后的参数。
这个命令在service执行到后面最终调用的是:
env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${
    OPTIONS}

以service emqx start为例,相当于执行了如下命令
/etc/init.d/emqx start

2.3.2 Service命令常用方式
格式:service <service>
打印指定服务<service>的命令行使用帮助。

格式:service <service> start
启动指定的系统服务<service>

格式:service <service> stop
停止指定的系统服务<service>

格式:service <service> restart
重新启动指定的系统服务<service>,即先停止(stop),然后再启动(start)。

格式:chkconfig --list
查看系统服务列表,以及每个服务的运行级别。

格式:chkconfig <service> on
设置指定服务<service>开机时自动启动。

格式:chkconfig <service> off
设置指定服务<service>开机时不自动启动。

格式:ntsysv
以全屏幕文本界面设置服务开机时是否自动启动。

树莓派官方推荐系统没有chkconfig命令,可以通过命令安装:

sudo apt-get install chkconfig

在这里插入图片描述

2.3.3 启动emqx

输入命令:

sudo service emqx start

在这里插入图片描述

浏览器输入 http://<树莓派IP地址>:18083/,进入web的控制后台
在这里插入图片描述

2.4 设置开机自启动

在设置自启动之前,先来了解另外一个命令 systemctl

这里有一些参考资料:

2.4.1 systemd和systemctl

Linux 服务管理有两种方式servicesystemctl。而systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,systemd对应的进程管理命令就是systemctl。值得一提的是,systemctl命令兼容了service。

Systemctl是systemd用于管理系统和管理服务的工具。许多现代Linux发行版,如Ubuntu、Debian、Fedora、Linux Mint、OpenSuSE、Redhat都采用systemd作为默认的init系统

  • Linux系统启动的时候,第一个创建的进程(即pid是1的进程)叫init. 它会负责启动后续其他的进程,包括各类系统服务。从进程树上可以看出,init是所有其他进程的祖先
  • 早年的Linux里的init进程是System V init. chkconfig命令是用来查询或更新run level相关的信息的。比如一些旧版的书上会说init 3启动单用户命令行界面。
  • Ubuntu的开发者发明了upstart, 用来取代System V init. 在使用了upstart的系统中,service start/stop是常用的启动和停止系统服务的命令。
  • 近年来越来越多的发行版开始采用systemd作为初始进程。它用systemctl来管理服务。有些使用systemd的系统为了兼容默认upstart的脚本,会创建一些别名或者脚本来让service命令也可以执行systemctl的操作。
  • service和chkconfig都是比较老的服务管理工具
2.4.2 systemd的配置文件目录
  • /lib/systemd/system/:每个服务最主要的启动脚本的配置放在这,有点类似以前的/etc/init.d
    在这里插入图片描述

  • /run/systemd/system/:系统执行过程中所产生的服务脚本所在目录,这些脚本的优先级要比/lib/systemd/system/

  • /etc/systemd/system/:管理员根据主机系统的需求所创建的执行脚本所在目录,执行优先级比/run/systemd/system/
    在这里插入图片描述

从上面的功能及优先级次序,我们可以知道:

  • /etc/systemd/system/目录下的相关配置,决定系统了会不会执行某些服务,所以该目录下面一般放着一大堆链接文件(等会我们找一下emqx的执行文件)。
  • /lib/systemd/system/下,则放着实际执行的systemd启动脚本配置文件。因此如果你想要修改某个服务启动的设置,应该去/lib/systemd/system/下面修改。
  • /etc/systemd/system/仅是链接到正确的执行脚本配置文件而已。所以想要看执行脚本设置,大多数就得要到/lib/systemd/system/去查阅。
2.4.3 systemd常用命令

使用systemctl,可以启动、停止、重新加载、重启服务、列出服务单元、检查服务状态、启用/禁用服务、管理运行级别和电源管理。

  • 使用systemctl命令 start/stop/restart/reload/disable/enable 服务。

  • 使用systemctl启动服务时,命令格式:systemctl start [service-name]

  • 要停止服务,请使用systemctl stop [service-name]

  • 要重新启动服务,请使用systemctl restart [service-name]

  • 要重新加载服务的配置而不重新启动它,请使用systemctl reload [service-name]

  • 为了查看服务是否正在运行,我们可以使用systemctl status [service-name]来查看。

  • 要开机自启用服务,请使用systemctl enable [service-name]

  • 同样,disable时取消开机时启用服务,请使用systemctl disable [service-name]

  • 可以使用is-enabled选项检查开机是否启动该服务,请使用systemctl is-enabled [service-name]

  • 要列出所有激活的单元,使用list-units选项。systemctl list-units

  • 要列出所有活动的服务,请运行:systemctl list-units -t service

  • 使用systemctl重启、关机系统。
    systemctl poweroff(关机)
    systemctl reboot(重启)
    systemctl hibernate(系统休眠)

2.4.4 配置起来

输入命令:

  • sudo systemctl enable emqx

在这里插入图片描述
这里会创建一个symlink。

Created symlink /etc/systemd/system/multi-user.target.wants/emqx.service → /lib/systemd/system/emqx.service.

这是最关键的一行代码。看到 /etc/systemd/system/multi-user.target.wants/emqx.service 链接,链接到 /lib/systemd/system/emqx.service文件。这时候关联 2.4.2 小节再看。

在这里插入图片描述
这下子就慢慢通达了。

我们试试禁止自启动看看。

sudo systemctl disable emqx

在这里插入图片描述
再一次设置自启动。
输入命令:

  • sudo systemctl enable emqx

重新启动系统看看。
输入命令:

  • sudo reboot

在这里插入图片描述

在这里插入图片描述
成功运行!!!!念头通达!

另外,我们这里安装的是 4.4版本,可以参考官方文档。

https://www.emqx.io/docs/zh/v4.4/

3. 总结

这次花费半小时去搭建 emqx MQTT Broker,配置起来即可运行起来。上面还有很多命令还有去实验,可以尝试在树莓派上去输入使用。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44614230/article/details/127589423

智能推荐

C#连接OPC C#上位机链接PLC程序源码 1.该程序是通讯方式是CSharp通过OPC方式连接PLC_c#opc通信-程序员宅基地

文章浏览阅读565次。本文主要介绍如何使用C#通过OPC方式连接PLC,并提供了相应的程序和学习资料,以便读者学习和使用。OPC服务器是一种软件,可以将PLC的数据转换为标准的OPC格式,允许其他软件通过标准接口读取或控制PLC的数据。此外,本文还提供了一些学习资料,包括OPC和PLC的基础知识,C#编程语言的教程和实例代码。这些资料可以帮助读者更好地理解和应用本文介绍的程序。1.该程序是通讯方式是CSharp通过OPC方式连接PLC,用这种方式连PLC不用考虑什么种类PLC,只要OPC服务器里有的PLC都可以连。_c#opc通信

Hyper-V内的虚拟机复制粘贴_win10 hyper-v ubuntu18.04 文件拷贝-程序员宅基地

文章浏览阅读1.6w次,点赞3次,收藏10次。实践环境物理机:Windows10教育版,操作系统版本 17763.914虚拟机:Ubuntu18.04.3桌面版在Hyper-V中的刚安装好Ubuntu虚拟机之后,会发现鼠标滑动很不顺畅,也不能向虚拟机中拖拽文件或者复制内容。在VMware中,可以通过安装VMware tools来使物理机和虚拟机之间达到更好的交互。在Hyper-V中,也有这样的工具。这款工具可以完成更好的鼠标交互,我的..._win10 hyper-v ubuntu18.04 文件拷贝

java静态变量初始化多线程,持续更新中_类初始化一个静态属性 为线程池-程序员宅基地

文章浏览阅读156次。前言互联网时代,瞬息万变。一个小小的走错,就有可能落后于别人。我们没办法去预测任何行业、任何职业未来十年会怎么样,因为未来谁都不能确定。只能说只要有互联网存在,程序员依然是个高薪热门行业。只要跟随着时代的脚步,学习新的知识。程序员是不可能会消失的,或者说不可能会没钱赚的。我们经常可以听到很多人说,程序员是一个吃青春饭的行当。因为大多数人认为这是一个需要高强度脑力劳动的工种,而30岁、40岁,甚至50岁的程序员身体机能逐渐弱化,家庭琐事缠身,已经不能再进行这样高强度的工作了。那么,这样的说法是对的么?_类初始化一个静态属性 为线程池

idea 配置maven,其实不用单独下载Maven的。以及设置新项目配置,省略每次创建新项目都要配置一次Maven_安装idea后是不是不需要安装maven了?-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏43次。说来也是惭愧,一直以来,在装环境的时候都会从官网下载Maven。然后再在idea里配置Maven。以为从官网下载的Maven是必须的步骤,直到今天才得知,idea有捆绑的 Maven 我们只需要搞一个配置文件就行了无需再官网下载Maven包以后再在新电脑装环境的时候,只需要下载idea ,网上找一个Maven的配置文件 放到 默认的 包下面就可以了!也省得每次创建项目都要重新配一次Maven了。如果不想每次新建项目都要重新配置Maven,一种方法就是使用默认的配置,另一种方法就是配置 .._安装idea后是不是不需要安装maven了?

奶爸奶妈必看给宝宝摄影大全-程序员宅基地

文章浏览阅读45次。家是我们一生中最重要的地方,小时候,我们在这里哭、在这里笑、在这里学习走路,在这里有我们最真实的时光,用相机把它记下吧。  很多家庭在拍摄孩子时有一个看法,认为儿童摄影团购必须是在风景秀丽的户外,即便是室内那也是像大酒店一样...

构建Docker镜像指南,含实战案例_rocker/r-base镜像-程序员宅基地

文章浏览阅读429次。Dockerfile介绍Dockerfile是构建镜像的指令文件,由一组指令组成,文件中每条指令对应linux中一条命令,在执行构建Docker镜像时,将读取Dockerfile中的指令,根据指令来操作生成指定Docker镜像。Dockerfile结构:主要由基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。每行支持一条指令,每条指令可以携带多个参数。注释可以使用#开头。指令说明FROM 镜像 : 指定新的镜像所基于的镜像MAINTAINER 名字 : 说明新镜像的维护(制作)人,留下_rocker/r-base镜像

随便推点

毕设基于微信小程序的小区管理系统的设计ssm毕业设计_ssm基于微信小程序的公寓生活管理系统-程序员宅基地

文章浏览阅读223次。该系统将提供便捷的信息发布、物业报修、社区互动等功能,为小区居民提供更加便利、高效的服务。引言: 随着城市化进程的加速,小区管理成为一个日益重要的任务。因此,设计一个基于微信小程序的小区管理系统成为了一项具有挑战性和重要性的毕设课题。本文将介绍该小区管理系统的设计思路和功能,以期为小区提供更便捷、高效的管理手段。四、总结与展望: 通过本次毕设项目,我们实现了一个基于微信小程序的小区管理系统,为小区居民提供了更加便捷、高效的服务。通过该系统的设计与实现,能够提高小区管理水平,提供更好的居住环境和服务。_ssm基于微信小程序的公寓生活管理系统

如何正确的使用Ubuntu以及安装常用的渗透工具集.-程序员宅基地

文章浏览阅读635次。文章来源i春秋入坑Ubuntu半年多了记得一开始学的时候基本一星期重装三四次=-= 尴尬了 觉得自己差不多可以的时候 就吧Windows10干掉了 c盘装Ubuntu 专心学习. 这里主要来说一下使用Ubuntu的正确姿势Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于DebianGNU/Linux,支..._ubuntu安装攻击工具包

JNI参数传递引用_jni引用byte[]-程序员宅基地

文章浏览阅读335次。需求:C++中将BYTE型数组传递给Java中,考虑到内存释放问题,未采用通过返回值进行数据传递。public class demoClass{public native boolean getData(byte[] tempData);}JNIEXPORT jboolean JNICALL Java_com_core_getData(JNIEnv *env, jobject thisObj, jbyteArray tempData){ //resultsize为s..._jni引用byte[]

三维重建工具——pclpy教程之点云分割_pclpy.pcl.pointcloud.pointxyzi转为numpy-程序员宅基地

文章浏览阅读2.1k次,点赞5次,收藏30次。本教程代码开源:GitHub 欢迎star文章目录一、平面模型分割1. 代码2. 说明3. 运行二、圆柱模型分割1. 代码2. 说明3. 运行三、欧几里得聚类提取1. 代码2. 说明3. 运行四、区域生长分割1. 代码2. 说明3. 运行五、基于最小切割的分割1. 代码2. 说明3. 运行六、使用 ProgressiveMorphologicalFilter 分割地面1. 代码2. 说明3. 运行一、平面模型分割在本教程中,我们将学习如何对一组点进行简单的平面分割,即找到支持平面模型的点云中的所有._pclpy.pcl.pointcloud.pointxyzi转为numpy

以NFS启动方式构建arm-linux仿真运行环境-程序员宅基地

文章浏览阅读141次。一 其实在 skyeye 上移植 arm-linux 并非难事,网上也有不少资料, 只是大都遗漏细节, 以致细微之处卡壳,所以本文力求详实清析, 希望能对大家有点用处。本文旨在将 arm-linux 在 skyeye 上搭建起来,并在 arm-linux 上能成功 mount NFS 为目标, 最终我们能在 arm-linux 里运行我们自己的应用程序. 二 安装 Sky..._nfs启动 arm

攻防世界 Pwn 进阶 第二页_pwn snprintf-程序员宅基地

文章浏览阅读598次,点赞2次,收藏5次。00为了形成一个体系,想将前面学过的一些东西都拉来放在一起总结总结,方便学习,方便记忆。攻防世界 Pwn 新手攻防世界 Pwn 进阶 第一页01 4-ReeHY-main-100超详细的wp1超详细的wp203 format2栈迁移的两种作用之一:栈溢出太小,进行栈迁移从而能够写入更多shellcode,进行更多操作。栈迁移一篇搞定有个陌生的函数。C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 _pwn snprintf

推荐文章

热门文章

相关标签