MQTT研究之mosquitto:【環境搭建】
環境資訊:
1. Linux Centos7.2 環境,CPU 2核,記憶體8G.
2. mosquitto版本:mosquitto-1.5.4
官網:http://mosquitto.org/download/
libwebsockets官網: https://libwebsockets.org/
本環境搭建,主要用到了mosquitto,麼有涉及websocket的內容,所以,這裡不做安裝介紹。
搭建過程:
1. 安裝mosquitto-1.5.4
下載解壓縮mosquitto-1.5.4.tar.gz。然後執行make
[[email protected] mosquitto-1.5.4]# make set -e; for d in lib client src; do make -C ${d}; done make[1]: Entering directory `/opt/mosquitto-1.5.4/lib' cc -Wall -ggdb -O2 -I. -I.. -I../lib -fPIC -DWITH_TLS -DWITH_TLS_PSK -DWITH_THREADING -DWITH_SOCKS -c mosquitto.c -o mosquitto.o In file included from mosquitto.c:27:0: mosquitto_internal.h:28:27: fatal error: openssl/ssl.h: No such file or directory # include <openssl/ssl.h> ^ compilation terminated. make[1]: *** [mosquitto.o] Error 1 make[1]: Leaving directory `/opt/mosquitto-1.5.4/lib' make: *** [mosquitto] Error 2
上述錯誤是因為沒有安裝openssl-devel。安裝上openssl-devel即可解決: yum install openssl-devel
make -C cpp make[2]: Entering directory `/opt/mosquitto-1.5.4/lib/cpp' g++ -Wall -ggdb -O2 -I. -I.. -I../lib -fPIC -c mosquittopp.cpp -o mosquittopp.o make[2]: g++: Command not found make[2]: *** [mosquittopp.o] Error 127 make[2]: Leaving directory `/opt/mosquitto-1.5.4/lib/cpp' make[1]: *** [all] Error 2 make[1]: Leaving directory `/opt/mosquitto-1.5.4/lib'
上述錯誤是因為沒有安裝gcc-c++. 安裝上gcc-c++即可解決: yum install gcc-c++
cc -I.. -Wall -ggdb -O2 -c mosquitto_passwd.c -o mosquitto_passwd.o cc mosquitto_passwd.o -o mosquitto_passwd -lcrypto make[1]: Leaving directory `/opt/mosquitto-1.5.4/src' set -e; for d in man; do make -C ${d}; done make[1]: Entering directory `/opt/mosquitto-1.5.4/man' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/opt/mosquitto-1.5.4/man'
上述錯誤是因為沒有安裝c-ares-devel. 安裝上c-ares-devel即可解決: yum install c-ares-devel
解決上面的問題,可以一次安裝下面的所有的依賴:yum -y install gcc gcc-c++ openssl-devel c-ares-devel libuuid-devel wget cmake
[[email protected] mosquitto-1.5.4]# yum -y install gcc gcc-c++ openssl-devel c-ares-devel libuuid-devel wget cmake Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Package gcc-4.8.5-28.el7.x86_64 already installed and latest version Package gcc-c++-4.8.5-28.el7.x86_64 already installed and latest version Package 1:openssl-devel-1.0.2k-12.el7.x86_64 already installed and latest version Package c-ares-devel-1.10.0-3.el7.x86_64 already installed and latest version Package libuuid-devel-2.23.2-52.el7.x86_64 already installed and latest version Package wget-1.14-15.el7_4.1.x86_64 already installed and latest version Package cmake-2.8.12.2-2.el7.x86_64 already installed and latest version
2. 配置mosquitto
進入/etc/mosquitto目錄
[[email protected] mosquitto]# cp mosquitto.conf.example mosquitto.conf
[[email protected] mosquitto]# cp pwfile.example pwfile
vi mosquitto.conf,做下面配置
allow_anonymous true password_file /etc/mosquitto/pwfile
然後,在檔案最末尾補充(mosquitto服務監聽的埠):
port 1883
listener 9090
protocol websockets
3. 啟動mosquitto
[[email protected] mosquitto]# mosquitto -c /etc/mosquitto/mosquitto.conf Error: Websockets support not available. Error found at /etc/mosquitto/mosquitto.conf:874. Error: Unable to open configuration file.
這個錯誤,是因為我沒有安裝websockets模組,另外,config.mk裡面的websocket沒有配置為YES。所以將配置中websocket的註釋掉即可。
#listener 9090 #protocol websockets
再次啟動:
[[email protected] mosquitto]# mosquitto -c /etc/mosquitto/mosquitto.conf 1544435834: mosquitto version 1.5.4 starting 1544435834: Config loaded from /etc/mosquitto/mosquitto.conf. 1544435834: Opening ipv4 listen socket on port 1883. 1544435834: Opening ipv6 listen socket on port 1883. 1544435834: Error: Invalid user 'mosquitto'.
上述錯誤顯示沒有mosquitto使用者,建立使用者並新增組。
[[email protected] mosquitto]# groupadd mosquitto
[[email protected] mosquitto]# useradd -g mosquitto mosquitto
最後再次啟動:
[[email protected] mosquitto]# mosquitto -c /etc/mosquitto/mosquitto.conf 1544436204: mosquitto version 1.5.4 starting 1544436204: Config loaded from /etc/mosquitto/mosquitto.conf. 1544436204: Opening ipv4 listen socket on port 1883. 1544436204: Opening ipv6 listen socket on port 1883.
此時,mosquitto以前臺服務的方式在執行。。。如何使用,請看幫助資訊:
[[email protected] mosquitto]# mosquitto --help mosquitto version 1.5.4 mosquitto is an MQTT v3.1.1 broker. Usage: mosquitto [-c config_file] [-d] [-h] [-p port] -c : specify the broker config file. -d : put the broker into the background after starting. -h : display this help. -p : start the broker listening on the specified port. Not recommended in conjunction with the -c option. -v : verbose mode - enable all logging types. This overrides any logging options given in the config file. See http://mosquitto.org/ for more information.
4. 測試驗證
[[email protected] ~]# mosquitto_sub -t rulee mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
此處錯誤,表明動態庫沒有配合好路徑,參照下面的操作(主要是紅色的兩行指令):
[[email protected] ~]# cat /etc/ld.so.conf include ld.so.conf.d/*.conf [[email protected] ~]# [[email protected] ~]# echo "/usr/local/lib" >> /etc/ld.so.conf [[email protected] ~]# [[email protected] ~]# vi /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/lib [[email protected] ~]# ldconfig
然後再次訂閱一個rulee的topic:
然後,再啟動一個終端,進行釋出訊息操作:
[[email protected] ~]# mosquitto_pub -h localhost -t rulee -m "hello rule engine"
在上面的訂閱視窗已經收到這個釋出的訊息
[[email protected] ~]# mosquitto_sub -t rulee hello rule engine
安全控制:
上面的操作,是針對無安全控制的,下面,進行帶安全控制的配置,進入/etc/mosquitto目錄:
[[email protected] mosquitto]# cp mosquitto.conf.example mosquitto.conf
[[email protected] mosquitto]# cp pwfile.example pwfile
[[email protected] mosquitto]# cp aclfile.example aclfile
vi mosquitto.conf,做下面配置
allow_anonymous false password_file /etc/mosquitto/pwfile acl_file /etc/mosquitto/aclfile
然後,在檔案最末尾補充監聽埠(若沒有配置的話): port 1883
新增安全使用者資訊:
[[email protected] mosquitto]# mosquitto_passwd -c /etc/mosquitto/pwfile shihuc Password: Reenter password:
重新啟動mosquitto服務:
[[email protected] mosquitto]# mosquitto -d -c /etc/mosquitto/mosquitto.conf
訂閱:
[[email protected] ~]# mosquitto_sub -t rulee hello rule engine Connection Refused: not authorised. [[email protected] ~]# [[email protected] ~]# [[email protected] ~]# mosquitto_sub -t /taikang/rulee -u shihuc -P shihuc
釋出:
[[email protected] ~]# mosquitto_pub -h localhost -t /taikang/rulee -m "hello rule engine with auth" Connection Refused: not authorised. Error: The connection was refused. [[email protected] ~]# [[email protected] ~]# [[email protected] ~]# mosquitto_pub -u shihuc -P shihuc -h localhost -t /taikang/rulee -m "hello rule engine with auth" [[email protected] ~]#