From 489c683b5477030d5c7b4e3359125108279dc516 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 29 Apr 2017 23:35:12 +0200 Subject: [PATCH] Mosquitto addon (#7) --- mosquitto/Dockerfile | 16 ++++++++++++ mosquitto/README.md | 12 +++++++++ mosquitto/config.json | 31 +++++++++++++++++++++++ mosquitto/mosquitto.conf | 17 +++++++++++++ mosquitto/run.sh | 54 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 130 insertions(+) create mode 100644 mosquitto/Dockerfile create mode 100644 mosquitto/README.md create mode 100644 mosquitto/config.json create mode 100644 mosquitto/mosquitto.conf create mode 100644 mosquitto/run.sh diff --git a/mosquitto/Dockerfile b/mosquitto/Dockerfile new file mode 100644 index 0000000..4abcafe --- /dev/null +++ b/mosquitto/Dockerfile @@ -0,0 +1,16 @@ +FROM %%BASE_IMAGE%% + +# Add version +ENV VERSION %%VERSION%% +ENV LANG C.UTF-8 + +# Setup base +RUN apk add --no-cache jq mosquitto + +# Copy data +COPY run.sh / +COPY mosquitto.config /etc/ + +RUN chmod a+x /run.sh + +CMD [ "/run.sh" ] diff --git a/mosquitto/README.md b/mosquitto/README.md new file mode 100644 index 0000000..410c0b5 --- /dev/null +++ b/mosquitto/README.md @@ -0,0 +1,12 @@ +# Mosquitto +MQTT broker for HomeAssistant and HassIO addons. + +## Options + +- `plain`: +- `ssl`: +- `ssl`: +- `anonymous`: +- `logins`: +- `certfile`: +- `keyfile`: diff --git a/mosquitto/config.json b/mosquitto/config.json new file mode 100644 index 0000000..30ae24f --- /dev/null +++ b/mosquitto/config.json @@ -0,0 +1,31 @@ +{ + "name": "Mosquitto broker", + "version": "0.1", + "slug": "mosquitto", + "description": "An Open Source MQTT broker", + "startup": "before", + "boot": "auto", + "ports": { + "1883/tcp": 1883, + "8883/tcp": 8883 + }, + "map": ["ssl"], + "options": { + "plain": true, + "ssl": false, + "anonymous": true, + "logins": [], + "certfile": "fullchain.pem", + "keyfile": "privkey.pem" + }, + "schema": { + "plain": "bool", + "ssl": "bool", + "anonymous": "bool", + "logins": [ + {"username": "str", "password": "str"} + ], + "certfile": "str", + "keyfile": "str" + } +} diff --git a/mosquitto/mosquitto.conf b/mosquitto/mosquitto.conf new file mode 100644 index 0000000..6852793 --- /dev/null +++ b/mosquitto/mosquitto.conf @@ -0,0 +1,17 @@ +## +# defaults +protocol mqtt + +## +# logging +log_dest stdout + +## +# datastore +persistence true +persistence_location /data/ + +## +# User settings +#password_file /data/users.db +#allow_anonymous true diff --git a/mosquitto/run.sh b/mosquitto/run.sh new file mode 100644 index 0000000..d77865e --- /dev/null +++ b/mosquitto/run.sh @@ -0,0 +1,54 @@ +#!/bin/bash +set -e + +CONFIG_PATH=/data/options.json + +PLAIN=$(jq --raw-output ".plain" $CONFIG_PATH) +SSL=$(jq --raw-output ".ssl" $CONFIG_PATH) +LOGINS=$(jq --raw-output ".logins | length" $CONFIG_PATH) +ANONYMOUS=$(jq --raw-output ".anonymous" $CONFIG_PATH) +KEYFILE=$(jq --raw-output ".keyfile" $CONFIG_PATH) +CERTFILE=$(jq --raw-output ".certfile" $CONFIG_PATH) + +PLAIN_CONFIG=" +listener 1883 +" + +SSL_CONFIG=" +port 8883 +listener 8883 +cafile /ssl/$CERTFILE +certfile /ssl/$CERTFILE +keyfile /ssl/$KEYFILE +" + +# Add plain configs +if [ "$PLAIN" == "true" ]; then + echo "$PLAIN_CONFIG" >> /etc/mosquitto.conf +fi + +# Add ssl configs +if [ "$SSL" == "true" ]; then + echo "$SSL_CONFIG" >> /etc/mosquitto.conf +fi + +# Allow anonymous connections +if [ "$ANONYMOUS" == "true" ]; then + sed -i "s/#allow_anonymous/allow_anonymous/g" /etc/mosquitto.conf +fi + +# Generate user data +if [ "$LOGINS" -gt "0" ]; then + sed -i "s/#password_file/password_file/g" /etc/mosquitto.conf + rm -f /data/users.db || true + + for (( i=0; i < "$LOGINS"; i++ )); do + USERNAME=$(jq --raw-output ".logins[$i].username" $CONFIG_PATH) + PASSWORD=$(jq --raw-output ".logins[$i].password" $CONFIG_PATH) + + mosquitto_passwd -b /data/users.db "$USERNAME" "$PASSWORD" + done +fi + +# start server +exec mosquitto -c /etc/mosquitto.conf < /dev/null