【树莓派不吃灰】基础篇⑨ 搭建emqx MQTT Broker

在这里插入图片描述

  • ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件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,配置起来即可运行起来。上面还有很多命令还有去实验,可以尝试在树莓派上去输入使用。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机菜鸟爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值