第一步:下載mosquitto源碼並編譯安裝
https://github.com/eclipse/mosquitto
第二步:下載mosquitto-auth-plug源碼
https://github.com/jpmens/mosquitto-auth-plug
第三步:準備編譯環境
yum install gcc-c++
yum install libuuid-devel
yum install mysql++-devel.x86_64 參考:https://blog.csdn.net/uniom/article/details/54134532
第四步:解壓編譯
unzip mosquitto的zip包
unzip mosquitto-auth-plug的zip包
進入 解壓後mosquitto的文件夾執行
make mosquitto
make install
第五步:進入mosquitto-auth-plug的解壓後的文件夾
複製 cp config.mk.in config.mk
編輯config.mk:根據需要選擇合適的後臺。我這裏只使用mysql數據庫驗證用戶,BACKEND_MYSQL這一行是yes 注意可能BACKEND_MYSQL後面有一個問號 問號最好去掉其他的行有問號可以不用管,其餘行都是no。在MOSQUITTO_SRC一行輸入mosquitto的源碼路徑, 比如MOSQUITTO_SRC =/opt/mosquitto-1.5.5/
。在OPENSSLDIR一行輸入openssl的路徑,比如OPENSSLDIR = /usr/lib/openssl。
可以使用以下命令得到openssl的路徑:openssl version -a
第五步:進入mosquitto-auth-plug所在目錄,使用make命令生成auth-plug.so文件。
第六步:新建一個 /etc/mosquitto
第七步:把生成的auth-plug.so 複製到 /etc/mosquitto
第八步:修改配置文件
mosquitto-auth-plug的源碼裏已經有多種範例配置文件,可以使用這些文件。比如,我用mysql做驗證,可以使用 examples目錄下的mosquitto-mysql.conf。
cp examples 下的 mosquitto-mysql.conf 到/etc/mosquitto 並進行配置
根據實際情況,編輯文件裏的auth_plugin,backend,數據庫host,端口,數據庫名,用戶,密碼,sql語句等。
我的內容如下:
autosave_interval 1800
persistence true
persistence_file mosquitto.db
persistence_location /tmp/
connection_messages true
log_timestamp true
log_dest stderr
#log_type error
#log_type warning
#log_type notice
#log_type information
#log_type all
log_type debug
listener 1883 #端口
#
# __ __ ____ ___ _
# | \/ |_ _/ ___| / _ \| |
# | |\/| | | | \___ \| | | | |
# | | | | |_| |___) | |_| | |___
# |_| |_|\__, |____/ \__\_\_____|
# |___/
#
#
#auth_plugin /home/jpm/mosquitto-auth-plug/auth-plug.so
auth_plugin /etc/mosquitto/auth-plug.so#插件路徑
auth_opt_backends mysql #選擇mysql
#auth_opt_cdbname pwdb.cdb
auth_opt_host 10.*.*.* #我的mysql地址
auth_opt_port 3306 #端口mysql
auth_opt_dbname mqtt #數據庫名
auth_opt_user root#mysql用戶名
auth_opt_pass root#mysql的密碼
auth_opt_userquery SELECT pw FROM users WHERE username = '%s'
auth_opt_superquery SELECT IFNULL(COUNT(*), 0) FROM users WHERE username = '%s' AND super = 1
auth_opt_aclquery SELECT topic FROM acls WHERE username = '%s'
# Usernames with this fnmatch(3) (a.k.a glob(3)) pattern are exempt from the
# module's ACL checking
auth_opt_superusers S*
user root#這個比較重要 解決Invalid user 'mosquitto'. 這個問題
第九步:編譯完mosquitto之後,進入到lib目錄下,將編譯之後的libmosquitto.so.1 拷貝到目錄/usr/local/lib下,執行如下命令:
cp libmosquitto.so.1 /usr/local/lib
然後再執行:
執行命令:
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
和
ldconfig
第十步:
創建數據庫 把插件源碼中examples文件中的mysql.sql 文件內容複製出來到數據庫中執行,可能會以一個建立索引的地方報錯,直接刪除後再執行就行了。
注意:需要添加客戶端授權後執行 flush privileges;
第十一步:啓動
mosquitto -c /etc/mosquitto/mosquitto-mysql.conf -v
可能出現的錯誤總結:參考https://blog.csdn.net/houjixin/article/details/46711547