On this short article we will learn how to install the latest version of Mosquitto MQTT (MQTT v.2) on Ubuntu 20.04 LTS.
Introduction
The Message Queuing Telemetry Transport (MQTT) is a lightweight machine-to-machine messaging protocol, designed to provide lightweight publish/subscribe communication between devices. The protocol usually runs over TCP/IP. It is designed for connections with remote locations where the network bandwidth is limited. The protocol is an open OASIS standard and an ISO recommendation (ISO/IEC 20922). Mosquitto is an open source message broker (or server) that implements MQTT protocols. Mosquitto has good community support, documentation, and ease of installation it has become one of the most popular MQTT brokers.
On this tutorial, we’ll install Mosquitto and set up our broker to use SSL to secure our password-protected MQTT communications.
Mosquitto MQTT Installation On Ubuntu 20.04
On this tutorial, we will use Mosquitto MQTT (MQTT v.2) source to be installed on Ubuntu 20.04 LTS server. For this purpose we need several dependencies package. The installation will be arranged as following steps :
Prerequisites
A. Mosquitto MQTT Installation
1. Update Ubuntu Repository and Get MQTT dependencies
3. Add mosquitto user
4. Download Mosquitto source code and unpack it
5. Compile and install MQTT software
B. Configuring MQTT Server
1. Create permission and password for new user
2. Create configuration file for Mosquitto MQTT Server
3. Add systemd unit file
4. Start and check the MQTT service
C. Testing
Prerequisites
Before we are going to the install MQTT application and test it, we have to prepare the environment first as mentioned below :
- Ubuntu 20.04 System with updated repository
- a user with sudo privilege
- Sufficient disk space and good internet access
A. Mosquitto MQTT Installation
On this stage we will install Mosquitto application from the scratch. We will download MQTT source file, make and install it on the system rather than using apt repository.
1. Update Ubuntu Repository and Get MQTT dependencies
We will update our Ubuntu system first and getting MQTT dependencies packages.
$sudo apt update $ sudo apt -y install build-essential libwrap0-dev libssl-dev libc-ares-dev uuid-dev xsltproc
The output :
ramans@otodiginet:~$ sudo apt -y install build-essential libwrap0-dev libssl-dev libc-ares-dev uuid-dev xsltproc Reading package lists... Done Building dependency tree Reading state information... Done build-essential is already the newest version (12.8ubuntu1.1). build-essential set to manually installed. The following additional packages will be installed: libc-ares2 libssl1.1 Suggested packages: libssl-doc The following NEW packages will be installed: libc-ares-dev libc-ares2 libssl-dev libwrap0-dev uuid-dev xsltproc The following packages will be upgraded: libssl1.1 1 upgraded, 6 newly installed, 0 to remove and 167 not upgraded. Need to get 3,123 kB of archives. After this operation, 8,872 kB of additional disk space will be used. Get:1 http://mirror.telkomuniversity.ac.id/ubuntu focal-updates/main amd64 libssl1.1 amd64 1.1.1f-1ubuntu2.4 [1,319 kB] Get:2 http://mirror.telkomuniversity.ac.id/ubuntu focal-updates/main amd64 libssl-dev amd64 1.1.1f-1ubuntu2.4 [1,583 kB] Get:3 http://mirror.telkomuniversity.ac.id/ubuntu focal/main amd64 libwrap0-dev amd64 7.6.q-30 [21.7 kB] Get:4 http://mirror.telkomuniversity.ac.id/ubuntu focal/main amd64 xsltproc amd64 1.1.34-4 [14.3 kB] Get:5 http://mirror.telkomuniversity.ac.id/ubuntu focal/main amd64 libc-ares2 amd64 1.15.0-1build1 [37.8 kB] Get:6 http://mirror.telkomuniversity.ac.id/ubuntu focal/main amd64 libc-ares-dev amd64 1.15.0-1build1 [114 kB] Get:7 http://mirror.telkomuniversity.ac.id/ubuntu focal-updates/main amd64 uuid-dev amd64 2.34-0.1ubuntu9.1 [33.6 kB] Fetched 3,123 kB in 9s (367 kB/s) Preconfiguring packages ... Setting up libwrap0-dev:amd64 (7.6.q-30) ... Processing triggers for man-db (2.9.1-1) ... Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
2. Add mosquitto user
We will create a group and user system called as mosquitto to dedicated holding Mosquitto MQTT application. For this purpose, we will do the following tasks :
$ sudo adduser mosquitto $ sudo usermod -aG sudo mosquitto $ sudo su - mosquitto
The output :
ramans@otodiginet:~$ sudo adduser mosquitto Adding user `mosquitto' ... Adding new group `mosquitto' (1001) ... Adding new user `mosquitto' (1001) with group `mosquitto' ... Creating home directory `/home/mosquitto' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for mosquitto Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y ramans@otodiginet:~$ sudo usermod -aG sudo mosquitto ramans@otodiginet:~$ sudo su - mosquitto To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details.
3. Download Mosquitto MQTT Archive File and Unpack
By using mosquitto system user which was already created we will use wget command line, we will download Mosquitto MQTT source file and by using tar command line we will unpack the file. Please find the following task below :
$ wget https://mosquitto.org/files/source/mosquitto-2.0.11.tar.gz $ tar zxvf mosquitto-2.0.11.tar.gz
The output will be :
mosquitto@otodiginet:~$ wget https://mosquitto.org/files/source/mosquitto-2.0.11.tar.gz --2021-06-27 01:43:36-- https://mosquitto.org/files/source/mosquitto-2.0.11.tar.gz Resolving mosquitto.org (mosquitto.org)... 85.119.83.194, 2001:ba8:1f1:f271::2 Connecting to mosquitto.org (mosquitto.org)|85.119.83.194|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 760325 (743K) [application/octet-stream] Saving to: ‘mosquitto-2.0.11.tar.gz’ mosquitto-2.0.11.tar.gz 100%[====================================================>] 742.50K 683KB/s in 1.1s 2021-06-27 01:43:39 (683 KB/s) - ‘mosquitto-2.0.11.tar.gz’ saved [760325/760325]
mosquitto@otodiginet:~$ tar zxvf mosquitto-2.0.11.tar.gz mosquitto-2.0.11/ mosquitto-2.0.11/pskfile.example mosquitto-2.0.11/security/ mosquitto-2.0.11/security/mosquitto.apparmor mosquitto-2.0.11/service/ mosquitto-2.0.11/service/upstart/ mosquitto-2.0.11/service/upstart/mosquitto.conf ... mosquitto-2.0.11/NOTICE.md mosquitto-2.0.11/README-compiling.md mosquitto-2.0.11/Makefile mosquitto-2.0.11/edl-v10
Until this step, we have an extracted MQTT source file and ready to compile.
4. Compile and Install MQTT Application
On this stage we will make Mosquitto MQTT application and install it. To do this task, we have to use mosquitto user.
~/mosquitto-2.0.11$ make && sudo make install
The output will be shown below :
mosquitto@otodiginet:~/mosquitto-2.0.11$ make && sudo make install set -e; for d in lib apps client plugins src; do make -C ${d}; done make[1]: Entering directory '/home/mosquitto/mosquitto-2.0.11/lib' make -C cpp make[2]: Entering directory '/home/mosquitto/mosquitto-2.0.11/lib/cpp' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/home/mosquitto/mosquitto-2.0.11/lib/cpp' make[1]: Leaving directory '/home/mosquitto/mosquitto-2.0.11/lib' make[1]: Entering directory '/home/mosquitto/mosquitto-2.0.11/apps' set -e; for d in db_dump mosquitto_ctrl mosquitto_passwd; do make -C ${d}; done make[2]: Entering directory '/home/mosquitto/mosquitto-2.0.11/apps/db_dump' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/home/mosquitto/mosquitto-2.0.11/apps/db_dump' make[2]: Entering directory '/home/mosquitto/mosquitto-2.0.11/apps/mosquitto_ctrl'
B. Configuring MQTT Server
After Mosquitto MQTT application was installed successfully, then we will configure it to work properly. On our scenario, there will be a server which provide a service and a client which sends the request. Please follow the following steps to complete the MQTT configuration.
1. Create permission and password for new user
On this stage, we will create a premission and setting a passwod. For this task we will do the following steps:
$ ~/mosquitto-2.0.11$ sudo mosquitto_passwd -c /etc/mosquitto/pwfile mqtt-spy $ ~/mosquitto-2.0.11$ sudo mkdir /var/lib/mosquitto/ $ ~/mosquitto-2.0.11$ sudo chown -R mosquitto:mosquitto /var/lib/mosquitto/
The output will be :
mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo mosquitto_passwd -c /etc/mosquitto/pwfile mqtt-spy Password: Reenter password: mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo mkdir /var/lib/mosquitto/ mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo chown -R mosquitto:mosquitto /var/lib/mosquitto/
2. Create configuration file for Mosquitto MQTT Server
Then we will create a new configuration file for MQTT server as shown below :
mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo vi /etc/mosquitto/mosquitto.conf persistence true persistence_location /var/lib/mosquitto/ persistence_file mosquitto.db log_dest syslog log_dest stdout log_dest topic log_type error log_type warning log_type notice log_type information connection_messages true log_timestamp true allow_anonymous true password_file /etc/mosquitto/pwfile
mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo ldconfig
3. Add Systemd Unit File
To manage Mosquitto MQTT service, we have to create a systemd file. For this purpose we will create a new file called as /etc/systemd/system/mosquitto.service
.
mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo vi /etc/systemd/system/mosquitto.service [Unit] Description=Insite MQTT Broker [Service] ExecStart=/usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf Restart=always [Install] WantedBy=multi-user.target ~ ~ "/etc/systemd/system/mosquitto.service" [New File]
4. Starting Mosquitto MQTT service
After systemd file was already created, the next step is to start it service and check the status, is it running normally or not? It will be explained in the following steps.
$ sudo systemctl start mosquitto.service $ sudo systemctl enable mosquitto.service $ sudo systemctl status mosquitto.service
The output will be shown below :
mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo vi /etc/systemd/system/mosquitto.service mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo systemctl start mosquitto.service mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo systemctl enable mosquitto.service Created symlink /etc/systemd/system/multi-user.target.wants/mosquitto.service → /etc/systemd/system/mosquitto.service. mosquitto@otodiginet:~/mosquitto-2.0.11$ sudo systemctl status mosquitto.service ● mosquitto.service - Insite MQTT Broker Loaded: loaded (/etc/systemd/system/mosquitto.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-06-27 02:02:34 PDT; 19s ago Main PID: 35674 (mosquitto) Tasks: 1 (limit: 9448) Memory: 992.0K CGroup: /system.slice/mosquitto.service └─35674 /usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf Jun 27 02:02:34 otodiginet systemd[1]: Started Insite MQTT Broker. Jun 27 02:02:34 otodiginet mosquitto[35674]: 1624784554: mosquitto version 2.0.11 starting Jun 27 02:02:34 otodiginet mosquitto[35674]: 1624784554: Config loaded from /etc/mosquitto/mosquitto.conf. Jun 27 02:02:34 otodiginet mosquitto[35674]: 1624784554: Starting in local only mode. Connections will only b> Jun 27 02:02:34 otodiginet mosquitto[35674]: 1624784554: Create a configuration file which defines a listener> Jun 27 02:02:34 otodiginet mosquitto[35674]: 1624784554: For more details see https://mosquitto.org/documenta> Jun 27 02:02:34 otodiginet mosquitto[35674]: 1624784554: Opening ipv4 listen socket on port 1883. Jun 27 02:02:34 otodiginet mosquitto[35674]: 1624784554: Opening ipv6 listen socket on port 1883. Jun 27 02:02:34 otodiginet mosquitto[35674]: 1624784554: mosquitto version 2.0.11 running
C. MQTT Testing
At this stage, we will do a simple test to show how Mosquitto MQTT works. On the MQQT protocol, we will get acquainted with ‘topic’ term. Topic is a string that the server/broker uses to filter messages for the connected clients. To subscribe to a topic, we havet to submit the mosquitto_sub -t
command line followed by the name of the topic that you want to subscribe to.
1. Server
On the server we will create a topic by using command line : mosquitto_sub -v -t 'otodiginet/test' -u mqtt-spy -P <password>
2. Client
Sending message with the same topic as server has. Submitting command line : mosquitto_pub -t ‘otodiginet/test’ -u mqtt-spy -P <password>
Conclusion
On this short tutorial, we have shown you how to install Mosuitto MQTT message broker application version 2.0 by using source file from Mosquitto MQTT official website, and taking a simple testing to show, who MQTT protocl work. I hope this article will be helpful.