mosquitto: convert init script to procd
authorKarl Palsson <karlp@remake.is>
Tue, 16 Feb 2016 16:29:53 +0000 (16:29 +0000)
committerKarl Palsson <karlp@etactica.com>
Mon, 7 Mar 2016 12:28:03 +0000 (12:28 +0000)
Adds support for persistence settings.
Bumps package version for new init script.

Signed-off-by: Karl Palsson <karlp@etactica.com>
net/mosquitto/Makefile
net/mosquitto/files/etc/init.d/mosquitto
net/mosquitto/files/usr/bin/mosquitto.uci.convert [deleted file]

index b407d03afaf6c8ed44ab0cd5cb7ef9b0bbfe1bc4..2c1ef88f05ddc8c0dc0082c834a23185e421ec1d 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mosquitto
 PKG_VERSION:=1.4.7
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE.txt
 
index 2b3a93a7f0261c9025943b01677ab97ad01227cc..6551c47e688ed443e18362f55c02300855b411e3 100755 (executable)
 # Provides support for the luci-app-mosquitto package, if installed
 
 START=80
-APP=`which mosquitto`
-USE_UCI_CONFIG=$(uci -q get mosquitto.owrt.use_uci)
-if [ $? -eq 1 ]; then
-    USE_UCI_CONFIG=0
-fi
-
-SERVICE_DAEMONIZE=1
-SERVICE_WRITE_PID=1
-
-start() {
-        if [ "$USE_UCI_CONFIG" -eq 1 ]; then
-            CONF=/tmp/mosquitto.converted.$$.conf
-            mosquitto.uci.convert -f $CONF
-        else
-            CONF=/etc/mosquitto/mosquitto.conf
+USE_PROCD=1
+TCONF=/tmp/mosquitto.generated.conf
+
+# Usage: append_if cfg uci_name output_name
+# add a config line of the form "output_name <value>"
+# if the "uci_name" was found.
+# output_name defaults to uci_name if not specified.
+append_if() {
+    local cfg="$1"
+    local uci_name="$2"
+    local out_name="$3"
+    if [ -z "$out_name" ]; then
+        out_name=$uci_name
+    fi
+    config_get val $cfg $uci_name
+    if [ -n "$val" ]; then
+        echo "$out_name $val" >> $TCONF
+    fi
+}
+
+# mosquitto uses true/false, uci uses 1/0
+# note that this is not shell truthy, but equality with 1!
+append_bool() {
+    if [ $2 -eq 1 ]; then
+        echo "$1 true" >> $TCONF
+    else
+        echo "$1 false" >> $TCONF
+    fi
+}
+
+# as per append_if, but gets the value as a uci bool, not raw
+append_optional_bool() {
+    local cfg="$1"
+    local uci_name="$2"
+    local out_name="$3"
+    config_get val $cfg $uci_name
+    if [ -n "$val" ]; then
+        config_get_bool real $cfg $uci_name
+        append_bool $out_name $real
+    fi
+}
+
+
+convert_mosq_general() {
+       local cfg="$1"
+       config_get destinations "$1" log_dest
+       for dest in $destinations; do
+               echo "log_dest $dest" >> $TCONF
+       done
+
+       config_get_bool no_remote "$1" no_remote_access 0
+       if [ "$no_remote" -eq 1 ]; then
+               echo "bind_address 127.0.0.1" >> $TCONF
+       fi
+
+       config_get port "$1" port 1883
+       echo "port $port" >> $TCONF
+       append_if "$1" protocol
+       append_if "$1" max_inflight_messages
+       append_if "$1" max_queued_messages
+}
+
+convert_persistence() {
+       local cfg="$1"
+
+       append_if "$cfg" client_expiration persistent_client_expiration
+       append_if "$cfg" autosave_interval
+       append_optional_bool "$cfg" autosave_on_changes autosave_on_changes
+       append_optional_bool "$cfg" persistence persistence
+       append_if "$cfg" file persistence_file
+       config_get loc "$cfg" location
+       if [ -n "$loc" ]; then
+               [ -d "$loc" ] || mkdir -p "$loc";
+               echo "persistence_location $loc" >> $TCONF
+       fi
+}
+
+add_listener() {
+    echo "" >> $TCONF
+    config_get port "$1" port
+    if [ -z "$port" ]; then
+        echo "Ignoring listener section without port"
+        return
+    fi
+    config_get_bool no_remote "$1" no_remote_access 0
+    if [ "$no_remote" -eq 1 ]; then
+        echo "listener $port 127.0.0.1" >> $TCONF
+    else
+        echo "listener $port" >> $TCONF
+    fi
+
+    append_if "$1" protocol
+}
+
+add_topic() {
+    echo "topic $1" >> $TCONF
+}
+
+add_bridge() {
+    config_get conn "$1" connection
+    config_get addr "$1" address
+    if [ -z "$conn" -o -z "$addr" ]; then
+        echo "Ignoring bridge section, misisng connection/address"
+        return
+    fi
+    echo "" >> $TCONF
+    echo "# Bridge connection from UCI section" >> $TCONF
+    append_if "$1" connection
+    append_if "$1" address
+
+    config_list_foreach "$1" topic add_topic
+    append_optional_bool "$1" cleansession cleansession
+    append_optional_bool "$1" try_private try_private
+
+    append_if "$1" clientid
+    append_if "$1" identity bridge_identity
+    append_if "$1" psk bridge_psk
+    append_if "$1" tls_version bridge_tls_version
+}
+
+
+convert_uci() {
+       rm -rf $TCONF
+       echo "Generating mosquitto config file in $TCONF"
+       echo "# mosquitto.conf file generated from UCI config." >>$TCONF
+       # Don't include a timestamp, it makes md5sum compares fail
+
+       config_load mosquitto
+       config_foreach convert_mosq_general "mosquitto"
+       config_foreach convert_persistence "persistence"
+       config_foreach add_listener "listener"
+       config_foreach add_bridge "bridge"
+}
+
+start_service_real() {
+       local cfg="$1"
+       local use_uci
+       config_get use_uci "$cfg" use_uci
+       if [ "$use_uci" -eq 1 ]; then
+               CONF=$TCONF
+               convert_uci
+       else
+               CONF=/etc/mosquitto/mosquitto.conf
         fi
-        service_start $APP -c $CONF
+
+       procd_open_instance
+       procd_set_param command mosquitto
+       procd_append_param command -c $CONF
+       # Makes /etc/init.d/mosquitto reload work if you edit the final file.
+       procd_set_param file $CONF
+       procd_close_instance
+}
+
+start_service() {
+       config_load mosquitto
+       config_foreach start_service_real owrt
 }
 
-stop() {
-        service_stop $APP
+service_triggers() {
+       # Makes "reload_config" work
+       procd_add_reload_trigger "mosquitto"
 }
diff --git a/net/mosquitto/files/usr/bin/mosquitto.uci.convert b/net/mosquitto/files/usr/bin/mosquitto.uci.convert
deleted file mode 100755 (executable)
index 1a03d97..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/bin/sh
-# Converts a uci config file into an appropriate mosquitto.conf snippet
-# expected to be used in an init file to generate a config file to run from
-# Karl Palsson <karlp@remake.is> 2012.
-# Considered to be released into the public domain
-
-[ -f $IPKG_INSTROOT/lib/functions.sh ] && . $IPKG_INSTROOT/lib/functions.sh
-
-TCONF=/tmp/mosquitto.generated.$$.conf
-while getopts "f:" o; do
-    case $o in
-    f)
-        TCONF=$OPTARG
-        ;;
-    esac
-done
-
-if [ -e $TCONF ]; then
-    echo "Odd, same temporary generated config file already existed: $TCONF"
-    exit 1
-fi
-
-echo "Generating mosquitto config file in $TCONF"
-NOW=$(date)
-echo "# mosquitto.conf file generated from UCI config." >>$TCONF
-echo "# Config snippet generated by $0 on $NOW" >>$TCONF
-echo "#" >> $TCONF
-
-# Usage: append_if cfg uci_name output_name
-# add a config line of the form "output_name <value>"
-# if the "uci_name" was found.
-# output_name defaults to uci_name if not specified.
-append_if() {
-    local cfg="$1"
-    local uci_name="$2"
-    local out_name="$3"
-    if [ -z "$out_name" ]; then
-        out_name=$uci_name
-    fi
-    config_get val $cfg $uci_name
-    if [ -n "$val" ]; then
-        echo "$out_name $val" >> $TCONF
-    fi
-}
-
-# mosquitto uses true/false, uci uses 1/0
-# note that this is not shell truthy, but equality with 1!
-append_bool() {
-    if [ $2 -eq 1 ]; then
-        echo "$1 true" >> $TCONF
-    else
-        echo "$1 false" >> $TCONF
-    fi
-}
-
-# as per append_if, but gets the value as a uci bool, not raw
-append_optional_bool() {
-    local cfg="$1"
-    local uci_name="$2"
-    local out_name="$3"
-    config_get val $cfg $uci_name
-    if [ -n "$val" ]; then
-        config_get_bool real $cfg $uci_name
-        append_bool $out_name $real
-    fi
-}
-
-mosq_general() {
-    config_get destinations "$1" log_dest
-    for dest in $destinations; do
-        echo "log_dest $dest" >> $TCONF
-    done
-
-    config_get_bool no_remote "$1" no_remote_access 0
-    if [ "$no_remote" -eq 1 ]; then
-        echo "bind_address 127.0.0.1" >> $TCONF
-    fi
-
-    config_get port "$1" port 1883
-    echo "port $port" >> $TCONF
-    append_if "$1" protocol
-    append_if "$1" max_inflight_messages
-    append_if "$1" max_queued_messages
-
-}
-
-add_listener() {
-    echo "" >> $TCONF
-    config_get port "$1" port
-    if [ -z "$port" ]; then
-        echo "Ignoring listener section without port"
-        return
-    fi
-    config_get_bool no_remote "$1" no_remote_access 0
-    if [ "$no_remote" -eq 1 ]; then
-        echo "listener $port 127.0.0.1" >> $TCONF
-    else
-        echo "listener $port" >> $TCONF
-    fi
-
-    append_if "$1" protocol
-}
-
-add_topic() {
-    echo "topic $1" >> $TCONF
-}
-
-add_bridge() {
-    config_get conn "$1" connection
-    config_get addr "$1" address
-    if [ -z "$conn" -o -z "$addr" ]; then
-        echo "Ignoring bridge section, misisng connection/address"
-        return
-    fi
-    echo "" >> $TCONF
-    echo "# Bridge connection from UCI section" >> $TCONF
-    append_if "$1" connection
-    append_if "$1" address
-
-    config_list_foreach "$1" topic add_topic
-    append_optional_bool "$1" cleansession cleansession
-    append_optional_bool "$1" try_private try_private
-
-    append_if "$1" clientid
-    append_if "$1" identity bridge_identity
-    append_if "$1" psk bridge_psk
-    append_if "$1" tls_version bridge_tls_version
-}
-
-
-config_load "mosquitto"
-config_foreach mosq_general "mosquitto"
-config_foreach add_listener "listener"
-config_foreach add_bridge "bridge"