====== Mosquittoの導入 (MQTT) ======
===== MQTTとは =====
ここのページに非常にわかりやすいまとめがあります。\\
[[http://tdoc.info/blog/2014/01/27/mqtt.html|そこはかとなく書くよん。 - MQTTについてのまとめ]]
ここでは、[[http://mosquitto.org/|Mosquitto]] をセットアップする方法を紹介します。
\\
===== セットアップ =====
==== PPAの追加 ====
[[https://launchpad.net/~mosquitto-dev/+archive/mosquitto-ppa/|Mosquitto PPA]] を、add-apt-repository コマンドで追加します。
user1@plum:~$ sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa
[sudo] password for user1:
More info: https://launchpad.net/~mosquitto-dev/+archive/mosquitto-ppa
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmpfmypnq/secring.gpg' created
gpg: keyring `/tmp/tmpfmypnq/pubring.gpg' created
gpg: requesting key 262C4500 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpfmypnq/trustdb.gpg: trustdb created
gpg: key 262C4500: public key "Launchpad mosquitto" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK
user1@plum:~$
\\
==== パッケージリストの更新 ====
"apt-get update" により、パッケージリストの更新を行います。
user1@plum:~$ sudo apt-get update
Ign http://ppa.launchpad.net saucy InRelease
Ign http://ports.ubuntu.com saucy InRelease
Get:1 http://ppa.launchpad.net saucy Release.gpg [316 B]
Ign http://ports.ubuntu.com saucy-updates InRelease
Get:2 http://ppa.launchpad.net saucy Release [11.9 kB]
Ign http://ports.ubuntu.com saucy-security InRelease
Hit http://ports.ubuntu.com saucy Release.gpg
Get:3 http://ports.ubuntu.com saucy-updates Release.gpg [933 B]
Get:4 http://ppa.launchpad.net saucy/main armhf Packages [1328 B]
Get:5 http://ports.ubuntu.com saucy-security Release.gpg [933 B]
Hit http://ports.ubuntu.com saucy Release
Get:6 http://ports.ubuntu.com saucy-updates Release [49.6 kB]
Get:7 http://ports.ubuntu.com saucy-security Release [49.6 kB]
Ign http://ppa.launchpad.net saucy/main Translation-en
Hit http://ports.ubuntu.com saucy/main armhf Packages
Hit http://ports.ubuntu.com saucy/restricted armhf Packages
Hit http://ports.ubuntu.com saucy/universe armhf Packages
Hit http://ports.ubuntu.com saucy/main Translation-en
Hit http://ports.ubuntu.com saucy/restricted Translation-en
Hit http://ports.ubuntu.com saucy/universe Translation-en
Get:8 http://ports.ubuntu.com saucy-updates/main armhf Packages [219 kB]
Get:9 http://ports.ubuntu.com saucy-updates/restricted armhf Packages [14 B]
Get:10 http://ports.ubuntu.com saucy-updates/universe armhf Packages [149 kB]
Get:11 http://ports.ubuntu.com saucy-updates/main Translation-en [106 kB]
Hit http://ports.ubuntu.com saucy-updates/restricted Translation-en
Hit http://ports.ubuntu.com saucy-updates/universe Translation-en
Get:12 http://ports.ubuntu.com saucy-security/main armhf Packages [110 kB]
Get:13 http://ports.ubuntu.com saucy-security/restricted armhf Packages [14 B]
Get:14 http://ports.ubuntu.com saucy-security/universe armhf Packages [34.8 kB]
Hit http://ports.ubuntu.com saucy-security/main Translation-en
Hit http://ports.ubuntu.com saucy-security/restricted Translation-en
Hit http://ports.ubuntu.com saucy-security/universe Translation-en
Fetched 734 kB in 12s (61.1 kB/s)
Reading package lists... Done
user1@plum:~$
\\
Mosquitto関係のパッケージを検索してみます。
user1@plum:~$ sudo apt-cache search mosquitto
libmosquitto0 - MQTT version 3.1 client library
libmosquitto0-dev - MQTT version 3.1 client library, development files
libmosquittopp0 - MQTT version 3.1 client C++ library
libmosquittopp0-dev - MQTT version 3.1 client C++ library, development files
mosquitto - MQTT version 3.1 compatible message broker
mosquitto-clients - Mosquitto command line MQTT clients
python-mosquitto - MQTT version 3.1 Python client library
python3-mosquitto - MQTT version 3.1 Python 3 client library
libmosquitto-dev - MQTT version 3.1 client library, development files
libmosquittopp-dev - MQTT version 3.1 client C++ library, development files
user1@plum:~$
クライアント(ライブラリ/アプリケーション)、ブローカーサーバーなどが導入できることがわかります。
\\
==== クライアントの導入 ====
mosquitto-clients を導入します。
user1@plum:~$ sudo apt-get install mosquitto-clients
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libmosquitto0
The following NEW packages will be installed:
libmosquitto0 mosquitto-clients
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 30.6 kB of archives.
After this operation, 147 kB of additional disk space will be used.
Do you want to continue [Y/n]?
Get:1 http://ports.ubuntu.com/ubuntu-ports/ saucy/universe libmosquitto0 armhf 0.15-2ubuntu1 [13.1 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports/ saucy/universe mosquitto-clients armhf 0.15-2ubuntu1 [17.5 kB]
Fetched 30.6 kB in 1s (25.6 kB/s)
Selecting previously unselected package libmosquitto0.
(Reading database ... 18538 files and directories currently installed.)
Unpacking libmosquitto0 (from .../libmosquitto0_0.15-2ubuntu1_armhf.deb) ...
Selecting previously unselected package mosquitto-clients.
Unpacking mosquitto-clients (from .../mosquitto-clients_0.15-2ubuntu1_armhf.deb) ...
Setting up libmosquitto0 (0.15-2ubuntu1) ...
Setting up mosquitto-clients (0.15-2ubuntu1) ...
Processing triggers for libc-bin ...
localepurge: Disk space freed in /usr/share/locale: 0 KiB
localepurge: Disk space freed in /usr/share/man: 0 KiB
Total disk space freed by localepurge: 0 KiB
user1@plum:~$
\\
導入されたアプリケーションのファイルを確認してみます。
user1@plum:~$ sudo dpkg -L mosquitto-clients
/.
/usr
/usr/bin
/usr/bin/mosquitto_sub
/usr/bin/mosquitto_pub
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/mosquitto_pub.1.gz
/usr/share/man/man1/mosquitto_sub.1.gz
/usr/share/doc
/usr/share/doc/mosquitto-clients
/usr/share/doc/mosquitto-clients/copyright
/usr/share/doc/mosquitto-clients/changelog.Debian.gz
user1@plum:~$
\\
==== サーバーブローカーの導入 ====
サーバーブローカーを導入します。
user1@plum:~$ sudo apt-get install mosquitto
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
apparmor libapparmor-perl libapparmor1
Suggested packages:
apparmor-profiles apparmor-docs apparmor-utils
The following NEW packages will be installed:
apparmor libapparmor-perl libapparmor1 mosquitto
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 438 kB of archives.
After this operation, 1269 kB of additional disk space will be used.
Do you want to continue [Y/n]?
Get:1 http://ports.ubuntu.com/ubuntu-ports/ saucy-updates/main libapparmor1 armhf 2.8.0-0ubuntu31.1 [38.1 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports/ saucy-updates/main libapparmor-perl armhf 2.8.0-0ubuntu31.1 [32.1 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports/ saucy-updates/main apparmor armhf 2.8.0-0ubuntu31.1 [314 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports/ saucy/universe mosquitto armhf 0.15-2ubuntu1 [54.1 kB]
Fetched 438 kB in 3s (122 kB/s)
Preconfiguring packages ...
Selecting previously unselected package libapparmor1.
(Reading database ... 18549 files and directories currently installed.)
Unpacking libapparmor1 (from .../libapparmor1_2.8.0-0ubuntu31.1_armhf.deb) ...
Selecting previously unselected package libapparmor-perl.
Unpacking libapparmor-perl (from .../libapparmor-perl_2.8.0-0ubuntu31.1_armhf.deb) ...
Selecting previously unselected package apparmor.
Unpacking apparmor (from .../apparmor_2.8.0-0ubuntu31.1_armhf.deb) ...
Selecting previously unselected package mosquitto.
Unpacking mosquitto (from .../mosquitto_0.15-2ubuntu1_armhf.deb) ...
Processing triggers for ureadahead ...
Setting up libapparmor1 (2.8.0-0ubuntu31.1) ...
Setting up libapparmor-perl (2.8.0-0ubuntu31.1) ...
Setting up apparmor (2.8.0-0ubuntu31.1) ...
Processing triggers for ureadahead ...
Setting up mosquitto (0.15-2ubuntu1) ...
mosquitto start/running, process 1774
Processing triggers for libc-bin ...
Processing triggers for ureadahead ...
localepurge: Disk space freed in /usr/share/locale: 0 KiB
localepurge: Disk space freed in /usr/share/man: 0 KiB
Total disk space freed by localepurge: 0 KiB
user1@plum:~$
\\
サーバーブローカーを導入すると、自動でサービスとして起動します。
1774 ? Ss 0:00 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
\\
===== 実行例 =====
早速、導入したホスト上で、PUB/SUB の実験をしてみます。
ターミナルで、Subscribe するクライアントを立ち上げておきます。\\
トピックは "hello" としておきます。
user1@plum:~$ mosquitto_sub -d -t hello
Received CONNACK
Received SUBACK
Subscribed (mid: 1): 0
\\
別のターミナルから、Subscribeされているトピック "hello" に対して、メッセージを Publish してみます。
user1@plum:~$ mosquitto_pub -d -t hello -m "Hello World"
Received CONNACK
Sending PUBLISH (d0, q0, r0, m1, 'hello', ... (11 bytes))
user1@plum:~$
Subscribe している側にメッセージが送信されたのが確認できます。
user1@plum:~$ mosquitto_sub -d -t hello
Received CONNACK
Received SUBACK
Subscribed (mid: 1): 0
Received PUBLISH (d0, q0, r0, m0, 'hello', ... (11 bytes))
Hello World