雑木林

頭の中の整理と忘れないための確認メモ

mqttブローカーを構築する

世間を騒がせているIoTといえばセットでmqttが出てくるので勉強がてら構築してみます。
構成は以下の通り。今回はクライアントもサーバも1台で動作確認します。

MQTTサーバの構築

MQTTのサーバ(ブローカ)としてmosquittoをインストールします。
またクライアント用にmosquitto-clientsをインストールします。

$ sudo apt install mosquitto
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libev4 libwebsockets8
提案パッケージ:
  apparmor
以下のパッケージが新たにインストールされます:
  libev4 libwebsockets8 mosquitto
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
238 kB のアーカイブを取得する必要があります。
この操作後に追加で 538 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

(中略)

mosquitto (1.4.10-3) を設定しています ...
systemd (232-25+deb9u1) のトリガを処理しています ...
man-db (2.7.6.1-2) のトリガを処理しています ...


$ sudo apt install mosquitto-clients
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libc-ares2 libmosquitto1
以下のパッケージが新たにインストールされます:
  libc-ares2 libmosquitto1 mosquitto-clients
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
173 kB のアーカイブを取得する必要があります。
この操作後に追加で 348 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

(中略)

libmosquitto1:armhf (1.4.10-3) を設定しています ...
mosquitto-clients (1.4.10-3) を設定しています ...
libc-bin (2.24-11+deb9u1) のトリガを処理しています ...

mosquittoサーバの起動

特に設定をしなくても起動できるので起動してみます。

$ sudo systemctl start mosquitto
$ sudo systemctl status mosquitto
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto; generated; vendor preset: enabled)
   Active: active (running) since Tue 2017-10-17 00:31:34 JST; 12min ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/mosquitto.service
           └─8284 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

1017 00:31:34 raspi3-01.iot.local systemd[1]: Starting LSB: mosquitto MQTT v3.1 message broker...
1017 00:31:34 raspi3-01.iot.local mosquitto[8278]: Starting network daemon:: mosquitto.
1017 00:31:34 raspi3-01.iot.local systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker.

$ sudo systemctl enable mosquitto
mosquitto.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mosquitto
$

動作確認

試しにメッセージのやりとりができるか確認してみます。
testトピックをサブスクライブする。

$ mosquitto_sub -h localhost -t test

新しくコンソールを開いてtestトピックにメッセージを送る。

$ mosquitto_pub -h localhost -t test -m "testmessage"

サブスクライズしたコンソールに「testmessage」が表示されればOK。

パスワードを設定する

このままでは誰でも送信、受信が可能なためパスワードを設定する。
パスワードが平文で流れちゃってるのでセキュリティ的にはお察し。 本当は証明書などで管理するのが良いのですが、今回は割愛。

$ sudo vi /etc/mosquitto/mosquitto.conf 
# 最下行に追記
allow_anonymous false
password_file /etc/mosquitto/mosquitto_password

パスワードファイルを作成する。

$ sudo mosquitto_passwd -c /etc/mosquitto/mosquitto_password ユーザ名
Password: 
Reenter password:

mosquittoを再起動する

$ sudo systemctl restart mosquitto

接続確認

testトピックでサブスクライブできるか確認する。

$ mosquitto_sub -h localhost -t test -u ユーザ名 -P パスワード
$ mosquitto_pub -h localhost -t test -u ユーザ名 -P パスワード -m "testmessage"