MQTT-mosquitto 移植

1.源码下载(这里选择最新版本1.6.8)

mosquitto下载地址https://github.com/eclipse/mosquitto/releases
/*ubuntu-----------------------------------------------/

2.添加依赖库

apt-get install gcc gcc-c++ libstdc++-devel 
apt-get install openssl-devel
apt-get install libc-ares-dev (解决ares:No such file or directory )
apt-get install uuid-dev (解决read_handle_server.c:31:25: fatal error: uuid/uuid.h: 没有那个文件或目录)
apt-get install docbook-website (解决 xsl:import : unable to load http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl)

3.安装mosquitto

  • 切换到mosquitto-1.6.8.tar.gz所在目录,解压 tar -zxvf mosquitto-1.6.8.tar.gz
  • 切换至mosquitto-1.6.8/目录 make && make install 安装完以后切换到 /etc 目录下查看:
  • make && make install
  • 安装完以后切换到 /etc 目录下查看:
    MQTT-mosquitto 移植_第1张图片
  • 切换到 /etc/mosquitto目录下,执行ls
    在这里插入图片描述
  • cp mosquitto.conf.example mosquitto.conf

4.mosquitto参数详细说明:

# =================================================================
# General configuration
# =================================================================
 
# 客户端心跳的间隔时间
#retry_interval 20
 
# 系统状态的刷新时间
#sys_interval 10
 
# 系统资源的回收时间,0表示尽快处理
#store_clean_interval 10
 
# 服务进程的PID
#pid_file /var/run/mosquitto.pid
 
# 服务进程的系统用户
#user mosquitto
 
# 客户端心跳消息的最大并发数
#max_inflight_messages 10
 
# 客户端心跳消息缓存队列
#max_queued_messages 100
 
# 用于设置客户端长连接的过期时间,默认永不过期
#persistent_client_expiration
 
# =================================================================
# Default listener
# =================================================================
 
# 服务绑定的IP地址
#bind_address
 
# 服务绑定的端口号
#port 1883
 
# 允许的最大连接数,-1表示没有限制
#max_connections -1
 
# cafile:CA证书文件
# capath:CA证书目录
# certfile:PEM证书文件
# keyfile:PEM密钥文件
#cafile
#capath
#certfile
#keyfile
 
# 必须提供证书以保证数据安全性
#require_certificate false
 
# 若require_certificate值为true,use_identity_as_username也必须为true
#use_identity_as_username false
 
# 启用PSK(Pre-shared-key)支持
#psk_hint
 
# SSL/TSL加密算法,可以使用“openssl ciphers”命令获取
# as the output of that command.
#ciphers
 
# =================================================================
# Persistence
# =================================================================
 
# 消息自动保存的间隔时间
#autosave_interval 1800
 
# 消息自动保存功能的开关
#autosave_on_changes false
 
# 持久化功能的开关
persistence true
 
# 持久化DB文件
#persistence_file mosquitto.db
 
# 持久化DB文件目录
#persistence_location /var/lib/mosquitto/
 
# =================================================================
# Logging
# =================================================================
 
# 4种日志模式:stdoutstderr、syslog、topic
# none 则表示不记日志,此配置可以提升些许性能
log_dest none
 
# 选择日志的级别(可设置多项)
#log_type error
#log_type warning
#log_type notice
#log_type information
 
# 是否记录客户端连接信息
#connection_messages true
 
# 是否记录日志时间
#log_timestamp true
 
# =================================================================
# Security
# =================================================================
 
# 客户端ID的前缀限制,可用于保证安全性
#clientid_prefixes
 
# 允许匿名用户
#allow_anonymous true
 
# 用户/密码文件,默认格式:username:password
#password_file
 
# PSK格式密码文件,默认格式:identity:key
#psk_file
 
# pattern write sensor/%u/data
# ACL权限配置,常用语法如下:
# 用户限制:user <username>
# 话题限制:topic [read|write] <topic>
# 正则限制:pattern write sensor/%u/data
#acl_file
 
# =================================================================
# Bridges
# =================================================================
 
# 允许服务之间使用“桥接”模式(可用于分布式部署)
#connection 
#address [:]
#topic  [[[out | in | both] qos-level] local-prefix remote-prefix]
 
# 设置桥接的客户端ID
#clientid
 
# 桥接断开时,是否清除远程服务器中的消息
#cleansession false
 
# 是否发布桥接的状态信息
#notifications true
 
# 设置桥接模式下,消息将会发布到的话题地址
# $SYS/broker/connection/<clientid>/state
#notification_topic
 
# 设置桥接的keepalive数值
#keepalive_interval 60
 
# 桥接模式,目前有三种:automatic、lazy、once
#start_type automatic
 
# 桥接模式automatic的超时时间
#restart_timeout 30
 
# 桥接模式lazy的超时时间
#idle_timeout 60
 
# 桥接客户端的用户名
#username
 
# 桥接客户端的密码
#password
 
# bridge_cafile:桥接客户端的CA证书文件
# bridge_capath:桥接客户端的CA证书目录
# bridge_certfile:桥接客户端的PEM证书文件
# bridge_keyfile:桥接客户端的PEM密钥文件
#bridge_cafile
#bridge_capath
#bridge_certfile
#bridge_keyfile

5、启动mosquitto服务:

mosquitto -c /etc/mosquitto/mosquitto.conf

在启动过程中报错:

Error: Invalid user 'mosquitto'.

解决:

adduser mosquitto

6.测试问题:

报错:./mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
解决:

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
ldconfig
  • 启动一个客户端,模拟broker:
mosquitto -c /etc/mosquitto/mosquitto.conf -v
  • 再启动一个客户端,模拟订阅:
mosquitto_sub -v -t topic01
  • 再启动一个客户端,模拟发布:
    mosquitto_pub -t topic01 -m 123456
    订阅界面可以实时收到发布的消息!!!

*/arm----------------------------------------------------/

2.依赖库编译

c-ares-1.15.0:https://github.com/c-ares/c-ares/releases

tar -zxvf c-ares-1.15.0.tar.gz
cd c-ares-1.15.0
./configure --host=arm-linux-gnueabihf --prefix=/media/sun/D/Users/HP/Desktop/work/08_tools/mqtt/mosquitto/arm/ares
make 
make install

e2fsprogs-1.45.5:https://github.com/tytso/e2fsprogs/releases/tag/v1.45.5

tar -zxvf e2fsprogs-1.45.5.tar.gz
cd e2fsprogs-1.45.5
./configure --host=arm-linux-gnueabihf --prefix=/media/sun/D/Users/HP/Desktop/work/08_tools/mqtt/mosquitto/arm/e2fsprogs
make
make install

openssl-1.1.1d: http://distfiles.macports.org/openssl/

tar -zxvf openssl-1.1.1d.tar.gz
cd openssl-1.1.1d
./config no-asm shared --prefix=/media/sun/D/Users/HP/Desktop/work/08_tools/mqtt/mosquitto/arm/openssl
vim Makefile #修改交叉编译工具链 去除 -m64相关字符 
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
make install

3.编译mosquitto库

tar -zxvf mosquitto.1.6.8.tar.gz
cd mosquitto.1.6.8
cmake -D CMAKE_C_COMPILER="arm-linux-gnueabihf-gcc" -D CMAKE_CXX_COMPILER="arm-linux-gnueabihf-g++" -D CMAKE_INSTALL_PREFIX=/media/sun/D/Users/HP/Desktop/work/08_tools/mqtt/mosquitto/arm/mosquitto/ .
make # 会提示找不到相关库文件
编辑CMakeCache.txt文件
make
make install

MQTT-mosquitto 移植_第2张图片

4.结果

安装目录lib下:
MQTT-mosquitto 移植_第3张图片
安装目录bin下:
在这里插入图片描述
复制到arm开发板上使用即可。

5.添加用户名和密码

  1. 配置
    打开mosquitto.conf文件,找到
    #不允许匿名
    #allow_anonymous true
    改为allow_anonymous false
    #配置用户密码文件
    password_file /etc/mosquitto/pwfile
    #配置topic和用户
    acl_file /etc/mosquitto/acl
    添加用户’username’密码’123‘,
    mosquitto_passwd -c /etc/mosquitto/pwfile username
    输入密码即可
  2. 测试
    使用配置文件启动服务器
    mosquitto-c /etc/mosquitto/mosquitto.conf
    mosquitto_sub -h 127.0.0.1 -t topic01 -u username -P 123
    mosquitto_pub -h 127.0.0.1 -t topic01 -u username -P 123 -m “test”

你可能感兴趣的:(Linux相关)