* An optional PKG_LICENSE_FILES tag including the filenames of the license-files in the source-package.
(E.g.: PKG_LICENSE_FILES:=COPYING)
* PKG_RELEASE should be initially set to 1 or reset to 1 if the software version is changed. You should increment it if the package itself has changed. For example, modifying a support script, changing configure options like --disable* or --enable* switches, or if you changed something in the package which causes the resulting binaries to be different. Changes like correcting md5sums, changing mirror URLs, adding a maintainer field or updating a comment or copyright year in a Makefile do not require a change to PKG_RELEASE.
+* Avoid reuse of PKG_NAME in call, define and eval lines to improve readability.
#### Commits in your pull-requests should:
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://hisham.hm/htop/releases/$(PKG_VERSION)/
-PKG_MD5SUM:=7d354d904bad591a931ad57e99fea84a
+PKG_HASH:=179be9dccb80cee0c5e1a1f58c8f72ce7b2328ede30fb71dcdf336539be2f487
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=monit
-PKG_VERSION:=5.18
+PKG_VERSION:=5.20.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=ebac395ec50c1ae64d568db1260bc049d0e0e624c00e79d7b1b9a59c2679b98d
PKG_SOURCE_URL:=http://mmonit.com/monit/dist
-PKG_MD5SUM:=a1bfac0fbb83439435f8616200d2364d
PKG_LICENSE:=AGPL-3.0
PKG_LICENSE_FILES:=COPYING
define Package/monit/Default
SECTION:=admin
CATEGORY:=Administration
- DEPENDS:= +libpthread
+ DEPENDS:= +libpthread +zlib
TITLE:=System services monitoring utility
URL:=http://mmonit.com/monit/
MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>
--- a/configure
+++ b/configure
-@@ -13849,14 +13849,7 @@ fi
+@@ -13839,14 +13839,7 @@ fi
# Find the right directory to put the root-mode PID file in
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pid file location" >&5
$as_echo_n "checking pid file location... " >&6; }
--- /dev/null
+# openwisp.org
+#
+# This is free software, licensed under the GNU General Public License v3.
+# See /LICENSE for more information.
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=openwisp-config
+PKG_VERSION:=0.4.5
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://github.com/openwisp/openwisp-config.git
+PKG_SOURCE_VERSION:=0.4.5
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
+PKG_MIRROR_HASH:=017a8ed35ebfda2805426e7da02559d5cc2845ee9ded60fdae8e848d377424fb
+PKG_LICENSE:=GPL-3.0
+PKGARCH:=all
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/openwisp-config/default
+ TITLE:=Remote configuration management agent ($(2) variant)
+ CATEGORY:=Administration
+ SECTION:=admin
+ SUBMENU:=openwisp
+ DEPENDS:=+curl +lua +libuci-lua +luafilesystem $(3)
+ VARIANT:=$(1)
+ MAINTAINER:=Federico Capoano <f.capoano@cineca.it>
+ URL:=http://openwisp.org
+endef
+
+Package/openwisp-config-openssl=$(call Package/openwisp-config/default,openssl,OpenSSL,+ca-certificates +libopenssl)
+Package/openwisp-config-mbedtls=$(call Package/openwisp-config/default,mbedtls,mbedTLS,+ca-certificates +libmbedtls)
+Package/openwisp-config-cyassl=$(call Package/openwisp-config/default,cyassl,CyaSSL,+ca-certificates +libcyassl)
+# deprecated on recent versions of OpenWRT (>= Designated Driver) and LEDE (>= 17.01)
+Package/openwisp-config-polarssl=$(call Package/openwisp-config/default,polarssl,PolarSSL,+ca-certificates +libpolarssl)
+Package/openwisp-config-nossl=$(call Package/openwisp-config/default,nossl,No SSL)
+
+define Build/Compile
+endef
+
+define Package/openwisp-config-$(BUILD_VARIANT)/conffiles
+/etc/config/openwisp
+endef
+
+ifeq ($(BUILD_VARIANT),openssl)
+CONFIG_OPENWISP_UCI:=ssl
+endif
+ifeq ($(BUILD_VARIANT),mbedtls)
+CONFIG_OPENWISP_UCI:=ssl
+endif
+ifeq ($(BUILD_VARIANT),cyassl)
+CONFIG_OPENWISP_UCI:=ssl
+endif
+ifeq ($(BUILD_VARIANT),polarssl)
+CONFIG_OPENWISP_UCI:=ssl
+endif
+ifeq ($(BUILD_VARIANT),nossl)
+CONFIG_OPENWISP_UCI:=nossl
+endif
+
+
+define Package/openwisp-config-$(BUILD_VARIANT)/install
+ $(INSTALL_DIR) \
+ $(1)/usr/sbin \
+ $(1)/etc/init.d \
+ $(1)/etc/config \
+ $(1)/etc/openwisp \
+ $(1)/usr/lib/lua/openwisp
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/openwisp.agent \
+ $(1)/usr/sbin/openwisp_config
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/openwisp.init \
+ $(1)/etc/init.d/openwisp_config
+
+ $(INSTALL_CONF) $(PKG_BUILD_DIR)/openwisp-config/files/openwisp-$(CONFIG_OPENWISP_UCI).config \
+ $(1)/etc/config/openwisp
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-reload-config \
+ $(1)/usr/sbin/openwisp-reload-config
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/lib/openwisp/utils.lua \
+ $(1)/usr/lib/lua/openwisp/utils.lua
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-store-unmanaged.lua \
+ $(1)/usr/sbin/openwisp-store-unmanaged
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-restore-unmanaged.lua \
+ $(1)/usr/sbin/openwisp-restore-unmanaged
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-remove-default-wifi.lua \
+ $(1)/usr/sbin/openwisp-remove-default-wifi
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-uci-autoname.lua \
+ $(1)/usr/sbin/openwisp-uci-autoname
+
+ $(INSTALL_BIN) \
+ $(PKG_BUILD_DIR)/openwisp-config/files/sbin/openwisp-update-config.lua \
+ $(1)/usr/sbin/openwisp-update-config
+
+ $(CP) $(PKG_BUILD_DIR)/VERSION $(1)/etc/openwisp/
+endef
+
+$(eval $(call BuildPackage,openwisp-config-openssl))
+$(eval $(call BuildPackage,openwisp-config-mbedtls))
+$(eval $(call BuildPackage,openwisp-config-cyassl))
+$(eval $(call BuildPackage,openwisp-config-polarssl))
+$(eval $(call BuildPackage,openwisp-config-nossl))
include $(TOPDIR)/rules.mk
PKG_NAME:=zabbix
-PKG_VERSION:=3.0.3
+PKG_VERSION:=3.2.4
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=22cf19ef5a9478df2281bf518e8be38adc7dbc508bf63111e02388ca7aabeef4
PKG_SOURCE_URL:=@SF/zabbix
-PKG_MD5SUM:=7c45d37000e67d75042695344c9937e0
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@SF/dejavu
PKG_HASH:=fa9ca4d13871dd122f61258a80d01751d603b4d3ee14095d65453b4e846e17d7
+PKG_LICENSE:=Bitstream-Vera-Fonts-Copyright Arev-Fonts-Copyright Public-Domain
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Mirko Vogt <mirko-dev@nanl.de>
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)
+define Package/lua-mosquitto
SUBMENU:=Lua
SECTION:=lang
CATEGORY:=Languages
MAINTAINER:=Karl Palsson <karlp@remake.is>
endef
-define Package/$(PKG_NAME)/description
+define Package/lua-mosquitto/description
Lua bindings to libmosquitto
endef
-define Package/$(PKG_NAME)/install
+define Package/lua-mosquitto/install
$(INSTALL_DIR) $(1)/usr/lib/lua
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mosquitto.so $(1)/usr/lib/lua
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,lua-mosquitto))
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)
+define Package/lua-openssl
SUBMENU:=Lua
SECTION:=lang
CATEGORY:=Languages
A free, MIT-licensed OpenSSL binding for Lua.
endef
-define Package/$(PKG_NAME)/install
+define Package/lua-openssl/install
$(INSTALL_DIR) $(1)/usr/lib/lua
$(INSTALL_BIN) $(PKG_BUILD_DIR)/openssl.so $(1)/usr/lib/lua/
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,lua-openssl))
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)
+define Package/lua-penlight
SUBMENU:=Lua
SECTION:=lang
CATEGORY:=Languages
MAINTAINER:= Karl Palsson <karlp@remake.is>
endef
-define Package/$(PKG_NAME)/description
+define Package/lua-penlight/description
It is often said of Lua that it does not include batteries.
Penlight is the batteries.
endef
echo "Nothing to compile, pure lua package"
endef
-define Package/$(PKG_NAME)/install
+define Package/lua-penlight/install
$(INSTALL_DIR) $(1)/usr/lib/lua
$(CP) $(PKG_BUILD_DIR)/lua/pl $(1)/usr/lib/lua
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,lua-penlight))
include $(TOPDIR)/rules.mk
PKG_NAME:=php
-PKG_VERSION:=7.1.1
+PKG_VERSION:=7.1.2
PKG_RELEASE:=1
PKG_MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.php.net/distributions/
-PKG_MD5SUM:=65eef256f6e7104a05361939f5e23ada
-PKG_HASH:=b3565b0c1441064eba204821608df1ec7367abff881286898d900c2c2a5ffe70
+PKG_MD5SUM:=d79afea1870277c86fac903566fb6c5d
+PKG_HASH:=d815a0c39fd57bab1434a77ff0610fb507c22f790c66cd6f26e27030c4b3e971
PKG_FIXUP:=libtool autoreconf
PKG_BUILD_PARALLEL:=1
PKG_NAME:=cryptography
PKG_VERSION:=1.5.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/21/e1/37fc14f9d77924e84ba0dcb88eb8352db914583af229287c6c965d66ba0d
--- /dev/null
+diff --git a/setup.py b/setup.py
+index b5c05df..a777dd7 100644
+--- a/setup.py
++++ b/setup.py
+@@ -266,6 +266,7 @@ class DummyPyTest(test):
+ with open(os.path.join(base_dir, "README.rst")) as f:
+ long_description = f.read()
+
++setup_requirements=[]
+
+ setup(
+ name=about["__title__"],
include $(TOPDIR)/rules.mk
PKG_NAME:=python-ldap
-PKG_VERSION:=2.4.30
+PKG_VERSION:=2.4.32
PKG_RELEASE:=1
PKG_MAINTAINER:=Dmitry Trefilov <the-alien@live.ru>
PKG_LICENSE:=Python-style
PKG_LICENSE_FILES:=LICENSE
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/84/61/36ca1a3474aee17ee975deaea51ae8725e49af29ca4c3e88743cd454d2bd
-PKG_MD5SUM:=948342ab28b9a4520ff421bf676b7a7b
+PKG_SOURCE_URL:=https://pypi.python.org/packages/67/d9/fa0ea70d1792875745116ad62ac8d4bcb07550b15cded591bb57df6a6d9a
+PKG_MD5SUM:=7c46c8a04acc227a778c7900c87cdfc7
PKG_BUILD_DEPENDS:=python libopenldap
PKG_MD5SUM:=4a392949ba31a378a18ed3e775a4693f
PKG_BUILD_DIR:=$(BUILD_DIR)/psycopg2-$(PKG_VERSION)
-PKG_BUILD_DEPENDS:=python libpq python-setuptools
+PKG_BUILD_DEPENDS:=python libpq python/host
include $(INCLUDE_DIR)/package.mk
$(call include_mk, python-package.mk)
PKG_NAME:=boost
PKG_VERSION:=1.63.0
PKG_SOURCE_VERSION:=1_63_0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)_$(PKG_SOURCE_VERSION).tar.bz2
PKG_SOURCE_URL:=https://sourceforge.net/projects/boost/files/boost/$(PKG_VERSION)
--- /dev/null
+Index: boost_1_63_0/boost/test/impl/execution_monitor.ipp
+===================================================================
+--- boost_1_63_0.orig/boost/test/impl/execution_monitor.ipp
++++ boost_1_63_0/boost/test/impl/execution_monitor.ipp
+@@ -1375,7 +1375,7 @@ enable( unsigned mask )
+ #endif
+
+ return ~old_cw & BOOST_FPE_ALL;
+-#elif defined(__GLIBC__) && defined(__USE_GNU)
++#elif defined(__GLIBC__) && defined(__USE_GNU) && !defined(BOOST_CLANG) && !defined(BOOST_NO_FENV_H)
+ if (BOOST_FPE_ALL == BOOST_FPE_OFF)
+ /* Not Implemented */
+ return BOOST_FPE_OFF;
+@@ -1415,7 +1415,7 @@ disable( unsigned mask )
+ #endif
+
+ return ~old_cw & BOOST_FPE_ALL;
+-#elif defined(__GLIBC__) && defined(__USE_GNU)
++#elif defined(__GLIBC__) && defined(__USE_GNU) && !defined(BOOST_CLANG) && !defined(BOOST_NO_FENV_H)
+ if (BOOST_FPE_ALL == BOOST_FPE_OFF)
+ /* Not Implemented */
+ return BOOST_FPE_INV;
include $(TOPDIR)/rules.mk
PKG_NAME:=flac
-PKG_VERSION:=1.3.1
-PKG_RELEASE:=3
+PKG_VERSION:=1.3.2
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://downloads.xiph.org/releases/flac/
-PKG_MD5SUM:=b9922c9a0378c88d3e901b234f852698
+PKG_MD5SUM:=454f1bfa3f93cc708098d7890d0499bd
+PKG_HASH:=91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
PKG_INSTALL:=1
ACLOCAL_AMFLAGS = -I m4
--SUBDIRS = doc include m4 man src examples test build objs
+-SUBDIRS = doc include m4 man src examples test build objs microbench
+SUBDIRS = include m4 src build objs
EXTRA_DIST = \
+++ b/src/Makefile.am
@@ -27,10 +27,7 @@ endif
SUBDIRS = \
- share \
libFLAC \
+ share \
- flac \
- metaflac \
$(XMMS_DIRS) \
--- a/configure.ac
+++ b/configure.ac
-@@ -348,11 +348,11 @@ fi
+@@ -386,10 +386,11 @@ fi
if test "x$debug" = xtrue; then
CPPFLAGS="-DDEBUG $CPPFLAGS"
-- CFLAGS=$(echo "$CFLAGS" | sed 's/-g//')
- CFLAGS="-g $CFLAGS"
+ CFLAGS=$(echo "$CFLAGS" | sed 's/-g[0-9]*//')
+ CFLAGS="-g3 $CFLAGS"
else
CPPFLAGS="-DNDEBUG $CPPFLAGS"
-- CFLAGS=$(echo "$CFLAGS" | sed 's/-O2//;s/-g//')
+- CFLAGS=$(echo "$CFLAGS" | sed 's/-O2//')
+ CFLAGS=$(echo "$CFLAGS" | sed 's/-O2//;s/-g[0-9]*//')
CFLAGS="-O3 -funroll-loops $CFLAGS"
fi
+++ /dev/null
---- a/src/libFLAC/cpu.c
-+++ b/src/libFLAC/cpu.c
-@@ -243,7 +243,7 @@ void FLAC__cpu_info(FLAC__CPUInfo *info)
- struct sigaction sigill_save;
- struct sigaction sigill_sse;
- sigill_sse.sa_sigaction = sigill_handler_sse_os;
-- __sigemptyset(&sigill_sse.sa_mask);
-+ sigemptyset(&sigill_sse.sa_mask);
- sigill_sse.sa_flags = SA_SIGINFO | SA_RESETHAND; /* SA_RESETHAND just in case our SIGILL return jump breaks, so we don't get stuck in a loop */
- if(0 == sigaction(SIGILL, &sigill_sse, &sigill_save))
- {
include $(TOPDIR)/rules.mk
PKG_NAME:=glib2
-PKG_VERSION:=2.50.2
-PKG_RELEASE:=2
+PKG_VERSION:=2.50.3
+PKG_RELEASE:=1
PKG_SOURCE:=glib-$(PKG_VERSION).tar.xz
PKG_BUILD_DIR:=$(BUILD_DIR)/glib-$(PKG_VERSION)
PKG_SOURCE_URL:=@GNOME/glib/2.50
-PKG_MD5SUM:=5eeb2bfaf78a07be59585e8b6e80b1d6
+PKG_HASH:=82ee94bf4c01459b6b00cb9db0545c2237921e3060c0b74cff13fbc020cfd999
PKG_BUILD_PARALLEL:=1
HOST_BUILD_PARALLEL:=1
PKG_NAME:=icu4c
PKG_VERSION:=58.2
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_SOURCE:=$(PKG_NAME)-58_2-src.tgz
PKG_SOURCE_URL:=http://download.icu-project.org/files/$(PKG_NAME)/$(PKG_VERSION)
--prefix=$(STAGING_DIR_HOSTPKG)
define Build/InstallDev
- $(INSTALL_DIR) \
- $(1)/usr/include
-
- $(CP) \
- $(PKG_INSTALL_DIR)/usr/include/* \
- $(1)/usr/include/
-
- $(INSTALL_DIR) \
- $(1)/usr/lib
-
- $(CP) \
- $(PKG_INSTALL_DIR)/usr/lib/* \
- $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/include
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_DIR) $(2)/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/icu-config $(1)/usr/bin/
+ $(SED) 's,^\(prefix\|execprefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/icu-config
+ $(LN) $(STAGING_DIR)/usr/bin/icu-config $(2)/bin/
endef
define Host/Install
endef
define Package/icu/install
- $(INSTALL_DIR) \
- $(1)/usr/lib
-
- $(CP) \
- $(PKG_INSTALL_DIR)/usr/lib/*.so* \
- $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/
endef
$(eval $(call BuildPackage,icu))
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)/Default
+define Package/libarchive/Default
SECTION:=libs
CATEGORY:=Libraries
DEPENDS:=+zlib +liblzma +libbz2 +libexpat
URL:=http://www.libarchive.org/
endef
-define Package/$(PKG_NAME)
- $(call Package/$(PKG_NAME)/Default)
+define Package/libarchive
+ $(call Package/libarchive/Default)
DEPENDS += +libopenssl
endef
-define Package/$(PKG_NAME)-noopenssl
- $(call Package/$(PKG_NAME)/Default)
+define Package/libarchive-noopenssl
+ $(call Package/libarchive/Default)
TITLE += (without OpenSSL dependency)
VARIANT:=noopenssl
endef
$(CP) $(PKG_INSTALL_DIR)/usr/bin/bsdtar $(1)/usr/bin
endef
-Package/$(PKG_NAME)-noopenssl/install = $(Package/$(PKG_NAME)/install)
+Package/libarchive-noopenssl/install = $(Package/libarchive/install)
$(eval $(call BuildPackage,libarchive))
$(eval $(call BuildPackage,libarchive-noopenssl))
# CMAKE_OPTIONS += -DLWS_WITHOUT_DEBUG=ON
-define Package/$(PKG_NAME)/Default
+define Package/libwebsockets/Default
SECTION:=libs
CATEGORY:=Libraries
TITLE:=libwebsockets
endef
define Package/libwebsockets-openssl
- $(call Package/$(PKG_NAME)/Default)
+ $(call Package/libwebsockets/Default)
TITLE += (OpenSSL)
DEPENDS += +libopenssl
VARIANT:=openssl
endef
define Package/libwebsockets-cyassl
- $(call Package/$(PKG_NAME)/Default)
+ $(call Package/libwebsockets/Default)
TITLE += (CyaSSL)
DEPENDS += +libcyassl
VARIANT:=cyassl
endef
define Package/libwebsockets-full
- $(call Package/$(PKG_NAME)/Default)
+ $(call Package/libwebsockets/Default)
TITLE += (Full - OpenSSL, libuv, plugins, CGI)
DEPENDS += +libopenssl +libuv
VARIANT:=full
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libwebsockets.so* $(1)/usr/lib/
endef
-Package/$(PKG_NAME)-cyassl/install = $(Package/$(PKG_NAME)/install)
-Package/$(PKG_NAME)-openssl/install = $(Package/$(PKG_NAME)/install)
-Package/$(PKG_NAME)-full/install = $(Package/$(PKG_NAME)/install)
+Package/libwebsockets-cyassl/install = $(Package/libwesockets/install)
+Package/libwebsockets-openssl/install = $(Package/libwebsockets/install)
+Package/libwesockets-full/install = $(Package/libwebsockets/install)
$(eval $(call BuildPackage,libwebsockets-openssl))
$(eval $(call BuildPackage,libwebsockets-cyassl))
--- /dev/null
+#
+# Copyright (C) 2017 Lucian Cristian <lucian.cristian@gmail.com>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+# updated to work with latest source from abrasive
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=musl-fts
+PKG_VERSION:=1.2.7
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/pullmoll/musl-fts.git
+PKG_SOURCE_VERSION:=0bde52df588e8969879a2cae51c3a4774ec62472
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+
+PKG_MAINTAINER:= Lucian Cristian <lucian.cristian@gmail.com>
+
+PKG_LICENSE:=LGPL-2.1
+PKG_LICENSE_FILES:=COPYING AUTHORS
+
+PKG_FIXUP:=autoreconf
+PKG_REMOVE_FILES:=autogen.sh
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/musl-fts
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=fts implementation for musl libc
+ URL:=https://github.com/pullmoll/musl-fts
+ DEPENDS:= +libpthread
+endef
+
+define Package/musl-fts/description
+ The musl-fts package implements the fts(3) functions fts_open, fts_read, fts_children, fts_set and fts_close, which are missing in musl libc.
+endef
+
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/fts.h $(1)/usr/include/
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfts.so* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/musl-fts.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/musl-fts/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfts.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,musl-fts))
--- /dev/null
+#
+# Copyright (C) 2017 Shane Peelar
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pcre2
+PKG_VERSION:=10.23
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
+PKG_MD5SUM:=b2cd00ca7e24049040099b0a46bb3649
+PKG_HASH:=dfc79b918771f02d33968bd34a749ad7487fa1014aeb787fad29dd392b78c56e
+PKG_MAINTAINER:=Shane Peelar <lookatyouhacker@gmail.com>
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=LICENCE
+
+PKG_FIXUP:=autoreconf
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libpcre2/default
+ SECTION:=libs
+ CATEGORY:=Libraries
+ URL:=http://www.pcre.org/
+endef
+
+define Package/libpcre2
+ $(call Package/libpcre2/default)
+ TITLE:=A Perl Compatible Regular Expression library
+endef
+
+define Package/libpcre2-16
+ $(call Package/libpcre2/default)
+ TITLE:=A Perl Compatible Regular Expression library (16bit support)
+endef
+
+
+define Package/libpcre2-32
+ $(call Package/libpcre2/default)
+ TITLE:=A Perl Compatible Regular Expression library (32bit support)
+endef
+
+TARGET_CFLAGS += $(FPIC)
+
+CONFIGURE_ARGS += \
+ --enable-pcre2-16 \
+ --enable-pcre2-32
+
+MAKE_FLAGS += \
+ CFLAGS="$(TARGET_CFLAGS)"
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/pcre2-config $(1)/usr/bin/
+
+ $(INSTALL_DIR) $(2)/bin
+ $(LN) $(STAGING_DIR)/usr/bin/pcre2-config $(2)/bin
+
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/pcre*.h $(1)/usr/include/
+
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre*.{a,so*} $(1)/usr/lib/
+
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpcre*.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/libpcre2/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-{8,posix}.so* $(1)/usr/lib/
+endef
+
+define Package/libpcre2-16/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-16.so* $(1)/usr/lib/
+endef
+
+define Package/libpcre2-32/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre2-32.so* $(1)/usr/lib/
+endef
+
+
+
+$(eval $(call BuildPackage,libpcre2))
+$(eval $(call BuildPackage,libpcre2-16))
+$(eval $(call BuildPackage,libpcre2-32))
include $(TOPDIR)/rules.mk
PKG_NAME:=sqlite
-PKG_VERSION:=3160000
+PKG_VERSION:=3170000
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-autoconf-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.sqlite.org/2017/
-PKG_MD5SUM:=5102404047054b2cec2f43463293f94dea39425d42bf386d24596ab4fac7c7ff
+PKG_MD5SUM:=450a95a7bde697c9fe4de9ae2fffdcca
+PKG_HASH:=a4e485ad3a16e054765baf6371826b5000beed07e626510896069c0bf013874c
PKG_LICENSE:=PUBLICDOMAIN
PKG_LICENSE_FILES:=
include $(TOPDIR)/rules.mk
PKG_NAME:=dovecot
-PKG_VERSION:=2.2.26.0
+PKG_VERSION:=2.2.28
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.dovecot.org/releases/2.2
-PKG_MD5SUM:=85bc42328de41d1eb8d6d3f1db666db8
+PKG_HASH:=e0288f59e326ab87cb3881fdabadafe542f4dc7ab9996db13863a439ebbc1f25
PKG_LICENSE:=LGPL-2.1 MIT BSD-3-Clause Unique
PKG_LICENSE_FILES:=COPYING COPYING.LGPL COPYING.MIT
define Package/dovecot
SECTION:=mail
CATEGORY:=Mail
- DEPENDS:=+DOVECOT_LDAP:libopenldap +libopenssl +librt +zlib +libbz2 +libcap
+ DEPENDS:=+DOVECOT_LDAP:libopenldap +DOVECOT_SQLITE:libsqlite3 +libopenssl +librt +zlib +libbz2 +libcap
TITLE:=An IMAP and POP3 daemon
- MAINTAINER:=Peter Wagner <tripolar@gmx.at>
+ MAINTAINER:=Lucian Cristian <lucian.cristian@gmail.com>
URL:=http://www.dovecot.org/
USERID:=dovecot=59:dovecot=59
endef
default n
help
Implements LDAP support in dovecot.
+ config DOVECOT_SQLITE
+ bool "SQLite support"
+ default n
+ help
+ Implements SQLite DB support in dovecot.
endmenu
endef
--with-moduledir=/usr/lib/dovecot/modules \
--with-notify=dnotify \
--without-lzma \
- --without-lz4
-
-ifneq ($(strip $(CONFIG_DOVECOT_LDAP)),)
- CONFIGURE_ARGS+= \
- --with-ldap=yes
-else
- CONFIGURE_ARGS+= \
- --with-ldap=no
-endif
+ --without-lz4 \
+ --with-icu=no \
+ $(if $(CONFIG_DOVECOT_LDAP),--with-ldap=yes,--with-ldap=no) \
+ $(if $(CONFIG_DOVECOT_SQLITE),--with-sqlite=yes,--with-sqlite=no)
CONFIGURE_VARS += \
RPCGEN= \
include $(TOPDIR)/rules.mk
PKG_NAME:=postfix
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE_URL:=ftp://ftp.porcupine.org/mirrors/postfix-release/official/
PKG_VERSION:=3.1.4
PKG_MD5SUM:=878a059d92ee3b093d7d3e97248c915d
CATEGORY:=Mail
TITLE:=Postfix Mail Transmit Agent
URL:=http://www.postfix.org/
- DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_EAI:icu +libpcre
+ DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_SQLITE:libsqlite3 +POSTFIX_EAI:icu +libpcre
endef
define Package/postfix/description
default y
help
Implements support for cdb files using tinycdb
+ config POSTFIX_SQLITE
+ bool "SQLITE support"
+ default y
+ help
+ Implements support for SQLite3 DB
config POSTFIX_EAI
bool "SMTPUTF8 support"
default n
CCARGS+=-DNO_DB
endif
+ifdef CONFIG_POSTFIX_SQLITE
+ CCARGS+=-DHAS_SQLITE -I$(STAGING_DIR)/usr/include/
+ AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lsqlite3 -lpthread
+endif
+
ifdef CONFIG_POSTFIX_EAI
AUXLIBS+=-licuuc
CCARGS+=-DHAS_EAI
--- /dev/null
+--- a/src/posttls-finger/posttls-finger.c
++++ b/src/posttls-finger/posttls-finger.c
+@@ -318,6 +318,7 @@
+ #include <sys/un.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <stdio.h>
+
+ #ifdef STRCASECMP_IN_STRINGS_H
+ #include <strings.h>
TARGET_CFLAGS += $(TARGET_CPPFLAGS)
-define Package/$(PKG_NAME)
+define Package/ssmtp
SECTION:=mail
CATEGORY:=Mail
DEPENDS:=+libopenssl
URL:=http://packages.debian.org/ssmtp
endef
-define Package/$(PKG_NAME)/description
+define Package/ssmtp/description
A secure, effective and simple way of getting mail off a system to your mail hub.
Mail is simply forwarded to the configured mailhost, no daemons running in the background.
Extremely easy configuration.
endef
-define Package/$(PKG_NAME)/conffiles
+define Package/ssmtp/conffiles
/etc/ssmtp/ssmtp.conf
/etc/ssmtp/revaliases
endef
CONFIGURE_ARGS += \
--enable-ssl
-define Package/$(PKG_NAME)/install
+define Package/ssmtp/install
$(INSTALL_DIR) $(1)/etc/ssmtp
$(INSTALL_CONF) $(PKG_BUILD_DIR)/ssmtp.conf $(1)/etc/ssmtp/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/revaliases $(1)/etc/ssmtp/
ln -s /usr/sbin/ssmtp $(1)/usr/sbin/sendmail
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,ssmtp))
if PACKAGE_libffmpeg-custom
+comment "Build Licensing"
+
+config FFMPEG_CUSTOM_GPL
+ bool "Allow use of GPL code"
+ help
+ By default, FFMpeg is licensed under the LGPL. This builds a GPL licensed version.
+ Some software requires this, such as libx264.
+ default y
+
+config FFMPEG_CUSTOM_GPLV3
+ bool "Use (L)GPL v3"
+ help
+ Uses the LPGL v3 if GPL isn't selected, or GPL v3 if it is.
+
+config FFMPEG_CUSTOM_NONFREE
+ bool "Use code with complex licensing requirements; see help"
+ help
+ This sets --enable-nonfree, which in almost all cases, will prohibit redistribution of the resulting package.
+ Use this with care.
+ default n
+
config FFMPEG_CUSTOM_PATENTED
bool "Include patented codecs and technologies"
default BUILD_PATENTED
+comment "Build Properties"
+
+config FFMPEG_CUSTOM_LARGE
+ bool "Build libffmpeg for performance instead of minimizing size on disk"
+ default y if ( x86_64 )
+ default n
+
comment "Profiles"
config FFMPEG_CUSTOM_FFSERVER_SUPPORT
comment "External Libraries"
-config FFMPEG_CUSTOM_SELECT_mp3lame
- bool "MP3 LAME"
+config FFMPEG_CUSTOM_SELECT_libfdk-aac
+ bool "Fraunhofer FDK AAC encoding library (libfdk-aac)"
+ depends on FFMPEG_CUSTOM_NONFREE
+ depends on FFMPEG_CUSTOM_PATENTED
+ depends on PACKAGE_fdk-aac
+
+config FFMPEG_CUSTOM_SELECT_libmp3lame
+ bool "Libmp3lame"
depends on FFMPEG_CUSTOM_PATENTED
depends on PACKAGE_lame-lib
select FFMPEG_CUSTOM_DECODER_mp3
select FFMPEG_CUSTOM_DEMUXER_mp3
config FFMPEG_CUSTOM_SELECT_libopus
- bool "Opus"
+ bool "Libopus"
+
+config FFMPEG_CUSTOM_SELECT_libshine
+ bool "Libshine"
-config FFMPEG_CUSTOM_SELECT_x264
- bool "x264"
+config FFMPEG_CUSTOM_SELECT_libx264
+ bool "Libx264"
depends on FFMPEG_CUSTOM_PATENTED
+ depends on FFMPEG_CUSTOM_GPL
depends on PACKAGE_libx264
select FFMPEG_CUSTOM_DECODER_h264
select FFMPEG_CUSTOM_MUXER_h264
#
# Copyright (C) 2006-2017 OpenWrt.org
+# Copyright (C) 2017 Ian Leonard <antonlacon@gmail.com>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=ffmpeg
-PKG_VERSION:=3.2.2
+PKG_VERSION:=3.2.4
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://ffmpeg.org/releases/
-PKG_MD5SUM:=e34d1b92c5d844f2a3611c741a6dba18
-PKG_HASH:=3f01bd1fe1a17a277f8c84869e5d9192b4b978cb660872aa2b54c3cc8a2fedfc
-PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
+PKG_MD5SUM:=39fd71024ac76ba35f04397021af5606
+PKG_HASH:=6e38ff14f080c98b58cf5967573501b8cb586e3a173b591f3807d8f0660daf7a
+PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>, \
+ Ian Leonard <antonlacon@gmail.com>
PKG_LICENSE:=LGPL-2.1+ GPL-2+ LGPL-3
PKG_LICENSE_FILES:=COPYING.GPLv2 COPYING.GPLv3 COPYING.LGPLv2.1 COPYING.LGPLv3
define Package/ffmpeg/Default
TITLE:=FFmpeg
- URL:=http://ffmpeg.mplayerhq.hu/
+ URL:=https://ffmpeg.org/
+ DEPENDS+= +libpthread
endef
define Package/ffmpeg/Default/description
SECTION:=multimedia
CATEGORY:=Multimedia
TITLE+= program
- DEPENDS+= +libpthread +libffmpeg-full
+ DEPENDS+= +libffmpeg-full
VARIANT:=full
endef
SECTION:=multimedia
CATEGORY:=Multimedia
TITLE+= streaming server
- DEPENDS+= +libpthread +libffmpeg-full
+ DEPENDS+= +libffmpeg-full
VARIANT:=full
endef
SECTION:=libs
CATEGORY:=Libraries
TITLE+= libraries
- DEPENDS+= @BUILD_PATENTED +libpthread +zlib +libbz2
+ DEPENDS+= +libpthread +zlib +libbz2
PROVIDES:= libffmpeg
endef
$(call Package/libffmpeg/Default)
TITLE+= (custom)
DEPENDS+= +FFMPEG_CUSTOM_SELECT_libopus:libopus \
- +PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib
-
+ +PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib \
+ +FFMPEG_CUSTOM_SELECT_libshine:shine \
+ +PACKAGE_fdk-aac:fdk-aac
VARIANT:=custom
MENU:=1
endef
define Package/libffmpeg-audio-dec
$(call Package/libffmpeg/Default)
TITLE+= (audio)
+ DEPENDS+= @BUILD_PATENTED
VARIANT:=audio-dec
endef
define Package/libffmpeg-full
$(call Package/libffmpeg/Default)
TITLE+= (full)
- DEPENDS+= +alsa-lib +PACKAGE_libx264:libx264 +PACKAGE_lame-lib:lame-lib +libopus
+ DEPENDS+= @BUILD_PATENTED +alsa-lib +PACKAGE_libopus:libopus
+ ifeq ($(CONFIG_SOFT_FLOAT),y)
+ DEPENDS+= +PACKAGE_shine:shine
+ else
+ DEPENDS+= +PACKAGE_lame-lib:lame-lib +PACKAGE_libx264:libx264
+ endif
VARIANT:=full
endef
+
define Package/libffmpeg-full/description
$(call Package/ffmpeg/Default/description)
.
define Package/libffmpeg-mini
$(call Package/libffmpeg/Default)
TITLE+= (mini)
+ DEPENDS+= @BUILD_PATENTED
VARIANT:=mini
endef
--pkg-config="pkg-config" \
--enable-shared \
--enable-static \
- --enable-small \
--enable-pthreads \
--enable-zlib \
--disable-doc \
--disable-debug \
\
- --enable-gpl \
- --enable-version3 \
- \
--disable-dxva2 \
--disable-lzma \
--disable-vaapi \
else ifneq ($(findstring arm,$(CONFIG_ARCH)),)
FFMPEG_CONFIGURE += \
--disable-runtime-cpudetect
+# XXX: GitHub issue 3320 ppc cpu with fpu but no altivec (WNDR4700)
else ifneq ($(findstring powerpc,$(CONFIG_ARCH)),)
FFMPEG_CONFIGURE += \
--disable-altivec
endif
-ifneq ($(CONFIG_YASM),y)
-FFMPEG_CONFIGURE += \
- --disable-yasm
-
-endif
-
-#selectibly disable optimizations according to arch/cpu type
+# selectively disable optimizations according to arch/cpu type
ifneq ($(findstring arm,$(CONFIG_ARCH)),)
ifeq (,$(findstring vfp,$(CONFIG_TARGET_OPTIMIZATION)))
FFMPEG_CONFIGURE+= \
endif
+ifneq ($(CONFIG_YASM),y)
+FFMPEG_CONFIGURE += \
+ --disable-yasm
+
+endif
+
ifeq ($(BUILD_VARIANT),full)
FFMPEG_CONFIGURE+= \
- --enable-libopus --enable-decoder=libopus \
- $(if $(CONFIG_PACKAGE_libx264),--enable-libx264) \
- $(if $(CONFIG_PACKAGE_lame-lib),--enable-libmp3lame)
+ $(if $(CONFIG_PACKAGE_libopus),--enable-libopus)
+ ifeq ($(CONFIG_SOFT_FLOAT),y)
+ FFMPEG_CONFIGURE+= \
+ --enable-small \
+ \
+ $(if $(CONFIG_PACKAGE_shine),--enable-libshine)
+ else
+ FFMPEG_CONFIGURE+= \
+ --enable-small \
+ --enable-gpl \
+ \
+ $(if $(CONFIG_PACKAGE_lame-lib),--enable-libmp3lame) \
+ $(if $(CONFIG_PACKAGE_libx264),--enable-libx264)
+ endif
endif
ifeq ($(BUILD_VARIANT),custom)
$(if $($(3)_$(c)),--enable-$(1)="$(c)") \
)
+ ifeq ($(CONFIG_FFMPEG_CUSTOM_LARGE),y)
+ FFMPEG_CONFIGURE+= \
+ --enable-hardcoded-tables
+ else
+ FFMPEG_CONFIGURE+= \
+ --enable-small
+ endif
+
+ ifeq ($(CONFIG_FFMPEG_CUSTOM_GPL),y)
+ FFMPEG_CONFIGURE+= --enable-gpl
+ endif
+
+ ifeq ($(CONFIG_FFMPEG_CUSTOM_GPLV3),y)
+ FFMPEG_CONFIGURE+= --enable-version3
+ endif
+
+ ifeq ($(CONFIG_FFMPEG_CUSTOM_NONFREE),y)
+ FFMPEG_CONFIGURE+= --enable-nonfree
+ endif
+
FFMPEG_CONFIGURE+= \
--disable-programs \
--disable-avfilter \
FFMPEG_CONFIGURE+= \
--enable-decoder=adpcm_ima_wav \
--enable-decoder=adpcm_ima_qt \
- --enable-decoder=adpcm_ms \
+ --enable-decoder=adpcm_ms
+endif
+
+ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libfdk-aac),y)
+ FFMPEG_CONFIGURE+= \
+ --enable-libfdk-aac --enable-encoder=libfdk_aac
+endif
+ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libmp3lame),y)
+ FFMPEG_CONFIGURE+= \
+ --enable-libmp3lame --enable-encoder=libmp3lame
endif
ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libopus),y)
FFMPEG_CONFIGURE+= \
- --enable-libopus --enable-decoder=libopus
+ --enable-libopus --enable-decoder=libopus --enable-encoder=libopus
endif
-ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_x264),y)
+ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libshine),y)
FFMPEG_CONFIGURE+= \
- --enable-libx264
+ --enable-libshine --enable-encoder=libshine
endif
-ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_mp3lame),y)
+ifeq ($(CONFIG_FFMPEG_CUSTOM_SELECT_libx264),y)
FFMPEG_CONFIGURE+= \
- --enable-libmp3lame
+ --enable-libx264 --enable-encoder=libx264
endif
endif
)
FFMPEG_CONFIGURE+= \
+ --enable-small \
+ --enable-gpl \
+ \
--disable-programs \
--disable-avfilter \
--disable-postproc \
)
FFMPEG_CONFIGURE+= \
+ --enable-small \
+ \
--disable-programs \
--disable-avdevice \
--disable-avfilter \
--disable-everything \
$(call FFMPEG_ENABLE,decoder,$(FFMPEG_MINI_DECODERS)) \
$(call FFMPEG_ENABLE,demuxer,$(FFMPEG_MINI_DEMUXERS)) \
- $(call FFMPEG_ENABLE,protocol,$(FFMPEG_MINI_PROTOCOLS)) \
-
+ $(call FFMPEG_ENABLE,protocol,$(FFMPEG_MINI_PROTOCOLS))
endif
ifneq ($(CONFIG_TARGET_x86),)
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avformat,avutil}.pc $(1)/usr/lib/pkgconfig/
endef
+# Soft float is LGPL (no libpostproc); Hard float is GPL (yes libpostproc)
define Build/InstallDev/full
$(INSTALL_DIR) $(1)/usr/include
- $(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale} $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.{a,so*} $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.pc $(1)/usr/lib/pkgconfig/
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/lib{avcodec,avdevice,avfilter,avformat,avutil,swresample,swscale} $(1)/usr/include/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,swresample,swscale}.{a,so*} $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/lib{avcodec,avdevice,avfilter,avformat,avutil,swresample,swscale}.pc $(1)/usr/lib/pkgconfig/
+ifneq ($(CONFIG_SOFT_FLOAT),y)
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/libpostproc $(1)/usr/include/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.{a,so*} $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpostproc.pc $(1)/usr/lib/pkgconfig/
+endif
endef
define Build/InstallDev/mini
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avformat,avutil}.so.* $(1)/usr/lib/
endef
+# Soft float is LGPL (no libpostproc); Hard float is GPL (yes libpostproc)
define Package/libffmpeg-full/install
$(INSTALL_DIR) $(1)/usr/lib
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,postproc,swresample,swscale}.so.* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{avcodec,avdevice,avfilter,avformat,avutil,swresample,swscale}.so.* $(1)/usr/lib/
+ifneq ($(CONFIG_SOFT_FLOAT),y)
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpostproc.so.* $(1)/usr/lib/
+endif
endef
define Package/libffmpeg-mini/install
include $(TOPDIR)/rules.mk
PKG_NAME:=youtube-dl
-PKG_VERSION:=2016.11.27
+PKG_VERSION:=2017.02.17
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://yt-dl.org/downloads/$(PKG_VERSION)/
-PKG_MD5SUM:=2bb2c4ebf5335d69e03e32a0309abfba
+PKG_MD5SUM:=d38dbe099af22eb9af35b0e8b274dc4e
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
PKG_LICENSE:=Unlicense
include $(TOPDIR)/rules.mk
PKG_NAME:=adblock
-PKG_VERSION:=2.3.1
-PKG_RELEASE:=1
+PKG_VERSION:=2.4.0
+PKG_RELEASE:=2
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)
+define Package/adblock
SECTION:=net
CATEGORY:=Network
TITLE:=Powerful adblock script to block ad/abuse domains
PKGARCH:=all
endef
-define Package/$(PKG_NAME)/description
+define Package/adblock/description
Powerful adblock script to block ad/abuse domains via dnsmasq or unbound dns backend.
The script supports many domain blacklist sites plus manual black- and whitelist overrides.
Please see https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md for further information.
endef
-define Package/$(PKG_NAME)/conffiles
+define Package/adblock/conffiles
/etc/config/adblock
/etc/adblock/adblock.whitelist
/etc/adblock/adblock.blacklist
define Build/Compile
endef
-define Package/$(PKG_NAME)/install
+define Package/adblock/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) ./files/adblock.sh $(1)/usr/bin/
$(INSTALL_CONF) ./files/adblock.whitelist $(1)/etc/adblock/
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,adblock))
* automatically selects uclient-fetch or wget as download utility (other tools like curl or aria2c are supported as well)
* automatically supports a wide range of router modes, even AP modes are supported
* full IPv4 and IPv6 support
+* supports tld compression (top level domain compression), this feature removes thousands of needless host entries from the block lists and lowers the memory footprint for the dns backends
* each block list source will be updated and processed separately
* block list source parsing by fast & flexible regex rulesets
* overall duplicate removal in separate block lists
* adb\_iface => restrict the procd interface trigger to a (list of) certain wan interface(s) or disable it at all (default: not set, disabled)
* adb\_fetch => full path to a different download utility, see example below (default: not set, use wget)
* adb\_fetchparm => options for the download utility, see example below (default: not set, use wget options)
+ * adb\_tldcomp => enable/disable tld compression (default: '1', enabled)
## Examples
<pre><code>
wget (default):
option adb_fetch="/usr/bin/wget"
- option adb_fetchparm="--no-config --quiet --tries=1 --no-cache --no-cookies --max-redirect=0 --timeout=5 --no-check-certificate -O"
+ option adb_fetchparm="--no-config --quiet --no-cache --no-cookies --max-redirect=0 --timeout=10 --no-check-certificate -O"
aria2c:
option adb_fetch '/usr/bin/aria2c'
- option adb_fetchparm '-q --max-tries=1 --timeout=5 --allow-overwrite=true --auto-file-renaming=false --check-certificate=false -o'
+ option adb_fetchparm '-q --timeout=10 --allow-overwrite=true --auto-file-renaming=false --check-certificate=false -o'
uclient-fetch:
option adb_fetch '/bin/uclient-fetch'
- option adb_fetchparm '-q --timeout=5 --no-check-certificate -O'
+ option adb_fetchparm '-q --timeout=10 --no-check-certificate -O'
curl:
option adb_fetch '/usr/bin/curl'
- option adb_fetchparm '-s --retry 1 --connect-timeout 5 --insecure -o'
+ option adb_fetchparm '-s --connect-timeout 10 --insecure -o'
</code></pre>
**receive adblock statistics via ubus:**
if [ $(/etc/init.d/adblock enabled; printf ${?}) -eq 0 ]
then
procd_open_instance "adblock"
- procd_set_param env adb_procd="true"
procd_set_param command "${adb_script}" "${@}"
procd_set_param stdout 1
procd_set_param stderr 1
stop_service()
{
- export adb_procd="true"
rc_procd "${adb_script}" stop
}
query()
{
- export adb_procd="true"
rc_procd "${adb_script}" query "${1}"
}
{
local iface="$(uci -q get adblock.global.adb_iface)"
- procd_open_trigger
- procd_add_config_trigger "config.change" "adblock" /etc/init.d/adblock start
if [ -z "${iface}" ]
then
procd_add_raw_trigger "interface.*.up" 1000 /etc/init.d/adblock start
procd_add_interface_trigger "interface.*.up" "${name}" /etc/init.d/adblock start
done
fi
- procd_close_trigger
+ procd_add_config_trigger "config.change" "adblock" /etc/init.d/adblock start
}
#
LC_ALL=C
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-adb_ver="2.3.1"
+adb_ver="2.4.0-2"
adb_enabled=1
adb_debug=0
adb_backup=0
+adb_tldcomp=1
adb_backupdir="/mnt"
adb_whitelist="/etc/adblock/adblock.whitelist"
adb_whitelist_rset="\$1 ~/^([A-Za-z0-9_-]+\.){1,}[A-Za-z]+/{print tolower(\"^\"\$1\"\\\|[.]\"\$1)}"
#
f_rmtemp()
{
- rm -f "${adb_tmpload}"
- rm -f "${adb_tmpfile}"
- rm -rf "${adb_tmpdir}"
+ if [ -d "${adb_tmpdir}" ]
+ then
+ rm -f "${adb_tmpload}"
+ rm -f "${adb_tmpfile}"
+ rm -rf "${adb_tmpdir}"
+ fi
}
# f_rmdns: remove dns related files & directories
then
logger -t "adblock-[${adb_ver}] ${class}" "Please check the online documentation 'https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md'"
f_rmtemp
- f_rmdns
+ if [ "$(ls -dA "${adb_dnsdir}/${adb_dnsprefix}"* >/dev/null 2>&1)" ]
+ then
+ f_rmdns
+ f_dnsrestart
+ fi
exit 255
fi
fi
#
f_main()
{
- local enabled url cnt sum_cnt=0
- local src_name src_rset shalla_file shalla_archive list active_lists
+ local enabled url cnt sum_cnt=0 mem_total=0
+ local src_name src_rset shalla_archive list active_lists
local sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')"
+ mem_total="$(awk '$1 ~ /^MemTotal/ {printf $2}' "/proc/meminfo" 2>/dev/null)"
f_log "info " "start adblock processing ..."
for src_name in ${adb_sources}
# download block list
#
- f_log "debug" "name: ${src_name}, enabled: ${enabled}, backup: ${adb_backup}, dns: ${adb_dns}, fetch: ${adb_fetch}"
+ f_log "debug" "name: ${src_name}, enabled: ${enabled}, backup: ${adb_backup}, dns: ${adb_dns}, fetch: ${adb_fetch}, memory: ${mem_total}"
if [ "${src_name}" = "blacklist" ]
then
cat "${url}" 2>/dev/null > "${adb_tmpload}"
elif [ "${src_name}" = "shalla" ]
then
shalla_archive="${adb_tmpdir}/shallalist.tar.gz"
- shalla_file="${adb_tmpdir}/shallalist.txt"
"${adb_fetch}" ${adb_fetchparm} "${shalla_archive}" "${url}" 2>/dev/null
adb_rc=${?}
if [ ${adb_rc} -eq 0 ]
then
- > "${shalla_file}"
for category in ${adb_src_cat_shalla}
do
- tar -xOzf "${shalla_archive}" BL/${category}/domains >> "${shalla_file}"
+ tar -xOzf "${shalla_archive}" BL/${category}/domains >> "${adb_tmpload}"
adb_rc=${?}
if [ ${adb_rc} -ne 0 ]
then
break
fi
done
- cat "${shalla_file}" 2>/dev/null > "${adb_tmpload}"
- rm -f "${shalla_file}"
fi
rm -f "${shalla_archive}"
rm -rf "${adb_tmpdir}/BL"
adb_rc=${?}
fi
- # check download result and prepare domain output (incl. list backup/restore)
+ # check download result and prepare domain output (incl. tld compression, list backup & restore)
#
if [ ${adb_rc} -eq 0 ] && [ -s "${adb_tmpload}" ]
then
awk "${src_rset}" "${adb_tmpload}" > "${adb_tmpfile}"
if [ -s "${adb_tmpfile}" ]
then
+ if [ ${adb_tldcomp} -eq 1 ]
+ then
+ awk -F "." '{for(f=NF;f > 1;f--) printf "%s.", $f;print $1}' "${adb_tmpfile}" | sort -u > "${adb_tmpload}"
+ awk '{if(NR==1){tld=$NF};while(getline){if($NF !~ tld"\\."){print tld;tld=$NF}}print tld}' "${adb_tmpload}" > "${adb_tmpfile}"
+ awk -F "." '{for(f=NF;f > 1;f--) printf "%s.", $f;print $1}' "${adb_tmpfile}" > "${adb_tmpload}"
+ else
+ sort -u "${adb_tmpfile}" > "${adb_tmpload}"
+ fi
+ mv -f "${adb_tmpload}" "${adb_tmpfile}"
f_list backup
else
f_list restore
then
if [ -s "${adb_tmpdir}/tmp.whitelist" ]
then
- grep -vf "${adb_tmpdir}/tmp.whitelist" "${adb_tmpfile}" | sort -u | eval "${adb_dnsformat}" > "${adb_dnsfile}"
+ grep -vf "${adb_tmpdir}/tmp.whitelist" "${adb_tmpfile}" | eval "${adb_dnsformat}" > "${adb_dnsfile}"
else
- sort -u "${adb_tmpfile}" | eval "${adb_dnsformat}" > "${adb_dnsfile}"
+ cat "${adb_tmpfile}" | eval "${adb_dnsformat}" > "${adb_dnsfile}"
fi
adb_rc=${?}
if [ ${adb_rc} -ne 0 ]
fi
done
- # sort/unique overall
+ # overall sort
#
for src_name in $(ls -dASr "${adb_tmpdir}/${adb_dnsprefix}"* 2>/dev/null)
do
- if [ -s "${adb_tmpdir}/blocklist.overall" ]
+ if [ ${mem_total} -ge 64000 ]
then
- sort "${adb_tmpdir}/blocklist.overall" "${adb_tmpdir}/blocklist.overall" "${src_name}" | uniq -u > "${adb_tmpdir}/tmp.blocklist"
- cat "${adb_tmpdir}/tmp.blocklist" > "${src_name}"
+ if [ -s "${adb_tmpdir}/blocklist.overall" ]
+ then
+ sort "${adb_tmpdir}/blocklist.overall" "${adb_tmpdir}/blocklist.overall" "${src_name}" | uniq -u > "${adb_tmpdir}/tmp.blocklist"
+ mv -f "${adb_tmpdir}/tmp.blocklist" "${src_name}"
+ fi
+ cat "${src_name}" >> "${adb_tmpdir}/blocklist.overall"
fi
- cat "${src_name}" >> "${adb_tmpdir}/blocklist.overall"
cnt="$(wc -l < "${src_name}")"
sum_cnt=$((sum_cnt + cnt))
list="${src_name/*./}"
#
mv -f "${adb_tmpdir}/${adb_dnsprefix}"* "${adb_dnsdir}" 2>/dev/null
chown "${adb_dns}":"${adb_dns}" "${adb_dnsdir}/${adb_dnsprefix}"* 2>/dev/null
+ f_rmtemp
f_dnsrestart
if [ "${adb_dnsup}" = "true" ]
then
\"dns_backend\":\"${adb_dns}\",
\"last_rundate\":\"$(/bin/date "+%d.%m.%Y %H:%M:%S")\",
\"system\":\"${sysver}\"}}}}"
- f_rmtemp
return 0
fi
f_log "error" "dns backend restart with active block lists failed (${sysver})"
# handle different adblock actions
#
-if [ "${adb_procd}" = "true" ]
-then
- f_envload
- case "${1}" in
- stop)
- f_rmtemp
- f_rmdns
- f_dnsrestart
- ;;
- restart)
- f_rmtemp
- f_rmdns
- f_envcheck
- f_main
- ;;
- suspend)
- f_switch suspend
- ;;
- resume)
- f_switch resume
- ;;
- query)
- f_query "${2}"
- ;;
- *)
- f_envcheck
- f_main
- ;;
- esac
-fi
+f_envload
+case "${1}" in
+ stop)
+ f_rmtemp
+ f_rmdns
+ f_dnsrestart
+ ;;
+ restart)
+ f_rmtemp
+ f_rmdns
+ f_envcheck
+ f_main
+ ;;
+ suspend)
+ f_switch suspend
+ ;;
+ resume)
+ f_switch resume
+ ;;
+ query)
+ f_query "${2}"
+ ;;
+ *)
+ f_envcheck
+ f_main
+ ;;
+esac
exit 0
PKG_NAME:=addrwatch
PKG_VERSION:=0.8
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-master.tar.gz
PKG_SOURCE_URL:=https://github.com/fln/addrwatch/releases/download/$(PKG_VERSION)/
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/addrwatch $(1)/usr/sbin/
$(INSTALL_BIN) ./files/addrwatch.init $(1)/etc/init.d/addrwatch
- $(INSTALL_CONF) ./files/addrwatch.config $(1)/etc/config/addrwatch$
+ $(INSTALL_CONF) ./files/addrwatch.config $(1)/etc/config/addrwatch
endef
$(eval $(call BuildPackage,addrwatch))
START=50
USE_PROCD=1
-. /lib/functions/network.sh
-
validate_section_addrwatch() {
uci_validate_section addrwatch addrwatch "${1}" \
'disabled:bool:0' \
}
start_service() {
+ . /lib/functions/network.sh
config_load 'addrwatch'
config_foreach start_instance 'addrwatch'
}
-menu "Aria2 configuration"
+menu "Aria2 Configuration"
depends on PACKAGE_aria2
choice
- prompt "SSL library"
+ prompt "SSL Library"
default ARIA2_OPENSSL
config ARIA2_OPENSSL
bool "GNUTLS"
config ARIA2_NOSSL
- bool "No SSL support"
+ bool "No SSL Support"
endchoice
config ARIA2_BITTORRENT
- bool "Enable bittorrent support"
+ bool "Enable Bittorrent Support"
depends on ARIA2_OPENSSL
default n
-config ARIA2_METALINK
- bool "Enable metalink support"
- default n
-
config ARIA2_SFTP
- bool "Enable sftp support"
+ bool "Enable SFTP Support"
default n
+config ARIA2_ASYNC_DNS
+ bool "Enable Async DNS Support"
+ default n
+
+config ARIA2_COOKIE
+ bool "Enable Firefox3/Chromium Cookie Support"
+ default n
+
+config ARIA2_METALINK
+ bool "Enable Metalink Support"
+ default n
+
choice
- prompt "XML library"
- default ARIA2_EXPAT
+ prompt "XML Library"
+ default ARIA2_LIBXML2
depends on ARIA2_METALINK
+config ARIA2_LIBXML2
+ bool "LIBXML2"
+
config ARIA2_EXPAT
bool "EXPAT"
-config ARIA2_LIBXML2
- bool "LIBXML2"
-
endchoice
endmenu
include $(TOPDIR)/rules.mk
PKG_NAME:=aria2
-PKG_VERSION:=1.30.0
+PKG_VERSION:=1.31.0
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/aria2/aria2/releases/download/release-$(PKG_VERSION)/
-PKG_MD5SUM:=8c22f569d3fb9e42c5fd9a95173b9b5f
+PKG_HASH:=7b85619048b23406f241e38a5b1b8b0bc2cae9e80fd117810c2a71ecca813f8c
PKG_INSTALL:=1
PKG_MAINTAINER:=Imre Kaloz <kaloz@openwrt.org>, Hsing-Wang Liao <kuoruan@gmail.com>
ARIA2_OPENSSL \
ARIA2_GNUTLS \
ARIA2_BITTORRENT \
- ARIA2_METALINK \
ARIA2_SFTP \
+ ARIA2_ASYNC_DNS \
+ ARIA2_COOKIE \
+ ARIA2_METALINK \
ARIA2_EXPAT \
ARIA2_LIBXML2
SUBMENU:=File Transfer
TITLE:=lightweight download utility
URL:=https://aria2.github.io/
- DEPENDS:=+zlib +ARIA2_SFTP:libssh2 +ARIA2_LIBXML2:libxml2 +ARIA2_EXPAT:libexpat +libstdcpp +ARIA2_OPENSSL:libopenssl +ARIA2_GNUTLS:libgnutls
+ DEPENDS:=+zlib +libstdcpp +ARIA2_SFTP:libssh2 +ARIA2_ASYNC_DNS:libcares +ARIA2_COOKIE:libsqlite3 +ARIA2_LIBXML2:libxml2 +ARIA2_EXPAT:libexpat +ARIA2_OPENSSL:libopenssl +ARIA2_GNUTLS:libgnutls
endef
define Package/aria2/description
CONFIGURE_ARGS += \
--disable-nls \
$(if $(CONFIG_ARIA2_NOSSL),--disable,--enable)-ssl \
- $(if $(CONFIG_ARIA2_OPENSSL),--with,--without)-openssl \
- $(if $(CONFIG_ARIA2_GNUTLS),--with,--without)-gnutls \
$(if $(CONFIG_ARIA2_BITTORRENT),--enable,--disable)-bittorrent \
$(if $(CONFIG_ARIA2_METALINK),--enable,--disable)-metalink \
+ $(if $(CONFIG_ARIA2_OPENSSL),--with,--without)-openssl \
+ $(if $(CONFIG_ARIA2_GNUTLS),--with,--without)-gnutls \
$(if $(CONFIG_ARIA2_SFTP),--with,--without)-libssh2 \
+ $(if $(CONFIG_ARIA2_ASYNC_DNS),--with,--without)-libcares \
+ $(if $(CONFIG_ARIA2_COOKIE),--with,--without)-sqlite3 \
$(if $(CONFIG_ARIA2_LIBXML2),--with,--without)-libxml2 \
$(if $(CONFIG_ARIA2_EXPAT),--with,--without)-libexpat \
--without-libnettle \
--without-libgmp \
--without-libgcrypt \
- --without-libcares \
--without-libuv \
- --without-sqlite3 \
--with-libz
define Package/aria2/install
include $(TOPDIR)/rules.mk
PKG_NAME:=bitlbee
-PKG_VERSION:=3.4.2
+PKG_VERSION:=3.5.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://get.bitlbee.org/src/ \
http://distcache.FreeBSD.org/local-distfiles/brix/
-PKG_MD5SUM:=69c85554def74f314e3b6e390389a30b0e748f23ef37883e9d7545ee2c45ea57
+PKG_MD5SUM:=9636d7fd89ebb3756c13a9a3387736ca6d56ccf66ec0580d512f07b21db0fa69
PKG_MAINTAINER:=Nikil Mehta <nikil.mehta@gmail.com>
PKG_LICENSE:=GPL-2.0
include $(TOPDIR)/rules.mk
PKG_NAME:=clamav
-PKG_VERSION:=0.98.7
+PKG_VERSION:=0.99.2
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0
-PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> \
+ Lucian Cristian <lucian.cristian@gmail.com>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://sourceforge.net/projects/clamav/files/clamav/$(PKG_VERSION)/
-PKG_MD5SUM:=157c601161da1c2d5a0e48ea1b49e067
+PKG_SOURCE_URL:=https://www.clamav.net/downloads/production/
+PKG_HASH:=167bd6a13e05ece326b968fdb539b05c2ffcfef6018a274a10aeda85c2c0027a
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
define Package/clamav/Default
SECTION:=net
- DEPENDS:=+libpthread +uclibcxx +zlib +libcurl +libopenssl
+ DEPENDS:=+libpthread +uclibcxx +zlib +libcurl +libopenssl +libltdl +libpcre2 +USE_MUSL:musl-fts
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=ClamAV
CONFIGURE_VARS += \
INCLUDES="" \
CXXFLAGS="$$$$CXXFLAGS -fno-rtti" \
- LIBS="-lpthread" \
+ $(if $(CONFIG_USE_MUSL),LIBS="-lpthread -lfts",LIBS="-lpthread") \
define Build/Configure
$(call Build/Configure/Default, \
--exec-prefix=/usr/ \
--disable-xml \
--disable-bzip2 \
- --enable-ltdl-install \
--with-user nobody \
--with-group nogroup \
+ --with-pcre="$(STAGING_DIR)/usr/" \
)
endef
option LocalSocket '/var/run/clamav/clamd.sock'
option User 'nobody'
option ExitOnOOM 'yes'
+ option DatabaseDirectory '/usr/share/clamav'
'MaxFileSize:string' \
'LocalSocket:string' \
'User:string' \
- 'ExitOnOOM:string'
+ 'ExitOnOOM:string' \
+ 'DatabaseDirectory:string'
}
start_service() {
StreamMaxPort MaxThreads ReadTimeout CommandReadTimeout MaxDirectoryRecursion \
FollowFileSymlinks FollowDirectorySymlinks SelfCheck DetectPUA ScanPE DisableCertCheck \
ScanELF DetectBrokenExecutables ScanOLE2 ScanPDF ScanSWF ScanMail ScanPartialMessages \
- ScanArchive TemporaryDirectory ArchiveBlockEncrypted MaxFileSize LocalSocket User
+ ScanArchive TemporaryDirectory ArchiveBlockEncrypted MaxFileSize LocalSocket User \
+ DatabaseDirectory
validate_clamav_section clamav || {
echo "validation failed"
return 1
}
- mkdir -p /usr/share/clamav
+ mkdir -p $DatabaseDirectory
mkdir -p /etc/clamav/
mkdir -p /var/run/clamav/
chmod a+rw /var/run/clamav
echo "LocalSocket " $LocalSocket >> $CLAMD_CONFIGFILE
echo "User " $User >> $CLAMD_CONFIGFILE
echo "ExitOnOOM " $ExitOnOOM >> $CLAMD_CONFIGFILE
+ echo "DatabaseDirectory " $DatabaseDirectory >> $CLAMD_CONFIGFILE
procd_open_instance
procd_set_param command $PROG -c $CLAMD_CONFIGFILE
option NotifyClamd '/etc/clamav/clamd.conf'
option DatabaseOwner 'root'
option CompressLocalDatabase 'yes'
+ option DatabaseDirectory '/usr/share/clamav'
'DatabaseMirror:string' \
'NotifyClamd:string' \
'DatabaseOwner:string' \
- 'CompressLocalDatabase:string:'
+ 'CompressLocalDatabase:string' \
+ 'DatabaseDirectory:string:'
}
start_service() {
- local freshclam_config_file UpdateLogFile DatabaseOwner NotifyClamd DatabaseMirror
+ local freshclam_config_file UpdateLogFile DatabaseOwner NotifyClamd DatabaseMirror \
+ DatabaseDirectory
validate_freshclam_section freshclam || {
echo "validation failed"
[ -f /tmp/freshclam.pid ] && echo "already running" && return 0
- mkdir -p /usr/share/clamav
+ mkdir -p $DatabaseDirectory
mkdir -p /etc/clamav
touch /tmp/freshclam.log
touch /tmp/freshclam.pid
echo "NotifyClamd " $NotifyClamd >> $FRESHCLAM_CONFIGFILE
echo "DatabaseOwner " $DatabaseOwner >> $FRESHCLAM_CONFIGFILE
echo "CompressLocalDatabase " $CompressLocalDatabase >> $FRESHCLAM_CONFIGFILE
+ echo "DatabaseDirectory " $DatabaseDirectory >> $FRESHCLAM_CONFIGFILE
procd_open_instance
procd_set_param command $PROG -d --config-file=$FRESHCLAM_CONFIGFILE -p /tmp/freshclam.pid --no-warnings
--- a/clamdscan/proto.c
+++ b/clamdscan/proto.c
-@@ -55,6 +55,7 @@
+@@ -59,6 +59,7 @@
#include "shared/misc.h"
#include "shared/clamdcom.h"
PKG_NAME:=cshark
PKG_VERSION=2015-11-24-$(PKG_SOURCE_VERSION)
-PKG_RELEASE=2
+PKG_RELEASE=3
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/cloudshark/cshark.git
MAINTAINER:=Luka Perkov <luka@openwrt.org>
endef
-define Package/luci-app-cshark
- SECTION:=luci
- CATEGORY:=LuCI
- SUBMENU:=3. Applications
- TITLE:=Cloudshark capture tool Web UI
- DEPENDS:=+cshark +luci
- MAINTAINER:=Luka Perkov <luka@openwrt.org>
-endef
-
CMAKE_OPTIONS = \
-DCMAKE_INSTALL_PREFIX=/usr \
-DWITH_DEBUG=OFF \
$(1)/etc/ssl/certs/
endef
-define Package/luci-app-cshark/install
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci
- $(CP) -R $(PKG_BUILD_DIR)/openwrt/luci/luasrc/* $(1)/usr/lib/lua/luci/
-endef
$(eval $(call BuildPackage,cshark))
-$(eval $(call BuildPackage,luci-app-cshark))
PKG_VERSION:=2.7.6
# Release == build
# increase on changes of services files or tld_names.dat
-PKG_RELEASE:=13
+PKG_RELEASE:=14
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
# no default dependencies
PKG_DEFAULT_DEPENDS=
-define Package/$(PKG_NAME)/Default
+define Package/ddns-scripts/Default
SECTION:=net
CATEGORY:=Network
SUBMENU:=IP Addresses and Names
endef
###### *************************************************************************
-define Package/$(PKG_NAME)
- $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts
+ $(call Package/ddns-scripts/Default)
TITLE:=Dynamic DNS Client scripts (with IPv6 support)
endef
# shown in LuCI package description
-define Package/$(PKG_NAME)/description
+define Package/ddns-scripts/description
Dynamic DNS Client scripts (with IPv6 support) - Info: http://wiki.openwrt.org/doc/howto/ddns.client
endef
# shown in menuconfig <Help>
-define Package/$(PKG_NAME)/config
+define Package/ddns-scripts/config
help
A highly configurable set of scripts for doing dynamic dns updates.
- IPv6 support
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_cloudflare
- $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_cloudflare
+ $(call Package/ddns-scripts/Default)
TITLE:=CloudFlare.com API v1 (deprecated)
- DEPENDS:=$(PKG_NAME)
+ DEPENDS:=ddns-scripts
endef
-define Package/$(PKG_NAME)_cloudflare/description
+define Package/ddns-scripts_cloudflare/description
Dynamic DNS Client scripts extension for CloudFlare.com API-v1 (deprecated)
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_cloudflare.com-v4
- $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_cloudflare.com-v4
+ $(call Package/ddns-scripts/Default)
TITLE:=CloudFlare.com API v4 (require cURL)
- DEPENDS:=$(PKG_NAME) +curl
+ DEPENDS:=ddns-scripts +curl
endef
-define Package/$(PKG_NAME)_cloudflare.com-v4/description
+define Package/ddns-scripts_cloudflare.com-v4/description
Dynamic DNS Client scripts extension for CloudFlare.com API-v4 (require/install cURL)
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_godaddy.com-v1
- $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_godaddy.com-v1
+ $(call Package/ddns-scripts/Default)
TITLE:=GoDaddy.com (require cURL)
- DEPENDS:=$(PKG_NAME) +curl
+ DEPENDS:=ddns-scripts +curl
endef
-define Package/$(PKG_NAME)_godaddy.com-v1/description
+define Package/ddns-scripts_godaddy.com-v1/description
Dynamic DNS Client scripts extension for GoDaddy.com (require/install cURL)
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_no-ip_com
- $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_no-ip_com
+ $(call Package/ddns-scripts/Default)
TITLE:=DDNS extension for No-IP.com
- DEPENDS:=$(PKG_NAME)
+ DEPENDS:=ddns-scripts
endef
-define Package/$(PKG_NAME)_no-ip_com/description
+define Package/ddns-scripts_no-ip_com/description
Dynamic DNS Client scripts extension for No-IP.com
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_nsupdate
- $(call Package/$(PKG_NAME)/Default)
+define Package/ddns-scripts_nsupdate
+ $(call Package/ddns-scripts/Default)
TITLE:=DDNS extension using Bind nsupdate
- DEPENDS:=$(PKG_NAME) +bind-client
+ DEPENDS:=ddns-scripts +bind-client
endef
-define Package/$(PKG_NAME)_nsupdate/description
+define Package/ddns-scripts_nsupdate/description
Dynamic DNS Client scripts extension for direct updates using Bind nsupdate
endef
-define Package/$(PKG_NAME)_nsupdate/config
+define Package/ddns-scripts_nsupdate/config
help
The script directly updates a PowerDNS (or maybe bind server) via nsupdate
from bind-client package. It requires
gzip -f9 $(PKG_BUILD_DIR)/files/public_suffix_list.dat
endef
-define Package/$(PKG_NAME)/conffiles
+define Package/ddns-scripts/conffiles
/etc/config/ddns
endef
###### *************************************************************************
-define Package/$(PKG_NAME)/preinst
+define Package/ddns-scripts/preinst
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)/install
+define Package/ddns-scripts/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/dynamic_dns_*.sh $(1)/usr/lib/ddns
endef
-define Package/$(PKG_NAME)/postinst
+define Package/ddns-scripts/postinst
#!/bin/sh
# if NOT run buildroot and PKG_UPGRADE then (re)start service if enabled
[ -z "$${IPKG_INSTROOT}" -a "$${PKG_UPGRADE}" = "1" ] && {
}
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)/prerm
+define Package/ddns-scripts/prerm
#!/bin/sh
# if run within buildroot exit
[ -n "$${IPKG_INSTROOT}" ] && exit 0
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_cloudflare/preinst
+define Package/ddns-scripts_cloudflare/preinst
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_cloudflare/install
+define Package/ddns-scripts_cloudflare/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_cloudflare
$(INSTALL_DIR) $(1)/usr/share
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_cloudflare_com_v1.sh $(1)/usr/lib/ddns
endef
-define Package/$(PKG_NAME)_cloudflare/postinst
+define Package/ddns-scripts_cloudflare/postinst
#!/bin/sh
# remove old services file entries
/bin/sed -i '/cloudflare\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1
}
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_cloudflare/prerm
+define Package/ddns-scripts_cloudflare/prerm
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_cloudflare.com-v4/preinst
+define Package/ddns-scripts_cloudflare.com-v4/preinst
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_cloudflare.com-v4/install
+define Package/ddns-scripts_cloudflare.com-v4/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_cloudflare.com-v4
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_cloudflare_com_v4.sh $(1)/usr/lib/ddns
endef
-define Package/$(PKG_NAME)_cloudflare.com-v4/postinst
+define Package/ddns-scripts_cloudflare.com-v4/postinst
#!/bin/sh
# remove old services file entries
/bin/sed -i '/cloudflare\.com-v4/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1
}
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_cloudflare.com-v4/prerm
+define Package/ddns-scripts_cloudflare.com-v4/prerm
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_godaddy.com-v1/preinst
+define Package/ddns-scripts_godaddy.com-v1/preinst
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_godaddy.com-v1/install
+define Package/ddns-scripts_godaddy.com-v1/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_godaddy.com-v1
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_godaddy_com_v1.sh $(1)/usr/lib/ddns
endef
-define Package/$(PKG_NAME)_godaddy.com-v1/postinst
+define Package/ddns-scripts_godaddy.com-v1/postinst
#!/bin/sh
# remove old services file entries
/bin/sed -i '/godaddy\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1
}
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_godaddy.com-v1/prerm
+define Package/ddns-scripts_godaddy.com-v1/prerm
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_no-ip_com/preinst
+define Package/ddns-scripts_no-ip_com/preinst
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_no-ip_com/install
+define Package/ddns-scripts_no-ip_com/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_no-ip_com
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_no-ip_com.sh $(1)/usr/lib/ddns
endef
-define Package/$(PKG_NAME)_no-ip_com/postinst
+define Package/ddns-scripts_no-ip_com/postinst
#!/bin/sh
# remove old services file entries
/bin/sed -i '/no-ip\.com/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1
}
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_no-ip_com/prerm
+define Package/ddns-scripts_no-ip_com/prerm
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
endef
###### *************************************************************************
-define Package/$(PKG_NAME)_nsupdate/preinst
+define Package/ddns-scripts_nsupdate/preinst
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_nsupdate/install
+define Package/ddns-scripts_nsupdate/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_nsupdate
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_nsupdate.sh $(1)/usr/lib/ddns
endef
-define Package/$(PKG_NAME)_nsupdate/postinst
+define Package/ddns-scripts_nsupdate/postinst
#!/bin/sh
# remove old services file entries
/bin/sed -i '/bind-nsupdate/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1
}
exit 0 # suppress errors
endef
-define Package/$(PKG_NAME)_nsupdate/prerm
+define Package/ddns-scripts_nsupdate/prerm
#!/bin/sh
# if NOT run buildroot then stop service
[ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
endef
###### *************************************************************************
-$(eval $(call BuildPackage,$(PKG_NAME)))
-$(eval $(call BuildPackage,$(PKG_NAME)_cloudflare))
-$(eval $(call BuildPackage,$(PKG_NAME)_cloudflare.com-v4))
-$(eval $(call BuildPackage,$(PKG_NAME)_godaddy.com-v1))
-$(eval $(call BuildPackage,$(PKG_NAME)_no-ip_com))
-$(eval $(call BuildPackage,$(PKG_NAME)_nsupdate))
+$(eval $(call BuildPackage,ddns-scripts))
+$(eval $(call BuildPackage,ddns-scripts_cloudflare))
+$(eval $(call BuildPackage,ddns-scripts_cloudflare.com-v4))
+$(eval $(call BuildPackage,ddns-scripts_godaddy.com-v1))
+$(eval $(call BuildPackage,ddns-scripts_no-ip_com))
+$(eval $(call BuildPackage,ddns-scripts_nsupdate))
"dnsdynamic.org" "http://[USERNAME]:[PASSWORD]@www.dnsdynamic.org/api/?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
-"dnsexit.com" "http://www.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]" "0=|1="
+"dnsexit.com" "http://update.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]"
"dnshome.de" "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip=[IP]"
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)
+define Package/dynapoint
SECTION:=net
CATEGORY:=Network
SUBMENU:=wireless
TITLE:=Dynamic access point manager
endef
-define Package/$(PKG_NAME)/description
+define Package/dynapoint/description
Dynapoint uses LUA scripts to allow dynamic access point creation
and deletion depending on changes of certain network conditions.
endef
-define Package/$(PKG_NAME)/conffiles
+define Package/dynapoint/conffiles
/etc/config/dynapoint
endef
define Build/Compile
endef
-define Package/$(PKG_NAME)/install
+define Package/dynapoint/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) ./src/dynapoint.lua $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DATA) ./src/dynapoint.config $(1)/etc/config/dynapoint
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,dynapoint))
include $(TOPDIR)/rules.mk
PKG_NAME:=fping
-PKG_VERSION:=3.13
+PKG_VERSION:=3.16
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://fping.org/dist/
-PKG_MD5SUM:=4bb28efd1cb3d1240ae551dadc20daa852b1ba71bafe32e49ca629c1848e5720
+PKG_MD5SUM:=2f753094e4df3cdb1d99be1687c0fb7d2f14c0d526ebf03158c8c5519bc78f54
PKG_MAINTAINER:=Nikil Mehta <nikil.mehta@gmail.com>
PKG_LICENSE:=BSD-4-Clause
include $(TOPDIR)/rules.mk
PKG_NAME:=gnunet
-PKG_SOURCE_VERSION:=a4295da3df82817ff2fe1fa547374a96a2e0280b
-PKG_VERSION:=0.10.2-git-20170111-$(PKG_SOURCE_VERSION)
+PKG_SOURCE_VERSION:=f7ef810b99d2c47d5a07739ecb0be1667f32567f
+PKG_MIRROR_HASH:=1f1fbccff28240ca8c1980b3f7c95ee413a2978f6a245838d7acaae19db3f586
+
+PKG_VERSION:=0.10.2-git-20170313-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_URL:=https://gnunet.org/git/gnunet.git
PKG_SOURCE_PROTO:=git
$(if $(CONFIG_PACKAGE_libsqlite3),--with-sqlite="$(STAGING_DIR)/usr",--without-sqlite) \
--disable-testing \
--disable-testruns \
- --disable-wachs \
--enable-experimental \
--with-extractor=$(STAGING_DIR)/usr \
--with-gnutls=$(STAGING_DIR)/usr \
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gnunet-$$$$bin $(1)/usr/bin/ ; \
done )
- ( for lib in arm ats block cadet core datacache dht \
+ ( for lib in arm ats block blockgroup cadet core datacache dht \
dns dnsparser fragmentation friends hello identity natauto natnew nse \
peerinfo regexblock regex revocation scalarproduct set \
statistics transport util; do \
DEPENDS_experiments:=+libglpk
PLUGIN_experiments:=ats_mlp ats_ril
-LIBEXEC_experiments:=service-dht-whanau service-dht-xvine
# BIN_dv:=dv
LIB_dv:=dv
PLUGIN_social-pgsql:=psycstore_postgres
CONFLICTS_social-pgsql:=gnunet-social-sqlite gnunet-social-mysql
-DEPENDS_gns-sqlite:=+libsqlite3 +gnunet-gns
+DEPENDS_sqlite:=+libsqlite3
+LIB_sqlite:=sq
+
+DEPENDS_gns-sqlite:=+gnunet-gns +gnunet-sqlite
PLUGIN_gns-sqlite:=namecache_sqlite namestore_sqlite
CONFLICTS_gns-sqlite:=gnunet-gns-flat
-DEPENDS_peerstore-sqlite:=+libsqlite3 +gnunet-peerstore
+DEPENDS_peerstore-sqlite:=+gnunet-peerstore +gnunet-sqlite
PLUGIN_peerstore-sqlite:=peerstore_sqlite
CONFLICTS_peerstore-sqlite:=gnunet-peerstore-flat
-DEPENDS_dhtcache-sqlite:=+libsqlite3
+DEPENDS_dhtcache-sqlite:=+gnunet-sqlite
PLUGIN_dhtcache-sqlite:=datacache_sqlite
-DEPENDS_fs-sqlite:=+libsqlite3 +gnunet-datastore
+DEPENDS_fs-sqlite:=+gnunet-datastore +gnunet-sqlite
PLUGIN_fs-sqlite:=datastore_sqlite
-DEPENDS_social-sqlite:=+libsqlite3 +gnunet-social
+DEPENDS_social-sqlite:=+gnunet-social +gnunet-sqlite
PLUGIN_social-sqlite:=psycstore_sqlite
DEPENDS_transport-bluetooth:=+bluez-libs
$(eval $(call BuildComponent,fs-heap,heap-based filesharing plugin,))
$(eval $(call BuildComponent,gns-flat,flat storage GNS plugins,y))
$(eval $(call BuildComponent,peerstore-flat,flat storage peerstore plugin,))
-$(eval $(call BuildComponent,mysql,mySQL datastore backend,))
+$(eval $(call BuildComponent,mysql,mySQL backend,))
$(eval $(call BuildComponent,fs-mysql,mySQL filesharing plugins,))
$(eval $(call BuildComponent,social-mysql,mySQL social plugins,))
-$(eval $(call BuildComponent,pgsql,PostgreSQL storage backends,))
+$(eval $(call BuildComponent,pgsql,PostgreSQL backend,))
$(eval $(call BuildComponent,dhtcache-pgsql,PostgreSQL dhtcache plugin,))
$(eval $(call BuildComponent,fs-pgsql,PostgreSQL filesharing plugin,))
$(eval $(call BuildComponent,gns-pgsql,PostgreSQL GNS plugins,))
$(eval $(call BuildComponent,social-pgsql,PostgreSQL social plugin,))
+$(eval $(call BuildComponent,sqlite,libsqlite3 backend,))
$(eval $(call BuildComponent,dhtcache-sqlite,libsqlite3 dhtcache plugin,))
$(eval $(call BuildComponent,fs-sqlite,libsqlite3 filesharing plugin,))
$(eval $(call BuildComponent,gns-sqlite,libsqlite3 gns plugins,))
include $(TOPDIR)/rules.mk
PKG_NAME:=gnurl
-PKG_VERSION:=7.51.0
+PKG_VERSION:=7.53.1
PKG_RELEASE:=1
-PKG_DIST_VERSION:=$(subst .,_,$(strip $(PKG_VERSION)))
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_DIST_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://gnunet.org/sites/default/files
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_DIST_VERSION)
-PKG_MD5SUM:=2f0200d38eca6c9567447d2b8ac4676911ec73b9613a15bef31bbe9f9f22f4e5
+PKG_HASH:=cdac891a3253022b7fd75f6c71b279b5f35cc109f0b61d8068c79bca081802aa
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=irssi
-PKG_VERSION:=0.8.21
+PKG_VERSION:=1.0.2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=https://github.com/irssi/irssi/releases/download/0.8.21/
-PKG_MD5SUM:=b820760c3b4f3b0c24abe4db82b6366a
+PKG_SOURCE_URL:=https://github.com/irssi/irssi/releases/download/1.0.2/
+PKG_HASH:=5c1c3cc2caf103aad073fadeb000e0f8cb3b416833a7f43ceb8bd9fcf275fbe9
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
#
-# Copyright (C) 2016 Dan Luedtke <mail@danrl.com>
+# Copyright (C) 2016-2017 Dan Luedtke <mail@danrl.com>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=jool
-PKG_VERSION:=2016.12.17
+PKG_VERSION:=2017.03.09
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/NICMx/Jool.git
-PKG_SOURCE_VERSION:=66a791c90751d7941b08c142babe1deec73d0996
+PKG_SOURCE_VERSION:=997a81bb5f5e9d82aa122fd37b7c890e44a245dd
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.xz
#
-# Copyright (C) 2014-2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+# Copyright (C) 2014-2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=knot
-PKG_VERSION:=2.3.0
+PKG_VERSION:=2.3.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://secure.nic.cz/files/knot-dns/
-PKG_MD5SUM:=7ca754f972fb07faa4f30e50d8a4385b
+PKG_HASH:=a929bce3b957a81776b1db7b43b0e4473339bf16be8dbba5abb4b0593bf43c94
PKG_MAINTAINER:=Daniel Salzman <daniel.salzman@nic.cz>
PKG_LICENSE:=GPL-3.0 LGPL-2.0 0BSD MIT OLDAP-2.8
define Package/knot-zonecheck/install
$(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kzonecheck $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kzonecheck $(1)/usr/bin/
endef
define Package/knot-keymgr/install
+++ /dev/null
-From 84849be189c49ef9556bd84d5e5103317372e8a7 Mon Sep 17 00:00:00 2001
-From: Karel Slany <karel.slany@nic.cz>
-Date: Thu, 11 Aug 2016 11:39:39 +0200
-Subject: [PATCH] Added conversion to wire format when writing FNV64 hash
- values.
-
-Test on big-endian machines have been failing.
----
- src/libknot/cookies/alg-fnv64.c | 6 +++---
- tests/libknot/test_cookies-client.c | 20 ++++++++++----------
- tests/libknot/test_cookies-server.c | 20 ++++++++++----------
- 3 files changed, 23 insertions(+), 23 deletions(-)
-
-diff --git a/src/libknot/cookies/alg-fnv64.c b/src/libknot/cookies/alg-fnv64.c
-index 9989a4f..5e263c1 100644
---- a/src/libknot/cookies/alg-fnv64.c
-+++ b/src/libknot/cookies/alg-fnv64.c
-@@ -17,10 +17,10 @@
- #include <assert.h>
- #include <stdint.h>
- #include <stdlib.h>
--#include <string.h>
-
- #include "contrib/fnv/fnv.h"
- #include "contrib/sockaddr.h"
-+#include "contrib/wire.h"
- #include "libknot/attribute.h"
- #include "libknot/cookies/alg-fnv64.h"
- #include "libknot/rrtype/opt-cookie.h"
-@@ -80,7 +80,7 @@ static uint16_t cc_gen_fnv64(const struct knot_cc_input *input,
- assert(KNOT_OPT_COOKIE_CLNT == sizeof(hash_val));
-
- cc_len = sizeof(hash_val);
-- memcpy(cc_out, &hash_val, cc_len);
-+ wire_write_u64(cc_out, hash_val);
-
- return cc_len;
- }
-@@ -127,7 +127,7 @@ static uint16_t sc_gen_fnv64(const struct knot_sc_input *input,
- assert(SRVR_FNV64_HASH_SIZE == sizeof(hash_val));
-
- hash_len = sizeof(hash_val);
-- memcpy(hash_out, &hash_val, hash_len);
-+ wire_write_u64(hash_out, hash_val);
-
- return hash_len;
- }
-diff --git a/tests/libknot/test_cookies-client.c b/tests/libknot/test_cookies-client.c
-index 44be903..712dbba 100644
---- a/tests/libknot/test_cookies-client.c
-+++ b/tests/libknot/test_cookies-client.c
-@@ -110,7 +110,7 @@ int main(int argc, char *argv[])
- hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
- ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
- {
-- uint8_t expected[] = { 0x74, 0x31, 0xf9, 0xa8, 0x03, 0xef, 0x15, 0xb1 };
-+ uint8_t expected[] = { 0xb1, 0x15, 0xef, 0x03, 0xa8, 0xf9, 0x31, 0x74 };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
- }
-
-@@ -123,7 +123,7 @@ int main(int argc, char *argv[])
- hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
- ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
- {
-- uint8_t expected[] = { 0x7c, 0x62, 0x25, 0xd2, 0x43, 0xdd, 0x09, 0xe7 };
-+ uint8_t expected[] = { 0xe7, 0x09, 0xdd, 0x43, 0xd2, 0x25, 0x62, 0x7c };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
- }
-
-@@ -136,7 +136,7 @@ int main(int argc, char *argv[])
- hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
- ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
- {
-- uint8_t expected[] = { 0x7c, 0x62, 0x25, 0xd2, 0x43, 0xdd, 0x09, 0xe7 };
-+ uint8_t expected[] = { 0xe7, 0x09, 0xdd, 0x43, 0xd2, 0x25, 0x62, 0x7c };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
- }
-
-@@ -149,7 +149,7 @@ int main(int argc, char *argv[])
- hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
- ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
- {
-- uint8_t expected[] = { 0x05, 0xa9, 0xd1, 0x08, 0x1b, 0x98, 0xe0, 0xaa };
-+ uint8_t expected[] = { 0xaa, 0xe0, 0x98, 0x1b, 0x08, 0xd1, 0xa9, 0x05 };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
- }
-
-@@ -162,7 +162,7 @@ int main(int argc, char *argv[])
- hash_len = knot_cc_alg_fnv64.gen_func(&cc_in, hash, hash_len);
- ok(hash_len != 0 && hash_len == knot_cc_alg_fnv64.cc_size, "cookies: FNV64 client cookie output");
- {
-- uint8_t expected[] = { 0x05, 0xa9, 0xd1, 0x08, 0x1b, 0x98, 0xe0, 0xaa };
-+ uint8_t expected[] = { 0xaa, 0xe0, 0x98, 0x1b, 0x08, 0xd1, 0xa9, 0x05 };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 client cookie content");
- }
-
-@@ -179,7 +179,7 @@ int main(int argc, char *argv[])
- }
-
- {
-- uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xaf };
-+ uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x33 };
- ret = knot_cc_check(cookie, sizeof(cookie), NULL, &knot_cc_alg_fnv64);
- ok(ret == KNOT_EINVAL, "cookies: FNV64 client cookie check no input");
- }
-@@ -190,7 +190,7 @@ int main(int argc, char *argv[])
- cc_in.secret_data = secret;
- cc_in.secret_len = sizeof(secret);
- {
-- uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xaf };
-+ uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x33 };
- ret = knot_cc_check(cookie, sizeof(cookie), &cc_in, NULL);
- ok(ret == KNOT_EINVAL, "cookies: FNV64 client cookie check no algorithm");
- }
-@@ -201,7 +201,7 @@ int main(int argc, char *argv[])
- cc_in.secret_data = secret;
- cc_in.secret_len = sizeof(secret);
- {
-- uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xaf };
-+ uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x33 };
- ret = knot_cc_check(cookie, sizeof(cookie), &cc_in, &knot_cc_alg_fnv64);
- ok(ret == KNOT_EOK, "cookies: FNV64 client good cookie check");
- }
-@@ -212,7 +212,7 @@ int main(int argc, char *argv[])
- cc_in.secret_data = secret;
- cc_in.secret_len = sizeof(secret);
- {
-- uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xaf };
-+ uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x33 };
- ret = knot_cc_check(cookie, sizeof(cookie) - 1, &cc_in, &knot_cc_alg_fnv64);
- ok(ret == KNOT_EINVAL, "cookies: FNV64 client cookie check invalid length");
- }
-@@ -223,7 +223,7 @@ int main(int argc, char *argv[])
- cc_in.secret_data = secret;
- cc_in.secret_len = sizeof(secret);
- {
-- uint8_t cookie[] = { 0x33, 0x0c, 0xa6, 0x80, 0x94, 0x17, 0xe5, 0xae };
-+ uint8_t cookie[] = { 0xaf, 0xe5, 0x17, 0x94, 0x80, 0xa6, 0x0c, 0x32 };
- ret = knot_cc_check(cookie, sizeof(cookie), &cc_in, &knot_cc_alg_fnv64);
- ok(ret == KNOT_EINVAL, "cookies: FNV64 client cookie check invalid cookie");
- }
-diff --git a/tests/libknot/test_cookies-server.c b/tests/libknot/test_cookies-server.c
-index 32001c1..66a54ba 100644
---- a/tests/libknot/test_cookies-server.c
-+++ b/tests/libknot/test_cookies-server.c
-@@ -28,10 +28,10 @@
- #include "libknot/rrtype/opt-cookie.h"
-
- const char *cookie_opts[] = {
-- "\x00\x0a" "\x00\x10" "\x00\x01\x02\x03\x04\x05\x06\x07" "\xe0\xd9\x95\x4e\xbc\xc3\x99\x18", /* 8 octets long wrong server cookie. */
-- "\x00\x0a" "\x00\x10" "\x00\x01\x02\x03\x04\x05\x06\x07" "\xe0\xd9\x95\x4e\xbc\xc3\x99\x19", /* 8 octets long OK server cookie. */
-- "\x00\x0a" "\x00\x18" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\xc0\xbd\xdb\xec\x19\x78\x88\x38", /* 8B nonce 8B hash long wrong server cookie. */
-- "\x00\x0a" "\x00\x18" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\xc0\xbd\xdb\xec\x19\x78\x88\x39" /* 8B nonce 8B hash long OK server cookie. */
-+ "\x00\x0a" "\x00\x10" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x19\x99\xc3\xbc\x4e\x95\xd9\xdf", /* 8 octets long wrong server cookie. */
-+ "\x00\x0a" "\x00\x10" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x19\x99\xc3\xbc\x4e\x95\xd9\xe0", /* 8 octets long OK server cookie. */
-+ "\x00\x0a" "\x00\x18" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x39\x88\x78\x19\xec\xdb\xbd\xbf", /* 8B nonce 8B hash long wrong server cookie. */
-+ "\x00\x0a" "\x00\x18" "\x00\x01\x02\x03\x04\x05\x06\x07" "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x39\x88\x78\x19\xec\xdb\xbd\xc0"/* 8B nonce 8B hash long OK server cookie. */
- };
-
- #define ROPT(i) ((const uint8_t *)cookie_opts[(i)])
-@@ -193,7 +193,7 @@ int main(int argc, char *argv[])
- hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
- ok(hash_len != 0, "cookies: FNV64 server cookie output");
- {
-- uint8_t expected[] = { 0x75, 0x45, 0x7c, 0x9a, 0xe0, 0x13, 0xa8, 0xea };
-+ uint8_t expected[] = { 0xea, 0xa8, 0x13, 0xe0, 0x9a, 0x7c, 0x45, 0x75 };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
- }
-
-@@ -210,7 +210,7 @@ int main(int argc, char *argv[])
- hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
- ok(hash_len != 0, "cookies: FNV64 server cookie output");
- {
-- uint8_t expected[] = { 0xc0, 0xbd, 0xdb, 0xec, 0x19, 0x78, 0x88, 0x39 };
-+ uint8_t expected[] = { 0x39, 0x88, 0x78, 0x19, 0xec, 0xdb, 0xbd, 0xc0 };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
- }
-
-@@ -227,7 +227,7 @@ int main(int argc, char *argv[])
- hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
- ok(hash_len != 0, "cookies: FNV64 server cookie output");
- {
-- uint8_t expected[] = { 0xe0, 0xd9, 0x95, 0x4e, 0xbc, 0xc3, 0x99, 0x19 };
-+ uint8_t expected[] = { 0x19, 0x99, 0xc3, 0xbc, 0x4e, 0x95, 0xd9, 0xe0 };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
- }
-
-@@ -244,7 +244,7 @@ int main(int argc, char *argv[])
- hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
- ok(hash_len != 0, "cookies: FNV64 server cookie output");
- {
-- uint8_t expected[] = { 0x4d, 0xde, 0xfa, 0x22, 0xb9, 0x0a, 0xcc, 0xd8 };
-+ uint8_t expected[] = { 0xd8, 0xcc, 0x0a, 0xb9, 0x22, 0xfa, 0xde, 0x4d };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
- }
-
-@@ -261,7 +261,7 @@ int main(int argc, char *argv[])
- hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
- ok(hash_len != 0, "cookies: FNV64 server cookie output");
- {
-- uint8_t expected[] = { 0xa0, 0x35, 0xe3, 0xe0, 0x78, 0x7a, 0x91, 0xaf };
-+ uint8_t expected[] = { 0xaf, 0x91, 0x7a, 0x78, 0xe0, 0xe3, 0x35, 0xa0 };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
- }
-
-@@ -278,7 +278,7 @@ int main(int argc, char *argv[])
- hash_len = knot_sc_alg_fnv64.hash_func(&sc_in, hash, hash_len);
- ok(hash_len != 0, "cookies: FNV64 server cookie output");
- {
-- uint8_t expected[] = { 0x8e, 0xa3, 0xf8, 0x97, 0x84, 0x0a, 0x3d, 0x8b };
-+ uint8_t expected[] = { 0x8b, 0x3d, 0x0a, 0x84, 0x97, 0xf8, 0xa3, 0x8e };
- ok(sizeof(expected) == hash_len && 0 == memcmp(expected, hash, hash_len), "cookies: FNV64 server cookie content");
- }
-
---
-2.7.4
-
include $(TOPDIR)/rules.mk
PKG_NAME:=lighttpd
-PKG_VERSION:=1.4.42
+PKG_VERSION:=1.4.45
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://download.lighttpd.net/lighttpd/releases-1.4.x
-PKG_MD5SUM:=53c55d7e1dac7adec161cd5490491f6d
+PKG_MD5SUM:=a128e1eda76899ce3fd115efae5fe631
PKG_LICENSE:=BSD-3c
PKG_LICENSE_FILES:=COPYING
--- /dev/null
+From: Glenn Strauss <gstrauss@gluelogic.com>
+Subject: [PATCH] [mod_cgi] fix CGI local-redir w/ url.rewrite-once (fixes
+ #2793)
+
+x-ref:
+ "1.4.40 regression: broken redirect (using Location) between url.rewrite-once URLs"
+ https://redmine.lighttpd.net/issues/2793
+---
+ src/mod_cgi.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/src/mod_cgi.c
++++ b/src/mod_cgi.c
+@@ -560,8 +560,7 @@ static int cgi_demux_response(server *sr
+ }
+
+ connection_response_reset(srv, con); /*(includes con->http_status = 0)*/
+-
+- con->mode = DIRECT;
++ plugins_call_connection_reset(srv, con);
+ return FDEVENT_HANDLED_COMEBACK;
+ }
+ }
+@@ -780,7 +779,7 @@ static int cgi_recv_response(server *srv
+ /* if we get a IN|HUP and have read everything don't exec the close twice */
+ return HANDLER_FINISHED;
+ case FDEVENT_HANDLED_COMEBACK:
+- cgi_connection_close(srv, hctx);
++ /*cgi_connection_close(srv, hctx);*//*(already cleaned up and hctx is now invalid)*/
+ return HANDLER_COMEBACK;
+ case FDEVENT_HANDLED_ERROR:
+ log_error_write(srv, __FILE__, __LINE__, "s", "demuxer failed: ");
PKG_NAME:=mwan3
PKG_VERSION:=2.0
-PKG_RELEASE:=3
-PKG_MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>
+PKG_RELEASE:=4
+PKG_MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>, \
+ Florian Eckert <fe@dev.tdt.de>
PKG_LICENSE:=GPLv2
include $(INCLUDE_DIR)/package.mk
SUBMENU:=Routing and Redirection
DEPENDS:=+ip +ipset +iptables +iptables-mod-conntrack-extra +iptables-mod-ipopt
TITLE:=Multiwan hotplug script with connection tracking support
- MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>
+ MAINTAINER:=Jeroen Louwes <jeroen.louwes@gmail.com>, \
+ Florian Eckert <fe@dev.tdt.de>
PKGARCH:=all
endef
PKG_NAME:=net-snmp
PKG_VERSION:=5.7.3
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/net-snmp
SNMP_MIB_MODULES_INCLUDED = \
+ agent/extend \
agentx \
host/hr_device \
host/hr_disk \
PKG_NAME:=ntp
PKG_VERSION:=4.2.8p9
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/
+#!/bin/sh
+
NAME=ntpd
-CONFIG=/etc/ntp.conf
-COMMAND=/sbin/$NAME
+COMMAND=/etc/init.d/$NAME
[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && {
- [ -x $COMMAND ] && [ -r $CONFIG ] && {
- killall ntpd
- /etc/init.d/ntpd start
- } &
+ $COMMAND enabled && {
+ $COMMAND restart
+ }
}
--without-pam
endif
-ifeq ($(CONFIG_OPENSSL_ENGINE),y)
+ifeq ($(CONFIG_OPENSSL_ENGINE_CRYPTO),y)
CONFIGURE_ARGS+= \
--with-ssl-engine
endif
ln -sfn $CHAP_SECRETS /etc/ppp/chap-secrets
procd_open_instance
- procd_set_param command $BIN -c $CONFIG -o $OPTIONS_PPTP
+ procd_set_param command $BIN -c $CONFIG --fg -o $OPTIONS_PPTP
procd_close_instance
}
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)
+define Package/privoxy
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
endef
# shown in LuCI package description
-define Package/$(PKG_NAME)/description
+define Package/privoxy/description
$(TITLE) - Homepage: www.privoxy.org
endef
# shown in make menuconfig <Help>
-define Package/$(PKG_NAME)/config
+define Package/privoxy/config
help
Privoxy is a web proxy with advanced filtering capabilities for protecting
privacy, modifying web page content, managing cookies, controlling access,
# needed otherwise errors during compile
MAKE_FLAGS:=
-define Package/$(PKG_NAME)/conffiles
+define Package/privoxy/conffiles
/etc/config/privoxy
/etc/privoxy/user.action
/etc/privoxy/user.filter
/etc/privoxy/user.trust
endef
-define Package/$(PKG_NAME)/preinst
+define Package/privoxy/preinst
#!/bin/sh
[ -n "$${IPKG_INSTROOT}" ] && exit 0 # if run within buildroot exit
exit 0 # suppress errors from stop command
endef
-define Package/$(PKG_NAME)/install
+define Package/privoxy/install
if [ -f $(PKG_INSTALL_DIR)/etc/privoxy/trust ]; then \
mv -f $(PKG_INSTALL_DIR)/etc/privoxy/trust $(PKG_INSTALL_DIR)/etc/privoxy/user.trust; \
fi
$(INSTALL_CONF) ./files/privoxy.config $(1)/etc/config/privoxy
endef
-define Package/$(PKG_NAME)/postinst
+define Package/privoxy/postinst
#!/bin/sh
grep -i privoxy $${IPKG_INSTROOT}/etc/services >/dev/null 2>&1 || \
echo -e "privoxy\t8118" >> $${IPKG_INSTROOT}/etc/services
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,privoxy))
# no default dependencies
PKG_DEFAULT_DEPENDS:=
-define Package/$(PKG_NAME)/Default
+define Package/radicale/Default
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
PKGARCH:=all
USERID:=radicale=5232:radicale=5232
endef
-define Package/$(PKG_NAME)-py2
- $(call Package/$(PKG_NAME)/Default)
+define Package/radicale-py2
+ $(call Package/radicale/Default)
TITLE+= (Python 2)
VARIANT:=2
DEPENDS:=+python-logging +python-openssl +python-xml +python-codecs
endef
-define Package/$(PKG_NAME)-py3
- $(call Package/$(PKG_NAME)/Default)
+define Package/radicale-py3
+ $(call Package/radicale/Default)
TITLE+= (Python 3)
VARIANT:=3
DEPENDS:=+python3-logging +python3-openssl +python3-xml +python3-codecs +python3-email
endef
# shown in LuCI package description
-define Package/$(PKG_NAME)-py2/description
+define Package/radicale-py2/description
Radicale CalDAV/CardDAV server (Python 2) - Homepage: http://radicale.org/
endef
-define Package/$(PKG_NAME)-py3/description
+define Package/radicale-py3/description
Radicale CalDAV/CardDAV server (Python 3) - Homepage: http://radicale.org/
endef
# shown in make menuconfig <Help>
-define Package/$(PKG_NAME)-py2/config
+define Package/radicale-py2/config
help
The Radicale Project is a CalDAV (calendar) and CardDAV (contact) server.
It aims to be a light solution, easy to use, easy to install, easy to configure.
Version : $(PKG_VERSION)
Homepage: http://radicale.org/
endef
-Package/$(PKG_NAME)-py3/config = $(Package/$(PKG_NAME)-py2/config)
+Package/radicale-py3/config = $(Package/radicale-py2/config)
-define Package/$(PKG_NAME)-py2/conffiles
+define Package/radicale-py2/conffiles
/etc/config/radicale
/etc/radicale/users
/etc/radicale/rights
endef
-Package/$(PKG_NAME)-py3/conffiles = $(Package/$(PKG_NAME)-py2/conffiles)
+Package/radicale-py3/conffiles = $(Package/radicale-py2/conffiles)
define Build/Configure
# nothing to configure
# nothing to compile
endef
-define Package/$(PKG_NAME)-py2/preinst
+define Package/radicale-py2/preinst
#!/bin/sh
[ -n "$${IPKG_INSTROOT}" ] && exit 0 # if run within buildroot exit
exit 0 # suppress errors from stop command
endef
-define Package/$(PKG_NAME)-py3/preinst
-$(call Package/$(PKG_NAME)-py2/preinst)
+define Package/radicale-py3/preinst
+$(call Package/radicale-py2/preinst)
endef
-define Package/$(PKG_NAME)/inst_all
+define Package/radicale/inst_all
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/radicale.init $(1)/etc/init.d/radicale
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/radicale $(1)/usr/bin/
endef
-define Package/$(PKG_NAME)-py2/install
- $(call Package/$(PKG_NAME)/inst_all, $(1))
+define Package/radicale-py2/install
+ $(call Package/radicale/inst_all, $(1))
$(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)/radicale
$(CP) $(PKG_BUILD_DIR)/radicale/* $(1)$(PYTHON_PKG_DIR)/radicale
endef
-define Package/$(PKG_NAME)-py3/install
- $(call Package/$(PKG_NAME)/inst_all, $(1))
+define Package/radicale-py3/install
+ $(call Package/radicale/inst_all, $(1))
$(INSTALL_DIR) $(1)$(PYTHON3_PKG_DIR)/radicale
$(CP) $(PKG_BUILD_DIR)/radicale/* $(1)$(PYTHON3_PKG_DIR)/radicale
endef
-define Package/$(PKG_NAME)-py2/postinst
+define Package/radicale-py2/postinst
#!/bin/sh
# patch /usr/bin/radicale force run using python2
/bin/sed -i 's/python/python2/' $${IPKG_INSTROOT}/usr/bin/radicale
endef
-define Package/$(PKG_NAME)-py3/postinst
+define Package/radicale-py3/postinst
#!/bin/sh
# patch /usr/bin/radicale force run using python3
/bin/sed -i 's/python/python3/' $${IPKG_INSTROOT}/usr/bin/radicale
endef
-$(eval $(call BuildPackage,$(PKG_NAME)-py2))
-$(eval $(call BuildPackage,$(PKG_NAME)-py3))
+$(eval $(call BuildPackage,radicale-py2))
+$(eval $(call BuildPackage,radicale-py3))
include $(TOPDIR)/rules.mk
PKG_NAME:=ser2net
-PKG_VERSION:=3.3
+PKG_VERSION:=3.4
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/ser2net
-PKG_MD5SUM:=8daf1cfd70d2b220b184c412c64faf2c
-PKG_HASH:=3d1cef5f48df8291e57d4d7d4eac2fc809ae644a5524ffca4aebef0f4e4153dc
+PKG_MD5SUM:=562274d783534276a9feac913b7d8c4e
+PKG_HASH:=d846066e27c3072565990745d030357aa0c278f96b7d1d4f59023347c1db8824
PKG_LICENSE:=GPL-2.0+
PKG_LICENSE_FILES:=COPYING
PKG_NAME:=strongswan
PKG_VERSION:=5.5.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://download.strongswan.org/ http://download2.strongswan.org/
START=90
STOP=10
+. $IPKG_INSTROOT/lib/functions.sh
+
+UCI_IPSEC_CONFIG=/etc/config/ipsec
+
+IPSEC_SECRETS_FILE=/etc/ipsec.secrets
+IPSEC_CONN_FILE=/etc/ipsec.conf
+STRONGSWAN_CONF_FILE=/etc/strongswan.conf
+
+IPSEC_VAR_SECRETS_FILE=/var/ipsec/ipsec.secrets
+IPSEC_VAR_CONN_FILE=/var/ipsec/ipsec.conf
+STRONGSWAN_VAR_CONF_FILE=/var/ipsec/strongswan.conf
+
+ENABLED_REMOTE_PEERS=0
+
+file_reset() {
+ : > "$1"
+}
+
+xappend() {
+ local file="$1"
+ shift
+
+ echo "${@}" >> "${file}"
+}
+
+remove_include() {
+ local file="$1"
+ local include="$2"
+
+ sed -i "\_${include}_d" "${file}"
+}
+
+remove_includes() {
+ remove_include "${IPSEC_CONN_FILE}" "${IPSEC_VAR_CONN_FILE}"
+ remove_include "${IPSEC_SECRETS_FILE}" "${IPSEC_VAR_SECRETS_FILE}"
+ remove_include "${STRONGSWAN_CONF_FILE}" "${STRONGSWAN_VAR_CONF_FILE}"
+}
+
+do_include() {
+ local conf="$1"
+ local uciconf="$2"
+ local backup=`mktemp -t -p /tmp/ ipsec-init-XXXXXX`
+
+ [ ! -f "${conf}" ] && rm -rf "${conf}"
+ touch "${conf}"
+
+ cat "${conf}" | grep -v "${uciconf}" > "${backup}"
+ mv "${backup}" "${conf}"
+ xappend "${conf}" "include ${uciconf}"
+ file_reset "${uciconf}"
+}
+
+ipsec_reset() {
+ do_include "${IPSEC_CONN_FILE}" "${IPSEC_VAR_CONN_FILE}"
+}
+
+ipsec_xappend() {
+ xappend "${IPSEC_VAR_CONN_FILE}" "$@"
+}
+
+swan_reset() {
+ do_include "${STRONGSWAN_CONF_FILE}" "${STRONGSWAN_VAR_CONF_FILE}"
+}
+
+swan_xappend() {
+ xappend "${STRONGSWAN_VAR_CONF_FILE}" "$@"
+}
+
+secret_reset() {
+ do_include "${IPSEC_SECRETS_FILE}" "${IPSEC_VAR_SECRETS_FILE}"
+}
+
+secret_xappend() {
+ xappend "${IPSEC_VAR_SECRETS_FILE}" "$@"
+}
+
+warning() {
+ echo "WARNING: $@" >&2
+}
+
+add_crypto_proposal() {
+ local encryption_algorithm
+ local hash_algorithm
+ local dh_group
+
+ config_get encryption_algorithm "$1" encryption_algorithm
+ config_get hash_algorithm "$1" hash_algorithm
+ config_get dh_group "$1" dh_group
+
+ [ -n "${encryption_algorithm}" ] && \
+ crypto="${crypto:+${crypto},}${encryption_algorithm}${hash_algorithm:+-${hash_algorithm}}${dh_group:+-${dh_group}}"
+}
+
+set_crypto_proposal() {
+ local conf="$1"
+ local proposal
+
+ crypto=""
+
+ config_get crypto_proposal "$conf" crypto_proposal ""
+ for proposal in $crypto_proposal; do
+ add_crypto_proposal "$proposal"
+ done
+
+ [ -n "${crypto}" ] && {
+ local force_crypto_proposal
+
+ config_get_bool force_crypto_proposal "$conf" force_crypto_proposal
+
+ [ "${force_crypto_proposal}" = "1" ] && crypto="${crypto}!"
+ }
+
+ crypto_proposal="${crypto}"
+}
+
+config_conn() {
+ # Generic ipsec conn section shared by tunnel and transport
+ local mode
+ local local_subnet
+ local local_nat
+ local local_sourceip
+ local local_updown
+ local local_firewall
+ local remote_subnet
+ local remote_sourceip
+ local remote_updown
+ local remote_firewall
+ local ikelifetime
+ local lifetime
+ local margintime
+ local keyingtries
+ local dpdaction
+ local dpddelay
+ local inactivity
+ local keyexchange
+
+ config_get mode "$1" mode "route"
+ config_get local_subnet "$1" local_subnet ""
+ config_get local_nat "$1" local_nat ""
+ config_get local_sourceip "$1" local_sourceip ""
+ config_get local_updown "$1" local_updown ""
+ config_get local_firewall "$1" local_firewall ""
+ config_get remote_subnet "$1" remote_subnet ""
+ config_get remote_sourceip "$1" remote_sourceip ""
+ config_get remote_updown "$1" remote_updown ""
+ config_get remote_firewall "$1" remote_firewall ""
+ config_get ikelifetime "$1" ikelifetime "3h"
+ config_get lifetime "$1" lifetime "1h"
+ config_get margintime "$1" margintime "9m"
+ config_get keyingtries "$1" keyingtries "3"
+ config_get dpdaction "$1" dpdaction "none"
+ config_get dpddelay "$1" dpddelay "30s"
+ config_get inactivity "$1" inactivity
+ config_get keyexchange "$1" keyexchange "ikev2"
+
+ [ -n "$local_nat" ] && local_subnet=$local_nat
+
+ ipsec_xappend "conn $config_name-$1"
+ ipsec_xappend " left=%any"
+ ipsec_xappend " right=$remote_gateway"
+
+ [ -n "$local_sourceip" ] && ipsec_xappend " leftsourceip=$local_sourceip"
+ [ -n "$local_subnet" ] && ipsec_xappend " leftsubnet=$local_subnet"
+
+ [ -n "$local_firewall" ] && ipsec_xappend " leftfirewall=$local_firewall"
+ [ -n "$remote_firewall" ] && ipsec_xappend " rightfirewall=$remote_firewall"
+
+ ipsec_xappend " ikelifetime=$ikelifetime"
+ ipsec_xappend " lifetime=$lifetime"
+ ipsec_xappend " margintime=$margintime"
+ ipsec_xappend " keyingtries=$keyingtries"
+ ipsec_xappend " dpdaction=$dpdaction"
+ ipsec_xappend " dpddelay=$dpddelay"
+
+ [ -n "$inactivity" ] && ipsec_xappend " inactivity=$inactivity"
+
+ if [ "$auth_method" = "psk" ]; then
+ ipsec_xappend " leftauth=psk"
+ ipsec_xappend " rightauth=psk"
+
+ [ "$remote_sourceip" != "" ] && ipsec_xappend " rightsourceip=$remote_sourceip"
+ [ "$remote_subnet" != "" ] && ipsec_xappend " rightsubnet=$remote_subnet"
+
+ ipsec_xappend " auto=$mode"
+ else
+ warning "AuthenticationMethod $auth_method not supported"
+ fi
+
+ [ -n "$local_identifier" ] && ipsec_xappend " leftid=$local_identifier"
+ [ -n "$remote_identifier" ] && ipsec_xappend " rightid=$remote_identifier"
+ [ -n "$local_updown" ] && ipsec_xappend " leftupdown=$local_updown"
+ [ -n "$remote_updown" ] && ipsec_xappend " rightupdown=$remote_updown"
+ ipsec_xappend " keyexchange=$keyexchange"
+
+ set_crypto_proposal "$1"
+ [ -n "${crypto_proposal}" ] && ipsec_xappend " esp=$crypto_proposal"
+ [ -n "${ike_proposal}" ] && ipsec_xappend " ike=$ike_proposal"
+}
+
+config_tunnel() {
+ config_conn "$1"
+
+ # Specific for the tunnel part
+ ipsec_xappend " type=tunnel"
+}
+
+config_transport() {
+ config_conn "$1"
+
+ # Specific for the transport part
+ ipsec_xappend " type=transport"
+}
+
+config_remote() {
+ local enabled
+ local gateway
+ local pre_shared_key
+ local auth_method
+
+ config_name=$1
+
+ config_get_bool enabled "$1" enabled 0
+ [ "$enabled" = "0" ] && return
+
+ ENABLED_REMOTE_PEERS=$((ENABLED_REMOTE_PEERS + 1))
+
+ config_get gateway "$1" gateway
+ config_get pre_shared_key "$1" pre_shared_key
+ config_get auth_method "$1" authentication_method
+ config_get local_identifier "$1" local_identifier ""
+ config_get remote_identifier "$1" remote_identifier ""
+
+ [ "$gateway" = "any" ] && remote_gateway="%any" || remote_gateway="$gateway"
+
+ [ -z "$local_identifier" ] && {
+ local ipdest
+
+ [ "$remote_gateway" = "%any" ] && ipdest="1.1.1.1" || ipdest="$remote_gateway"
+ local_gateway=`ip route get $ipdest | awk -F"src" '/src/{gsub(/ /,"");print $2}'`
+ }
+
+ [ -n "$local_identifier" ] && secret_xappend -n "$local_identifier " || secret_xappend -n "$local_gateway "
+ [ -n "$remote_identifier" ] && secret_xappend -n "$remote_identifier " || secret_xappend -n "$remote_gateway "
+
+ secret_xappend ": PSK \"$pre_shared_key\""
+
+ set_crypto_proposal "$1"
+ ike_proposal="$crypto_proposal"
+
+ config_list_foreach "$1" tunnel config_tunnel
+
+ config_list_foreach "$1" transport config_transport
+
+ ipsec_xappend ""
+}
+
+config_ipsec() {
+ local debug
+ local rtinstall_enabled
+ local routing_tables_ignored
+ local routing_table
+ local routing_table_id
+ local interface
+ local device_list
+
+ ipsec_reset
+ secret_reset
+ swan_reset
+
+ ipsec_xappend "# generated by /etc/init.d/ipsec"
+ ipsec_xappend "version 2"
+ ipsec_xappend ""
+
+ secret_xappend "# generated by /etc/init.d/ipsec"
+
+ config_get debug "$1" debug 0
+ config_get_bool rtinstall_enabled "$1" rtinstall_enabled 1
+ [ $rtinstall_enabled = "1" ] && install_routes=yes || install_routes=no
+
+ # prepare extra charon config option ignore_routing_tables
+ for routing_table in $(config_get "$1" "ignore_routing_tables"); do
+ if [ "$routing_table" -ge 0 ] 2>/dev/null; then
+ routing_table_id=$routing_table
+ else
+ routing_table_id=$(sed -n '/[ \t]*[0-9]\+[ \t]\+'$routing_table'[ \t]*$/s/[ \t]*\([0-9]\+\).*/\1/p' /etc/iproute2/rt_tables)
+ fi
+
+ [ -n "$routing_table_id" ] && append routing_tables_ignored "$routing_table_id"
+ done
+
+ swan_xappend "# generated by /etc/init.d/ipsec"
+ swan_xappend "charon {"
+ swan_xappend " load_modular = yes"
+ swan_xappend " install_routes = $install_routes"
+ [ -n "$routing_tables_ignored" ] && swan_xappend " ignore_routing_tables = $routing_tables_ignored"
+ swan_xappend " plugins {"
+ swan_xappend " include /etc/strongswan.d/charon/*.conf"
+ swan_xappend " }"
+ swan_xappend " syslog {"
+ swan_xappend " identifier = ipsec"
+ swan_xappend " daemon {"
+ swan_xappend " default = $debug"
+ swan_xappend " }"
+ swan_xappend " auth {"
+ swan_xappend " default = $debug"
+ swan_xappend " }"
+ swan_xappend " }"
+ swan_xappend "}"
+}
+
+prepare_env() {
+ mkdir -p /var/ipsec
+ remove_includes
+ config_load ipsec
+ config_foreach config_ipsec ipsec
+ config_foreach config_remote remote
+}
+
start() {
- ipsec start
+ prepare_env
+ [ $ENABLED_REMOTE_PEERS != 0 -o ! -f $UCI_IPSEC_CONFIG ] && ipsec start
}
stop() {
}
restart() {
- ipsec restart
+ prepare_env
+ [ $ENABLED_REMOTE_PEERS != 0 -o ! -f $UCI_IPSEC_CONFIG ] && ipsec restart || ipsec stop
}
reload() {
- ipsec update
+ prepare_env
+ [ $ENABLED_REMOTE_PEERS != 0 -o ! -f $UCI_IPSEC_CONFIG ] && {
+ ipsec secrets
+ if [[ ! -z "$(ipsec status)" ]]; then
+ ipsec reload
+ else
+ ipsec start
+ fi
+ } || ipsec stop
}
include $(TOPDIR)/rules.mk
PKG_NAME:=tor
-PKG_VERSION:=0.2.9.9
+PKG_VERSION:=0.2.9.10
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://dist.torproject.org/ \
https://archive.torproject.org/tor-package-archive
-PKG_MD5SUM:=33325d2b250fd047ba2ddc5d11c2190c4e2951f4b03ec48ebd8bf0666e990d43
+PKG_MD5SUM:=6760a646a096b61e307b84fb5ae93cc7
+PKG_HASH:=d611283e1fb284b5f884f8c07e7d3151016851848304f56cfdf3be2a88bd1341
PKG_MAINTAINER:=Hauke Mehrtens <hauke@hauke-m.de>
PKG_LICENSE_FILES:=LICENSE
include $(TOPDIR)/rules.mk
PKG_NAME:=travelmate
-PKG_VERSION:=0.3.2
+PKG_VERSION:=0.4.2
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)
+define Package/travelmate
SECTION:=net
CATEGORY:=Network
TITLE:=A wlan connection manager for travel router
PKGARCH:=all
endef
-define Package/$(PKG_NAME)/description
+define Package/travelmate/description
A wlan connection manager for travel router.
Please see https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md for further information.
endef
-define Package/$(PKG_NAME)/conffiles
+define Package/travelmate/conffiles
/etc/config/travelmate
endef
define Build/Compile
endef
-define Package/$(PKG_NAME)/install
+define Package/travelmate/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) ./files/travelmate.sh $(1)/usr/bin/
$(INSTALL_CONF) ./files/travelmate.conf $(1)/etc/config/travelmate
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,travelmate))
* STA interfaces operating in an "always off" mode, to make sure that the AP is always accessible
* easy setup within normal OpenWrt/LEDE environment
* fast uplink connections
+* "active mode" support, where travelmate will be restarted every n seconds (default 60) and checks the existing uplink connection regardless of ifdown event trigger
+* support of devices with multiple radios
* procd init system support
* procd based hotplug support, the travelmate start will be triggered by interface triggers
* status & debug logging to syslog
## OpenWrt / LEDE trunk Installation & Usage
* download the package [here](https://downloads.lede-project.org/snapshots/packages/x86_64/packages)
* install 'travelmate' (_opkg install travelmate_)
-* configure your network to support (multiple) wlan uplinks and set travelmate config options (details see below)
+* configure your network to support (multiple) wlan uplinks and set travelmate config options (see below)
* set 'trm\_enabled' option in travelmate config to '1'
* travelmate starts automatically during boot and will be triggered by procd interface triggers
* travelmate config options:
* trm\_enabled => main switch to enable/disable the travelmate service (default: '0', disabled)
* trm\_debug => enable/disable debug logging (default: '0', disabled)
+ * trm\_active => keep travelmate in an active state (default: '0', disabled)
* trm\_maxwait => how long (in seconds) should travelmate wait for wlan interface reload action (default: '20')
* trm\_maxretry => how many times should travelmate try to find an uplink after a trigger event (default: '3')
+ * trm\_timeout => timeout in seconds for "active mode" (default: '60')
* trm\_iw => set this option to '0' to use iwinfo for wlan scanning (default: '1', use iw)
+ * trm\_radio => limit travelmate to a dedicated radio, e.g. 'radio0' (default: not set, use all radios)
* trm\_iface => restrict the procd interface trigger to a (list of) certain wan interface(s) or disable it at all (default: not set, disabled)
## Setup
[...]
config zone
option name 'wan'
- option input 'REJECT'
- option output 'ACCEPT'
- option forward 'REJECT'
- option masq '1'
- option mtu_fix '1'
option network 'wan wan6 wwan'
[...]
</code></pre>
config wifi-iface
option device 'radio0'
option network 'lan'
- option ifname 'wlan0'
option mode 'ap'
option ssid 'example_ap'
option encryption 'psk2+ccmp'
option network 'wwan'
option mode 'sta'
option ssid 'example_01'
- option ifname 'wwan01'
option encryption 'psk2+ccmp'
option key 'abc'
option disabled '1'
option network 'wwan'
option mode 'sta'
option ssid 'example_02'
- option ifname 'wwan02'
option encryption 'psk2+ccmp'
option key 'xyz'
option disabled '1'
option network 'wwan'
option mode 'sta'
option ssid 'example_03'
- option ifname 'wwan03'
option encryption 'none'
option disabled '1'
[...]
config travelmate 'global'
option trm_enabled '0'
option trm_debug '0'
- option trm_maxwait '20'
+ option trm_active '0'
+ option trm_maxwait '30'
option trm_maxretry '3'
+ option trm_timeout '60'
option trm_iw '1'
start_service()
{
- procd_open_instance "travelmate"
- procd_set_param env trm_procd="true"
- procd_set_param command "${trm_script}" "${@}"
- procd_set_param stdout 1
- procd_set_param stderr 1
- procd_close_instance
+ if [ $(/etc/init.d/travelmate enabled; printf ${?}) -eq 0 ]
+ then
+ procd_open_instance "travelmate"
+ procd_set_param command "${trm_script}" "${@}"
+ procd_set_param stdout 1
+ procd_set_param stderr 1
+ procd_close_instance
+ fi
}
service_triggers()
procd_add_interface_trigger "interface.*.down" "${name}" /etc/init.d/travelmate start
done
fi
-
procd_add_config_trigger "config.change" "travelmate" /etc/init.d/travelmate start
}
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# prepare environment
+# set initial defaults
#
LC_ALL=C
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-trm_ver="0.3.2"
+trm_ver="0.4.2"
+trm_sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')"
trm_enabled=1
trm_debug=0
-trm_maxwait=20
+trm_active=0
+trm_maxwait=30
trm_maxretry=3
+trm_timeout=60
trm_iw=1
+# f_envload: load travelmate environment
+#
f_envload()
{
# source required system libraries
then
. "/lib/functions.sh"
else
- f_log "error" "status ::: required system library not found"
+ f_log "error" "required system library not found"
fi
# load uci config and check 'enabled' option
if [ ${trm_enabled} -ne 1 ]
then
- f_log "info " "status ::: travelmate is currently disabled, please set 'trm_enabled' to '1' to use this service"
+ f_log "info " "travelmate is currently disabled, please set 'trm_enabled' to '1' to use this service"
exit 0
fi
fi
if [ -z "${trm_scanner}" ]
then
- f_log "error" "status ::: no wireless tool for wlan scanning found, please install 'iw' or 'iwinfo'"
+ f_log "error" "no wireless tool for wlan scanning found, please install 'iw' or 'iwinfo'"
fi
}
-# function to bring down all STA interfaces
+# f_prepare: gather radio information & bring down all STA interfaces
#
f_prepare()
{
local config="${1}"
local mode="$(uci -q get wireless."${config}".mode)"
- local network="$(uci -q get wireless."${config}".network)"
+ local radio="$(uci -q get wireless."${config}".device)"
local disabled="$(uci -q get wireless."${config}".disabled)"
- if [ "${mode}" = "sta" ] && [ -n "${network}" ]
+ if [ "${mode}" = "ap" ] && ([ -z "${disabled}" ] || [ "${disabled}" = "0" ]) && \
+ ([ -z "${trm_radio}" ] || [ "${trm_radio}" = "${radio}" ])
+ then
+ trm_radiolist="${trm_radiolist} ${radio}"
+ elif [ "${mode}" = "sta" ]
then
- trm_stalist="${trm_stalist} ${config}_${network}"
+ trm_stalist="${trm_stalist} ${config}_${radio}"
if [ -z "${disabled}" ] || [ "${disabled}" = "0" ]
then
uci -q set wireless."${config}".disabled=1
- f_log "debug" "prepare ::: config: ${config}, interface: ${network}"
fi
fi
+ f_log "debug" "mode: ${mode}, radio: ${radio}, config: ${config}, disabled: ${disabled}"
}
+# f_check: check interface status
+#
f_check()
{
- local ifname cnt=1 mode="${1}"
+ local ifname radio cnt=1 mode="${1}"
trm_ifstatus="false"
while [ ${cnt} -le ${trm_maxwait} ]
do
if [ "${mode}" = "ap" ]
then
- trm_ifstatus="$(ubus -S call network.wireless status | jsonfilter -l1 -e '@.*.up')"
+ for radio in ${trm_radiolist}
+ do
+ trm_ifstatus="$(ubus -S call network.wireless status | jsonfilter -e "@.${radio}.up")"
+ if [ "${trm_ifstatus}" = "true" ]
+ then
+ trm_aplist="${trm_aplist} $(ubus -S call network.wireless status | jsonfilter -e "@.${radio}.interfaces[@.config.mode=\"ap\"].ifname")_${radio}"
+ ifname="${trm_aplist}"
+ else
+ trm_aplist=""
+ trm_ifstatus="false"
+ break
+ fi
+ done
else
ifname="$(ubus -S call network.wireless status | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].ifname')"
if [ -n "${ifname}" ]
cnt=$((cnt+1))
sleep 1
done
- f_log "debug" "check ::: mode: ${mode}, name: ${ifname}, status: ${trm_ifstatus}, count: ${cnt}, max-wait: ${trm_maxwait}"
+ f_log "debug" "mode: ${mode}, name: ${ifname}, status: ${trm_ifstatus}, count: ${cnt}, max-wait: ${trm_maxwait}"
}
-# function to write to syslog
+# f_active: keep travelmate in an active state
+#
+f_active()
+{
+ if [ ${trm_active} -eq 1 ]
+ then
+ (sleep ${trm_timeout}; /etc/init.d/travelmate start >/dev/null 2>&1) &
+ fi
+}
+
+# f_log: function to write to syslog
#
f_log()
{
logger -t "travelmate-[${trm_ver}] ${class}" "${log_msg}"
if [ "${class}" = "error" ]
then
+ logger -t "travelmate-[${trm_ver}] ${class}" "Please check 'https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md' (${trm_sysver})"
+ f_active
exit 255
fi
fi
}
+# f_main: main function for connection handling
+#
f_main()
{
- local ap_list ssid_list config network ssid cnt=1
- local sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')"
+ local ssid_list config ap_radio sta_radio ssid cnt=1
f_check "initial"
if [ "${trm_ifstatus}" != "true" ]
ubus call network reload
fi
f_check "ap"
- ap_list="$(ubus -S call network.wireless status | jsonfilter -e '@.*.interfaces[@.config.mode="ap"].ifname')"
- f_log "debug" "main ::: ap-list: ${ap_list}, sta-list: ${trm_stalist}"
- if [ -z "${ap_list}" ] || [ -z "${trm_stalist}" ]
+ f_log "debug" "ap-list: ${trm_aplist}, sta-list: ${trm_stalist}"
+ if [ -z "${trm_aplist}" ] || [ -z "${trm_stalist}" ]
then
- f_log "error" "status ::: no usable AP/STA configuration found"
+ f_log "error" "no usable AP/STA configuration found"
fi
- for ap in ${ap_list}
+ for ap in ${trm_aplist}
do
+ cnt=1
+ ap_radio="${ap##*_}"
+ ap="${ap%%_*}"
+ if [ -z "$(printf "${trm_stalist}" | grep -Fo "_${ap_radio}")" ]
+ then
+ continue
+ fi
while [ ${cnt} -le ${trm_maxretry} ]
do
if [ ${trm_iw} -eq 1 ]
ssid_list="$(${trm_scanner} "${ap}" scan | \
awk '/ESSID: ".*"/{ORS=" ";if (!seen[$0]++) for(i=2; i<=NF; i++) print $i}')"
fi
- f_log "debug" "main ::: scan-tool: ${trm_scanner}, ssidlist: ${ssid_list}"
+ f_log "debug" "scanner: ${trm_scanner}, ap: ${ap}, ssids: ${ssid_list}"
if [ -n "${ssid_list}" ]
then
for sta in ${trm_stalist}
do
config="${sta%%_*}"
- network="${sta##*_}"
+ sta_radio="${sta##*_}"
ssid="\"$(uci -q get wireless."${config}".ssid)\""
- if [ -n "$(printf "${ssid_list}" | grep -Fo "${ssid}")" ]
+ if [ -n "$(printf "${ssid_list}" | grep -Fo "${ssid}")" ] && [ "${ap_radio}" = "${sta_radio}" ]
then
uci -q set wireless."${config}".disabled=0
- uci -q commit wireless
ubus call network reload
f_check "sta"
if [ "${trm_ifstatus}" = "true" ]
then
- f_log "info " "status ::: wwan interface connected to uplink ${ssid} (${cnt}/${trm_maxretry}, ${sysver})"
+ uci -q commit wireless
+ f_log "info " "wwan interface connected to uplink ${ssid} (${trm_sysver})"
sleep 5
return 0
else
- uci -q set wireless."${config}".disabled=1
- uci -q commit wireless
+ uci -q revert wireless
ubus call network reload
- f_log "info " "status ::: wwan interface can't connect to uplink ${ssid} (${cnt}/${trm_maxretry}, ${sysver})"
+ f_log "info " "wwan interface can't connect to uplink ${ssid} (${trm_sysver})"
fi
fi
done
- else
- f_log "info " "status ::: empty uplink list (${cnt}/${trm_maxretry}, ${sysver})"
fi
cnt=$((cnt+1))
sleep 5
done
done
- f_log "info " "status ::: no wwan uplink found (${sysver})"
- else
- f_log "info " "status ::: wwan uplink still connected (${sysver})"
fi
}
-if [ "${trm_procd}" = "true" ]
-then
- f_envload
- f_main
-fi
-exit 0
\ No newline at end of file
+f_envload
+f_main
+f_active
+exit 0
include $(TOPDIR)/rules.mk
PKG_NAME:=unbound
-PKG_VERSION:=1.6.0
-PKG_RELEASE:=5
+PKG_VERSION:=1.6.1
+PKG_RELEASE:=3
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.unbound.net/downloads
-PKG_MD5SUM:=78409eccf7260d260b6463f85e59c66b
+PKG_HASH:=42df63f743c0fe8424aeafcf003ad4b880b46c14149d696057313f5c1ef51400
PKG_BUILD_DEPENDS:=libexpat
PKG_BUILD_PARALLEL:=1
# Unbound Recursive DNS Server with UCI
## Unbound Description
-Unbound is a validating, recursive, and caching DNS resolver. The C implementation of Unbound is developed and maintained by [NLnet Labs](https://www.unbound.net/). It is based on ideas and algorithms taken from a java prototype developed by Verisign labs, Nominet, Kirei and ep.net. Unbound is designed as a set of modular components, so that also DNSSEC (secure DNS) validation and stub-resolvers (that do not run as a server, but are linked into an application) are easily possible.
+[Unbound](https://www.unbound.net/) is a validating, recursive, and caching DNS resolver. The C implementation of Unbound is developed and maintained by [NLnet Labs](https://www.nlnetlabs.nl/). It is based on ideas and algorithms taken from a java prototype developed by Verisign labs, Nominet, Kirei and ep.net. Unbound is designed as a set of modular components, so that also DNSSEC (secure DNS) validation and stub-resolvers (that do not run as a server, but are linked into an application) are easily possible.
## Package Overview
-Unbound may be useful on consumer grade embedded hardware. It is *intended* to be a recursive resolver only. [NLnet Labs NSD](https://www.nlnetlabs.nl/projects/nsd/) is *intended* for the authoritative task. This is different than [ISC Bind](https://www.isc.org/downloads/bind/) and its inclusive functions. Unbound configuration effort and memory consumption may be easier to control. A consumer could have their own recursive resolver, and remove potential issues from forwarding resolvers outside of their control.
+Unbound may be useful on consumer grade embedded hardware. It is _intended_ to be a recursive resolver only. [NLnet Labs NSD](https://www.nlnetlabs.nl/projects/nsd/) is _intended_ for the authoritative task. This is different than [ISC Bind](https://www.isc.org/downloads/bind/) and its inclusive functions. Unbound configuration effort and memory consumption may be easier to control. A consumer could have their own recursive resolver with 8/64 MB router, and remove potential issues from forwarding resolvers outside of their control.
This package builds on Unbounds capabilities with OpenWrt UCI. Not every Unbound option is in UCI, but rather, UCI simplifies the combination of related options. Unbounds native options are bundled and balanced within a smaller set of choices. Options include resources, DNSSEC, access control, and some TTL tweaking. The UCI also provides an escape option and work at the raw "unbound.conf" level.
-## Adblocking
-The UCI scripts will work with OpenWrt/pacakages/net/adblock (2.3.0 and above) if it is installed and enabled. Its all detected and integrated automatically. In brief, the adblock scripts create distinct local-zone files that are simply included in the unbound conf file during UCI generation. If you don't want this, then disable adblock or reconfigure adblock to not send these files to Unbound.
+## HOW TO Adblocking
+The UCI scripts will work with [net/adblock 2.3+](https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md), if it is installed and enabled. Its all detected and integrated automatically. In brief, the adblock scripts create distinct local-zone files that are simply included in the unbound conf file during UCI generation. If you don't want this, then disable adblock or reconfigure adblock to not send these files to Unbound.
## HOW TO Integrate with DHCP
Some UCI options and scripts help Unbound to work with DHCP servers to load the local DNS. The examples provided here are serial dnsmasq-unbound, parallel dnsmasq-unbound, and unbound scripted with odhcpd.
**/etc/config/unbound**:
- config unbound
- option add_local_fqdn '0'
- option add_wan_fqdn '0'
- option dhcp_link 'none'
- # dnsmasq should not forward your domain to unbound, but if...
- option domain 'yourdomain'
- option domain_type 'refuse'
- option listen_port '1053'
- ...
+```
+config unbound
+ option add_local_fqdn '0'
+ option add_wan_fqdn '0'
+ option dhcp_link 'none'
+ # dnsmasq should not forward your domain to unbound, but if...
+ option domain 'yourdomain'
+ option domain_type 'refuse'
+ option listen_port '1053'
+ ...
+```
**/etc/config/dhcp**:
- config dnsmasq
- option domain 'yourdomain'
- option noresolv '1'
- option resolvfile '/tmp/resolv.conf.auto'
- option port '53'
- list server '127.0.0.1#1053'
- list server '::1#1053'
- ...
+```
+config dnsmasq
+ option domain 'yourdomain'
+ option noresolv '1'
+ option resolvfile '/tmp/resolv.conf.auto'
+ option port '53'
+ list server '127.0.0.1#1053'
+ list server '::1#1053'
+ ...
+```
### Parallel dnsmasq
In this case, Unbound serves your local network directly for all purposes. It will look over to dnsmasq for DHCP-DNS resolution. Unbound is generally accessible on port 53, and dnsmasq is only accessed at 127.0.0.1:1053 by Unbound. Although you can dig/drill/nslookup remotely with the proper directives.
**/etc/config/unbound**:
- config unbound
- option dhcp_link 'dnsmasq'
- option listen_port '53'
- ...
+```
+config unbound
+ option dhcp_link 'dnsmasq'
+ option listen_port '53'
+ ...
+```
**/etc/config/dhcp**:
- config dnsmasq
- option domain 'yourdomain'
- option noresolv '1'
- option resolvfile '/tmp/resolv.conf.auto'
- option port '1053'
- ...
+```
+config dnsmasq
+ option domain 'yourdomain'
+ option noresolv '1'
+ option resolvfile '/tmp/resolv.conf.auto'
+ option port '1053'
+ ...
- config dhcp 'lan'
- # dnsmasq may not issue DNS option if not std. configuration
- list dhcp_option 'option:dns-server,0.0.0.0'
- ...
+config dhcp 'lan'
+ # dnsmasq may not issue DNS option if not std. configuration
+ list dhcp_option 'option:dns-server,0.0.0.0'
+ ...
+```
-### Only odhcpd
-Why use dnsmasq you might ask? Well test, try, and review. You can have Unbound and odhcpd only. When odhcpd configures each DHCP lease, it will call a script. The script provided with Unbound will read the lease file and enter DHCP-DNS records as much as dnsmasq once did. You **must install** `unbound-control`, because the lease records are added and removed without starting, stopping, flushing cache, or re-writing conf files.
+### Unbound and odhcpd
+You may ask can Unbound replace dnsmasq? You can have DHCP-DNS records with Unbound and odhcpd only. The UCI scripts will allow Unbound to act like dnsmasq. When odhcpd configures each DHCP lease, it will call a script. The script provided with Unbound will read the lease file for DHCP-DNS records. You **must install** `unbound-control`, because the lease records are added and removed without starting, stopping, flushing cache, or re-writing conf files. (_restart overhead can be excessive with even a few mobile devices._)
-*note: if you run the default LEDE/OpenWrt setup with dnsmasq and odhcpd, then use the link to dnsmasq. Unbound will pole dnsmasq. dnsmasq merges its lease file and odhcpd lease file.*
+Don't forget to disable or uninstall dnsmasq when you don't intend to use it. Strange results may occur. If you want to use default dnsmasq+odhcpd and add Unbound on top, then use the dnsmasq-serial or dnsmasq-parallel methods above.
**/etc/config/unbound**:
- config unbound
- # name your router in DNS
- option add_local_fqdn '1'
- option add_wan_fqdn '1'
- option dhcp_link 'odhcpd'
- # add SLAAC inferred from DHCPv4
- option dhcp4_slaac6 '1'
- option domain 'lan'
- option domain_type 'static'
- option listen_port '53'
- option rebind_protection '1'
- # install unbound-control and set this
- option unbound_control '1'
- ...
+```
+config unbound
+ # name your router in DNS
+ option add_local_fqdn '1'
+ option add_wan_fqdn '1'
+ option dhcp_link 'odhcpd'
+ # add SLAAC inferred from DHCPv4
+ option dhcp4_slaac6 '1'
+ option domain 'lan'
+ option domain_type 'static'
+ option listen_port '53'
+ option rebind_protection '1'
+ # install unbound-control and set this
+ option unbound_control '1'
+ ...
+```
**/etc/config/dhcp**:
- config dhcp 'lan'
- option dhcpv4 'server'
- option dhcpv6 'server'
- option interface 'lan'
- # short times help renew events to refresh dns
- option leasetime '4h'
- option ra 'server'
- option ra_management '1'
- # issue your ULA and avoid default [fe80::]
- list dns 'fdxx:xxxx:xxxx::1'
-
- config odhcpd 'odhcpd'
- option maindhcp '1'
- option leasefile '/var/lib/odhcpd/dhcp.leases'
- # this is where the magic happens
- option leasetrigger '/usr/lib/unbound/odhcpd.sh'
-
-## Back to Manual Configuration
+```
+config dhcp 'lan'
+ option dhcpv4 'server'
+ option dhcpv6 'server'
+ option interface 'lan'
+ option leasetime '12h'
+ option ra 'server'
+ option ra_management '1'
+ # issue your ULA and avoid default [fe80::]
+ list dns 'fdxx:xxxx:xxxx::1'
+ ...
+
+config odhcpd 'odhcpd'
+ option maindhcp '1'
+ option leasefile '/var/lib/odhcpd/dhcp.leases'
+ # this is where the magic happens
+ option leasetrigger '/usr/lib/unbound/odhcpd.sh'
+```
+
+## HOW TO Manual Override
Yes, there is a UCI to disable the rest of Unbound UCI. However, OpenWrt or LEDE are targeted at embedded machines with flash ROM. The initialization scripts do a few things to protect flash ROM.
### Completely Manual (almost)
**/etc/config/unbound**:
- config unbound
- option manual_conf '1'
- option root_age '30'
+```
+config unbound
+ option manual_conf '1'
+ option root_age '9'
+ # end
+```
### Hybrid Manual/UCI
-You like the UCI. Yet, you need to add some difficult to standardize options, or just are not ready to make a UCI request yet. The files `/etc/unbound/unbound_srv.conf` and `/etc/unbound/unbound_ext.conf` will be copied to Unbounds chroot directory and included during auto generation.
+You like the UCI. Yet, you need to add some difficult to standardize options, or just are not ready to make a UCI request yet. The files `/etc/unbound/unbound_srv.conf` and `/etc/unbound/unbound_ext.conf` will be copied to Unbounds chroot directory and included during auto generation.
The former will be added to the end of the `server:` clause. The later will be added to the end of the file for extended `forward:` and `view:` clauses. You can also disable unbound-control in the UCI which only allows "localhost" connections unencrypted, and then add an encrypted remote `control:` clause.
## Complete List of UCI Options
**/etc/config/unbound**:
- config unbound
- Currently only one instance is supported.
-
- option add_local_fqdn '0'
- Level. This puts your routers host name in the LAN (local) DNS.
- Each level is more detailed and comprehensive.
- 0 - Disabled
- 1 - Host Name on only the primary address
- 2 - Host Name on all addresses found (except link)
- 3 - FQDN and host name on all addresses (except link)
- 4 - Above and interfaces named <iface>.<hostname>.<domain>
-
- option add_wan_fqdn '0'
- Level. Same as previous option only this applies to the WAN. WAN
- are inferred by a UCI `config dhcp` entry that contains the line
- option ignore '1'.
-
- option dns64 '0'
- Boolean. Enable DNS64 through Unbound in order to bridge networks
- that are IPV6 only and IPV4 only (see RFC6052).
-
- option dns64_prefix '64:ff9b::/96'
- IPV6 Prefix. The IPV6 prefix wrapped on the IPV4 address for DNS64.
- You should use RFC6052 "well known" address, unless you also
- redirect to a proxy or gateway for your NAT64.
-
- option dhcp_link 'none'
- Program Name. Link to one of the supported programs we have scripts
- for. You may also need to install a trigger script in the DHCP
- servers configuration. See HOW TO above.
-
- option dhcp4_slaac6 '0'
- Boolean. Some DHCP servers do this natively (dnsmasq). Otherwise
- the script provided with this package will try to fabricate SLAAC
- IP6 addresses from DHCPv4 MAC records.
-
- option domain 'lan'
- Unbound local-zone: <domain> <type>. This is used to suffix all
- host records, and maintain a local zone. When dnsmasq is dhcp_link
- however, then this option is ignored (dnsmasq does it all).
-
- option domain_type 'static'
- Unbound local-zone: <domain> <type>. This allows you to lock
- down or allow forwarding of your domain, your router host name
- without suffix, and leakage of RFC6762 "local."
-
- option edns_size '1280'
- Bytes. Extended DNS is necessary for DNSSEC. However, it can run
- into MTU issues. Use this size in bytes to manage drop outs.
-
- option hide_binddata '1'
- Boolean. If enabled version.server, version.bind, id.server, and
- hostname.bind queries are refused.
-
- option listen_port '53'
- Port. Incoming. Where Unbound will listen for queries.
-
- option localservice '1'
- Boolean. Prevent DNS amplification attacks. Only provide access to
- Unbound from subnets this machine has interfaces on.
-
- option manual_conf '0'
- Boolean. Skip all this UCI nonsense. Manually edit the
- configuration. Make changes to /etc/unbound/unbound.conf.
-
- option protocol 'mixed'
- Unbound can limit its protocol used for recursive queries.
- Set 'ip4_only' to avoid issues if you do not have native IP6.
- Set 'ip6_prefer' to possibly improve performance as well as
- not consume NAT paths for the client computers.
- Do not use 'ip6_only' unless testing.
-
- option query_minimize '0'
- Boolean. Enable a minor privacy option. Don't let each server know
- the next recursion. Query one piece at a time.
-
- option query_min_strict '0'
- Boolean. Query minimize is best effort and will fall back to normal
- when it must. This option prevents the fall back, but less than
- standard name servers will fail to resolve their domains.
-
- option rebind_localhost '0'
- Boolean. Prevent loopback "127.0.0.0/8" or "::1/128" responses.
- These may used by black hole servers for good purposes like
- ad-blocking or parental access control. Obviously these responses
- also can be used to for bad purposes.
-
- option rebind_protection '1'
- Boolean. Prevent RFC 1918 Reponses from global DNS. Example a
- poisoned reponse within "192.168.0.0/24" could be used to turn a
- local browser into an external attack proxy server.
-
- option recursion 'passive'
- Unbound has numerous options for how it recurses. This UCI combines
- them into "passive," "aggressive," or Unbound's own "default."
- Passive is easy on resources, but slower until cache fills.
-
- option resource 'small'
- Unbound has numerous options for resources. This UCI gives "tiny,"
- "small," "medium," and "large." Medium is most like the compiled
- defaults with a bit of balancing. Tiny is close to the published
- memory restricted configuration. Small 1/2 medium, and large 2x.
-
- option root_age '30'
- Days. >90 Disables. Age limit for Unbound root data like root
- DNSSEC key. Unbound uses RFC 5011 to manage root key. This could
- harm flash ROM. This activity is mapped to "tmpfs," but every so
- often it needs to be copied back to flash for the next reboot.
-
- option ttl_min '120'
- Seconds. Minimum TTL in cache. Recursion can be expensive without
- cache. A low TTL is normal for server migration. A low TTL can be
- abused for snoop-vertising (DNS hit counts; recording query IP).
- Typical to configure maybe 0~300, but 1800 is the maximum accepted.
-
- option unbound_control '0'
- Boolean. Enables unbound-control application access ports. Enabling
- this without the unbound-control package installed is robust.
-
- option validator '0'
- Boolean. Enable DNSSEC. Unbound names this the "validator" module.
-
- option validator_ntp '1'
- Boolean. Disable DNSSEC time checks at boot. Once NTP confirms
- global real time, then DNSSEC is restarted at full strength. Many
- embedded devices don't have a real time power off clock. NTP needs
- DNS to resolve servers. This works around the chicken-and-egg.
-
- list domain_insecure
- List. Domains or pointers that you wish to skip DNSSEC. Your DHCP
- domains and pointers in dnsmasq will get this automatically.
-
-## Deprecated UCI
-The dnsmasq specific UCI will still work as well as they did, but please use `option dhcp_link 'dnsmasq'` above. Local host name and WAN host name will be lifted and configured from DHCP UCI subpart dnsmasq. (`dnsmasq_gate_name`, `dnsmasq_link_dns`, `dnsmasq_only_local`)
+```
+config unbound
+ Currently only one instance is supported.
+
+ option add_local_fqdn '0'
+ Level. This puts your routers host name in the LAN (local) DNS.
+ Each level is more detailed and comprehensive.
+ 0 - Disabled
+ 1 - Host Name on only the primary address
+ 2 - Host Name on all addresses found (except link)
+ 3 - FQDN and host name on all addresses (except link)
+ 4 - Above and interfaces named <iface>.<hostname>.<domain>
+
+ option add_wan_fqdn '0'
+ Level. Same as previous option only this applies to the WAN. WAN
+ are inferred by a UCI `config dhcp` entry that contains the line
+ option ignore '1'.
+
+ option dns64 '0'
+ Boolean. Enable DNS64 through Unbound in order to bridge networks
+ that are IPV6 only and IPV4 only (see RFC6052).
+
+ option dns64_prefix '64:ff9b::/96'
+ IPV6 Prefix. The IPV6 prefix wrapped on the IPV4 address for DNS64.
+ You should use RFC6052 "well known" address, unless you also
+ redirect to a proxy or gateway for your NAT64.
+
+ option dhcp_link 'none'
+ Program Name. Link to one of the supported programs we have scripts
+ for. You may also need to install a trigger script in the DHCP
+ servers configuration. See HOW TO above.
+
+ option dhcp4_slaac6 '0'
+ Boolean. Some DHCP servers do this natively (dnsmasq). Otherwise
+ the script provided with this package will try to fabricate SLAAC
+ IP6 addresses from DHCPv4 MAC records.
+
+ option domain 'lan'
+ Unbound local-zone: <domain> <type>. This is used to suffix all
+ host records, and maintain a local zone. When dnsmasq is dhcp_link
+ however, then this option is ignored (dnsmasq does it all).
+
+ option domain_type 'static'
+ Unbound local-zone: <domain> <type>. This allows you to lock
+ down or allow forwarding of your domain, your router host name
+ without suffix, and leakage of RFC6762 "local."
+
+ option edns_size '1280'
+ Bytes. Extended DNS is necessary for DNSSEC. However, it can run
+ into MTU issues. Use this size in bytes to manage drop outs.
+
+ option hide_binddata '1'
+ Boolean. If enabled version.server, version.bind, id.server, and
+ hostname.bind queries are refused.
+
+ option listen_port '53'
+ Port. Incoming. Where Unbound will listen for queries.
+
+ option localservice '1'
+ Boolean. Prevent DNS amplification attacks. Only provide access to
+ Unbound from subnets this machine has interfaces on.
+
+ option manual_conf '0'
+ Boolean. Skip all this UCI nonsense. Manually edit the
+ configuration. Make changes to /etc/unbound/unbound.conf.
+
+ option protocol 'mixed'
+ Unbound can limit its protocol used for recursive queries.
+ Set 'ip4_only' to avoid issues if you do not have native IP6.
+ Set 'ip6_prefer' to possibly improve performance as well as
+ not consume NAT paths for the client computers.
+ Do not use 'ip6_only' unless testing.
+
+ option query_minimize '0'
+ Boolean. Enable a minor privacy option. Don't let each server know
+ the next recursion. Query one piece at a time.
+
+ option query_min_strict '0'
+ Boolean. Query minimize is best effort and will fall back to normal
+ when it must. This option prevents the fall back, but less than
+ standard name servers will fail to resolve their domains.
+
+ option rebind_localhost '0'
+ Boolean. Prevent loopback "127.0.0.0/8" or "::1/128" responses.
+ These may used by black hole servers for good purposes like
+ ad-blocking or parental access control. Obviously these responses
+ also can be used to for bad purposes.
+
+ option rebind_protection '1'
+ Boolean. Prevent RFC 1918 Reponses from global DNS. Example a
+ poisoned reponse within "192.168.0.0/24" could be used to turn a
+ local browser into an external attack proxy server.
+
+ option recursion 'passive'
+ Unbound has numerous options for how it recurses. This UCI combines
+ them into "passive," "aggressive," or Unbound's own "default."
+ Passive is easy on resources, but slower until cache fills.
+
+ option resource 'small'
+ Unbound has numerous options for resources. This UCI gives "tiny,"
+ "small," "medium," and "large." Medium is most like the compiled
+ defaults with a bit of balancing. Tiny is close to the published
+ memory restricted configuration. Small 1/2 medium, and large 2x.
+
+ option root_age '9'
+ Days. >90 Disables. Age limit for Unbound root data like root
+ DNSSEC key. Unbound uses RFC 5011 to manage root key. This could
+ harm flash ROM. This activity is mapped to "tmpfs," but every so
+ often it needs to be copied back to flash for the next reboot.
+
+ option ttl_min '120'
+ Seconds. Minimum TTL in cache. Recursion can be expensive without
+ cache. A low TTL is normal for server migration. A low TTL can be
+ abused for snoop-vertising (DNS hit counts; recording query IP).
+ Typical to configure maybe 0~300, but 1800 is the maximum accepted.
+
+ option unbound_control '0'
+ Boolean. Enables unbound-control application access ports. Enabling
+ this without the unbound-control package installed is robust.
+
+ option validator '0'
+ Boolean. Enable DNSSEC. Unbound names this the "validator" module.
+
+ option validator_ntp '1'
+ Boolean. Disable DNSSEC time checks at boot. Once NTP confirms
+ global real time, then DNSSEC is restarted at full strength. Many
+ embedded devices don't have a real time power off clock. NTP needs
+ DNS to resolve servers. This works around the chicken-and-egg.
+
+ list domain_insecure
+ List. Domains or pointers that you wish to skip DNSSEC. Your DHCP
+ domains and pointers in dnsmasq will get this automatically.
+```
+
local cfg="$1"
config_get UNBOUND_D_DHCP_LINK "$cfg" dhcp_link none
config_get_bool UNBOUND_B_SLAAC6_MAC "$cfg" dhcp4_slaac6 0
+ config_get UNBOUND_TXT_DOMAIN "$cfg" domain lan
}
##############################################################################
. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
+. IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
+
# This will likely be called outside of "start_service()" context
config_get_bool UNBOUND_B_DNSSEC "$cfg" validator 0
config_get_bool UNBOUND_B_NTP_BOOT "$cfg" validator_ntp 1
- config_get UNBOUND_N_ROOT_AGE "$cfg" root_age 30
+ config_get UNBOUND_N_ROOT_AGE "$cfg" root_age 9
}
##############################################################################
UNBOUND_N_EDNS_SIZE=1280
UNBOUND_N_FWD_PORTS=""
UNBOUND_N_RX_PORT=53
-UNBOUND_N_ROOT_AGE=28
+UNBOUND_N_ROOT_AGE=9
UNBOUND_TTL_MIN=120
if_fqdn="$ifdashname.$host_fqdn"
+ if [ -z "${ulaprefix%%:/*}" ] ; then
+ # Nonsense so this option isn't globbed below
+ ulaprefix="fdno:such:addr::/48"
+ fi
+
+
if [ "$ignore" -gt 0 ] ; then
mode="$UNBOUND_D_WAN_FQDN"
-
else
mode="$UNBOUND_D_LAN_FQDN"
fi
;;
4)
- mode_ptr="$if_fqdn"
- names="$if_fqdn $host_fqdn $UNBOUND_TXT_HOSTNAME"
+ if [ -z "$ifdashname" ] ; then
+ # race conditions at init can rarely cause a blank device return
+ # the record format is invalid and Unbound won't load the conf file
+ mode_ptr="$host_fqdn"
+ names="$host_fqdn $UNBOUND_TXT_HOSTNAME"
+ else
+ mode_ptr="$if_fqdn"
+ names="$if_fqdn $host_fqdn $UNBOUND_TXT_HOSTNAME"
+ fi
;;
*)
fi
+ if [ -f $UNBOUND_KEYFILE ] ; then
+ # Lets not lose RFC 5011 tracking if we don't have to
+ cp -p $UNBOUND_KEYFILE $UNBOUND_KEYFILE.keep
+ fi
+
+
+ # Blind copy /etc/ to /var/lib/
mkdir -p $UNBOUND_VARDIR
rm -f $UNBOUND_VARDIR/dhcp_*
touch $UNBOUND_CONFFILE
# Debian-like package dns-root-data
cp -p /usr/share/dns/root.key $UNBOUND_KEYFILE
- elif [ -x "$UNBOUND_ANCHOR" ] ; then
+ elif [ -x $UNBOUND_ANCHOR ] ; then
$UNBOUND_ANCHOR -a $UNBOUND_KEYFILE
else
fi
+ if [ -f $UNBOUND_KEYFILE.keep ] ; then
+ # root.key.keep is reused if newest
+ cp -u $UNBOUND_KEYFILE.keep $UNBOUND_KEYFILE
+ rm -f $UNBOUND_KEYFILE.keep
+ fi
+
+
# Ensure access and prepare to jail
chown -R unbound:unbound $UNBOUND_VARDIR
chmod 775 $UNBOUND_VARDIR
config_get UNBOUND_N_EDNS_SIZE "$cfg" edns_size 1280
config_get UNBOUND_N_RX_PORT "$cfg" listen_port 53
- config_get UNBOUND_N_ROOT_AGE "$cfg" root_age 7
+ config_get UNBOUND_N_ROOT_AGE "$cfg" root_age 9
config_get UNBOUND_D_DOMAIN_TYPE "$cfg" domain_type static
config_get UNBOUND_D_DHCP_LINK "$cfg" dhcp_link none
option rebind_protection '1'
option recursion 'passive'
option resource 'small'
- option root_age '28'
+ option root_age '9'
option ttl_min '120'
option unbound_control '0'
option validator '0'
diff --git a/doc/example.conf.in b/doc/example.conf.in
-index 55bbc32..14452fa 100644
+index 83e7c5c..3ea2b28 100644
--- a/doc/example.conf.in
+++ b/doc/example.conf.in
-@@ -1,20 +1,82 @@
+@@ -1,9 +1,10 @@
-#
-# Example configuration file.
-#
--# See unbound.conf(5) man page, version 1.6.0.
+-# See unbound.conf(5) man page, version 1.6.1.
-#
-# this is a comment.
+##############################################################################
#Use this to include other text into the file.
#include: "otherfile.conf"
-
- # The server clause sets the main parameters.
+@@ -12,9 +13,71 @@
server:
-- # whitespace is not necessary, but looks cleaner.
+ # whitespace is not necessary, but looks cleaner.
- # verbosity number, 0 is least verbose. 1 is default.
+ # verbosity 1 is default
+ access-control: ::0/0 allow
+
+ # this limits TCP service but uses less buffers
-+ outgoing-num-tcp: 1
++ outgoing-num-tcp: 1
+ incoming-num-tcp: 1
+
+ # use somewhat higher port numbers versus possible NAT issue
include $(TOPDIR)/rules.mk
PKG_NAME:=vpnbypass
-PKG_VERSION:=1.1.1
-PKG_RELEASE:=4
+PKG_VERSION:=1.3.0
+PKG_RELEASE:=3
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
include $(INCLUDE_DIR)/package.mk
-define Package/$(PKG_NAME)
+define Package/vpnbypass
SECTION:=net
CATEGORY:=Network
DEPENDS:=+ip-full +ipset +iptables +ubox +dnsmasq-full
PKGARCH:=all
endef
-define Package/$(PKG_NAME)/description
+define Package/vpnbypass/description
This service can be used to enable simple VPN split tunnelling.
Supports accessing domains, IP ranges outside of your VPN tunnel.
Also supports dedicating local ports/IP ranges for direct internet access (outside of your VPN tunnel).
Please see the README for further information.
endef
-define Package/$(PKG_NAME)/conffiles
+define Package/vpnbypass/conffiles
/etc/config/vpnbypass
endef
define Build/Compile
endef
-define Package/$(PKG_NAME)/install
+define Package/vpnbypass/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/vpnbypass.init $(1)/etc/init.d/vpnbypass
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) ./files/vpnbypass.hotplug $(1)/etc/hotplug.d/firewall/94-vpnbypass
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,vpnbypass))
- Proudly made in Canada, using locally-sourced electrons.
## Screenshot (luci-app-vpnbypass)
-![screenshot](https://raw.githubusercontent.com/stangri/screenshots/master/vpnbypass/screenshot01.png "screenshot")
+![screenshot](https://raw.githubusercontent.com/stangri/screenshots/master/vpnbypass/screenshot02.png "screenshot")
## Requirements
This service requires following packages to be installed on your router: ```ip-full ipset iptables dnsmasq-full``` (```ip-full``` requires you uninstall ```ip``` first; ```dnsmasq-full``` requires you uninstall ```dnsmasq``` first). Run the following commands to satisfy the requirements:
opkg update
opkg install vpnbypass luci-app-vpnbypass
```
-Default install routes Plex Media Server traffic (port 32400) outside of the VPN tunnel, routes LogmeIn Hamachi traffic (25.0.0.0/8) outside of the VPN tunnel and also routes internet traffic from local IPs 192.168.1.81-192.168.1.87 outside of the VPN tunnel. You can safely delete these example rules if they do not apply to you.
+
+Until the packages are in the official feed/repo for your version, you can install them with:
+- OpenWrt
+```sh
+opkg update; opkg install wget libopenssl
+wget --no-check-certificate https://github.com/stangri/Files/raw/master/vpnbypass.ipk -O /tmp/vpnbypass.ipk
+wget --no-check-certificate https://github.com/stangri/Files/raw/master/luci-app-vpnbypass.ipk -O /tmp/luci-app-vpnbypass.ipk
+opkg install /tmp/vpnbypass.ipk /tmp/luci-app-vpnbypass.ipk
+```
+
+- LEDE Project
+```sh
+opkg update; opkg install uclient-fetch libustream-mbedtls
+wget --no-check-certificate https://github.com/stangri/Files/raw/master/vpnbypass.ipk -O /tmp/vpnbypass.ipk
+wget --no-check-certificate https://github.com/stangri/Files/raw/master/luci-app-vpnbypass.ipk -O /tmp/luci-app-vpnbypass.ipk
+opkg install /tmp/vpnbypass.ipk /tmp/luci-app-vpnbypass.ipk
+```
+
+### Default Settings
+Default configuration has service disabled (use Web UI to enable/start service or run ```uci set vpnbypass.config.enabled=1```) and routes Plex Media Server traffic (port 32400) outside of the VPN tunnel, routes LogmeIn Hamachi traffic (25.0.0.0/8) outside of the VPN tunnel and also routes internet traffic from local IPs 192.168.1.81-192.168.1.87 outside of the VPN tunnel. You can safely delete these example rules if they do not apply to you.
## Documentation / Discussion
Please head to [LEDE Project Forum](https://forum.lede-project.org/t/vpn-bypass-split-tunneling-service-luci-ui/1106) for discussions of this service.
Domain lists should be in following format/syntax: ```/domain1.com/domain2.com/vpnbypass```. Please don't forget the leading ```/``` and trailing ```/vpnbypass```. There's no validation if you enter something incorrectly -- it just won't work. Please see [Notes/Known Issues](#notesknown-issues) if you want to edit this setting manually, without Web UI.
## What's New
+1.3.0
+- No longer depends on hardcoded WAN interface name (```wan```) works with other interface names (like ```wwan```).
+- Table ID, IPSET name and FW_MARK as well as FW_MASK can be defined in config file.
+- Uses iptables, not ip rules for handling local IPs/ranges.
+- More reliable creation/destruction of VPNBYPASS iptables chain.
+- Updated Web UI enables/start and stops service.
+- Beautified output.
+
+1.2.0
+- More elegant handling of iptables (thanks [@hnyman](https://github.com/hnyman) and [@tohojo](https://github.com/tohojo)!).
+
1.1.1
-- More reliable way of obtaining WAN gateway on boot (thanks @dibdot for the hint!).
+- More reliable way of obtaining WAN gateway on boot (thanks [@dibdot](https://github.com/dibdot) for the hint!).
1.1.0:
- Detects individual IP addresses in the config and converts them to subnet automatically.
- Initial release.
## Notes/Known Issues
-Domains to be accessed outside of VPN tunnel are not defined in ```/etc/config/vpnpass```, but rather in ```/etc/config/dhcp```. To add/delete/edit domains you can use VPN Bypass Web UI or you can edit ```/etc/config/dhcp``` manually or run following commands:
+Domains to be accessed outside of VPN tunnel are handled by dnsmasq and thus are not defined in ```/etc/config/vpnpass```, but rather in ```/etc/config/dhcp```. To add/delete/edit domains you can use VPN Bypass Web UI or you can edit ```/etc/config/dhcp``` manually or run following commands:
```sh
uci add_list dhcp.@dnsmasq[-1].ipset='/github.com/plex.tv/google.com/vpnbypass'
uci add_list dhcp.@dnsmasq[-1].ipset='/hulu.com/netflix.com/nhl.com/vpnbypass'
config vpnbypass 'config'
- option enabled '1'
- list localport '32400'
- list localsubnet '192.168.1.81/29'
- list remotesubnet '25.0.0.0/8'
+ option enabled '0'
+ list localport '32400'
+ list localsubnet '192.168.1.81/29'
+ list remotesubnet '25.0.0.0/8'
START=94
USE_PROCD=1
-readonly TID="200" FW_MARK="0x010000" IPSET="vpnbypass"
+readonly __ok__='\033[0;32m[\xe2\x9c\x93]\033[0m'
+readonly __fail__='\033[0;31m[\xe2\x9c\x97]\033[0m'
+readonly __pass__='\033[0;33m[-]\033[0m'
+readonly __error__='\033[0;31mERROR\033[0m'
-output() {
- [ -n "$2" ] && [ ! $(($verbosity & $2)) -gt 0 ] && return 0;
- [ -t 1 ] && echo -e -n "$1"
- [ $(echo -e -n "$1" | wc -l) -gt 0 ] && logger -t "${PKG_NAME:-service} [$$]" "$(echo -e -n ${logmsg}${1})" && logmsg='' || logmsg=${logmsg}${1}
-}
+output() { local msg=$(echo -n "${1/$p_name /service }" | sed 's|\\033\[[0-9]\?;\?[0-9]\?[0-9]\?m||g'); [ -n "$2" ] && [ ! $(($verbosity & $2)) -gt 0 ] && return 0; [ -t 1 ] && echo -e -n "$1"; [ $(echo -e -n "$msg" | wc -l) -gt 0 ] && logger -t "${PKG_NAME:-service} [$$]" "$(echo -e -n ${logmsg}${msg})" && logmsg='' || logmsg=${logmsg}${msg}; }
+PKG_NAME="${PKG_NAME:-vpnbypass}"; p_name="${PKG_NAME} ${PKG_VERSION}"
-vpnbypass_enabled() {
- config_load vpnbypass
- config_get_bool enabled 'config' 'enabled' 0
+is_enabled() {
+ local c=1 enabled
+ config_load $PKG_NAME
+ config_get_bool enabled 'config' 'enabled' 1
config_get verbosity 'config' 'verbosity' '2'
- PKG_NAME="${PKG_NAME:-vpnbypass}"
- [ -n "$PKG_VERSION" ] && p_name="$PKG_NAME $PKG_VERSION" || p_name="$PKG_NAME"
- [ -t 1 ] || p_name='service'
+ config_get TID 'config' 'table_number' '200'
+ config_get IPSET 'config' 'ipset' 'vpnbypass'
+ config_get FW_MARK 'config' 'fw_mark' '0x010000'
+ config_get FW_MASK 'config' 'fw_mask' '0xff0000'
source /lib/functions/network.sh
- [ "$enabled" -ne "0" ] && return 0
- output "$p_name is not enabled in the config file!\n"
- output "To enable, run 'uci set $PKG_NAME.config.enabled=1; uci commit $PKG_NAME'\n"
- return 1
+ [ "$enabled" -gt 0 ] || { output "$__error__: $p_name is not enabled.\n"; return 1; }
+ source /lib/functions/network.sh
+ while : ; do
+ network_find_wan wan_if4
+ [ -n "$wan_if4" ] && network_get_gateway wan_gw $wan_if4
+ [ "$c" -ge 25 -o -n "$wan_gw" ] && break
+ output "$p_name waiting for wan gateway...\n"
+ sleep 2; network_flush_cache; let "c+=1";
+ done
+ [ -n "$wan_gw" ] && return 0 || { output "$__error__: $p_name failed to discover WAN gateway.\n"; return 1; }
}
-iptables_reset(){ [ -z "$PKG_NAME" ] && return 1; iptables-save | grep -Fv -- "$PKG_NAME" | iptables-restore; lsmod | grep -q ip6table_nat && ip6tables-save | grep -Fv -- "$PKG_NAME" | ip6tables-restore; }
+ipt() {
+ local d=$(echo $* | sed s/-A/-D/g)
+ [ "$d" != "$*" ] && iptables $d >/dev/null 2>&1
+ d=$(echo $* | sed s/-I/-D/g)
+ [ "$d" != "$*" ] && iptables $d >/dev/null 2>&1
+ d=$(echo $* | sed s/-N/-F/g)
+ [ "$d" != "$*" ] && iptables $d >/dev/null 2>&1
+ d=$(echo $* | sed s/-N/-X/g)
+ [ "$d" != "$*" ] && iptables $d >/dev/null 2>&1
-boot() { ubus -t 30 wait_for network.interface.wan && { rc_procd start_service; rc_procd service_triggers; } || output "ERROR: $p_name failed to settle network interface!\n"; }
+ iptables $* >/dev/null 2>&1
+}
start_service() {
- local ll c=1
- config_load vpnbypass
- vpnbypass_enabled || return 1
+ local ll
+ is_enabled || return 1
config_get lports 'config' 'localport'
config_get rports 'config' 'remoteport'
config_get routes 'config' 'remotesubnet'
procd_set_param stderr 1
procd_close_instance
- while : ; do network_get_ipaddr wanip wan; network_get_gateway gwip wan; [ $c -ge 15 ] && break || let "c+=1"; [ -n "$wanip" -a -n "$gwip" ] && break || output "$p_name waiting for wan gateway...\n"; sleep 2; network_flush_cache; done
- [ -z "$wanip" -o -z "$gwip" ] && output "ERROR: $p_name could not get wan interface IP: $wanip or gateway: $gwip!\n" && exit 0
-
- for ll in ${routes}; do ip route del $ll; ip route add $ll via $gwip; done
- ip rule del fwmark "$FW_MARK" table "$TID" >/dev/null 2>&1; iptables_reset; ipset -q flush "$IPSET"; ipset -q destroy "$IPSET";
+ ipt -t mangle -N VPNBYPASS; ipt -t mangle -A PREROUTING -m mark --mark 0x00/${FW_MASK} -g VPNBYPASS;
+ ipt -t mangle -A VPNBYPASS -m set --match-set $IPSET dst -j MARK --set-mark ${FW_MARK}/${FW_MASK}
+ ip rule del fwmark "$FW_MARK" table "$TID" >/dev/null 2>&1; ipset -q flush "$IPSET"; ipset -q destroy "$IPSET";
ip route flush table "$TID"; ip route flush cache;
- ip route add default via "$gwip" table "$TID"; ip route flush cache;
- { modprobe xt_set; modprobe ip_set; modprobe ip_set_hash_ip; } >/dev/null 2>&1
+ ip route add default via "$wan_gw" table "$TID"; ip route flush cache;
ipset -q -exist create "$IPSET" hash:ip; ipset -q flush "$IPSET"
- for ll in ${lports}; do iptables -t mangle -A PREROUTING -p tcp -m multiport --sport "${ll//-/:}" -j MARK --set-mark "$FW_MARK/$FW_MARK" -m comment --comment "$PKG_NAME"; done
- for ll in ${rports}; do iptables -t mangle -A PREROUTING -p tcp -m multiport --dport "${ll//-/:}" -j MARK --set-mark "$FW_MARK/$FW_MARK" -m comment --comment "$PKG_NAME"; done
- for ll in ${ranges}; do iptables -t mangle -I PREROUTING -s "$ll" -j MARK --set-mark "$FW_MARK/$FW_MARK" -m comment --comment "$PKG_NAME"; done
- iptables -t mangle -A PREROUTING -m set --match-set "$IPSET" dst -j MARK --set-mark "$FW_MARK/$FW_MARK" -m comment --comment "$PKG_NAME"
ip rule add fwmark "$FW_MARK" table "$TID"
+ { modprobe xt_set; modprobe ip_set; modprobe ip_set_hash_ip; } >/dev/null 2>&1
+ for ll in ${ranges}; do ipt -t mangle -I VPNBYPASS 1 -j MARK --set-mark ${FW_MARK}/${FW_MASK} -s "$ll"; done
+ for ll in ${lports}; do ipt -t mangle -I VPNBYPASS 1 -j MARK --set-mark ${FW_MARK}/${FW_MASK} -p tcp -m multiport --sport "${ll//-/:}"; done
+ for ll in ${routes}; do ipt -t mangle -I VPNBYPASS 1 -j MARK --set-mark ${FW_MARK}/${FW_MASK} -d "$ll"; done
+ for ll in ${rports}; do ipt -t mangle -I VPNBYPASS 1 -j MARK --set-mark ${FW_MARK}/${FW_MASK} -p tcp -m multiport --dport "${ll//-/:}"; done
output "$p_name started with TID: $TID; FW_MARK: $FW_MARK\n"
}
stop_service() {
- local ll
- vpnbypass_enabled || return 1
- config_get routes 'config' 'remotesubnet'
+ is_enabled || return 1
- for ll in ${routes}; do ip route del "$ll"; done
- ip rule del fwmark "$FW_MARK" table "$TID" >/dev/null 2>&1; iptables_reset; ipset -q flush "$IPSET"; ipset -q destroy "$IPSET";
+ ip rule del fwmark "$FW_MARK" table "$TID" >/dev/null 2>&1; ipset -q flush "$IPSET"; ipset -q destroy "$IPSET";
ip route flush table "$TID"; ip route flush cache;
+ ipt -t mangle -D PREROUTING -m mark --mark 0x00/${FW_MASK} -g VPNBYPASS
+ ipt -t mangle -F VPNBYPASS; ipt -t mangle -X VPNBYPASS;
output "$p_name stopped\n"
}
-reload_service() { start_service; }
+reload_service(){
+ start_service
+}
+st_load_interfaces(){ local d; config_get d $1 ifname; [ "$1" == "$wan_if4" -o "$d" != "${d/tun}" -o "$d" != "${d/tap}" ] && ifaces=" ${1} ${ifaces}"; }
service_triggers() {
+ local ifaces n
procd_add_reload_trigger 'vpnbypass'
procd_open_trigger
procd_add_config_trigger "config.change" "vpnbypass" /etc/init.d/vpnbypass reload
- procd_add_interface_trigger "interface.*" "wan" /etc/init.d/vpnbypass reload
+ for n in $ifaces; do procd_add_interface_trigger "interface.*" "$n" /etc/init.d/openvpn-policy-routing reload; done;
procd_close_trigger
}
include $(TOPDIR)/rules.mk
PKG_NAME:=webui-aria2
-PKG_VERSION:=2016-10-11
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/ziahamza/webui-aria2.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=6a29c1b1d0224e1daa88906e88bc2e177ca2ad76
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_SOURCE_DATE:=2017-02-12
+PKG_SOURCE_VERSION:=68c8ad4f86b87a8b713e13f70b4a3a3c7b86c83e
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
endef
define Package/webui-aria2/install
- $(INSTALL_DIR) $(1)/www/webui-aria2
-
- $(CP) $(PKG_BUILD_DIR)/fonts $(1)/www/webui-aria2
- $(CP) $(PKG_BUILD_DIR)/flags $(1)/www/webui-aria2
- $(CP) $(PKG_BUILD_DIR)/js $(1)/www/webui-aria2
- $(CP) $(PKG_BUILD_DIR)/img $(1)/www/webui-aria2
- $(CP) $(PKG_BUILD_DIR)/css $(1)/www/webui-aria2
- $(CP) $(PKG_BUILD_DIR)/index.html $(1)/www/webui-aria2
- $(CP) $(PKG_BUILD_DIR)/favicon.ico $(1)/www/webui-aria2
- $(CP) $(PKG_BUILD_DIR)/configuration.js $(1)/www/webui-aria2
+ $(INSTALL_DIR) \
+ $(1)/www/webui-aria2 \
+ $(1)/www/webui-aria2/flags/4x3
+
+ $(CP) \
+ $(PKG_BUILD_DIR)/{css,fonts,js} \
+ $(PKG_BUILD_DIR)/{LICENSE,configuration.js,favicon.ico,index.html} \
+ $(1)/www/webui-aria2
+
+ $(CP) \
+ $(PKG_BUILD_DIR)/flags/4x3/{cn,de,es,fr,it,nl,pl,ru,th,tr,tw,us}.svg \
+ $(1)/www/webui-aria2/flags/4x3
endef
$(eval $(call BuildPackage,webui-aria2))
--- /dev/null
+diff --git a/css/flag-icon.min.css b/css/flag-icon.min.css
+index 9480741..00ee213 100644
+--- a/css/flag-icon.min.css
++++ b/css/flag-icon.min.css
+@@ -1 +1 @@
+-.flag-icon,.flag-icon-background{background-repeat:no-repeat;background-size:contain;background-position:50%}.flag-icon{position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:"\00a0"}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(../flags/4x3/ad.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(../flags/1x1/ad.svg)}.flag-icon-ae{background-image:url(../flags/4x3/ae.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(../flags/1x1/ae.svg)}.flag-icon-af{background-image:url(../flags/4x3/af.svg)}.flag-icon-af.flag-icon-squared{background-image:url(../flags/1x1/af.svg)}.flag-icon-ag{background-image:url(../flags/4x3/ag.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(../flags/1x1/ag.svg)}.flag-icon-ai{background-image:url(../flags/4x3/ai.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(../flags/1x1/ai.svg)}.flag-icon-al{background-image:url(../flags/4x3/al.svg)}.flag-icon-al.flag-icon-squared{background-image:url(../flags/1x1/al.svg)}.flag-icon-am{background-image:url(../flags/4x3/am.svg)}.flag-icon-am.flag-icon-squared{background-image:url(../flags/1x1/am.svg)}.flag-icon-ao{background-image:url(../flags/4x3/ao.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(../flags/1x1/ao.svg)}.flag-icon-aq{background-image:url(../flags/4x3/aq.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(../flags/1x1/aq.svg)}.flag-icon-ar{background-image:url(../flags/4x3/ar.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(../flags/1x1/ar.svg)}.flag-icon-as{background-image:url(../flags/4x3/as.svg)}.flag-icon-as.flag-icon-squared{background-image:url(../flags/1x1/as.svg)}.flag-icon-at{background-image:url(../flags/4x3/at.svg)}.flag-icon-at.flag-icon-squared{background-image:url(../flags/1x1/at.svg)}.flag-icon-au{background-image:url(../flags/4x3/au.svg)}.flag-icon-au.flag-icon-squared{background-image:url(../flags/1x1/au.svg)}.flag-icon-aw{background-image:url(../flags/4x3/aw.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(../flags/1x1/aw.svg)}.flag-icon-ax{background-image:url(../flags/4x3/ax.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(../flags/1x1/ax.svg)}.flag-icon-az{background-image:url(../flags/4x3/az.svg)}.flag-icon-az.flag-icon-squared{background-image:url(../flags/1x1/az.svg)}.flag-icon-ba{background-image:url(../flags/4x3/ba.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(../flags/1x1/ba.svg)}.flag-icon-bb{background-image:url(../flags/4x3/bb.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(../flags/1x1/bb.svg)}.flag-icon-bd{background-image:url(../flags/4x3/bd.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(../flags/1x1/bd.svg)}.flag-icon-be{background-image:url(../flags/4x3/be.svg)}.flag-icon-be.flag-icon-squared{background-image:url(../flags/1x1/be.svg)}.flag-icon-bf{background-image:url(../flags/4x3/bf.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(../flags/1x1/bf.svg)}.flag-icon-bg{background-image:url(../flags/4x3/bg.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(../flags/1x1/bg.svg)}.flag-icon-bh{background-image:url(../flags/4x3/bh.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(../flags/1x1/bh.svg)}.flag-icon-bi{background-image:url(../flags/4x3/bi.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(../flags/1x1/bi.svg)}.flag-icon-bj{background-image:url(../flags/4x3/bj.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(../flags/1x1/bj.svg)}.flag-icon-bl{background-image:url(../flags/4x3/bl.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(../flags/1x1/bl.svg)}.flag-icon-bm{background-image:url(../flags/4x3/bm.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(../flags/1x1/bm.svg)}.flag-icon-bn{background-image:url(../flags/4x3/bn.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(../flags/1x1/bn.svg)}.flag-icon-bo{background-image:url(../flags/4x3/bo.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(../flags/1x1/bo.svg)}.flag-icon-bq{background-image:url(../flags/4x3/bq.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(../flags/1x1/bq.svg)}.flag-icon-br{background-image:url(../flags/4x3/br.svg)}.flag-icon-br.flag-icon-squared{background-image:url(../flags/1x1/br.svg)}.flag-icon-bs{background-image:url(../flags/4x3/bs.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(../flags/1x1/bs.svg)}.flag-icon-bt{background-image:url(../flags/4x3/bt.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(../flags/1x1/bt.svg)}.flag-icon-bv{background-image:url(../flags/4x3/bv.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(../flags/1x1/bv.svg)}.flag-icon-bw{background-image:url(../flags/4x3/bw.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(../flags/1x1/bw.svg)}.flag-icon-by{background-image:url(../flags/4x3/by.svg)}.flag-icon-by.flag-icon-squared{background-image:url(../flags/1x1/by.svg)}.flag-icon-bz{background-image:url(../flags/4x3/bz.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(../flags/1x1/bz.svg)}.flag-icon-ca{background-image:url(../flags/4x3/ca.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(../flags/1x1/ca.svg)}.flag-icon-cc{background-image:url(../flags/4x3/cc.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(../flags/1x1/cc.svg)}.flag-icon-cd{background-image:url(../flags/4x3/cd.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(../flags/1x1/cd.svg)}.flag-icon-cf{background-image:url(../flags/4x3/cf.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(../flags/1x1/cf.svg)}.flag-icon-cg{background-image:url(../flags/4x3/cg.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(../flags/1x1/cg.svg)}.flag-icon-ch{background-image:url(../flags/4x3/ch.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(../flags/1x1/ch.svg)}.flag-icon-ci{background-image:url(../flags/4x3/ci.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(../flags/1x1/ci.svg)}.flag-icon-ck{background-image:url(../flags/4x3/ck.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(../flags/1x1/ck.svg)}.flag-icon-cl{background-image:url(../flags/4x3/cl.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(../flags/1x1/cl.svg)}.flag-icon-cm{background-image:url(../flags/4x3/cm.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(../flags/1x1/cm.svg)}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(../flags/1x1/cn.svg)}.flag-icon-co{background-image:url(../flags/4x3/co.svg)}.flag-icon-co.flag-icon-squared{background-image:url(../flags/1x1/co.svg)}.flag-icon-cr{background-image:url(../flags/4x3/cr.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(../flags/1x1/cr.svg)}.flag-icon-cu{background-image:url(../flags/4x3/cu.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(../flags/1x1/cu.svg)}.flag-icon-cv{background-image:url(../flags/4x3/cv.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(../flags/1x1/cv.svg)}.flag-icon-cw{background-image:url(../flags/4x3/cw.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(../flags/1x1/cw.svg)}.flag-icon-cx{background-image:url(../flags/4x3/cx.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(../flags/1x1/cx.svg)}.flag-icon-cy{background-image:url(../flags/4x3/cy.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(../flags/1x1/cy.svg)}.flag-icon-cz{background-image:url(../flags/4x3/cz.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(../flags/1x1/cz.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-de.flag-icon-squared{background-image:url(../flags/1x1/de.svg)}.flag-icon-dj{background-image:url(../flags/4x3/dj.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(../flags/1x1/dj.svg)}.flag-icon-dk{background-image:url(../flags/4x3/dk.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(../flags/1x1/dk.svg)}.flag-icon-dm{background-image:url(../flags/4x3/dm.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(../flags/1x1/dm.svg)}.flag-icon-do{background-image:url(../flags/4x3/do.svg)}.flag-icon-do.flag-icon-squared{background-image:url(../flags/1x1/do.svg)}.flag-icon-dz{background-image:url(../flags/4x3/dz.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(../flags/1x1/dz.svg)}.flag-icon-ec{background-image:url(../flags/4x3/ec.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(../flags/1x1/ec.svg)}.flag-icon-ee{background-image:url(../flags/4x3/ee.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(../flags/1x1/ee.svg)}.flag-icon-eg{background-image:url(../flags/4x3/eg.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(../flags/1x1/eg.svg)}.flag-icon-eh{background-image:url(../flags/4x3/eh.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(../flags/1x1/eh.svg)}.flag-icon-er{background-image:url(../flags/4x3/er.svg)}.flag-icon-er.flag-icon-squared{background-image:url(../flags/1x1/er.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-es.flag-icon-squared{background-image:url(../flags/1x1/es.svg)}.flag-icon-et{background-image:url(../flags/4x3/et.svg)}.flag-icon-et.flag-icon-squared{background-image:url(../flags/1x1/et.svg)}.flag-icon-fi{background-image:url(../flags/4x3/fi.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(../flags/1x1/fi.svg)}.flag-icon-fj{background-image:url(../flags/4x3/fj.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(../flags/1x1/fj.svg)}.flag-icon-fk{background-image:url(../flags/4x3/fk.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(../flags/1x1/fk.svg)}.flag-icon-fm{background-image:url(../flags/4x3/fm.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(../flags/1x1/fm.svg)}.flag-icon-fo{background-image:url(../flags/4x3/fo.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(../flags/1x1/fo.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(../flags/1x1/fr.svg)}.flag-icon-ga{background-image:url(../flags/4x3/ga.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(../flags/1x1/ga.svg)}.flag-icon-gb{background-image:url(../flags/4x3/gb.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(../flags/1x1/gb.svg)}.flag-icon-gd{background-image:url(../flags/4x3/gd.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(../flags/1x1/gd.svg)}.flag-icon-ge{background-image:url(../flags/4x3/ge.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(../flags/1x1/ge.svg)}.flag-icon-gf{background-image:url(../flags/4x3/gf.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(../flags/1x1/gf.svg)}.flag-icon-gg{background-image:url(../flags/4x3/gg.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(../flags/1x1/gg.svg)}.flag-icon-gh{background-image:url(../flags/4x3/gh.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(../flags/1x1/gh.svg)}.flag-icon-gi{background-image:url(../flags/4x3/gi.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(../flags/1x1/gi.svg)}.flag-icon-gl{background-image:url(../flags/4x3/gl.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(../flags/1x1/gl.svg)}.flag-icon-gm{background-image:url(../flags/4x3/gm.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(../flags/1x1/gm.svg)}.flag-icon-gn{background-image:url(../flags/4x3/gn.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(../flags/1x1/gn.svg)}.flag-icon-gp{background-image:url(../flags/4x3/gp.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(../flags/1x1/gp.svg)}.flag-icon-gq{background-image:url(../flags/4x3/gq.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(../flags/1x1/gq.svg)}.flag-icon-gr{background-image:url(../flags/4x3/gr.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(../flags/1x1/gr.svg)}.flag-icon-gs{background-image:url(../flags/4x3/gs.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(../flags/1x1/gs.svg)}.flag-icon-gt{background-image:url(../flags/4x3/gt.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(../flags/1x1/gt.svg)}.flag-icon-gu{background-image:url(../flags/4x3/gu.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(../flags/1x1/gu.svg)}.flag-icon-gw{background-image:url(../flags/4x3/gw.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(../flags/1x1/gw.svg)}.flag-icon-gy{background-image:url(../flags/4x3/gy.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(../flags/1x1/gy.svg)}.flag-icon-hk{background-image:url(../flags/4x3/hk.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(../flags/1x1/hk.svg)}.flag-icon-hm{background-image:url(../flags/4x3/hm.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(../flags/1x1/hm.svg)}.flag-icon-hn{background-image:url(../flags/4x3/hn.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(../flags/1x1/hn.svg)}.flag-icon-hr{background-image:url(../flags/4x3/hr.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(../flags/1x1/hr.svg)}.flag-icon-ht{background-image:url(../flags/4x3/ht.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(../flags/1x1/ht.svg)}.flag-icon-hu{background-image:url(../flags/4x3/hu.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(../flags/1x1/hu.svg)}.flag-icon-id{background-image:url(../flags/4x3/id.svg)}.flag-icon-id.flag-icon-squared{background-image:url(../flags/1x1/id.svg)}.flag-icon-ie{background-image:url(../flags/4x3/ie.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(../flags/1x1/ie.svg)}.flag-icon-il{background-image:url(../flags/4x3/il.svg)}.flag-icon-il.flag-icon-squared{background-image:url(../flags/1x1/il.svg)}.flag-icon-im{background-image:url(../flags/4x3/im.svg)}.flag-icon-im.flag-icon-squared{background-image:url(../flags/1x1/im.svg)}.flag-icon-in{background-image:url(../flags/4x3/in.svg)}.flag-icon-in.flag-icon-squared{background-image:url(../flags/1x1/in.svg)}.flag-icon-io{background-image:url(../flags/4x3/io.svg)}.flag-icon-io.flag-icon-squared{background-image:url(../flags/1x1/io.svg)}.flag-icon-iq{background-image:url(../flags/4x3/iq.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(../flags/1x1/iq.svg)}.flag-icon-ir{background-image:url(../flags/4x3/ir.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(../flags/1x1/ir.svg)}.flag-icon-is{background-image:url(../flags/4x3/is.svg)}.flag-icon-is.flag-icon-squared{background-image:url(../flags/1x1/is.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-it.flag-icon-squared{background-image:url(../flags/1x1/it.svg)}.flag-icon-je{background-image:url(../flags/4x3/je.svg)}.flag-icon-je.flag-icon-squared{background-image:url(../flags/1x1/je.svg)}.flag-icon-jm{background-image:url(../flags/4x3/jm.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(../flags/1x1/jm.svg)}.flag-icon-jo{background-image:url(../flags/4x3/jo.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(../flags/1x1/jo.svg)}.flag-icon-jp{background-image:url(../flags/4x3/jp.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(../flags/1x1/jp.svg)}.flag-icon-ke{background-image:url(../flags/4x3/ke.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(../flags/1x1/ke.svg)}.flag-icon-kg{background-image:url(../flags/4x3/kg.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(../flags/1x1/kg.svg)}.flag-icon-kh{background-image:url(../flags/4x3/kh.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(../flags/1x1/kh.svg)}.flag-icon-ki{background-image:url(../flags/4x3/ki.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(../flags/1x1/ki.svg)}.flag-icon-km{background-image:url(../flags/4x3/km.svg)}.flag-icon-km.flag-icon-squared{background-image:url(../flags/1x1/km.svg)}.flag-icon-kn{background-image:url(../flags/4x3/kn.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(../flags/1x1/kn.svg)}.flag-icon-kp{background-image:url(../flags/4x3/kp.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(../flags/1x1/kp.svg)}.flag-icon-kr{background-image:url(../flags/4x3/kr.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(../flags/1x1/kr.svg)}.flag-icon-kw{background-image:url(../flags/4x3/kw.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(../flags/1x1/kw.svg)}.flag-icon-ky{background-image:url(../flags/4x3/ky.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(../flags/1x1/ky.svg)}.flag-icon-kz{background-image:url(../flags/4x3/kz.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(../flags/1x1/kz.svg)}.flag-icon-la{background-image:url(../flags/4x3/la.svg)}.flag-icon-la.flag-icon-squared{background-image:url(../flags/1x1/la.svg)}.flag-icon-lb{background-image:url(../flags/4x3/lb.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(../flags/1x1/lb.svg)}.flag-icon-lc{background-image:url(../flags/4x3/lc.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(../flags/1x1/lc.svg)}.flag-icon-li{background-image:url(../flags/4x3/li.svg)}.flag-icon-li.flag-icon-squared{background-image:url(../flags/1x1/li.svg)}.flag-icon-lk{background-image:url(../flags/4x3/lk.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(../flags/1x1/lk.svg)}.flag-icon-lr{background-image:url(../flags/4x3/lr.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(../flags/1x1/lr.svg)}.flag-icon-ls{background-image:url(../flags/4x3/ls.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(../flags/1x1/ls.svg)}.flag-icon-lt{background-image:url(../flags/4x3/lt.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(../flags/1x1/lt.svg)}.flag-icon-lu{background-image:url(../flags/4x3/lu.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(../flags/1x1/lu.svg)}.flag-icon-lv{background-image:url(../flags/4x3/lv.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(../flags/1x1/lv.svg)}.flag-icon-ly{background-image:url(../flags/4x3/ly.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(../flags/1x1/ly.svg)}.flag-icon-ma{background-image:url(../flags/4x3/ma.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(../flags/1x1/ma.svg)}.flag-icon-mc{background-image:url(../flags/4x3/mc.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(../flags/1x1/mc.svg)}.flag-icon-md{background-image:url(../flags/4x3/md.svg)}.flag-icon-md.flag-icon-squared{background-image:url(../flags/1x1/md.svg)}.flag-icon-me{background-image:url(../flags/4x3/me.svg)}.flag-icon-me.flag-icon-squared{background-image:url(../flags/1x1/me.svg)}.flag-icon-mf{background-image:url(../flags/4x3/mf.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(../flags/1x1/mf.svg)}.flag-icon-mg{background-image:url(../flags/4x3/mg.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(../flags/1x1/mg.svg)}.flag-icon-mh{background-image:url(../flags/4x3/mh.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(../flags/1x1/mh.svg)}.flag-icon-mk{background-image:url(../flags/4x3/mk.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(../flags/1x1/mk.svg)}.flag-icon-ml{background-image:url(../flags/4x3/ml.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(../flags/1x1/ml.svg)}.flag-icon-mm{background-image:url(../flags/4x3/mm.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(../flags/1x1/mm.svg)}.flag-icon-mn{background-image:url(../flags/4x3/mn.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(../flags/1x1/mn.svg)}.flag-icon-mo{background-image:url(../flags/4x3/mo.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(../flags/1x1/mo.svg)}.flag-icon-mp{background-image:url(../flags/4x3/mp.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(../flags/1x1/mp.svg)}.flag-icon-mq{background-image:url(../flags/4x3/mq.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(../flags/1x1/mq.svg)}.flag-icon-mr{background-image:url(../flags/4x3/mr.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(../flags/1x1/mr.svg)}.flag-icon-ms{background-image:url(../flags/4x3/ms.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(../flags/1x1/ms.svg)}.flag-icon-mt{background-image:url(../flags/4x3/mt.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(../flags/1x1/mt.svg)}.flag-icon-mu{background-image:url(../flags/4x3/mu.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(../flags/1x1/mu.svg)}.flag-icon-mv{background-image:url(../flags/4x3/mv.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(../flags/1x1/mv.svg)}.flag-icon-mw{background-image:url(../flags/4x3/mw.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(../flags/1x1/mw.svg)}.flag-icon-mx{background-image:url(../flags/4x3/mx.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(../flags/1x1/mx.svg)}.flag-icon-my{background-image:url(../flags/4x3/my.svg)}.flag-icon-my.flag-icon-squared{background-image:url(../flags/1x1/my.svg)}.flag-icon-mz{background-image:url(../flags/4x3/mz.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(../flags/1x1/mz.svg)}.flag-icon-na{background-image:url(../flags/4x3/na.svg)}.flag-icon-na.flag-icon-squared{background-image:url(../flags/1x1/na.svg)}.flag-icon-nc{background-image:url(../flags/4x3/nc.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(../flags/1x1/nc.svg)}.flag-icon-ne{background-image:url(../flags/4x3/ne.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(../flags/1x1/ne.svg)}.flag-icon-nf{background-image:url(../flags/4x3/nf.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(../flags/1x1/nf.svg)}.flag-icon-ng{background-image:url(../flags/4x3/ng.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(../flags/1x1/ng.svg)}.flag-icon-ni{background-image:url(../flags/4x3/ni.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(../flags/1x1/ni.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(../flags/1x1/nl.svg)}.flag-icon-no{background-image:url(../flags/4x3/no.svg)}.flag-icon-no.flag-icon-squared{background-image:url(../flags/1x1/no.svg)}.flag-icon-np{background-image:url(../flags/4x3/np.svg)}.flag-icon-np.flag-icon-squared{background-image:url(../flags/1x1/np.svg)}.flag-icon-nr{background-image:url(../flags/4x3/nr.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(../flags/1x1/nr.svg)}.flag-icon-nu{background-image:url(../flags/4x3/nu.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(../flags/1x1/nu.svg)}.flag-icon-nz{background-image:url(../flags/4x3/nz.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(../flags/1x1/nz.svg)}.flag-icon-om{background-image:url(../flags/4x3/om.svg)}.flag-icon-om.flag-icon-squared{background-image:url(../flags/1x1/om.svg)}.flag-icon-pa{background-image:url(../flags/4x3/pa.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(../flags/1x1/pa.svg)}.flag-icon-pe{background-image:url(../flags/4x3/pe.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(../flags/1x1/pe.svg)}.flag-icon-pf{background-image:url(../flags/4x3/pf.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(../flags/1x1/pf.svg)}.flag-icon-pg{background-image:url(../flags/4x3/pg.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(../flags/1x1/pg.svg)}.flag-icon-ph{background-image:url(../flags/4x3/ph.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(../flags/1x1/ph.svg)}.flag-icon-pk{background-image:url(../flags/4x3/pk.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(../flags/1x1/pk.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(../flags/1x1/pl.svg)}.flag-icon-pm{background-image:url(../flags/4x3/pm.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(../flags/1x1/pm.svg)}.flag-icon-pn{background-image:url(../flags/4x3/pn.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(../flags/1x1/pn.svg)}.flag-icon-pr{background-image:url(../flags/4x3/pr.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(../flags/1x1/pr.svg)}.flag-icon-ps{background-image:url(../flags/4x3/ps.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(../flags/1x1/ps.svg)}.flag-icon-pt{background-image:url(../flags/4x3/pt.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(../flags/1x1/pt.svg)}.flag-icon-pw{background-image:url(../flags/4x3/pw.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(../flags/1x1/pw.svg)}.flag-icon-py{background-image:url(../flags/4x3/py.svg)}.flag-icon-py.flag-icon-squared{background-image:url(../flags/1x1/py.svg)}.flag-icon-qa{background-image:url(../flags/4x3/qa.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(../flags/1x1/qa.svg)}.flag-icon-re{background-image:url(../flags/4x3/re.svg)}.flag-icon-re.flag-icon-squared{background-image:url(../flags/1x1/re.svg)}.flag-icon-ro{background-image:url(../flags/4x3/ro.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(../flags/1x1/ro.svg)}.flag-icon-rs{background-image:url(../flags/4x3/rs.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(../flags/1x1/rs.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(../flags/1x1/ru.svg)}.flag-icon-rw{background-image:url(../flags/4x3/rw.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(../flags/1x1/rw.svg)}.flag-icon-sa{background-image:url(../flags/4x3/sa.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(../flags/1x1/sa.svg)}.flag-icon-sb{background-image:url(../flags/4x3/sb.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(../flags/1x1/sb.svg)}.flag-icon-sc{background-image:url(../flags/4x3/sc.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(../flags/1x1/sc.svg)}.flag-icon-sd{background-image:url(../flags/4x3/sd.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(../flags/1x1/sd.svg)}.flag-icon-se{background-image:url(../flags/4x3/se.svg)}.flag-icon-se.flag-icon-squared{background-image:url(../flags/1x1/se.svg)}.flag-icon-sg{background-image:url(../flags/4x3/sg.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(../flags/1x1/sg.svg)}.flag-icon-sh{background-image:url(../flags/4x3/sh.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(../flags/1x1/sh.svg)}.flag-icon-si{background-image:url(../flags/4x3/si.svg)}.flag-icon-si.flag-icon-squared{background-image:url(../flags/1x1/si.svg)}.flag-icon-sj{background-image:url(../flags/4x3/sj.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(../flags/1x1/sj.svg)}.flag-icon-sk{background-image:url(../flags/4x3/sk.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(../flags/1x1/sk.svg)}.flag-icon-sl{background-image:url(../flags/4x3/sl.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(../flags/1x1/sl.svg)}.flag-icon-sm{background-image:url(../flags/4x3/sm.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(../flags/1x1/sm.svg)}.flag-icon-sn{background-image:url(../flags/4x3/sn.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(../flags/1x1/sn.svg)}.flag-icon-so{background-image:url(../flags/4x3/so.svg)}.flag-icon-so.flag-icon-squared{background-image:url(../flags/1x1/so.svg)}.flag-icon-sr{background-image:url(../flags/4x3/sr.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(../flags/1x1/sr.svg)}.flag-icon-ss{background-image:url(../flags/4x3/ss.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(../flags/1x1/ss.svg)}.flag-icon-st{background-image:url(../flags/4x3/st.svg)}.flag-icon-st.flag-icon-squared{background-image:url(../flags/1x1/st.svg)}.flag-icon-sv{background-image:url(../flags/4x3/sv.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(../flags/1x1/sv.svg)}.flag-icon-sx{background-image:url(../flags/4x3/sx.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(../flags/1x1/sx.svg)}.flag-icon-sy{background-image:url(../flags/4x3/sy.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(../flags/1x1/sy.svg)}.flag-icon-sz{background-image:url(../flags/4x3/sz.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(../flags/1x1/sz.svg)}.flag-icon-tc{background-image:url(../flags/4x3/tc.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(../flags/1x1/tc.svg)}.flag-icon-td{background-image:url(../flags/4x3/td.svg)}.flag-icon-td.flag-icon-squared{background-image:url(../flags/1x1/td.svg)}.flag-icon-tf{background-image:url(../flags/4x3/tf.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(../flags/1x1/tf.svg)}.flag-icon-tg{background-image:url(../flags/4x3/tg.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(../flags/1x1/tg.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-th.flag-icon-squared{background-image:url(../flags/1x1/th.svg)}.flag-icon-tj{background-image:url(../flags/4x3/tj.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(../flags/1x1/tj.svg)}.flag-icon-tk{background-image:url(../flags/4x3/tk.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(../flags/1x1/tk.svg)}.flag-icon-tl{background-image:url(../flags/4x3/tl.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(../flags/1x1/tl.svg)}.flag-icon-tm{background-image:url(../flags/4x3/tm.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(../flags/1x1/tm.svg)}.flag-icon-tn{background-image:url(../flags/4x3/tn.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(../flags/1x1/tn.svg)}.flag-icon-to{background-image:url(../flags/4x3/to.svg)}.flag-icon-to.flag-icon-squared{background-image:url(../flags/1x1/to.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(../flags/1x1/tr.svg)}.flag-icon-tt{background-image:url(../flags/4x3/tt.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(../flags/1x1/tt.svg)}.flag-icon-tv{background-image:url(../flags/4x3/tv.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(../flags/1x1/tv.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(../flags/1x1/tw.svg)}.flag-icon-tz{background-image:url(../flags/4x3/tz.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(../flags/1x1/tz.svg)}.flag-icon-ua{background-image:url(../flags/4x3/ua.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(../flags/1x1/ua.svg)}.flag-icon-ug{background-image:url(../flags/4x3/ug.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(../flags/1x1/ug.svg)}.flag-icon-um{background-image:url(../flags/4x3/um.svg)}.flag-icon-um.flag-icon-squared{background-image:url(../flags/1x1/um.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}.flag-icon-us.flag-icon-squared{background-image:url(../flags/1x1/us.svg)}.flag-icon-uy{background-image:url(../flags/4x3/uy.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(../flags/1x1/uy.svg)}.flag-icon-uz{background-image:url(../flags/4x3/uz.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(../flags/1x1/uz.svg)}.flag-icon-va{background-image:url(../flags/4x3/va.svg)}.flag-icon-va.flag-icon-squared{background-image:url(../flags/1x1/va.svg)}.flag-icon-vc{background-image:url(../flags/4x3/vc.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(../flags/1x1/vc.svg)}.flag-icon-ve{background-image:url(../flags/4x3/ve.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(../flags/1x1/ve.svg)}.flag-icon-vg{background-image:url(../flags/4x3/vg.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(../flags/1x1/vg.svg)}.flag-icon-vi{background-image:url(../flags/4x3/vi.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(../flags/1x1/vi.svg)}.flag-icon-vn{background-image:url(../flags/4x3/vn.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(../flags/1x1/vn.svg)}.flag-icon-vu{background-image:url(../flags/4x3/vu.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(../flags/1x1/vu.svg)}.flag-icon-wf{background-image:url(../flags/4x3/wf.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(../flags/1x1/wf.svg)}.flag-icon-ws{background-image:url(../flags/4x3/ws.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(../flags/1x1/ws.svg)}.flag-icon-ye{background-image:url(../flags/4x3/ye.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(../flags/1x1/ye.svg)}.flag-icon-yt{background-image:url(../flags/4x3/yt.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(../flags/1x1/yt.svg)}.flag-icon-za{background-image:url(../flags/4x3/za.svg)}.flag-icon-za.flag-icon-squared{background-image:url(../flags/1x1/za.svg)}.flag-icon-zm{background-image:url(../flags/4x3/zm.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(../flags/1x1/zm.svg)}.flag-icon-zw{background-image:url(../flags/4x3/zw.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(../flags/1x1/zw.svg)}
+\ No newline at end of file
++.flag-icon,.flag-icon-background{background-repeat:no-repeat;background-size:contain;background-position:50%}.flag-icon{position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:"\00a0"}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}
+\ No newline at end of file
PKG_NAME:=wireguard
-PKG_VERSION:=0.0.20170214
-PKG_RELEASE:=1
+PKG_VERSION:=0.0.20170223
+PKG_RELEASE:=2
PKG_SOURCE:=WireGuard-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://git.zx2c4.com/WireGuard/snapshot/
-PKG_HASH:=1e4ee213d2a5ac672c952c59e9c64d6d7d5dc3e21c003aee30d75208237e8bf5
+PKG_HASH:=6d2c8cd29c4f9fb404546a4749ec050739a26b4a49b5864f1dec531377c3c50d
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
define Package/wireguard/Default
SECTION:=net
CATEGORY:=Network
+ SUBMENU:=VPN
URL:=https://www.wireguard.io
MAINTAINER:=Baptiste Jonglez <openwrt@bitsofnetworks.org>, \
Dan Luedtke <mail@danrl.com>, \
$(call Build/Compile/Default)
endef
+define Package/wireguard/install
+ true
+endef
+
define Package/wireguard/description
$(call Package/wireguard/Default/description)
endef
proto_config_add_int "listen_port"
proto_config_add_int "mtu"
proto_config_add_string "preshared_key"
+ proto_config_add_string "fwmark"
available=1
no_proto_task=1
}
config_get addresses "${config}" "addresses"
config_get mtu "${config}" "mtu"
config_get preshared_key "${config}" "preshared_key"
+ config_get fwmark "${config}" "fwmark"
# create interface
ip link del dev "${config}" 2>/dev/null
if [ "${preshared_key}" ]; then
echo "PresharedKey=${preshared_key}" >> "${wg_cfg}"
fi
+ if [ "${fwmark}" ]; then
+ echo "FwMark=${fwmark}" >> "${wg_cfg}"
+ fi
config_foreach proto_wireguard_setup_peer "wireguard_${config}"
# apply configuration file
PKG_NAME:=xinetd
PKG_VERSION:=2.3.15
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.xinetd.org
define Package/xinetd/conffiles
/etc/xinetd.conf
+/etc/xinetd.d/
endef
TARGET_CFLAGS += -DNO_RPC
PKG_NAME:=collectd
PKG_VERSION:=5.7.1
-PKG_RELEASE:=2
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://collectd.org/files/ \
battery \
ceph \
cgroups \
- chrony \
cpusleep \
curl_json \
curl_xml \
lua \
lvm \
lpar \
+ madwifi \
mbmon \
md \
memcachec \
apcups \
ascent \
bind \
+ chrony \
conntrack \
contextswitch \
cpu \
iwinfo \
load \
logfile \
- madwifi \
+ match_empty_counter \
+ match_hashed \
+ match_regex \
+ match_timediff \
+ match_value \
memory \
modbus \
mysql \
$(eval $(call BuildPlugin,apcups,apcups status input,apcups,))
$(eval $(call BuildPlugin,ascent,ascent status input,ascent,+PACKAGE_collectd-mod-ascent:libcurl +PACKAGE_collectd-mod-ascent:libxml2))
$(eval $(call BuildPlugin,bind,BIND server/zone input,bind,+PACKAGE_collectd-mod-bind:libcurl +PACKAGE_collectd-mod-bind:libxml2))
+$(eval $(call BuildPlugin,chrony,chrony status input,chrony,))
$(eval $(call BuildPlugin,conntrack,connection tracking table size input,conntrack,))
$(eval $(call BuildPlugin,contextswitch,context switch input,contextswitch,))
$(eval $(call BuildPlugin,cpu,CPU input,cpu,))
$(eval $(call BuildPlugin,iwinfo,libiwinfo wireless statistics,iwinfo,+PACKAGE_collectd-mod-iwinfo:libiwinfo))
$(eval $(call BuildPlugin,load,system load input,load,))
$(eval $(call BuildPlugin,logfile,log files output,logfile,))
-$(eval $(call BuildPlugin,madwifi,MadWifi status input,madwifi,))
+$(eval $(call BuildPlugin,match-empty-counter,empty-counter match,match_empty_counter,))
+$(eval $(call BuildPlugin,match-hashed,hashed match,match_hashed,))
+$(eval $(call BuildPlugin,match-regex,regex match,match_regex,))
+$(eval $(call BuildPlugin,match-timediff,timediff match,match_timediff,))
+$(eval $(call BuildPlugin,match-value,value match,match_value,))
#$(eval $(call BuildPlugin,mysql,MySQL status input,mysql,+PACKAGE_collectd-mod-mysql:libmysqlclient-r))
$(eval $(call BuildPlugin,memory,physical memory usage input,memory,))
$(eval $(call BuildPlugin,modbus,read variables through libmodbus,modbus,+PACKAGE_collectd-mod-modbus:libmodbus))
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=cryptodev-linux
-PKG_VERSION:=1.8
-PKG_RELEASE:=2
+PKG_VERSION:=1.8.git-2017-02-09
+PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://download.gna.org/cryptodev-linux/
-PKG_MD5SUM:=02644cc4cd02301e0b503a332eb2f0b5
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_MIRROR_HASH:=627ce96e3ba66ca9c8e14f5d80193061fbe9d45cd8d4b69a1bf4dd5a2d50eed8
+PKG_SOURCE_URL:=https://github.com/cryptodev-linux/cryptodev-linux.git
+PKG_SOURCE_VERSION:=6818263667ca488f9b1c86e36ea624c4ea1c309f
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
--- /dev/null
+#
+# Copyright (C) 2016 - 2017 Stijn Tintel <stijn@linux-ipv6.be>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=domoticz
+PKG_VERSION_MAJOR:=3
+PKG_VERSION_PATCH:=5877
+PKG_VERSION:=$(PKG_VERSION_MAJOR).$(PKG_VERSION_PATCH)
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/domoticz/domoticz/archive/$(PKG_VERSION)/$(PKG_SOURCE)
+PKG_HASH:=fb88edbe428851a7a337a85faa93f6da00713b3ad086ff6957031dc9b3b58bba
+
+PKG_LICENSE:=GPL-3.0
+PKG_LICENSE_FILES:=License.txt
+
+PKG_BUILD_PARALLEL:=1
+PKG_USE_MIPS16:=0
+
+CMAKE_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/domoticz
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=Open Source Home Automation System
+ URL:=http://domoticz.com/
+ MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
+ USERID:=domoticz=6144:domoticz=6144
+ DEPENDS:= \
+ +boost \
+ +boost-date_time \
+ +boost-system \
+ +boost-thread \
+ +libcurl \
+ +libmosquittopp \
+ +libopenssl \
+ +libopenzwave \
+ +libsqlite3 \
+ +libstdcpp \
+ +zlib
+endef
+
+define Package/domoticz/description
+ Domoticz is a Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. Notifications/Alerts can be sent to any mobile device.
+endef
+
+CMAKE_OPTIONS += \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DUSE_BUILTIN_MQTT=no \
+ -DUSE_BUILTIN_SQLITE=no \
+ -DUSE_STATIC_BOOST=no \
+ -DUSE_STATIC_LIBSTDCXX=no \
+ -DUSE_STATIC_OPENZWAVE=no \
+ -DUSE_PYTHON=no
+
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ # Fix APPVERSION to suppress update popup
+ sed -i 's/#define APPVERSION.*/#define APPVERSION $(PKG_VERSION_PATCH)/' \
+ $(PKG_BUILD_DIR)/appversion.default
+ # Remove unwanted scripts
+ cd $(PKG_BUILD_DIR)/scripts && rm -rf \
+ buienradar_rain_example.pl \
+ _domoticz_main.bat \
+ download_update.sh \
+ logrotate/ \
+ python/ \
+ readme.txt \
+ restart_domoticz \
+ templates/All.Python \
+ update_domoticz
+endef
+
+define Package/domoticz/install
+ $(INSTALL_DIR) $(1)/etc/config $(1)/etc/hotplug.d/tty $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/domoticz.hotplug $(1)/etc/hotplug.d/tty/domoticz
+ $(INSTALL_BIN) ./files/domoticz.init $(1)/etc/init.d/domoticz
+ $(INSTALL_CONF) ./files/domoticz.config $(1)/etc/config/domoticz
+ $(INSTALL_DIR) $(1)/usr/share/domoticz $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/Config $(1)/usr/share/domoticz/openzwave
+ $(CP) $(PKG_INSTALL_DIR)/usr/scripts $(1)/usr/share/domoticz/
+ $(CP) $(PKG_INSTALL_DIR)/usr/www $(1)/usr/share/domoticz/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/domoticz $(1)/usr/bin/domoticz
+endef
+
+define Package/domoticz/conffiles
+/etc/config/domoticz
+/var/lib/domoticz/
+endef
+
+$(eval $(call BuildPackage,domoticz))
--- /dev/null
+config domoticz
+ option disabled '1'
+ option loglevel '1'
+ option syslog 'daemon'
+ # option sslcert '/path/to/ssl.crt'
+ # option sslkey '/path/to/ssl.key'
+ # option sslpass 'passphrase'
+ option sslwww '0'
+ # CAUTION - by default, /var is not persistent accross reboots
+ # Don't forget the trailing / - domoticz requires it
+ option userdata '/var/lib/domoticz/'
+
+#config device
+# option product '658/200/0'
+# option symlink 'ttyACM-aeotec-zstick-g5'
+
+#config device
+# option serial '526359'
+# option symlink 'ttyUSB-serial'
+
+#config device
+# option usbif '2-1:1.0'
+# option symlink 'ttyUSB-port1'
+
+#config device
+# option product '67b/2303/202'
+# option usbif '2-2:1.0'
+# option symlink 'ttyUSB-port2'
--- /dev/null
+#!/bin/sh
+
+. /lib/functions.sh
+
+[ "$SUBSYSTEM" = "tty" ] || exit 0
+
+add() {
+ local cfg="$1"
+ local product serial symlink usbif
+
+ [ -c "/dev/$DEVICENAME" ] || return
+
+ config_get product "$cfg" product
+ config_get serial "$cfg" serial
+ config_get symlink "$cfg" symlink
+ config_get usbif "$cfg" usbif
+
+ [ -z "$product" -a -z "$serial" -a -z "$usbif" ] && return
+
+ . "/sys/$DEVPATH/device/../uevent"
+ SERIAL="$(cat /sys/$DEVPATH/device/../../serial)" 2>/dev/null
+ USBIF="$(echo $DEVPATH | awk -F/ 'BEGIN {i=3}; /ACM/ {i=2}; END {print $(NF-i)}')"
+
+ [ -n "$product" -a "$product" != "$PRODUCT" ] && return
+ [ -n "$serial" -a "$serial" != "$SERIAL" ] && return
+ [ -n "$usbif" -a "$usbif" != "$USBIF" ] && return
+
+ chgrp domoticz "/dev/$DEVICENAME"
+ chmod g+rw "/dev/$DEVICENAME"
+
+ [ -n "$symlink" ] && ln -s "/dev/$DEVICENAME" "/dev/$symlink"
+}
+
+remove() {
+ local cfg="$1"
+ local symlink
+
+ config_get symlink "$cfg" symlink
+
+ [ "/dev/$DEVICENAME" = "$(readlink /dev/$symlink)" ] && rm "/dev/$symlink"
+}
+
+config_load "domoticz"
+config_foreach "$ACTION" device
--- /dev/null
+#!/bin/sh /etc/rc.common
+
+START=99
+USE_PROCD=1
+PROG=/usr/bin/domoticz
+PIDFILE=/var/run/domoticz.pid
+
+start_domoticz() {
+ local section="$1"
+ local loglevel sslcert sslpass sslwww syslog userdata
+
+ config_get loglevel "$section" "loglevel"
+ config_get sslcert "$section" "sslcert"
+ config_get sslkey "$section" "sslkey"
+ config_get sslpass "$section" "sslpass"
+ config_get sslwww "$section" "sslwww"
+ config_get syslog "$section" "syslog"
+ config_get userdata "$section" "userdata"
+
+ [ -n "$loglevel" ] && procd_append_param command -loglevel "$loglevel"
+ [ -n "$syslog" ] && procd_append_param command -syslog "$syslog"
+ [ -n "$userdata" ] && procd_append_param command -userdata "$userdata"
+ [ -n "$sslcert" -a "${sslwww:-0}" -gt 0 ] && {
+ procd_append_param command -sslcert "$sslcert"
+ procd_append_param command -sslwww "$sslwww"
+ [ -n "$sslkey" ] && procd_append_param command -sslkey "$sslkey"
+ [ -n "$sslpass" ] && procd_append_param command -sslpass "$sslpass"
+ } || procd_append_param command -sslwww 0
+}
+
+start_service() {
+ mkdir -p /var/lib/domoticz
+ chmod 0770 /var/lib/domoticz
+ chown domoticz:domoticz /var/lib/domoticz
+
+ procd_open_instance
+
+ procd_set_param command "$PROG"
+ procd_append_param command -scripts /usr/share/domoticz/scripts/
+ procd_append_param command -wwwroot /usr/share/domoticz/www/
+
+ config_load "domoticz"
+ config_get_bool disabled "$section" "disabled" 0
+ [ "$disabled" -gt 0 ] && return 1
+ config_foreach start_domoticz domoticz
+
+ procd_set_param pidfile "$PIDFILE"
+ procd_set_param respawn
+ procd_set_param stdout 0
+ procd_set_param term_timeout 10
+ procd_set_param user "domoticz"
+
+ procd_close_instance
+}
--- /dev/null
+From 2504f02de752aceb5a3c1d4749032147efde8082 Mon Sep 17 00:00:00 2001
+From: dwmw2 <dwmw2@infradead.org>
+Date: Fri, 3 Feb 2017 07:40:35 +0000
+Subject: [PATCH] Add -sslkey option to allow separate cert/key files (#1195)
+
+---
+ main/domoticz.cpp | 11 +++++++++++
+ webserver/server_settings.hpp | 2 +-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+--- a/main/domoticz.cpp
++++ b/main/domoticz.cpp
+@@ -76,6 +76,7 @@ const char *szHelp=
+ #ifdef WWW_ENABLE_SSL
+ "\t-sslwww port (for example -sslwww 443, or -sslwww 0 to disable https)\n"
+ "\t-sslcert file_path (for example /opt/domoticz/server_cert.pem)\n"
++ "\t-sslkey file_path (if different from certificate file)\n"
+ "\t-sslpass passphrase (to access to server private key in certificate)\n"
+ "\t-sslmethod method (for SSL method)\n"
+ "\t-ssloptions options (for SSL options, default is 'default_workarounds,no_sslv2,single_dh_use')\n"
+@@ -682,6 +683,16 @@ int main(int argc, char**argv)
+ return 1;
+ }
+ secure_webserver_settings.cert_file_path = cmdLine.GetSafeArgument("-sslcert", 0, "");
++ secure_webserver_settings.private_key_file_path = secure_webserver_settings.cert_file_path;
++ }
++ if (cmdLine.HasSwitch("-sslkey"))
++ {
++ if (cmdLine.GetArgumentCount("-sslkey") != 1)
++ {
++ _log.Log(LOG_ERROR, "Please specify a file path for your server SSL key file");
++ return 1;
++ }
++ secure_webserver_settings.private_key_file_path = cmdLine.GetSafeArgument("-sslkey", 0, "");
+ }
+ if (cmdLine.HasSwitch("-sslpass"))
+ {
+--- a/webserver/server_settings.hpp
++++ b/webserver/server_settings.hpp
+@@ -227,7 +227,7 @@ public:
+ // use certificate file for all usage by default
+ certificate_chain_file_path = ssl_settings.cert_file_path;
+ ca_cert_file_path = ssl_settings.cert_file_path;
+- private_key_file_path = ssl_settings.cert_file_path;
++ private_key_file_path = ssl_settings.private_key_file_path;
+ tmp_dh_file_path = ssl_settings.cert_file_path;
+ verify_file_path = ssl_settings.cert_file_path;
+ }
--- /dev/null
+diff --git a/hardware/evohome.cpp b/hardware/evohome.cpp
+index fcbee6d..f77291e 100644
+--- a/hardware/evohome.cpp
++++ b/hardware/evohome.cpp
+@@ -423,11 +423,11 @@ void CEvohome::RunScript(const char *pdata, const unsigned char length)
+ boost::replace_all(OnAction, "{state}", s_strid.str());
+ boost::replace_all(OnAction, "{until}", CEvohomeDateTime::GetISODate(tsen->EVOHOME2));
+ //Execute possible script
+- std::string scriptname;
+- if (OnAction.find("script:///") != std::string::npos)
+- scriptname = OnAction.substr(9);
+- else
+- scriptname = OnAction.substr(8);
++ std::string scriptname = OnAction.substr(9);
++#if !defined WIN32
++ if (scriptname.find("/") != 0)
++ scriptname = szUserDataFolder + "scripts/" + scriptname;
++#endif
+ std::string scriptparams="";
+ //Add parameters
+ int pindex=scriptname.find(' ');
+@@ -439,7 +439,7 @@ void CEvohome::RunScript(const char *pdata, const unsigned char length)
+
+ if (file_exist(scriptname.c_str()))
+ {
+- m_sql.AddTaskItem(_tTaskItem::ExecuteScript(1,scriptname,scriptparams));
++ m_sql.AddTaskItem(_tTaskItem::ExecuteScript(0.2f,scriptname,scriptparams));
+ }
+ else
+ _log.Log(LOG_ERROR,"evohome: Error script not found '%s'",scriptname.c_str());
+@@ -1321,7 +1321,7 @@ bool CEvohome::DecodeZoneName(CEvohomeMsg &msg)
+ }
+ if(memcmp(&msg.payload[2],m_szNameErr,18)==0)
+ {
+- Log(true,LOG_STATUS,"evohome: %s: Warning zone name not set: %d", tag, msg.payload[0]);
++ Log(true,LOG_STATUS,"evohome: %s: Warning zone name not set: %d", tag, msg.payload[0]+1);
+ m_bStartup[0]=false;
+ return true;
+ }
+@@ -1606,9 +1606,11 @@ bool CEvohome::DecodeBatteryInfo(CEvohomeMsg &msg)
+ RFX_SETID3(msg.GetID(0),tsen.EVOHOME2.id1,tsen.EVOHOME2.id2,tsen.EVOHOME2.id3)
+ tsen.EVOHOME2.updatetype = updBattery;
+
+- double dbCharge=0;
+- if(nBattery!=0xFF)
+- dbCharge=(double)nBattery/2.0; //Presumed to be the charge level where sent
++ if (nBattery == 0xFF)
++ nBattery = 100; // recode full battery (0xFF) to 100 for consistency across device types
++ else
++ nBattery = nBattery / 2; // recode battery level values to 0-100 from original 0-200 values
++
+ if(nLowBat==0)
+ nBattery=0;
+ tsen.EVOHOME2.battery_level=nBattery;
+@@ -1657,9 +1659,11 @@ bool CEvohome::DecodeBatteryInfo(CEvohomeMsg &msg)
+ tsen.EVOHOME2.type=pTypeEvohomeWater;
+ tsen.EVOHOME2.subtype=sTypeEvohomeWater;
+ tsen.EVOHOME2.zone=nDevNo;
+- sDecodeRXMessage(this, (const unsigned char *)&tsen.EVOHOME2, NULL, nBattery);
++ RFX_SETID3(GetControllerID(), tsen.EVOHOME2.id1, tsen.EVOHOME2.id2, tsen.EVOHOME2.id3);
++ sDecodeRXMessage(this, (const unsigned char *)&tsen.EVOHOME2, "DHW Temp", nBattery); // Update DHW Zone sensor
+ }
+- Log(true,LOG_STATUS,"evohome: %s: %s=%d charge=%d (%.1f %%) level=%d (%s)",tag,szType.c_str(),nDevNo,nBattery,dbCharge,nLowBat,(nLowBat==0)?"Low":"OK");
++
++ Log(true,LOG_STATUS,"evohome: %s: %s=%d charge=%d(%%) level=%d (%s)",tag,szType.c_str(),nDevNo,nBattery,nLowBat,(nLowBat==0)?"Low":"OK");
+
+ return true;
+ }
--- /dev/null
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -606,8 +606,6 @@ else()
+ target_link_libraries(domoticz -lrt ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${CURL_LIBRARIES} pthread ${LUA_LIBRARIES} ${MQTT_LIBRARIES} ${SQLite_LIBRARIES} ${CMAKE_DL_LIBS} ${TELLDUS_LIBRARIES} ${EXECINFO_LIBRARIES})
+ ENDIF()
+
+-ADD_PRECOMPILED_HEADER(domoticz "main/stdafx.h")
+-
+ IF(CMAKE_COMPILER_IS_GNUCXX)
+ option(USE_STATIC_LIBSTDCXX "Build with static libgcc/libstdc++ libraries" YES)
+ IF(USE_STATIC_LIBSTDCXX)
--- /dev/null
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -534,39 +534,6 @@ IF(OpenZWave)
+ target_link_libraries(domoticz ${OpenZWave})
+ include_directories(${CMAKE_SOURCE_DIR}/hardware/openzwave)
+ add_definitions(-DWITH_OPENZWAVE)
+- # open-zwave needs libudev
+- IF(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+- set(IOKIT_LIBRARY "-framework IOKit -framework CoreFoundation" CACHE FILEPATH "IOKit framework" FORCE)
+- target_link_libraries(domoticz ${IOKIT_LIBRARY})
+- else()
+- IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+- MESSAGE(STATUS "Building on FreeBSD, libudev not needed!")
+- FIND_PATH(ICONV_INCLUDE_DIR iconv.h)
+- FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c)
+- IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
+- SET(ICONV_FOUND TRUE)
+- #target_link_libraries(domoticz ${ICONV_INCLUDE_DIR})
+- target_link_libraries(domoticz ${ICONV_LIBRARIES} -lrt)
+- message(STATUS ${ICONV_LIBRARIES})
+- else()
+- MESSAGE(FATAL_ERROR "libiconv not found on your system")
+- ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
+- else()
+- find_library(UDEV NAMES libudev.a)
+- IF(UDEV)
+- message(STATUS ${UDEV})
+- target_link_libraries(domoticz ${UDEV} -lrt)
+- else()
+- find_library(UDEV NAMES libudev.so)
+- IF(UDEV)
+- message(STATUS ${UDEV})
+- target_link_libraries(domoticz ${UDEV} -lrt)
+- else()
+- MESSAGE(FATAL_ERROR "LIB UDEV not found on your system, see install.txt how to get them installed.\nsudo apt-get install libudev-dev")
+- ENDIF(UDEV)
+- ENDIF(UDEV)
+- ENDIF()
+- ENDIF()
+ else()
+ MESSAGE(STATUS "==== OpenZWave not found, support disabled!")
+ ENDIF(OpenZWave)
--- /dev/null
+--- a/hardware/OpenZWave.cpp
++++ b/hardware/OpenZWave.cpp
+@@ -993,7 +993,7 @@ bool COpenZWave::OpenSerialConnector()
+ }
+ m_nodes.clear();
+ m_bNeedSave = false;
+- std::string ConfigPath = szStartupFolder + "Config/";
++ std::string ConfigPath = "/usr/share/domoticz/openzwave/";
+ std::string UserPath = ConfigPath;
+ if (szStartupFolder != szUserDataFolder)
+ {
+--- a/main/EventSystem.cpp
++++ b/main/EventSystem.cpp
+@@ -44,7 +44,7 @@ extern "C" {
+ using namespace boost::python;
+ #endif
+
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+
+ CEventSystem::CEventSystem(void)
+ {
+@@ -1086,9 +1086,9 @@ void CEventSystem::EvaluateEvent(const s
+ std::stringstream lua_DirT;
+
+ #ifdef WIN32
+- lua_DirT << szUserDataFolder << "scripts\\lua\\";
++ lua_DirT << szScriptsFolder << "lua\\";
+ #else
+- lua_DirT << szUserDataFolder << "scripts/lua/";
++ lua_DirT << szScriptsFolder << "lua/";
+ #endif
+
+ std::string lua_Dir = lua_DirT.str();
+@@ -1139,9 +1139,9 @@ void CEventSystem::EvaluateEvent(const s
+ {
+ std::stringstream python_DirT;
+ #ifdef WIN32
+- python_DirT << szUserDataFolder << "scripts\\python\\";
++ python_DirT << szScriptsFolder << "python\\";
+ #else
+- python_DirT << szUserDataFolder << "scripts/python/";
++ python_DirT << szScriptsFolder << "python/";
+ #endif
+
+ std::string python_Dir = python_DirT.str();
+@@ -2021,7 +2021,7 @@ bool CEventSystem::parseBlocklyActions(c
+ }
+ #if !defined WIN32
+ if (sPath.find("/") != 0)
+- sPath = szUserDataFolder + "scripts/" + sPath;
++ sPath = szScriptsFolder + sPath;
+ #endif
+
+ m_sql.AddTaskItem(_tTaskItem::ExecuteScript(1, sPath, sParam));
+@@ -2133,9 +2133,9 @@ void CEventSystem::EvaluatePython(const
+ std::stringstream python_DirT;
+
+ #ifdef WIN32
+- python_DirT << szUserDataFolder << "scripts\\python\\";
++ python_DirT << szScriptsFolder << "python\\";
+ #else
+- python_DirT << szUserDataFolder << "scripts/python/";
++ python_DirT << szScriptsFolder << "python/";
+ #endif
+ std::string python_Dir = python_DirT.str();
+ if(!Py_IsInitialized()) {
+@@ -3909,9 +3909,9 @@ namespace http {
+
+ std::stringstream template_file;
+ #ifdef WIN32
+- template_file << szUserDataFolder << "scripts\\templates\\" << eventType << "." << interpreter;
++ template_file << szScriptsFolder << "templates\\" << eventType << "." << interpreter;
+ #else
+- template_file << szUserDataFolder << "scripts/templates/" << eventType << "." << interpreter;
++ template_file << szScriptsFolder << "templates/" << eventType << "." << interpreter;
+ #endif
+ std::ifstream file;
+ std::stringstream template_content;
+--- a/main/LuaHandler.cpp
++++ b/main/LuaHandler.cpp
+@@ -22,7 +22,7 @@ extern "C" {
+ #include "mainworker.h"
+ #include "../hardware/hardwaretypes.h"
+
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+
+ int CLuaHandler::l_domoticz_applyXPath(lua_State* lua_state)
+ {
+@@ -319,9 +319,9 @@ bool CLuaHandler::executeLuaScript(const
+ {
+ std::stringstream lua_DirT;
+ #ifdef WIN32
+- lua_DirT << szUserDataFolder << "scripts\\lua_parsers\\";
++ lua_DirT << szScriptsFolder << "lua_parsers\\";
+ #else
+- lua_DirT << szUserDataFolder << "scripts/lua_parsers/";
++ lua_DirT << szScriptsFolder << "lua_parsers/";
+ #endif
+ std::string lua_Dir = lua_DirT.str();
+
+--- a/main/SQLHelper.cpp
++++ b/main/SQLHelper.cpp
+@@ -612,6 +612,7 @@ const char *sqlCreateMobileDevices =
+ "[LastUpdate] DATETIME DEFAULT(datetime('now', 'localtime'))"
+ ");";
+
++extern std::string szScriptsFolder;
+ extern std::string szUserDataFolder;
+
+ CSQLHelper::CSQLHelper(void)
+@@ -3408,9 +3409,9 @@ unsigned long long CSQLHelper::UpdateVal
+ //Execute possible script
+ std::string scriptname;
+ #ifdef WIN32
+- scriptname = szUserDataFolder + "scripts\\domoticz_main.bat";
++ scriptname = szScriptsFolder + "domoticz_main.bat";
+ #else
+- scriptname = szUserDataFolder + "scripts/domoticz_main";
++ scriptname = szScriptsFolder + "domoticz_main";
+ #endif
+ if (file_exist(scriptname.c_str()))
+ {
+@@ -6460,7 +6461,7 @@ bool CSQLHelper::HandleOnOffAction(const
+ std::string scriptname = OnAction.substr(9);
+ #if !defined WIN32
+ if (scriptname.find("/") != 0)
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #endif
+ std::string scriptparams="";
+ //Add parameters
+@@ -6492,7 +6493,7 @@ bool CSQLHelper::HandleOnOffAction(const
+ std::string scriptname = OffAction.substr(9);
+ #if !defined WIN32
+ if (scriptname.find("/") != 0)
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #endif
+ std::string scriptparams="";
+ int pindex=scriptname.find(' ');
+--- a/main/WebServer.cpp
++++ b/main/WebServer.cpp
+@@ -55,6 +55,7 @@
+
+ #define round(a) ( int ) ( a + .5 )
+
++extern std::string szScriptsFolder;
+ extern std::string szUserDataFolder;
+ extern std::string szWWWFolder;
+
+@@ -2614,9 +2615,9 @@ namespace http {
+ if (scriptname.find("..") != std::string::npos)
+ return;
+ #ifdef WIN32
+- scriptname = szUserDataFolder + "scripts\\" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #else
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #endif
+ if (!file_exist(scriptname.c_str()))
+ return;
+--- a/main/domoticz.cpp
++++ b/main/domoticz.cpp
+@@ -135,6 +135,7 @@ static const _facilities facilities[] =
+ };
+ std::string logfacname = "user";
+ #endif
++std::string szScriptsFolder;
+ std::string szStartupFolder;
+ std::string szUserDataFolder;
+ std::string szWWWFolder;
+@@ -603,6 +604,19 @@ int main(int argc, char**argv)
+ szUserDataFolder = szroot;
+ }
+
++ szScriptsFolder=szStartupFolder;
++ if (cmdLine.HasSwitch("-scripts"))
++ {
++ if (cmdLine.GetArgumentCount("-scripts") != 1)
++ {
++ _log.Log(LOG_ERROR, "Please specify a path for scripts directory");
++ return 1;
++ }
++ std::string szroot = cmdLine.GetSafeArgument("-scripts", 0, "");
++ if (szroot.size() != 0)
++ szScriptsFolder = szroot;
++ }
++
+ if (cmdLine.HasSwitch("-startupdelay"))
+ {
+ if (cmdLine.GetArgumentCount("-startupdelay") != 1)
+--- a/main/mainworker.cpp
++++ b/main/mainworker.cpp
+@@ -139,6 +139,7 @@
+
+ #define round(a) ( int ) ( a + .5 )
+
++extern std::string szScriptsFolder;
+ extern std::string szStartupFolder;
+ extern std::string szUserDataFolder;
+ extern std::string szWWWFolder;
+@@ -1394,8 +1395,8 @@ void MainWorker::Do_Work()
+ m_sql.GetPreferencesVar("ReleaseChannel", nValue);
+ bool bIsBetaChannel = (nValue != 0);
+
+- std::string scriptname = szUserDataFolder + "scripts/download_update.sh";
+- std::string strparm = szUserDataFolder;
++ std::string scriptname = szScriptsFolder + "download_update.sh";
++ std::string strparm = szScriptsFolder;
+ if (bIsBetaChannel)
+ strparm += " /beta";
+
+--- a/notifications/NotificationHTTP.cpp
++++ b/notifications/NotificationHTTP.cpp
+@@ -6,7 +6,7 @@
+ #include "../main/SQLHelper.h"
+ #include "../main/Logger.h"
+
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+
+ CNotificationHTTP::CNotificationHTTP() : CNotificationBase(std::string("http"), OPTIONS_NONE)
+ {
+@@ -97,7 +97,7 @@ bool CNotificationHTTP::SendMessageImple
+ std::string scriptparams = "";
+ #if !defined WIN32
+ if (scriptname.find("/") != 0)
+- scriptname = szUserDataFolder + "scripts/" + scriptname;
++ scriptname = szScriptsFolder + scriptname;
+ #endif
+ //Add parameters
+ uPos = scriptname.find(" ");
+--- a/push/GooglePubSubPush.cpp
++++ b/push/GooglePubSubPush.cpp
+@@ -20,7 +20,7 @@ extern "C" {
+ using namespace boost::python;
+ #endif
+
+-extern std::string szUserDataFolder;
++extern std::string szScriptsFolder;
+
+ // this should be filled in by the preprocessor
+ extern const char * Python_exe;
+@@ -222,11 +222,11 @@ void CGooglePubSubPush::DoGooglePubSubPu
+
+ #ifdef ENABLE_PYTHON
+ #ifdef WIN32
+- python_DirT << szUserDataFolder << "scripts\\python\\";
+- std::string filename = szUserDataFolder + "scripts\\python\\" + "googlepubsub.py";
++ python_DirT << szScriptsFolder << "python\\";
++ std::string filename = szScriptsFolder + "python\\" + "googlepubsub.py";
+ #else
+- python_DirT << szUserDataFolder << "scripts/python/";
+- std::string filename = szUserDataFolder + "scripts/python/" + "googlepubsub.py";
++ python_DirT << szScriptsFolder << "python/";
++ std::string filename = szScriptsFolder + "python/" + "googlepubsub.py";
+ #endif
+
+ char * argv[1];
--- /dev/null
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -476,20 +476,23 @@ else()
+ MESSAGE(FATAL_ERROR "cURL not found on your system, see install.txt how to get them installed. (for example 'sudo apt-get install curl libcurl4-openssl-dev')")
+ ENDIF(CURL_FOUND)
+
+-find_path(LIBUSB_INCLUDE_DIR usb.h
+- HINTS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
+-find_library(LIBUSB_LIBRARY NAMES usb
+- HINTS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
+-set(LIBUSB_LIBRARIES ${LIBUSB_LIBRARY})
++option(WITH_LIBUSB "Enable libusb support" NO)
++ if(WITH_LIBUSB)
++ find_path(LIBUSB_INCLUDE_DIR usb.h
++ HINTS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
++ find_library(LIBUSB_LIBRARY NAMES usb
++ HINTS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
++ set(LIBUSB_LIBRARIES ${LIBUSB_LIBRARY})
+
+-find_package_handle_standard_args(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
+-IF(LIBUSB_FOUND)
+- MESSAGE(STATUS "LIBUSB found at: ${LIBUSB_LIBRARIES}")
+- add_definitions(-DWITH_LIBUSB)
+- target_link_libraries(domoticz ${LIBUSB_LIBRARIES})
+-else()
+- MESSAGE(STATUS "==== LibUSB not found, support for TE923/Voltcraft disabled!")
+-ENDIF(LIBUSB_FOUND)
++ find_package_handle_standard_args(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
++ IF(LIBUSB_FOUND)
++ MESSAGE(STATUS "LIBUSB found at: ${LIBUSB_LIBRARIES}")
++ add_definitions(-DWITH_LIBUSB)
++ target_link_libraries(domoticz ${LIBUSB_LIBRARIES})
++ else()
++ MESSAGE(STATUS "==== LibUSB not found, support for TE923/Voltcraft disabled!")
++ ENDIF(LIBUSB_FOUND)
++endif(WITH_LIBUSB)
+
+ #
+ # Find MD5/RMD160/SHA library
validate_section_gpsd()
{
uci_validate_section gpsd gpsd "${1}" \
- 'enable:bool:1' \
+ 'enabled:bool:1' \
'device:string' \
'listen_globally:bool:0' \
'port:port:2947'
gpsd_instance()
{
- local device enable listen_globally port
+ local device enabled listen_globally port
validate_section_gpsd "${1}" || {
echo "validation failed"
return 1
}
- [ "${enable}" = "0" ] && return 1
+ [ "${enabled}" = "0" ] && return 1
procd_open_instance
procd_set_param command "$PROG" -N -n
+++ /dev/null
-#
-# Copyright (C) 2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=luci-app-lxc
-PKG_RELEASE:=20161030
-
-PKG_LICENSE:=Apache-2.0
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/luci-app-lxc
- SECTION:=luci
- CATEGORY:=LuCI
- SUBMENU:=3. Applications
- TITLE:=LXC management Web UI
- DEPENDS:=+luci-mod-admin-full +lxc +lxc-create +liblxc +rpcd-mod-lxc +getopt +xz
- MAINTAINER:=Petar Koretic <petar.koretic@sartura.hr>
-endef
-
-define Package/luci-app-lxc/description
- This package will install LXC management Web UI.
-endef
-
-define Build/Prepare
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/luci-app-lxc/install
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller/
- $(INSTALL_BIN) \
- ./files/controller/lxc.lua \
- $(1)/usr/lib/lua/luci/controller/
-
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/view/
- $(INSTALL_DATA) \
- ./files/view/lxc.htm \
- $(1)/usr/lib/lua/luci/view/
-
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/
- $(INSTALL_BIN) \
- ./files/model/cbi/lxc.lua \
- $(1)/usr/lib/lua/luci/model/cbi/
-
- $(INSTALL_DIR) $(1)/etc/config/
- $(INSTALL_DATA) \
- ./files/lxc.config \
- $(1)/etc/config/lxc
-
- $(INSTALL_DIR) $(1)/www
- $(CP) -R \
- ./files/www/* \
- $(1)/www
-endef
-
-$(eval $(call BuildPackage,luci-app-lxc))
+++ /dev/null
---[[
-
-LuCI LXC module
-
-Copyright (C) 2014, Cisco Systems, Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Author: Petar Koretic <petar.koretic@sartura.hr>
-
-]]--
-
-module("luci.controller.lxc", package.seeall)
-
-require "ubus"
-local conn = ubus.connect()
-if not conn then
- error("Failed to connect to ubus")
-end
-
-
-function fork_exec(command)
- local pid = nixio.fork()
- if pid > 0 then
- return
- elseif pid == 0 then
- -- change to root dir
- nixio.chdir("/")
-
- -- patch stdin, out, err to /dev/null
- local null = nixio.open("/dev/null", "w+")
- if null then
- nixio.dup(null, nixio.stderr)
- nixio.dup(null, nixio.stdout)
- nixio.dup(null, nixio.stdin)
- if null:fileno() > 2 then
- null:close()
- end
- end
-
- -- replace with target command
- nixio.exec("/bin/sh", "-c", command)
- end
-end
-
-function index()
- page = node("admin", "services", "lxc")
- page.target = cbi("lxc")
- page.title = _("LXC Containers")
- page.order = 70
-
- page = entry({"admin", "services", "lxc_create"}, call("lxc_create"), nil)
- page.leaf = true
-
- page = entry({"admin", "services", "lxc_action"}, call("lxc_action"), nil)
- page.leaf = true
-
- page = entry({"admin", "services", "lxc_get_downloadable"}, call("lxc_get_downloadable"), nil)
- page.leaf = true
-
- page = entry({"admin", "services", "lxc_configuration_get"}, call("lxc_configuration_get"), nil)
- page.leaf = true
-
- page = entry({"admin", "services", "lxc_configuration_set"}, call("lxc_configuration_set"), nil)
- page.leaf = true
-
-end
-
-function lxc_get_downloadable()
- luci.http.prepare_content("application/json")
-
- local f = io.popen('uname -m', 'r')
- local target = f:read('*a')
- f:close()
- target = target:gsub("^%s*(.-)%s*$", "%1")
-
- local templates = {}
-
- local f = io.popen('lxc-create -n just_want_to_list_available_lxc_templates -t download -- --list', 'r')
-
- for line in f:lines() do
- local dist,version = line:match("^(%S+)%s+(%S+)%s+" .. target .. "%s+default%s+%S+$")
- if dist~=nil and version~=nil then templates[#templates + 1] = dist .. ":" .. version end
- end
-
- f:close()
- luci.http.write_json(templates)
-end
-
-function lxc_create(lxc_name, lxc_template)
- luci.http.prepare_content("text/plain")
-
- local uci = require("uci").cursor()
-
- local url = uci:get("lxc", "lxc", "url")
-
- if not pcall(dofile, "/etc/openwrt_release") then
- return luci.http.write("1")
- end
-
- local f = io.popen('uname -m', 'r')
- local target = f:read('*a')
- f:close()
- target = target:gsub("^%s*(.-)%s*$", "%1")
-
- local lxc_dist = lxc_template:gsub("(.*):(.*)", '%1')
- local lxc_release = lxc_template:gsub("(.*):(.*)", '%2')
-
- local data = conn:call("lxc", "create", { name = lxc_name, template = "download", args = { "--server", url, "--no-validate", "--dist", lxc_dist, "--release", lxc_release, "--arch", target } } )
-
- luci.http.write(data)
-end
-
-function lxc_action(lxc_action, lxc_name)
- luci.http.prepare_content("application/json")
-
- local data, ec = conn:call("lxc", lxc_action, lxc_name and { name = lxc_name} or {} )
-
- luci.http.write_json(ec and {} or data)
-end
-
-function lxc_get_config_path()
- local f = io.open("/etc/lxc/lxc.conf", "r")
- local content = f:read("*all")
- f:close()
- local ret = content:match('^%s*lxc.lxcpath%s*=%s*([^%s]*)')
- if ret then
- return ret .. "/"
- else
- return "/srv/lxc/"
- end
-end
-
-function lxc_configuration_get(lxc_name)
- luci.http.prepare_content("text/plain")
-
- local f = io.open(lxc_get_config_path() .. lxc_name .. "/config", "r")
- local content = f:read("*all")
- f:close()
-
- luci.http.write(content)
-end
-
-function lxc_configuration_set(lxc_name)
- luci.http.prepare_content("text/plain")
-
- local lxc_configuration = luci.http.formvalue("lxc_configuration")
-
- if lxc_configuration == nil then
- return luci.http.write("1")
- end
-
- local f, err = io.open(lxc_get_config_path() .. lxc_name .. "/config","w+")
- if not f then
- return luci.http.write("2")
- end
-
- f:write(lxc_configuration)
- f:close()
-
- luci.http.write("0")
-end
-
+++ /dev/null
-#
-# lxc uci configuration
-#
-
-config lxc 'lxc'
- option url 'virtualwrt.org/containers/'
+++ /dev/null
---[[
-
-LuCI LXC module
-
-Copyright (C) 2014, Cisco Systems, Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Author: Petar Koretic <petar.koretic@sartura.hr>
-
-]]--
-
-local fs = require "nixio.fs"
-
-m = Map("lxc", translate("LXC Containers"))
-
-if fs.access("/etc/config/lxc") then
- m:section(SimpleSection).template = "lxc"
-
- s = m:section(TypedSection, "lxc", translate("Options"))
- s.anonymous = true
- s.addremove = false
-
- s:option(Value, "url", translate("Containers URL"))
-end
-
-return m
+++ /dev/null
-<%#
-
-LuCI LXC module
-
-Copyright (C) 2014, Cisco Systems, Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Author: Petar Koretic <petar.koretic@sartura.hr>
-
--%>
-
-<fieldset class="cbi-section">
- <legend><%:Available Containers%></legend>
- <div class="cbi-section-node">
- <table id="t_lxc_list" class="cbi-section-table">
- <tr class="cbi-section-table-titles">
- <th class="cbi-section-table-cell"><%:Name%></th>
- <th class="cbi-section-table-cell"><%:Status%></th>
- <th class="cbi-section-table-cell"><%:Actions%></th>
- </tr>
- </table>
- </div>
-</fieldset>
-
-<fieldset class="cbi-section">
- <span id="lxc-list-output"></span>
-</fieldset>
-
-<hr/>
-<fieldset class="cbi-section">
- <legend><%:Create New Container%></legend>
- <div class="cbi-section-node">
- <table id="t_lxc_create" class="cbi-section-table">
- <tr class="cbi-section-table-titles">
- <th class="cbi-section-table-cell"><%:Name%></th>
- <th class="cbi-section-table-cell"><%:Template%></th>
- <th class="cbi-section-table-cell"><%:Actions%></th>
- </tr>
- <tr id="tr_holder">
- <td>
- <input type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' />
- </td>
- <td>
- <select id="s_template" class="cbi-input-select cbi-button">
- </select>
- </td>
- <td>
- <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create(tr_holder)" class="cbi-button cbi-button-add" />
- <span id="lxc-add-loader" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
- </td>
- </tr>
- </table>
- </div>
-</fieldset>
-
-<fieldset class="cbi-section">
- <span id="lxc-add-output"></span>
-</fieldset>
-
-<hr/>
-
-<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
-<script type="text/javascript">//<![CDATA[
-
- window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" }
- window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple"}
-
- var t_lxc_list = document.getElementById('t_lxc_list');
- var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> ';
- var timeout_msg = 0
- var output_list = document.getElementById("lxc-list-output")
- var output_add = document.getElementById("lxc-add-output")
- var loader_add = document.getElementById("lxc-add-loader")
-
- function lxc_create(tr)
- {
- var lxc_name = tr.querySelector("#tx_name").value.trim()
- var lxc_template = tr.querySelector("#s_template").value
- var bt_create = tr.querySelector("#bt_create")
-
- if (t_lxc_list.querySelector("[data-id='" + lxc_name + "']") != null)
- return info_message(output_add, "Container with that name already exists!", 4000)
-
- bt_create.disabled = true
- output_add.innerHTML = ''
-
- if (!lxc_name || !lxc_name.length)
- {
- bt_create.disabled = false
- return info_message(output_add, "Name cannot be empty!", 4000)
- }
-
- loading(loader_add)
-
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_create/' + '%h/%h'.format(lxc_name, lxc_template) , null,
- function(x)
- {
- bt_create.disabled = false
- loading(loader_add, 0)
-
- if (!x)
- info_message(output_add, "Container creation failed!")
- })
- }
-
- function lxc_create_template(lxc_name, lxc_state)
- {
- var info_row = t_lxc_list.querySelector("#empty")
- if (info_row)
- t_lxc_list.deleteRow(1)
-
- var actions = ''
- actions += '<input type="button" onclick="action_handler(this)" data-action="start" value="<%:Start%>" class="cbi-button cbi-button-apply" />'
- actions+= '<input type="button" onclick="action_handler(this)" data-action="stop" value="<%:Stop%>" class="cbi-button cbi-button-reset" />'
- actions+= '<input type="button" onclick="action_handler(this)" data-action="destroy" value="<%:Delete%>" class="cbi-button cbi-button-remove" />'
- actions+= ' <select class="cbi-input-select cbi-button" onchange="action_more_handler(this)">\
- <option selected disabled>more</option>\
- <option>configure</option>\
- <option>freeze</option>\
- <option>unfreeze</option>\
- <option>reboot</option>\
- </select>'
- actions+= '<span data-loader style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>'
-
- var row = t_lxc_list.insertRow(-1)
- var cell = row.insertCell(-1)
- cell.innerHTML = '%q%h%q'.format("<strong>", lxc_name, "</strong>")
- cell.width = "30%"
- cell.setAttribute("data-id", lxc_name)
-
- cell = row.insertCell(-1)
- cell.width = "20%"
- cell.innerHTML = "<img src='"+window.img[lxc_state]+"'/>"
-
- cell = row.insertCell(-1)
- cell.width = "50%"
- cell.innerHTML = actions
- }
-
- function action_handler(self)
- {
- var action = self.getAttribute("data-action");
-
- var bt_action = self
- var lxc_name = self.parentNode.parentNode.children[0].getAttribute('data-id')
- var status_img = self.parentNode.parentNode.querySelector('img')
- var loader = self.parentNode.querySelector('[data-loader]')
-
- bt_action.disabled = true
-
- if (action == "stop")
- {
- loading(loader)
-
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
- function(x, ec)
- {
- loading(loader, 0)
- bt_action.disabled = false
-
- if (!x || ec)
- return info_message(output_list,"Action failed!")
-
- set_status(status_img, "red")
-
- });
- }
-
- else if (action == "start")
- {
- loading(loader)
-
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
- function(x, data)
- {
- loading(loader, 0)
- bt_action.disabled = false
-
- //FIXME: uncomment after fixing 'lxc-start'
- if (!x /*|| ec */)
- return info_message(output_list,"Action failed!")
-
- //FIXME: uncomment after fixing 'lxc-start'
- //set_status(status_img, "green")
- });
- }
-
- else if (action == "destroy")
- {
- if (!confirm("This will completely remove LXC container from the disk. Are you sure? (container will be stopped if running)"))
- return
-
- loading(loader)
-
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
- function(x, ec)
- {
- loading(loader, 0)
- bt_action.disabled = false
-
- if (!x || ec)
- return info_message(output_list,"Action failed!")
-
- var row = self.parentNode.parentNode
- row.parentNode.removeChild(row)
-
- });
- }
- }
-
- function lxc_configure_handler(self)
- {
- var td = self.parentNode
- var textarea = td.querySelector('[data-id]')
- var lxc_name = textarea.getAttribute('data-id')
- var lxc_configuration = textarea.value
-
- new XHR().post('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_set/' + lxc_name, "lxc_configuration=" + encodeURIComponent(lxc_configuration) ,
- function(x)
- {
- if (!x || x.responseText != "0")
- return info_message(output_list,"Action failed!")
-
- info_message(output_list,"LXC configuration updated")
- var row = td.parentNode
- row.parentNode.removeChild(row)
- })
- }
-
- function lxc_rename_template(lxc_name)
- {
- var h = '\
- <input data-id="'+ lxc_name + '" type="text" placeholder="Enter new name" /> \
- <input data-id="bt_confirm" onclick="lxc_rename_handler(this)" type="button" class="cbi-button" value="Confirm" />'
-
- return h
- }
-
- function lxc_configure_template(lxc_name, lxc_configuration)
- {
- var h = '\
- <textarea data-id="'+ lxc_name + '" rows="20" style="width:100%">'+ lxc_configuration +'</textarea> \
- <input data-id="bt_confirm" onclick="lxc_configure_handler(this)" type="button" class="cbi-button" value="Confirm" />'
-
- return h
- }
-
- function action_more_handler(self)
- {
- var lxc_name = self.parentNode.parentNode.querySelector('[data-id]').getAttribute('data-id')
- var loader = self.parentNode.parentNode.querySelector('[data-loader]')
-
- var option = self.options[self.selectedIndex].text
-
- self.value = "more"
-
- switch (option)
- {
- case "configure":
- var tr = document.createElement('tr')
- var row = self.parentNode.parentNode
- var next_row = row.nextSibling
- if (next_row && next_row.getAttribute('data-action') !== null)
- row.parentNode.removeChild(next_row)
-
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_get/' + lxc_name, null,
- function(x)
- {
- tr.innerHTML="<td colspan='" + row.cells.length + "'>" + lxc_configure_template(lxc_name, x.responseText) + "</td>"
- tr.setAttribute('data-action','')
- row.parentNode.insertBefore(tr, row.nextSibling)
- })
-
- break
-
- case "freeze":
- var tr = self.parentNode.parentNode
- var img = tr.querySelector('img')
- if(img.getAttribute('src') != window.img["green"])
- return info_message(output_list,"Container is not running!")
-
- loading(loader)
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
- function(x, ec)
- {
- loading(loader, 0)
- if (!x || ec)
- return info_message(output_list,"Action failed!")
-
- set_status(img, "purple")
- })
-
- break
-
- case "unfreeze":
- var tr = self.parentNode.parentNode
- var img = tr.querySelector('img')
-
- if(img.getAttribute('src') != window.img["purple"])
- return info_message(output_list,"Container is not frozen!")
-
- loading(loader)
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
- function(x, ec)
- {
- loading(loader, 0)
- if (!x || ec)
- return info_message(output_list,"Action failed!")
-
- set_status(img, "green")
- })
-
- break
-
- case "reboot":
- var tr = self.parentNode.parentNode
- var img = tr.querySelector('img')
- if(img.getAttribute('src') != window.img["green"])
- return info_message(output_list,"Container is not running!")
-
- if (!confirm("Are you sure?"))
- return
-
- loading(loader)
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
- function(x, ec)
- {
- loading(loader, 0)
- if (!x || ec)
- return info_message(output_list,"Action failed!")
-
- info_message(output_list,"LXC rebooted")
- })
- break
- }
-
- }
-
- function set_empty(t_lxc_list)
- {
- if (document.getElementById('empty') !== null)
- return
-
- var row_count = t_lxc_list.rows.length;
- while(--row_count) t_lxc_list.deleteRow(row_count);
-
- var row = t_lxc_list.insertRow(-1);
- row.id = 'empty'
- var cell = row.insertCell(0);
- cell.colSpan = 4;
- cell.innerHTML = '<em><br />There are no containers available yet.</em>';
- }
-
- function lxc_list_update()
- {
- XHR.poll(4, '<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/list', null,
- function(x, data)
- {
- if (!x) return;
-
- var lxc_count = Object.keys(data).length
- if (!data || !lxc_count)
- return set_empty(t_lxc_list)
-
- if (document.getElementById('empty') !== null)
- t_lxc_list.deleteRow(1);
-
- var lxcs = t_lxc_list.querySelectorAll('td[data-id]')
- var lxc_name_table = {}
- for (var i = 0, len = lxcs.length; i < len; i++)
- {
- var lxc_name = lxcs[i].getAttribute('data-id')
- if (!(lxc_name in data))
- {
- var row = t_lxc_list.querySelector("[data-id='" + lxc_name + "']").parentNode
- row.parentNode.removeChild(row)
- continue
- }
-
- lxc_name_table[lxc_name] = lxcs[i].parentNode.querySelector('img')
- }
-
- for(var key in data)
- {
- var lxc_name = key
- var state = window.states[data[key]]
-
- if (!(lxc_name in lxc_name_table))
- lxc_create_template(lxc_name, state)
-
- else if (state != get_status(lxc_name_table[lxc_name]))
- set_status(lxc_name_table[lxc_name], state)
- }
-
- })
- }
-
- function loading(elem, state)
- {
- state = (typeof state === 'undefined') ? 1 : state
-
- if (state === 1)
- elem.innerHTML = loader_html
- else
- setTimeout(function() { elem.innerHTML = ''}, 1000)
- }
-
- function set_status(elem, state)
- {
- state = (typeof state === 'undefined') ? 1 : state
-
- setTimeout(function() { elem.setAttribute('src', window.img[state])}, 300)
- }
-
- function get_status(elem)
- {
- var src = elem.getAttribute('src')
-
- for (var i in img)
- {
- if (img[i] == src)
- return i
- }
- }
-
- function info_message(output, msg, timeout)
- {
- timeout = timeout || 3000
- output.innerHTML = msg
- clearTimeout(timeout_msg)
- timeout_msg = setTimeout(function(){ output.innerHTML=""}, timeout);
- }
-
- lxc_list_update()
-
- new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_get_downloadable', null,
- function(x, data)
- {
- if (!x) return;
-
- var lxc_count = Object.keys(data).length
- if (!data || !lxc_count) return;
- var select = document.getElementById("s_template");
- for(var key in data)
- {
- var option = document.createElement('option');
- option.value = data[key];
- option.text = data[key].replace(/[_:]/g, ' ');
- select.add(option, -1);
- }
- })
-
-//]]></script>
#
-# Copyright (C) 2006-2016 OpenWrt.org
+# Copyright (C) 2006-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
PKG_NAME:=mc
-PKG_VERSION:=4.8.18
+PKG_VERSION:=4.8.19
PKG_RELEASE:=1
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
PKG_LICENSE:=GPL-3.0+
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://ftp.midnight-commander.org/
-PKG_MD5SUM:=f7636815c987c1719c4f5de2dcd156a0e7d097b1d10e4466d2bdead343d5bece
+PKG_HASH:=eb9e56bbb5b2893601d100d0e0293983049b302c5ab61bfb544ad0ee2cc1f2df
PKG_BUILD_PARALLEL:=1
PKG_FIXUP:=autoreconf gettext-version
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
-define Package/$(PKG_NAME)
+define Package/mc
SECTION:=utils
CATEGORY:=Utilities
DEPENDS:=+glib2 +libncurses +libmount +MC_VFS:libssh2 $(LIBRPC_DEPENDS) $(ICONV_DEPENDS)
MENU:=1
endef
-define Package/$(PKG_NAME)/config
+define Package/mc/config
source "$(SOURCE)/Config.in"
endef
-define Package/$(PKG_NAME)/description
+define Package/mc/description
GNU Midnight Commander is a visual file manager.
It's a feature rich full-screen text mode application that allows you to copy,
move and delete files and whole directory trees, search for files and run commands in the subshell.
endef
CONFIGURE_ARGS += \
+ --enable-silent-rules \
+ --disable-tests \
--disable-doxygen-doc \
--with-homedir=/etc/mc \
--with-screen=ncurses \
--disable-vfs
endif
-define Package/$(PKG_NAME)/install
+define Package/mc/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mc $(1)/usr/bin
$(INSTALL_DIR) $(1)/etc/mc
$(INSTALL_DIR) $(1)/etc/mc/mcedit/Syntax
endef
-define Package/$(PKG_NAME)/conffiles
+define Package/mc/conffiles
/etc/mc/mc.menu
/etc/mc/skins/default.ini
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
+$(eval $(call BuildPackage,mc))
--- a/src/subshell/common.c
+++ b/src/subshell/common.c
-@@ -849,7 +849,7 @@ init_subshell_precmd (char *precmd, size
- "else "
- "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; "
- "fi; "
+@@ -843,16 +843,9 @@ init_subshell_precmd (char *precmd, size
+ * "PS1='$($PRECMD)$ '\n",
+ */
+ g_snprintf (precmd, buff_size,
+- "precmd() { "
+- "if [ ! \"${PWD##$HOME}\" ]; then "
+- "MC_PWD=\"~\"; "
+- "else "
+- "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; "
+- "fi; "
- "echo \"$USER@$(hostname -s):$MC_PWD\"; "
-+ "echo \"$USER@$HOSTNAME:$MC_PWD\"; "
- "pwd>&%d; "
- "kill -STOP $$; "
- "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]);
+- "pwd>&%d; "
+- "kill -STOP $$; "
+- "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]);
++ "precmd() { pwd>&%d; kill -STOP $$; }; "
++ "PRECMD=precmd; "
++ "PS1='$(eval $PRECMD)\\u@\\h:\\w\\$ '\n", subshell_pipe[WRITE]);
+ break;
+
+ case SHELL_ZSH:
include $(TOPDIR)/rules.mk
PKG_NAME:=mksh
-PKG_VERSION:=52c
+PKG_VERSION:=54
PKG_RELEASE:=1
PKG_MAINTAINER:=Thorsten Glaser <tg@mirbsd.org>
PKG_LICENSE:=MirOS
PKG_SOURCE:=$(PKG_NAME)-R$(PKG_VERSION).tgz
-PKG_SOURCE_URL:=http://www.mirbsd.org/MirOS/dist/mir/mksh
-PKG_MD5SUM:=cc3884e02314447e7b4a3073b8d65d1e
+PKG_SOURCE_URL:=http://www.mirbsd.org/MirOS/dist/mir/mksh \
+ http://pub.allbsd.org/MirOS/dist/mir/mksh/
+PKG_MD5SUM:=be0a6fb93b4a5f927bcc1893bb6692f8
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
-Refreshed for mksh-r52c, based on tg's patch
+Refreshed for mksh-r54, based on tg's patch
From 23712cea8e2a623fd952eb781df0011c501703d0 Mon Sep 17 00:00:00 2001
From: Thorsten Glaser <tg@mirbsd.org>
\alias doch='sudo mksh -c "$(\builtin fc -ln -1)"'
\command -v rot13 >/dev/null || \alias rot13='tr \
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \
-@@ -601,4 +602,8 @@
+@@ -600,4 +601,8 @@
\unset p
include $(TOPDIR)/rules.mk
PKG_NAME:=nano
-PKG_VERSION:=2.7.4
+PKG_VERSION:=2.7.5
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNU/nano
-PKG_MD5SUM:=c011c7f9e47cb1da27d4e7cc8b56ec6a
-PKG_HASH:=752170643039e2c95a433de357f0c70a8c4c4c561a90a7e7259a63e225b659b9
+PKG_MD5SUM:=002703e368e07882f75e304c8860d83d
+PKG_HASH:=a64d24e6bc4fc448376d038f9a755af77f8e748c9051b6f45bf85e783a7e67e4
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
define Package/$(addprefix open-plc-utils-,$(1))
$(call Package/open-plc-utils/Default)
DEPENDS:=open-plc-utils
- TITLE:=Utility $(2) from the Open PLC utilities
+ TITLE:=Utility $(1) from the Open PLC utilities
endef
define Package/$(addprefix open-plc-utils-,$(1))/description
- Utility $(2) from the Open PLC utilities package.
+ Utility $(1) from the Open PLC utilities package.
endef
endef
--- /dev/null
+#
+# Copyright (C) 2017 Hauke Mehrtens <hauke@hauke-m.de>
+# Copyright (C) 2016 - 2017 Stijn Tintel <stijn@linux-ipv6.be>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=openzwave
+PKG_REV:=164
+PKG_VERSION:=1.4.$(PKG_REV)
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://old.openzwave.com/downloads
+PKG_HASH:=4ecf39787aaf278c203764069b581dbc26094ce57cafeab4a0c1f012d2c0ac69
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/openzwave/default
+ URL:=http://openzwave.com
+ MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
+ DEPENDS:=+libpthread +libstdcpp
+endef
+
+define Package/openzwave/description
+ Open-ZWave is a library that interfaces with selected Z-Wave PC controllers
+endef
+
+define Package/libopenzwave
+$(call Package/openzwave/default)
+ SECTION:=Libs
+ CATEGORY:=Libraries
+ TITLE:=Open-ZWave Library
+endef
+
+define Package/openzwave
+$(call Package/openzwave/default)
+ SECTION:=Utils
+ CATEGORY:=Utilities
+ TITLE:=Open-ZWave MinOZW test utility
+ DEPENDS:=+libopenzwave +openzwave-config
+endef
+
+define Package/openzwave-config
+$(call Package/openzwave/default)
+ SECTION:=Utils
+ CATEGORY:=Utilities
+ TITLE:=Open-ZWave Device Configs
+endef
+
+MAKE_FLAGS += \
+ LD="$(TARGET_CROSS)g++" \
+ PREFIX=$(CONFIGURE_PREFIX) \
+ instlibdir=/usr/lib \
+ pkgconfigdir=/usr/lib/pkgconfig \
+ sysconfdir=/etc/openzwave
+
+define Build/Prepare
+ $(call Build/Prepare/Default)
+ rm $(PKG_BUILD_DIR)/cpp/src/platform/HidController.*
+ sed -i -e '/hidapi/d;/HidController/d' $(PKG_BUILD_DIR)/distfiles.mk
+endef
+
+define Package/libopenzwave/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopenzwave.so* $(1)/usr/lib/
+endef
+
+define Package/openzwave/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/MinOZW $(1)/usr/bin/
+endef
+
+define Package/openzwave-config/install
+ $(INSTALL_DIR) $(1)/etc/
+ $(CP) $(PKG_INSTALL_DIR)/etc/openzwave $(1)/etc/
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/openzwave $(1)/usr/include/
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopenzwave.* $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libopenzwave.pc $(1)/usr/lib/pkgconfig/
+endef
+
+$(eval $(call BuildPackage,libopenzwave))
+$(eval $(call BuildPackage,openzwave))
+$(eval $(call BuildPackage,openzwave-config))
--- /dev/null
+From eab45f0959ccb1deb662c6f8c036651088e2e8d6 Mon Sep 17 00:00:00 2001
+From: Stijn Tintel <stijn@linux-ipv6.be>
+Date: Fri, 17 Feb 2017 05:42:25 +0100
+Subject: [PATCH] unix: fix compilation against musl libc (#1127)
+
+POSIX.1-2001 requires sys/select.h for select() and friends.
+Compile-tested on glibc and musl, runtime tested on musl.
+
+Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
+---
+ cpp/src/platform/unix/SerialControllerImpl.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/cpp/src/platform/unix/SerialControllerImpl.cpp b/cpp/src/platform/unix/SerialControllerImpl.cpp
+index d95f848..b52b74f 100644
+--- a/cpp/src/platform/unix/SerialControllerImpl.cpp
++++ b/cpp/src/platform/unix/SerialControllerImpl.cpp
+@@ -25,6 +25,7 @@
+ // along with OpenZWave. If not, see <http://www.gnu.org/licenses/>.
+ //
+ //-----------------------------------------------------------------------------
++#include <sys/select.h>
+ #include <unistd.h>
+ #include <pthread.h>
+ #include "Defs.h"
+--
+2.10.2
+
--- /dev/null
+--- a/cpp/build/Makefile
++++ b/cpp/build/Makefile
+@@ -15,7 +15,7 @@
+ # what flags we will use for compiling in debug mode
+ DEBUG_CFLAGS := -Wall -Wno-unknown-pragmas -Wno-inline -Wno-format -Werror -Wno-error=sequence-point -Wno-sequence-point -ggdb -DDEBUG -fPIC -DSYSCONFDIR="\"$(PREFIX)/etc/openzwave/\""
+ # what flags we will use for compiling in release mode
+-RELEASE_CFLAGS := -Wall -Wno-unknown-pragmas -Werror -Wno-format -Wno-error=sequence-point -Wno-sequence-point -O3 -DNDEBUG -fPIC -DSYSCONFDIR="\"$(PREFIX)/etc/openzwave/\""
++RELEASE_CFLAGS := -Wall -Wno-unknown-pragmas -Wno-error=sequence-point -Wno-sequence-point -DNDEBUG -fPIC -DSYSCONFDIR="\"/etc/openzwave/\""
+ #what flags we will use for linking in debug mode
+ DEBUG_LDFLAGS := -g
+
+@@ -139,7 +139,7 @@ $(LIBDIR)/libopenzwave.a: $(patsubst %.c
+ $(patsubst %.cpp,$(OBJDIR)/%.o,$(indep)) \
+ $(OBJDIR)/vers.o
+ @echo "Linking Static Library"
+- @$(AR) $@ $+
++ @$(AR) q $@ $+
+ @$(RANLIB) $@
+
+ $(LIBDIR)/$(SHARED_LIB_NAME): $(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
+@@ -161,7 +161,7 @@ $(top_builddir)/libopenzwave.pc: $(top_s
+ -e 's|[@]exec_prefix@|$(PREFIX)/bin|g' \
+ -e 's|[@]libdir@|$(instlibdir)|g' \
+ -e 's|[@]includedir@|$(PREFIX)/include/openzwave/|g' \
+- -e 's|[@]sysconfdir@|$(PREFIX)/etc/openzwave/|g' \
++ -e 's|[@]sysconfdir@|/etc/openzwave/|g' \
+ -e 's|[@]gitversion@|$(GITVERSION)|g' \
+ -e 's|[@]docdir@|$(docdir)/|g' \
+ -e 's|[@]VERSION@|$(VERSION)|g' \
--- /dev/null
+--- a/cpp/src/Driver.cpp
++++ b/cpp/src/Driver.cpp
+@@ -37,11 +37,6 @@
+ #include "platform/Event.h"
+ #include "platform/Mutex.h"
+ #include "platform/SerialController.h"
+-#ifdef WINRT
+-#include "platform/winRT/HidControllerWinRT.h"
+-#else
+-#include "platform/HidController.h"
+-#endif
+ #include "platform/Thread.h"
+ #include "platform/Log.h"
+ #include "platform/TimeStamp.h"
+@@ -223,14 +218,7 @@ m_nonceReportSentAttempt( 0 )
+
+ initNetworkKeys(false);
+
+- if( ControllerInterface_Hid == _interface )
+- {
+- m_controller = new HidController();
+- }
+- else
+- {
+- m_controller = new SerialController();
+- }
++ m_controller = new SerialController();
+ m_controller->SetSignalThreshold( 1 );
+
+ Options::Get()->GetOptionAsBool( "NotifyTransactions", &m_notifytransactions );
+--- a/cpp/build/Makefile
++++ b/cpp/build/Makefile
+@@ -66,16 +66,7 @@ CFLAGS += $(CPPFLAGS)
+ #where to put the temporary library
+ LIBDIR ?= $(top_builddir)
+
+-INCLUDES := -I $(top_srcdir)/cpp/src -I $(top_srcdir)/cpp/tinyxml/ -I $(top_srcdir)/cpp/hidapi/hidapi/
+-
+-ifeq ($(UNAME),Darwin)
+-SOURCES_HIDAPI =$(top_srcdir)/cpp/hidapi/mac
+-else ifeq ($(UNAME),FreeBSD)
+-SOURCES_HIDAPI =$(top_srcdir)/cpp/hidapi/libusb
+-else
+-SOURCES_HIDAPI =$(top_srcdir)/cpp/hidapi/linux
+-endif
+-
++INCLUDES := -I $(top_srcdir)/cpp/src -I $(top_srcdir)/cpp/tinyxml/
+
+ SOURCES := $(top_srcdir)/cpp/src $(top_srcdir)/cpp/src/command_classes $(top_srcdir)/cpp/tinyxml \
+ $(top_srcdir)/cpp/src/value_classes $(top_srcdir)/cpp/src/platform $(top_srcdir)/cpp/src/platform/unix $(SOURCES_HIDAPI) $(top_srcdir)/cpp/src/aes/
+@@ -85,14 +76,6 @@ VPATH = $(top_srcdir)/cpp/src:$(top_srcd
+
+ tinyxml := $(notdir $(wildcard $(top_srcdir)/cpp/tinyxml/*.cpp))
+
+-ifeq ($(UNAME),Darwin)
+-hidapi := $(notdir $(wildcard $(top_srcdir)/cpp/hidapi/mac/*.c))
+-else ifeq ($(UNAME),FreeBSD)
+-hidapi := $(notdir $(wildcard $(top_srcdir)/cpp/hidapi/libusb/*.c))
+-else
+-hidapi := $(notdir $(wildcard $(top_srcdir)/cpp/hidapi/linux/*.c)) # we do not want the libusb version
+-endif
+-
+ cclasses := $(notdir $(wildcard $(top_srcdir)/cpp/src/command_classes/*.cpp))
+ vclasses := $(notdir $(wildcard $(top_srcdir)/cpp/src/value_classes/*.cpp))
+ pform := $(notdir $(wildcard $(top_srcdir)/cpp/src/platform/*.cpp)) \
+@@ -111,7 +94,6 @@ printversion:
+
+
+ -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(tinyxml))
+--include $(patsubst %.c,$(DEPDIR)/%.d,$(hidapi))
+ -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(cclasses))
+ -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(vclasses))
+ -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(pform))
+@@ -131,7 +113,6 @@ $(top_srcdir)/cpp/src/vers.cpp:
+ #$(OBJDIR)/vers.o: $(top_builddir)/vers.cpp
+
+ $(LIBDIR)/libopenzwave.a: $(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
+- $(patsubst %.c,$(OBJDIR)/%.o,$(hidapi)) \
+ $(patsubst %.c,$(OBJDIR)/%.o,$(aes)) \
+ $(patsubst %.cpp,$(OBJDIR)/%.o,$(cclasses)) \
+ $(patsubst %.cpp,$(OBJDIR)/%.o,$(vclasses)) \
+@@ -143,7 +124,6 @@ $(LIBDIR)/libopenzwave.a: $(patsubst %.c
+ @$(RANLIB) $@
+
+ $(LIBDIR)/$(SHARED_LIB_NAME): $(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
+- $(patsubst %.c,$(OBJDIR)/%.o,$(hidapi)) \
+ $(patsubst %.c,$(OBJDIR)/%.o,$(aes)) \
+ $(patsubst %.cpp,$(OBJDIR)/%.o,$(cclasses)) \
+ $(patsubst %.cpp,$(OBJDIR)/%.o,$(vclasses)) \
--- /dev/null
+--- a/cpp/src/platform/unix/SerialControllerImpl.cpp
++++ b/cpp/src/platform/unix/SerialControllerImpl.cpp
+@@ -34,10 +34,6 @@
+ #include "SerialControllerImpl.h"
+ #include "platform/Log.h"
+
+-#ifdef __linux__
+-#include <libudev.h>
+-#endif
+-
+ using namespace OpenZWave;
+
+ //-----------------------------------------------------------------------------
+--- a/cpp/build/Makefile
++++ b/cpp/build/Makefile
+@@ -59,7 +59,7 @@ endif
+
+ else
+ LDFLAGS += -shared -Wl,-soname,libopenzwave.so.$(VERSION)
+-LIBS += -ludev
++LIBS +=
+ endif
+ CFLAGS += $(CPPFLAGS)
+
# templates
#
-define Package/$(PKG_NAME)/Default
+define Package/owfs/Default
TITLE:=OWFS (1-Wire File System)
URL:=http://owfs.sourceforge.net/
SECTION:=net
SUBMENU:=Filesystem
endef
-define Package/$(PKG_NAME)/Default/description
+define Package/owfs/Default/description
OWFS is a suite of programs that designed to make the 1-wire bus and its
devices easily accessible. The underlying principle is to create a virtual
filesystem, with the unique ID being the directory, and the individual
endef
define Package/libow/description
- $(call Package/$(PKG_NAME)/Default/description)
+ $(call Package/owfs/Default/description)
This package contains the OWFS library.
endef
endef
define Package/libow-capi/description
- $(call Package/$(PKG_NAME)/Default/description)
+ $(call Package/owfs/Default/description)
This package contains the OWFS C-API library.
endef
endef
define Package/owshell/description
- $(call Package/$(PKG_NAME)/Default/description)
+ $(call Package/owfs/Default/description)
This package contains the OWFS shell utilities.
endef
endef
define Package/owfs/description
- $(call Package/$(PKG_NAME)/Default/description)
+ $(call Package/owfs/Default/description)
This package contains the OWFS fuse filesystem.
endef
endef
define Package/owhttpd/description
- $(call Package/$(PKG_NAME)/Default/description)
+ $(call Package/owfs/Default/description)
This package contains the OWFS http server.
endef
endef
define Package/owftpd/description
- $(call Package/$(PKG_NAME)/Default/description)
+ $(call Package/owfs/Default/description)
This package contains the OWFS ftp server.
endef
endef
define Package/owserver/description
- $(call Package/$(PKG_NAME)/Default/description)
+ $(call Package/owfs/Default/description)
This package contains the OWFS network server.
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=screen
-PKG_VERSION:=4.3.1
+PKG_VERSION:=4.5.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=97db2114dd963b016cd4ded34831955dcbe3251e5eee45ac2606e67e9f097b2d
PKG_SOURCE_URL:=@GNU/screen
-PKG_MD5SUM:=5bb3b0ff2674e29378c31ad3411170ad
PKG_LICENSE:=GPL-3.0+
PKG_LICENSE_FILES:=
include $(TOPDIR)/rules.mk
PKG_NAME:=ttyd
-PKG_VERSION:=1.3.0
+PKG_VERSION:=1.3.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
include $(TOPDIR)/rules.mk
PKG_NAME:=vim
-PKG_VERSION:=7.4
-PKG_RELEASE:=3
-VIMVER:=74
+PKG_VERSION:=8.0.069
+PKG_RELEASE:=4
+VIMVER:=80
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=ftp://ftp.vim.org/pub/vim/unix/
-PKG_MD5SUM:=607e135c559be642f210094ad023dc65
+PKG_MD5SUM:=457543a7754b0d3c1c0aa4d4c3bb4070
PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)$(VIMVER)
TITLE+= (Normal)
endef
+
+define Package/vim-fuller
+ $(call Package/vim/Default)
+ TITLE+= (Big)
+endef
+
define Package/vim-runtime
$(call Package/vim/Default)
TITLE+= (runtime files)
(Normal build)
endef
+
+define Package/vim-fuller/description
+ Vim is an almost compatible version of the UNIX editor Vi.
+ (Big build)
+endef
+
define Package/vim-runtime/description
Vim is an almost compatible version of the UNIX editor Vi.
(Runtime files)
endef
endif
+ifneq ($(CONFIG_PACKAGE_vim-fuller),)
+define Build/Compile/vim-fuller
+ $(call Build/Configure/Default, \
+ --with-features=big \
+ --enable-multibyte \
+ )
+ +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
+ DESTDIR="$(PKG_INSTALL_DIR)" all
+ $(CP) $(PKG_BUILD_DIR)/src/$(PKG_NAME) $(PKG_BUILD_DIR)/vim_big
+endef
+endif
+
+
+
ifneq ($(CONFIG_PACKAGE_xxd),)
define Build/Compile/xxd
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
define Build/Compile
$(call Build/Compile/vim)
$(call Build/Compile/vim-full)
+$(call Build/Compile/vim-fuller)
$(call Build/Compile/vim-runtime)
$(call Build/Compile/xxd)
endef
$(INSTALL_CONF) ./files/vimrc.full $(1)/usr/share/vim/vimrc
endef
+
+define Package/vim-fuller/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/vim_big $(1)/usr/bin/vim
+ $(INSTALL_DIR) $(1)/usr/share/vim
+ $(CP) -r $(PKG_INSTALL_DIR)/usr/share/vim/vim$(VIMVER) $(1)/usr/share/vim
+ $(INSTALL_CONF) ./files/vimrc.full $(1)/usr/share/vim/vimrc
+endef
+
+
+
define Package/vim-runtime/install
$(CP) $(PKG_INSTALL_DIR)/* $(1)
rm -rf $(1)/usr/share/vim/vim$(VIMVER)/doc
$(eval $(call BuildPackage,vim))
$(eval $(call BuildPackage,vim-full))
+$(eval $(call BuildPackage,vim-fuller))
$(eval $(call BuildPackage,vim-runtime))
$(eval $(call BuildPackage,vim-help))
$(eval $(call BuildPackage,xxd))
+++ /dev/null
---- a/src/auto/configure
-+++ b/src/auto/configure
-@@ -12294,37 +12294,8 @@ _ACEOF
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
- $as_echo_n "checking uint32_t is 32 bits... " >&6; }
--if test "$cross_compiling" = yes; then :
-- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check uint32_t when cross-compiling." >&5
--$as_echo "$as_me: WARNING: cannot check uint32_t when cross-compiling." >&2;}
--else
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h. */
--
--#ifdef HAVE_STDINT_H
--# include <stdint.h>
--#endif
--#ifdef HAVE_INTTYPES_H
--# include <inttypes.h>
--#endif
--main() {
-- uint32_t nr1 = (uint32_t)-1;
-- uint32_t nr2 = (uint32_t)0xffffffffUL;
-- if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
-- exit(0);
--}
--_ACEOF
--if ac_fn_c_try_run "$LINENO"; then :
-- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: assuming ok" >&5
- $as_echo "ok" >&6; }
--else
-- as_fn_error "WRONG! uint32_t not defined correctly." "$LINENO" 5
--fi
--rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-- conftest.$ac_objext conftest.beam conftest.$ac_ext
--fi
--
--
-
- bcopy_test_prog='
- #include "confdefs.h"
include $(TOPDIR)/rules.mk
PKG_NAME:=zoneinfo
-PKG_VERSION:=2016j
-PKG_VERSION_CODE:=2016j
+PKG_VERSION:=2017a
+PKG_VERSION_CODE:=2017a
PKG_RELEASE:=1
#As i couldn't find real license used "Public Domain"
PKG_SOURCE:=tzdata$(PKG_VERSION).tar.gz
PKG_SOURCE_CODE:=tzcode$(PKG_VERSION_CODE).tar.gz
PKG_SOURCE_URL:=http://www.iana.org/time-zones/repository/releases
-PKG_MD5SUM:=db361d005ac8b30a2d18c5ca38d3e8ab
+PKG_MD5SUM:=cb8274cd175f8a4d9d1b89895df876dc
include $(INCLUDE_DIR)/package.mk
define Download/tzcode
FILE=$(PKG_SOURCE_CODE)
URL=$(PKG_SOURCE_URL)
- MD5SUM:=0684b98eb184fab250b6ca946862078d
+ MD5SUM:=eef0bfac7a52dce6989a7d8b40d86fe0
endef
$(eval $(call Download,tzcode))