Hi, I know that OpenWRT's in release freeze stage, but I keep seeing packages getting updated, and the changes from version 0.15 of mosquitto the MQTT broker that is currently in OpenWRT trunk vs v1.x are huge and important, and I'd realllly like to see it included in Attitude Adjustment if at all possible.
I originally proposed the upgrade in http://patchwork.openwrt.org/patch/2550/ missing the freeze announcement by a day or two. The attached patch replaces that version with some new fixes. As I've mentioned before, I volunteer to maintain this package. Sincerely, Karl P >From e76162dc4a734f3085fba67030f11afd2b3b9c46 Mon Sep 17 00:00:00 2001 From: Karl Palsson <ka...@remake.is> Date: Fri, 28 Sep 2012 13:48:39 +0000 Subject: [PATCH] Upgrade mosquitto MQTT tools to v1.0.3 Major changes since v0.15 currently in trunk * SSL/TLS support across the board, broker, clients and client library * TLS-PSK support if openssl version is new enough * thread support in client library * lots and lots of bug fixes Because prior versions of mosquitto didn't have any SSL support, I've made the openssl dependency optional (but on by default) Includes basic UCI config support, originally from: https://github.com/remakeelectric/owrt_pub_feeds/tree/master/luci-app-mosquitto Tested with both all -nossl and all regular packages. (Have to run a "make package/mosquitto/clean" between builds) Signed-off-by: Karl Palsson <ka...@remake.is> --- net/mosquitto/Makefile | 123 +++++++++++++++++--- net/mosquitto/files/mosquitto.uci.convert | 84 +++++++++++++ .../patches/100-disable-memory-reporting.patch | 12 -- net/mosquitto/patches/101-disable-docbook.patch | 11 -- 4 files changed, 191 insertions(+), 39 deletions(-) create mode 100755 net/mosquitto/files/mosquitto.uci.convert delete mode 100644 net/mosquitto/patches/100-disable-memory-reporting.patch delete mode 100644 net/mosquitto/patches/101-disable-docbook.patch diff --git a/net/mosquitto/Makefile b/net/mosquitto/Makefile index 56f2a64..9dddd3a 100644 --- a/net/mosquitto/Makefile +++ b/net/mosquitto/Makefile @@ -9,51 +9,115 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mosquitto -PKG_VERSION:=0.15 +PKG_VERSION:=1.0.3 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://mosquitto.org/files/source/ -PKG_MD5SUM:=7ae0ac38f1f379578ab5530e5dc7269e +PKG_MD5SUM:=9c9e06c57fcca80d76068c53ad140186 include $(INCLUDE_DIR)/package.mk -define Package/mosquitto/default +MAKE_FLAGS+=WITH_MEMORY_TRACKING=no +TARGET_CFLAGS+=-ggdb3 +include $(INCLUDE_DIR)/version.mk +# The version of libopenssl in backfire doesn't support psk. +ifeq ($(findstring 10.03,$(VERSION_CODE)),10.03) + MAKE_FLAGS += WITH_TLS_PSK=no +endif + + +define Package/$(PKG_NAME)/default SECTION:=net CATEGORY:=Network TITLE:=mosquitto - an MQTT message broker URL:=http://www.mosquitto.org/ endef -define Package/mosquitto - $(Package/mosquitto/default) +define Package/$(PKG_NAME) + $(call Package/mosquitto/default) + TITLE+= (with SSL support) + DEPENDS+= +libopenssl + VARIANT:=ssl +endef + +define Package/$(PKG_NAME)-nossl + $(call Package/$(PKG_NAME)/default) + TITLE+= (without SSL support) + VARIANT:=nossl endef -define Package/mosquitto/description +define Package/$(PKG_NAME)/default/description mosquitto is a message broker that supports v3.1 of the MQ Telemetry Transport protocol. MQTT provides a lightweight method for messaging using a publish/subscribe model. + +This package also includes some basic support for configuring via UCI endef -define Package/mosquitto-client +define Package/$(PKG_NAME)/description + $(call Package/$(PKG_NAME)/default/description) + This package is built with SSL support +endef + +define Package/$(PKG_NAME)-nossl/description + $(call Package/$(PKG_NAME)/default/description) + This package is built WITHOUT SSL support. +endef + + +define Package/mosquitto-client/default $(Package/mosquitto/default) TITLE:= mosquitto - client tools - DEPENDS:= +libmosquitto +endef +define Package/mosquitto-client + $(call Package/mosquitto-client/default) + TITLE+= (With SSL support) + DEPENDS+=+libmosquitto + VARIANT:=ssl +endef +define Package/mosquitto-client-nossl + $(call Package/mosquitto-client/default) + TITLE+= (Without SSL support) + DEPENDS+=+libmosquitto-nossl + VARIANT:=nossl endef -define Package/mosquitto-client/description +define Package/mosquitto-client/default/description Command line client tools for publishing messages to MQTT servers and subscribing to topics. endef -define Package/libmosquitto +define Package/mosquitto-client/description +$(call Package/mosquitto-client/default/description) + This package is built with SSL support +endef +define Package/mosquitto-client-nossl/description +$(call Package/mosquitto-client/default/description) + This package is built without SSL support +endef + +define Package/libmosquitto/default $(Package/mosquitto/default) SECTION:=libs CATEGORY:=Libraries + DEPENDS:=+libpthread TITLE:= mosquitto - client library endef -define Package/libmosquitto/description +define Package/libmosquitto + $(call Package/libmosquitto/default) + TITLE+= (With SSL Support) + DEPENDS+= +libopenssl + VARIANT=ssl +endef +define Package/libmosquitto-nossl + $(call Package/libmosquitto/default) + TITLE+= (Without SSL Support) + VARIANT=nossl +endef + +define Package/libmosquitto/default/description Library required for mosquitto's command line client tools, also for use by any third party software that wants to communicate with a mosquitto server. @@ -62,25 +126,42 @@ Should be useable for communicating with any MQTT v3.1 compatible server, such as IBM's RSMB, in addition to Mosquitto endef +define Package/libmosquitto/description + $(call Package/libmosquitto/default/description) + This package is built with SSL support +endef +define Package/libmosquitto-nossl/description + $(call Package/libmosquitto/default/description) + This package is built without SSL support +endef -define Package/mosquitto/conffiles + +define Package/$(PKG_NAME)/conffiles /etc/mosquitto/mosquitto.conf +/etc/config/mosquitto endef -define Package/mosquitto/install +Package/$(PKG_NAME)-nossl/conffiles = $(Package/$(PKG_NAME)/conffiles) + +define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mosquitto $(1)/usr/sbin/mosquitto $(INSTALL_DIR) $(1)/etc/mosquitto $(INSTALL_CONF) $(PKG_BUILD_DIR)/mosquitto.conf $(1)/etc/mosquitto/mosquitto.conf $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/mosquitto.init $(1)/etc/init.d/mosquitto + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) ./files/mosquitto.uci.convert $(1)/usr/bin endef +Package/$(PKG_NAME)-nossl/install = $(Package/$(PKG_NAME)/install) + define Package/mosquitto-client/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/client/mosquitto_pub $(1)/usr/bin/mosquitto_pub $(INSTALL_BIN) $(PKG_BUILD_DIR)/client/mosquitto_sub $(1)/usr/bin/mosquitto_sub endef +Package/mosquitto-client-nossl/install = $(Package/mosquitto-client/install) # This installs files into ./staging_dir/. so that you can cross compile from the host define Build/InstallDev @@ -88,14 +169,24 @@ define Build/InstallDev $(CP) $(PKG_BUILD_DIR)/lib/mosquitto.h $(1)/usr/include $(INSTALL_DIR) $(1)/usr/lib # This should just get symlinked, but I can't work out the magic syntax :( - $(CP) $(PKG_BUILD_DIR)/lib/libmosquitto.so.0 $(1)/usr/lib/libmosquitto.so + $(CP) $(PKG_BUILD_DIR)/lib/libmosquitto.so.1 $(1)/usr/lib/ endef # This installs files on the target. Compare with Build/InstallDev define Package/libmosquitto/install $(INSTALL_DIR) $(1)/usr/lib - $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/libmosquitto.so.0 $(1)/usr/lib/libmosquitto.so.0 + $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/libmosquitto.so.1 $(1)/usr/lib/libmosquitto.so.1 endef -$(eval $(call BuildPackage,mosquitto)) +Package/libmosquitto-nossl/install = $(Package/libmosquitto/install) + +# Applies to all... +ifeq ($(BUILD_VARIANT),nossl) + MAKE_FLAGS += WITH_TLS=no +endif + +$(eval $(call BuildPackage,$(PKG_NAME))) +$(eval $(call BuildPackage,$(PKG_NAME)-nossl)) $(eval $(call BuildPackage,libmosquitto)) +$(eval $(call BuildPackage,libmosquitto-nossl)) $(eval $(call BuildPackage,mosquitto-client)) +$(eval $(call BuildPackage,mosquitto-client-nossl)) diff --git a/net/mosquitto/files/mosquitto.uci.convert b/net/mosquitto/files/mosquitto.uci.convert new file mode 100755 index 0000000..f8991a3 --- /dev/null +++ b/net/mosquitto/files/mosquitto.uci.convert @@ -0,0 +1,84 @@ +#!/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 <ka...@remake.is> 2012. +# Considered to be released into the public domain + +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 +QQ=$(uci -q get mosquitto.mosquitto.log_dest) +if [ $? = 0 ]; then + for dest in $QQ; do + echo "log_dest $dest" >> $TCONF + done +fi + +QQ=$(uci -q get mosquitto.mosquitto.no_remote_access) +if [ $? = 0 ]; then + if [ "$QQ" -eq 1 ]; then + echo "bind_address 127.0.0.1" >> $TCONF + fi +fi + +HATE_SECTION_COUNT=$(grep config /etc/config/mosquitto | grep bridge | wc -l) +if [ $HATE_SECTION_COUNT -gt 0 ]; then + for i in $(seq $HATE_SECTION_COUNT -1 1); do + NN=$(uci -q get mosquitto.@bridge[-$i].connection) + echo "" >> $TCONF + echo "# Bridge connection from UCI section" >> $TCONF + echo "connection $NN" >> $TCONF + ADDR=$(uci -q get mosquitto.@bridge[-$i].address) + echo "address $ADDR" >> $TCONF + TOPICS=$(uci -q -d';' get mosquitto.@bridge[-$i].topic) + # UGLY! just want to split on the ; :( + echo $TOPICS | sed "s/^/topic /" | sed "s/;/\ntopic /g" >> $TCONF + CS=$(uci -q get mosquitto.@bridge[-$i].cleansession) + if [ $? -eq 0 ]; then + if [ "$CS" -eq 1 ]; then + echo "cleansession true" >> $TCONF + fi + else + echo "cleansession false" >> $TCONF + fi + TRYPRIV=$(uci -q get mosquitto.@bridge[-$i].tryprivate) + if [ $? -eq 0 ]; then + if [ "$TRYPRIV" -eq 1 ]; then + echo "try_private true" >> $TCONF + else + echo "try_private false" >> $TCONF + fi + else + # Override default to avoid crashes with 0.15 brokers :( + echo "try_private false" >> $TCONF + fi + CLIENTID=$(uci -q get mosquitto.@bridge[-$i].clientid) + if [ $? -eq 0 ]; then + echo "clientid $CLIENTID" >> $TCONF + fi + BRIDGEID=$(uci -q get mosquitto.@bridge[-$i].identity) + if [ $? -eq 0 ]; then + echo "bridge_identity $BRIDGEID" >> $TCONF + fi + BRIDGEPSK=$(uci -q get mosquitto.@bridge[-$i].psk) + if [ $? -eq 0 ]; then + echo "bridge_psk $BRIDGEPSK" >> $TCONF + fi + done +fi diff --git a/net/mosquitto/patches/100-disable-memory-reporting.patch b/net/mosquitto/patches/100-disable-memory-reporting.patch deleted file mode 100644 index 8d589b4..0000000 --- a/net/mosquitto/patches/100-disable-memory-reporting.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -r 490c907277dc config.h ---- a/config.h Sat Jan 15 22:23:50 2011 +0000 -+++ b/config.h Wed Jan 26 13:37:36 2011 +0000 -@@ -15,7 +15,7 @@ - /* Compile with memory tracking support? If disabled, mosquitto won't track - * heap memory usage nor export '$SYS/broker/heap/current size', but will use - * slightly less memory and CPU time. */ --#define WITH_MEMORY_TRACKING -+//#define WITH_MEMORY_TRACKING - - /* Compile with the ability to upgrade from old style sqlite persistent - * databases to the new mosquitto format. This means a dependency on sqlite. It diff --git a/net/mosquitto/patches/101-disable-docbook.patch b/net/mosquitto/patches/101-disable-docbook.patch deleted file mode 100644 index 8670197..0000000 --- a/net/mosquitto/patches/101-disable-docbook.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -r bebd02e8bed4 -r 77b64fb10075 Makefile ---- a/Makefile Thu Jul 07 13:34:54 2011 +0100 -+++ b/Makefile Thu Jul 07 16:50:05 2011 +0000 -@@ -1,6 +1,6 @@ - include config.mk - --DIRS=lib client src man -+DIRS=lib client src - DISTDIRS=man - - .PHONY : all mosquitto clean reallyclean install uninstall dist sign copy -- 1.7.2.5 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel