第一步:下载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