Eclipse Mosquitto™ is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 3.1 and 3.1.1. MQTT provides a lightweight method of carrying out messaging using a publish/subscribe model. This makes it suitable for “Internet of Things” messaging such as with low power sensors or mobile devices such as phones, embedded computers or microcontrollers like the Arduino.
This is enough for the introduction. In this tutorial we will learn “How to install mosquitto broker on Raspberry Pi. So Let’s get started!! 😎
Installation:
Open up your favourite terminal program such as putty and connect to Raspberry Pi through ssh. Type the following commands one by one for successful installation of Mosquitto broker in your Raspberry Pi.
For Raspbian Jessie:
curl -O http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key add mosquitto-repo.gpg.key rm mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ sudo curl -O http://repo.mosquitto.org/debian/mosquitto-jessie.list sudo apt-get update sudo apt-get install mosquitto
For Raspbian Stretch:
Due to possible dependencies issue, there is no user friendly way to install latest mosquitto version on Raspbian Stretch. However, one can install the aptitude version as following;
sudo apt-get install mosquitto
Using systemd start up for Mosquitto:
Mosquitto broker does not using modern system of systemd for start up. In order to move old init system, following the procedure below.
sudo systemctl stop mosquitto sudo update-rc.d mosquitto remove sudo rm /etc/init.d/mosquitto
After removing old init.d script for Mosquitto broker, Create systemd unit file using Nano editor;
sudo nano /etc/systemd/system/mosquitto.service
Paste the following contents in the Nano editor using Right mouse key.
[Unit] Description=MQTT v3.1 message broker After=network.target Requires=network.target [Service] Type=simple ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf Restart=always [Install] WantedBy=multi-user.target
Save the file by pressing “CTRL” and “X” key. Editor will ask for the confirmation to save the file. Press “Y” key and hit “Enter”.
Now reload systemd configuration using the following command.
sudo systemctl daemon-reload
Enable Mosquitto service to start at boot;
sudo systemctl enable mosquitto
Starting Mosquitto service;
sudo systemctl start mosquitto.service
Password protecting MQTT Server:
In order to protect our Mosquitto MQTT Server, we need to create a user by issuing following command.
sudo mosquitto_passwd -c /etc/mosquitto/accesslist.txt pi
“pi” is the name of user which will be used in authentication process in future. By issuing the command above, system will ask to enter a password for MQTT broker. Enter the password and press Enter key, confirm it by retyping again and you have successfully completed securing your MQTT server with a password.
Mosquitto configuration:
We also have to make certain adjustment further. Create a new configuration file with the help of nano editor by using the command below.
sudo nano /etc/mosquitto/conf.d/mosquitto.conf
Copy the contents of mosquitto configuration file and paste the contents into the nano editor the by clicking Right mouse button and save the file using “CTRL” and “X” key followed by “Y” and then hit enter (“Return Key”).
After adding configuration file, restart mosquitto service by issuing following commands;
sudo systemctl stop mosquitto sudo systemctl start mosquitto
Thats all, We have successfully configured our Mosquitto broker. Have fun 😎 .
By Mosquitto configuration: you say:
Paste the following contents to the mosquitto configuration file by clicking Right mouse button and save the file using “CTRL” and “” key followed by “Y” and then hit enter (“Return Key”).
But there is no contents!
Thank you Davo for pointing out the mistake. We have corrected the sentences. Please check it now.
MQTT does not start automatically after reboot. Starting manually with “mosquitto” or “mosquitto -v” works, but no auto start after reboot. How can this be corrected?
I am using stretch.
See Using systemd start up for Mosquitto section to start your broker on boot.
Thank you for your prompt response. I followed all steps above twice already, but mosquitto still does not start on boot?
Have you enabled the service?
sudo systemctl enable mosquitto
Send us your system log file (can be found under /var/log folder) at support [ @ ] hobbytronics.pk.Upon checking the log files you provided, there seems to be some issues with permissions i.e.
Error: Unable to open log file /var/log/mosquitto/mosquitto.log for writing
. Try the following steps and check if it starts working or not.sudo mkdir /var/log/mosquitto
sudo chown mosquitto /var/log/mosquitto
sudo systemctl stop mosquitto
sudo systemctl start mosquitto
The commands were all executed successfully, but MQTT still does not start after a reboot. Running “sudo chown mosquitto /var/log/mosquitto” again leads to a message “chown: cannot access ‘/var/log/mosquitto’: No such file or directory”. The “mosquito” directory is visible in /var/log, but it is empty
Try
sudo chown mosquitto:mosquitto /var/lib/mosquitto/ -R
and restart your pi to check. Do let me know if it works or not.Dear Waqas
sudo chown mosquitto:mosquitto /var/lib/mosquitto/ -R did not help.
Commenting out “log_dest file /var/log/mosquitto/mosquitto.log” in “/etc/mosquito/mosquitto.conf” allows MQTT to auto start after Pi reboot.
Directory “/var/log/mosquito” (and therefore also file “mosquitto.log”) gets deleted whenever the Pi is rebooted, which causes MQTT to fail upon Pi reboot.
What is deleting the directory “/var/log/mosquito” upon Pi reboot, can it be “log2ram” causing this?
You may also report the issue directly to Log2Ram github repository at https://github.com/azlux/log2ram/issues
The linked config file has everything commented out… What’s the benefit of copying it verbatim if its only comments?