Mosquitto op Netgear ReadyNAS Ultra 2

Je eigen interne digitale PostNL, dat is een beetje wat Mosquitto voor je doet. In mijn vorige post schreef ik over het installeren van OpenHAB op een Netgear ReadyNAS Ultra 2. Openstaand puntje was het installeren van Mosquitto. Nou blijkt dat er voor de versie die ik nu draai: $ uname -a: Linux NAS 2.6.37.5.RNx86_64.2.1 #1 SMP Tue Mar 29 16:38:58 PDT 2011 x86_64 GNU/Linux geen versie te zijn die fatsoenlijk wil installeren. Geen nood, met een geïnstalleerd build-systeem hebben we aan de sources (soort van) genoeg! Gebruikmakend van een collega’s post was het bouwen niet zo gek moeilijk.

De sources voor Mosquitto vind je hier: http://mosquitto.org/download/.

Download en un-tar de sources op een handige plek. Ik koos voor /opt/mosquitto maar dat is eigenlijk niet nodig. Je kunt het ook ergens in je home directory zetten als je dat handiger vind.

Afhankelijkheden

Of met een begrijpelijker woord: dependencies. Die zijn er eigenlijk altijd bij de serieuzere projecten. Gelukkig staat er een hoop in de repo’s:

$ sudo apt-get install uuid-dev xsltproc docbook-xsl libssl-dev
Lib C-Ares 1.10.0

Dit is een andere bibliotheek die we nodig hebben die niet in apt te vinden is.

$  wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz
$ tar xvf c-ares-1.10.0.tar.gz
$ cd c-ares-1.10.0
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

Mosquitto

Voor dat je Mosquitto kunt bouwen moet er wat aangepast worden in config.mk, namelijk het zetten van een hekje voor TLS_PSK.

# This must be disabled if using openssl < 1.0.
#WITH_TLS_PSK:=yes

Dit is omdat, zoals er ook boven staat, omdat de openssl op de NAS lager dan 1.0 is.

$ openssl version
OpenSSL 0.9.8c 05 Sep 2006 (Library: OpenSSL 0.9.8o 01 Jun 2010)

Daarna is het bouwen simpel:

$ make
$ make test
$ sudo make install

Vervolgens hebben we nog een configuratie en een gebruiker nodig.

$ sudo cp /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
$ sudo useradd -r -m -d /var/lib/mosquitto -s /usr/sbin/nologin -g nogroup mosquitto

Automatisch starten

Uiteraard moet Mosquitto automatisch gaan starten op het moment dat je NAS start. Je kunt in deze post vinden hoe je dat voor elkaar krijg. Daarvoor heb je natuurlijk wel een init.d script nodig en die staat hieronder.

#! /bin/sh

### BEGIN INIT INFO
# Provides: mosquitto
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: mosquitto MQTT v3.1 message broker
# Description:
# This is a message broker that supports version 3.1 of the MQ Telemetry
# Transport (MQTT) protocol.
#
# MQTT provides a method of carrying out messaging using a publish/subscribe
# model. It is lightweight, both in terms of bandwidth usage and ease of
# implementation. This makes it particularly useful at the edge of the network
# where a sensor or other simple device may be implemented using an arduino for
# example.
### END INIT INFO

set -e

PIDFILE=/var/run/mosquitto.pid
DAEMON=/usr/local/sbin/mosquitto

# /etc/init.d/mosquitto: start and stop the mosquitto MQTT message broker

test -x ${DAEMON} || exit 0

umask 022

. /lib/lsb/init-functions

# Are we running from init?
run_by_init() {
([ "$previous" ] && [ "$runlevel" ]) || [ "$runlevel" = S ]
}

#export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
export PATH="${PATH:+$PATH:}/usr/local/sbin:/usr/sbin:/sbin"

case "$1" in
start)
log_daemon_msg "Starting network daemon:" "mosquitto"
if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} -- -c /etc/mosquitto/mosquitto.conf ; then
log_end_msg 0
else
log_end_msg 1
fi
;;
stop)
log_daemon_msg "Stopping network daemon:" "mosquitto"
if start-stop-daemon --stop --quiet --oknodo --pidfile ${PIDFILE}; then
log_end_msg 0
rm -f ${PIDFILE}
else
log_end_msg 1
fi
;;
reload|force-reload)
log_daemon_msg "Reloading network daemon configuration:" "mosquitto"
if start-stop-daemon --stop --signal HUP --quiet --oknodo --pidfile $PIDFILE; then
log_end_msg 0
else
log_end_msg 1
fi
;;

restart)
log_daemon_msg "Restarting network daemon:" "mosquitto"
if start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile ${PIDFILE}; then
rm -f ${PIDFILE}
fi
if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} -- -c /etc/mosquitto/mosquitto.conf ; then
log_end_msg 0
else
log_end_msg 1
fi
;;

try-restart)
log_daemon_msg "Restarting Mosquitto message broker" "mosquitto"
set +e
start-stop-daemon --stop --quiet --retry 30 --pidfile ${PIDFILE}
RET="$?"
set -e
case $RET in
0)
# old daemon stopped
rm -f ${PIDFILE}
if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} -- -c /etc/mosquitto/mosquitto.conf ; then
log_end_msg 0
else
log_end_msg 1
fi
;;
1)
# daemon not running
log_progress_msg "(not running)"
log_end_msg 0
;;
*)
# failed to stop
log_progress_msg "(failed to stop)"
log_end_msg 1
;;
esac
;;

status)
status_of_proc -p ${PIDFILE} ${DAEMON} mosquitto && exit 0 || exit $?
;;

*)
 log_action_msg "Usage: /etc/init.d/mosquitto {start|stop|reload|force-reload|restart|try-restart|status}"
 exit 1
 esac
exit 0

Als het goed is kun je nu door middel van sudo /etc/init.d/mosquitto start Mosquitto starten. Thats it!

 

Recent Posts

Recent Comments

Archives

Categories

Meta

nebula Written by:

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *