
- ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
- ❤️ 本篇创建记录 2022-10-29 ❤️
- ❤️ 本篇更新记录 2022-10-29 ❤️
- 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言 📝
- 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
- 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志🔥
之前我们在个人电脑部署过emqx,那么树莓派理论上只要资源允许也可以部署一套。
当然,由于系统差异,我们需要找到适用于树莓派系统的镜像文件(deb文件)。
而一般在学习物联网中,emqx是提及最多的开源免费mqtt服务器,部署简单。

这里介绍一条有用的命令,用于查看树莓派系统信息:
cat /etc/os-release

言归正传,搭建emqx分为几个步骤:
我们去到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


我们需要使用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 软件名"进行卸载

注意这个版本是自动启动了,有一些版本需要进行第三步。

在讲启动软件之前,我们先来了解一个叫做service的命令。
- service命令用于对系统服务进行管理,比如启动(
start)、停止(stop)、重启(restart)、查看状态(status)等。- 相关的命令还包括
chkconfig、ntsysv等,chkconfig用于查看、设置服务的运行级别,ntsysv用于直观方便的设置各个服务是否自动启动。- service命令本身是一个shell脚本,它在/etc/init.d/目录查找指定的服务脚本,然后调用该服务脚本来完成任务。
service xxx start来启动某个进程,那么它背后究竟执行了什么?
其实service的绝对路径为/sbin/service ,打开这个文件cat /sbin/service,我们会发现其实它就是一个很普通的shell脚本。


其实这个脚本service主要作了如下两点:
PATH和TERM/etc/init.d/文件夹下的相应脚本,脚本的参数为service命令第二个及之后的参数。这个命令在service执行到后面最终调用的是:
env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${OPTIONS}
以service emqx start为例,相当于执行了如下命令
/etc/init.d/emqx start
格式: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

输入命令:
sudo service emqx start

浏览器输入 http://<树莓派IP地址>:18083/,进入web的控制后台

在设置自启动之前,先来了解另外一个命令 systemctl
这里有一些参考资料:
Linux 服务管理有两种方式service和systemctl。而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都是比较老的服务管理工具
/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/去查阅。
使用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(系统休眠)
输入命令:

这里会创建一个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

再一次设置自启动。
输入命令:
重新启动系统看看。
输入命令:


成功运行!!!!念头通达!
另外,我们这里安装的是 4.4版本,可以参考官方文档。
这次花费半小时去搭建 emqx MQTT Broker,配置起来即可运行起来。上面还有很多命令还有去实验,可以尝试在树莓派上去输入使用。