include $(TOPDIR)/rules.mk
PKG_NAME:=netdata
-PKG_VERSION:=1.4.0
-PKG_RELEASE:=3
+PKG_VERSION:=1.5.0
+PKG_RELEASE:=1
PKG_MAINTAINER:=Daniel Engberg <daniel.engberg.lists@pyret.net>
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=http://firehol.org/download/netdata/releases/v$(PKG_VERSION)
-PKG_SOURCE_VERSION:=3028b87ee19e8550df6b9decc49733d595e0bd6e
+PKG_SOURCE_URL:=https://github.com/firehol/netdata/releases/download/v$(PKG_VERSION)
+PKG_SOURCE_VERSION:=c5f8cecf83a7ed8880003b66614c71f7b2bff5b594f412262ec85143ca44adae
PKG_INSTALL:=1
PKG_FIXUP:=autoreconf
mkdir -p $(1)/usr/share/netdata
$(CP) $(PKG_INSTALL_DIR)/usr/share/netdata $(1)/usr/share
rm $(1)/usr/share/netdata/web/images/animated.gif
+ rm -rf $(1)/usr/share/netdata/web/images/seo-*.png
+ rm -rf $(1)/usr/share/netdata/web/images/post.png
rm -rf $(1)/usr/share/netdata/web/old
rm $(1)/usr/share/netdata/web/demo*html
rm $(1)/usr/share/netdata/web/fonts/*.svg
-### NetData Configuration
-
-### Notes about plugins
-###
-### charts.d - REQUIRES Bash, enable here and edit charts.d.conf
-### apps - none atm
-### node.d - REQUIRES node.js
-### tc - QoS stats (if wanted)
-### cgcroups - No support in OpenWRT/LEDE by default
-### health - Disabled by default
-### KSM - No support in OpenWRT/LEDE by default
-### python.d - REQUIRES python and PyYAML, edit python.d.conf to enable
+# netdata configuration
+#
+# You can download the latest version of this file, using:
+#
+# wget -O /etc/netdata/netdata.conf http://localhost:19999/netdata.conf
+# or
+# curl -o /etc/netdata/netdata.conf http://localhost:19999/netdata.conf
+#
+# You can uncomment and change any of the options below.
+# The value shown in the commented settings, is the default value.
+#
+# Notes about plugins
+#
+# tc - QoS stats (if wanted)
+# cgcroups - No support in OpenWRT/LEDE by default
+# charts.d - REQUIRES bash, enable here and edit charts.d.conf
+# node.d - REQUIRES node.js
+# python.d - REQUIRES python and PyYAML, edit python.d.conf to enable
+# apps - none atm
+# health - Disabled by default
+# KSM - No support in OpenWRT/LEDE by default
+
+# global netdata configuration
[global]
- run as user = nobody
- web files owner = root
- web files group = root
- update every = 2
- history = 1800
- access log = none
+ # glibc malloc arena max for plugins = 1
+ # glibc malloc arena max for netdata = 1
+ # config directory = /etc/netdata
+ # plugins directory = /usr/libexec/netdata/plugins.d
+ # web files directory = /usr/share/netdata/web
+ # cache directory = /var/cache/netdata
+ # lib directory = /var/lib/netdata
+ # log directory = /var/log/netdata
+ # host access prefix =
+ # home directory = /var/cache/netdata
+ # debug flags = 0x00000000
+ memory deduplication (ksm) = no
debug log = syslog
error log = syslog
+ access log = none
+ # errors flood protection period = 1200
+ # errors to trigger flood protection = 200
memory mode = ram
+ # hostname = LEDE
+ # history = 3600
+ # update every = 1
+ update every = 2
+ # pthread stack size = 8388608
+ run as user = nobody
+ web files owner = root
+ web files group = root
+ # http port listen backlog = 100
+ # default port = 19999
+ # bind to = *
+ # multi threaded web server = yes
+ # disconnect idle web clients after seconds = 60
+ # respect web browser do not track policy = no
+ enable web responses gzip compression = no
+ # web compression strategy = default
+ # web compression level = 3
[plugins]
- charts.d = no
- apps = no
- node.d = no
+ # PATH environment variable = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
tc = no
+ # idlejitter = yes
+ # proc = yes
+ # diskspace = yes
cgroups = no
+ # checks = no
+ # plugins directory = /usr/libexec/netdata/plugins.d
+ enable running new plugins = no
+ # check for new plugins every = 60
+ charts.d = no
+ # plugins directory = /usr/libexec/netdata/plugins.d
+ node.d = no
+ python.d = no
+ apps = no
+ fping = no
+
+[registry]
+ # enabled = no
+ # registry db directory = /var/lib/netdata/registry
+ # netdata unique id file = /var/lib/netdata/registry/netdata.public.unique.id
+ # registry db file = /var/lib/netdata/registry/registry.db
+ # registry log file = /var/lib/netdata/registry/registry-log.db
+ # registry save db every new entries = 1000000
+ # registry expire idle persons days = 365
+ # registry domain =
+ # registry to announce = https://registry.my-netdata.io
+ # registry hostname = LEDE
+ # verify browser cookies support = yes
+ # max URL length = 1024
+ # max URL name length = 50
[health]
enabled = no
+ # health db directory = /var/lib/netdata/health
+ # health db file = /var/lib/netdata/health/health-log.db
+ # health configuration directory = /etc/netdata/health.d
+ # script to execute on alarm = /usr/libexec/netdata/plugins.d/alarm-notify.sh
+ # in memory max health log entries = 1000
+ # run at least every seconds = 10
+ # rotate log every lines = 2000
+
+[backend]
+ # enabled = no
+ # data source = average
+ # type = graphite
+ # destination = localhost
+ # prefix = netdata
+ # hostname = LEDE
+ # update every = 10
+ # buffer on failures = 10
+ # timeout ms = 20000
+
+# per plugin configuration
+
+[plugin:fping]
+ # update every = 1
+ # command options =
[plugin:proc]
- /proc/net/softnet_stat = no
- /proc/net/snmp = no
+ # netdata server resources = yes
+ # /proc/stat = yes
+ # /proc/uptime = yes
+ # /proc/loadavg = yes
+ # /proc/sys/kernel/random/entropy_avail = yes
+ # /proc/interrupts = yes
+ # /proc/softirqs = yes
+ # /proc/vmstat = yes
+ # /proc/meminfo = yes
/sys/kernel/mm/ksm = no
+ /sys/devices/system/edac/mc = no
+ /sys/devices/system/node = no
+ # /proc/net/dev = yes
/proc/net/netstat = no
- /proc/net/ip_vs_stats = no
+ /proc/net/snmp = no
+ /proc/net/snmp6 = no
+ /proc/net/softnet_stat = no
+ /proc/net/ip_vs/stats = no
+ # /proc/net/stat/conntrack = yes
/proc/net/stat/synproxy = no
+ # /proc/diskstats = yes
/proc/net/rpc/nfsd = no
/proc/net/rpc/nfs = no
+ # ipc = yes
+
+[plugin:proc:/proc/stat]
+ # cpu utilization = yes
+ # per cpu core utilization = yes
+ # cpu interrupts = yes
+ # context switches = yes
+ # processes started = yes
+ # processes running = yes
+ # filename to monitor = /proc/stat
+
+[plugin:proc:/proc/interrupts]
+ # interrupts per core = yes
+ # filename to monitor = /proc/interrupts
+
+[plugin:proc:/proc/softirqs]
+ # interrupts per core = yes
+ # filename to monitor = /proc/softirqs
+
+[plugin:proc:/proc/net/dev]
+ # enable new interfaces detected at runtime = auto
+ # bandwidth for all interfaces = auto
+ # packets for all interfaces = auto
+ # errors for all interfaces = auto
+ # drops for all interfaces = auto
+ # fifo for all interfaces = auto
+ # compressed packets for all interfaces = auto
+ # frames, collisions, carrier counters for all interfaces = auto
+ # disable by default interfaces matching = lo fireqos* *-ifb
+ # filename to monitor = /proc/net/dev
+
+[plugin:proc:/proc/net/dev:eth0]
+ # enabled = yes
+ # bandwidth = auto
+ # packets = auto
+ # errors = auto
+ # drops = auto
+ # fifo = auto
+ # compressed = auto
+ # events = auto
+
+[plugin:proc:/proc/diskstats]
+ # enable new disks detected at runtime = yes
+ # performance metrics for physical disks = auto
+ # performance metrics for virtual disks = auto
+ # performance metrics for partitions = no
+ # bandwidth for all disks = auto
+ # operations for all disks = auto
+ # merged operations for all disks = auto
+ # i/o time for all disks = auto
+ # queued operations for all disks = auto
+ # utilization percentage for all disks = auto
+ # backlog for all disks = auto
+ # filename to monitor = /proc/diskstats
+ # path to get block device infos = /sys/dev/block/%lu:%lu/%s
+ # path to get h/w sector size = /sys/block/%s/queue/hw_sector_size
+ # path to get h/w sector size for partitions = /sys/dev/block/%lu:%lu/subsystem/%s/../queue/hw_sector_size
+ # performance metrics for disks with major 8 = yes
+
+[plugin:proc:/proc/diskstats:sda]
+ # enable = yes
+ # enable performance metrics = yes
+ # bandwidth = auto
+ # operations = auto
+ # merged operations = auto
+ # i/o time = auto
+ # queued operations = auto
+ # utilization percentage = auto
+ # backlog = auto
+
+[plugin:proc:/proc/net/rpc/nfsd]
+ # filename to monitor = /proc/net/rpc/nfsd
+ # read cache = yes
+ # file handles = yes
+ # I/O = yes
+ # threads = yes
+ # read ahead = yes
+ # network = yes
+ # rpc = yes
+ # NFS v2 procedures = yes
+ # NFS v3 procedures = yes
+ # NFS v4 procedures = yes
+ # NFS v4 operations = yes
+
+[plugin:proc:/proc/net/rpc/nfs]
+ # filename to monitor = /proc/net/rpc/nfs
+ # network = yes
+ # rpc = yes
+ # NFS v2 procedures = yes
+ # NFS v3 procedures = yes
+ # NFS v4 procedures = yes
-diff --git a/conf.d/charts.d.conf b/conf.d/charts.d.conf
-index acb2a6f..8111859 100644
--- a/conf.d/charts.d.conf
+++ b/conf.d/charts.d.conf
@@ -30,7 +30,7 @@
# BY DEFAULT ENABLED MODULES
# ap=yes
-diff --git a/conf.d/python.d.conf b/conf.d/python.d.conf
-index 940bd91..78e2f0a 100644
--- a/conf.d/python.d.conf
+++ b/conf.d/python.d.conf
@@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=syslog-ng
-PKG_VERSION:=3.8.1
-PKG_RELEASE:=3
+PKG_VERSION:=3.9.1
+PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/balabit/syslog-ng/releases/download/$(PKG_NAME)-$(PKG_VERSION)/
-PKG_MD5SUM:=acf14563cf5ce435db8db35486ce66af
+PKG_MD5SUM:=1b48da9ef620cf06e55e481b5abb677a
+PKG_HASH:=5678856a550ae790618fabde9d1447f932ce7a9080d55dca8fc5df1202c70a17
PKG_INSTALL:=1
CONFIGURE_ARGS += \
$(call autoconf_bool,CONFIG_IPV6,ipv6) \
--disable-dependency-tracking \
- --disable-ampq \
+ --disable-amqp \
--disable-tcp-wrapper \
--disable-glibtest \
--disable-mongodb \
--- /dev/null
+# place to put customization of logging
+
-@version:3.8
+@version:3.9
options {
chain_hostnames(no);
source src {
internal();
- unix-stream("/dev/log");
+ unix-dgram("/dev/log");
};
source net {
source(kernel);
destination(messages);
};
+
+@include "/etc/custom-logs.conf"
+
--- /dev/null
+#
+# Copyright (C) 2008-2016 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:=dejavu-fonts-ttf
+PKG_VERSION:=2.37
+PKG_RELEASE:=1
+
+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
+
+FILES:= \
+ DejaVuSerif-Italic \
+ DejaVuSerifCondensed-Italic \
+ DejaVuSerifCondensed-BoldItalic \
+ DejaVuSerifCondensed-Bold \
+ DejaVuSerifCondensed \
+ DejaVuSerif-BoldItalic \
+ DejaVuSerif-Bold \
+ DejaVuSerif \
+ DejaVuSans-Oblique \
+ DejaVuSansMono-Oblique \
+ DejaVuSansMono-BoldOblique \
+ DejaVuSansMono-Bold \
+ DejaVuSansMono \
+ DejaVuSans-ExtraLight \
+ DejaVuSansCondensed-Oblique \
+ DejaVuSansCondensed-BoldOblique \
+ DejaVuSansCondensed-Bold \
+ DejaVuSansCondensed \
+ DejaVuSans-BoldOblique \
+ DejaVuSans-Bold \
+ DejaVuSans \
+ DejaVuMathTeXGyre
+
+define PartGen
+define Package/dejavu-fonts-ttf-$(1)
+$(call Package/dejavu-fonts-ttf/Default)
+ TITLE:=$(1)
+endef
+endef
+
+define Package/dejavu-fonts-ttf/Default
+ TITLE:=dejavu-fonts-ttf
+ SECTION:=fonts
+ CATEGORY:=Fonts
+ SUBMENU:=DejaVu
+ URL:=http://dejavu.sourceforge.net/
+endef
+
+$(foreach file,$(FILES),$(eval $(call PartGen,$(file))))
+
+define Build/Compile
+ true
+endef
+
+define Build/Configure
+ true
+endef
+
+define PartInstall
+define Package/dejavu-fonts-ttf-$(1)/install
+ $(INSTALL_DIR) \
+ $$(1)/usr/share/fonts/ttf-dejavu
+
+ $(INSTALL_DATA) \
+ $(PKG_BUILD_DIR)/ttf/$(1).ttf \
+ $$(1)/usr/share/fonts/ttf-dejavu/
+endef
+endef
+
+$(foreach file,$(FILES),$(eval $(call PartInstall,$(file))))
+
+$(foreach file,$(FILES),$(eval $(call BuildPackage,dejavu-fonts-ttf-$(file))))
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=django-compressor
-PKG_VERSION:=2.1
+PKG_VERSION:=2.1.1
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=django_compressor-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/23/46/2c7d582255969ad5259937f5f9e14aec1f3349d0fc0651129330918d1c6d/
+PKG_SOURCE_URL:=https://pypi.python.org/packages/38/58/03098a826062b856956c7169a8f778ec2b8e2767ddc63da0629062df5621/
PKG_BUILD_DIR:=$(BUILD_DIR)/django_compressor-$(PKG_VERSION)/
-PKG_MD5SUM:=21ecfe4e8615eae64f7068a5599df9af
+PKG_MD5SUM:=5e74141076b70272149ed07e6ce0ea56
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=django-constance
-PKG_VERSION:=1.2
+PKG_VERSION:=1.3.4
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/0a/ff/1c1caae2b7be9c26f2aee0703236998e22cf5557fa56726347b5afa149d1/
-PKG_MD5SUM:=f9f8e527df50b0a1533149d9be0b814b
+PKG_SOURCE_URL:=https://pypi.python.org/packages/0c/19/74c6bbf29a7882bab377db7a4ca30b43e09173dc1e6cabe163dc8d6a3931/
+PKG_MD5SUM:=2e197701ed93082e5fa41df0f4742294
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=django-restframework
-PKG_VERSION:=3.3.3
+PKG_VERSION:=3.5.4
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=djangorestframework-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://pypi.python.org/packages/source/d/djangorestframework/
+PKG_SOURCE_URL:=https://pypi.python.org/packages/e9/24/86dfe19fb82a40a3d7a4c50371a8bd85b9277d3506698bf332a6d41d08f6/
PKG_BUILD_DIR:=$(BUILD_DIR)/djangorestframework-$(PKG_VERSION)
-PKG_MD5SUM:=6f5ee9646e7fa87dad4385d3c7e7678d
+PKG_MD5SUM:=979808c387dad8d0ebb6025c39dc7b94
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=django-statici18n
-PKG_VERSION:=1.2.1
+PKG_VERSION:=1.3.0
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/72/76/6ee13019e1691bff6b759136068ee77fcc2982b700135caa134030937b28/
-PKG_MD5SUM:=67cac19909dd3272ae1fc73ad8d1dca3
+PKG_SOURCE_URL:=https://pypi.python.org/packages/86/6b/2c2e86a7e144ba7b064119eaafb2c8c67665c2a0e722f0819daa9657e551/
+PKG_MD5SUM:=61e22a6f2399f9f829308e4d91b36ee0
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=django
-PKG_VERSION:=1.8.12
+PKG_VERSION:=1.8.17
PKG_RELEASE=1
PKG_LICENSE:=BSD-3-Clause
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/django/django.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=c168aeba175dbb92c615460a360cb1ea978de5d3
+PKG_SOURCE_VERSION:=d3d12fc11da56e4ea8af37a22a9a0aa6579ab2d5
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_BUILD_DEPENDS:=python python-setuptools
--- /dev/null
+menu "Configuration"
+ depends on PACKAGE_luv
+
+config LUV_USE_LUAJIT_ENGINE
+ bool "Use luajit engine"
+ select PACKAGE_luajit
+ help
+ If selected, luv will be compiled against luajit. If not selected, luv will use Lua as engine.
+ default n
+
+endmenu
--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=luv
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/luvit/luv.git
+PKG_SOURCE_VERSION:=1.9.1-1
+PKG_SOURCE_DATE:=2016-12-16
+
+PKG_LICENSE:=Apache-2.0
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_USE_MIPS16:=0
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/luv
+ SUBMENU:=Lua
+ SECTION:=lang
+ CATEGORY:=Languages
+ TITLE:=Luv
+ URL:=https://github.com/luvit/luv
+ MAINTAINER:=Morteza Milani <milani@pichak.co>
+ DEPENDS:=+libuv +!LUV_USE_LUAJIT_ENGINE:lua
+endef
+
+define Package/luv/description
+ Bare libuv bindings for lua
+endef
+
+define Package/luv/config
+ source "$(SOURCE)/Config.in"
+endef
+
+CMAKE_OPTIONS += -DLUA_BUILD_TYPE=System
+CMAKE_OPTIONS += -DWITH_SHARED_LIBUV=ON
+CMAKE_OPTIONS += -DBUILD_MODULE=OFF
+CMAKE_OPTIONS += -DBUILD_SHARED_LIBS=ON
+
+ifeq ($(CONFIG_LUV_USE_LUAJIT_ENGINE),y)
+ CMAKE_OPTIONS += -DWITH_LUA_ENGINE=Luajit
+else
+ CMAKE_OPTIONS += -DWITH_LUA_ENGINE=Lua
+endif
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/include/luv
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/luv/*.h $(1)/usr/include/luv
+ $(INSTALL_DIR) $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib
+endef
+
+define Package/luv/install
+ $(INSTALL_DIR) $(1)/usr/lib/lua
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libluv.so.1.9.1 $(1)/usr/lib/lua/luv.so
+endef
+
+
+$(eval $(call BuildPackage,luv))
endef
MAKE_FLAGS:=\
- -C $(PKG_BUILD_DIR) \
- PREFIX=$(PKG_BUILD_DIR)/_install_tmp \
+ PREFIX=$(PKG_BUILD_DIR)/_install_tmp/dist \
install
define Package/micropython-lib/install
$(INSTALL_DIR) $(1)/usr/lib/micropython
- $(CP) $(PKG_BUILD_DIR)/_install_tmp/* $(1)/usr/lib/micropython
+ $(CP) $(PKG_BUILD_DIR)/_install_tmp/dist/* $(1)/usr/lib/micropython
endef
$(eval $(call BuildPackage,micropython-lib))
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=openpyxl
-PKG_VERSION:=2.4.0
+PKG_VERSION:=2.4.2
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pypi.python.org/packages/7e/75/9bb309f80e4f75d139ecc55e9edf65c5844336b5a84966a609267255f961/
-PKG_MD5SUM:=e3376d1fce0681fd0b4047ab89218af4
+PKG_SOURCE_URL:=https://pypi.python.org/packages/56/c6/a2a7c36196e4732acceca093ce5961db907f5a855b557d6a727a7f59b8b4/
+PKG_MD5SUM:=28b6b5f74f01e6249e8c7f526c57a2e7
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
PKG_NAME:=cffi
PKG_VERSION:=1.8.3
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/0a/f3/686af8873b70028fccf67b15c78fd4e4667a3da995007afc71e786d61b0a
-PKG_MD5SUM:=c8e877fe0426a99d0cf5872cf2f95b27
+PKG_HASH:=c321bd46faa7847261b89c0469569530cad5a41976bb6dba8202c0159f476568
-PKG_BUILD_DEPENDS:=python python-setuptools
-HOST_BUILD_DEPENDS:=libffi/host python/host python-setuptools/host python-pycparser/host
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-$(PKG_NAME)-$(PKG_VERSION)
+PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
+
+HOST_BUILD_DEPENDS:=libffi/host python-pycparser/host
+ifdef CONFIG_PACKAGE_python-cffi
+HOST_BUILD_DEPENDS+=python/host
+endif
+ifdef CONFIG_PACKAGE_python3-cffi
+HOST_BUILD_DEPENDS+=python3/host
+endif
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk
$(call include_mk, python-package.mk)
-$(call include_mk, python-host.mk)
+$(call include_mk, python3-package.mk)
+
+define Package/python-cffi/Default
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ URL:=http://cffi.readthedocs.org/
+ DEPENDS:=+libffi
+endef
define Package/python-cffi
- SECTION:=lang
- CATEGORY:=Languages
- SUBMENU:=Python
- TITLE:=python-cffi
- URL:=http://cffi.readthedocs.org/
- DEPENDS:=+libffi +python-light +python-pycparser
+$(call Package/python-cffi/Default)
+ TITLE:=python-cffi
+ DEPENDS+=+python-light +python-pycparser
+ VARIANT:=python
+endef
+
+define Package/python3-cffi
+$(call Package/python-cffi/Default)
+ TITLE:=python3-cffi
+ DEPENDS+=+python3-light +python3-pycparser
+ VARIANT:=python3
endef
define Package/python-cffi/description
Foreign Function Interface for Python calling C code.
endef
-define Build/Compile
- $(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
+define Package/python3-cffi/description
+$(call Package/python-cffi/description)
+.
+(Variant for Python3)
endef
-define Host/Compile
+ifdef CONFIG_PACKAGE_python-cffi
+define Host/Compile/python-cffi
$(call Build/Compile/HostPyMod,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)")
endef
+endif
+
+ifdef CONFIG_PACKAGE_python3-cffi
+define Host/Compile/python3-cffi
+ $(call Build/Compile/HostPy3Mod,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)")
+endef
+endif
+
+define Host/Compile
+$(call Host/Compile/python-cffi)
+$(call Host/Compile/python3-cffi)
+endef
define Host/Install
endef
$(eval $(call PyPackage,python-cffi))
$(eval $(call BuildPackage,python-cffi))
+
+$(eval $(call Py3Package,python3-cffi))
+$(eval $(call BuildPackage,python3-cffi))
include $(TOPDIR)/rules.mk
PKG_NAME:=python-dateutil
-PKG_VERSION:=2.5.2
-PKG_RELEASE:=2
+PKG_VERSION:=2.6.0
+PKG_RELEASE:=1
PKG_LICENSE:=BSD-2-Clause
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://pypi.python.org/packages/source/p/python-dateutil/
-PKG_MD5SUM:=eafe168e8f404bf384514f5116eedbb6
+PKG_SOURCE_URL:=https://pypi.python.org/packages/51/fc/39a3fbde6864942e8bb24c93663734b74e281b984d1b8c4f95d64b0c21f6/
+PKG_MD5SUM:=6e38f91e8c94c15a79ce22768dfeca87
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2016 OpenWrt.org
+# Copyright (C) 2016-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:=python-ldap
-PKG_VERSION:=2.4.25
+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/source/p/$(PKG_NAME)
-PKG_MD5SUM:=21523bf21dbe566e0259030f66f7a487
+PKG_SOURCE_URL:=https://pypi.python.org/packages/67/d9/fa0ea70d1792875745116ad62ac8d4bcb07550b15cded591bb57df6a6d9a
+PKG_MD5SUM:=7c46c8a04acc227a778c7900c87cdfc7
PKG_BUILD_DEPENDS:=python libopenldap
include $(TOPDIR)/rules.mk
PKG_NAME:=python-pcapy
-PKG_VERSION:=0.10.10
+PKG_VERSION:=0.11.1
PKG_RELEASE:=1
PKG_MAINTAINER:=Andrew McConachie <andrew@depht.com>
PKG_LICENSE:=Apache-1.1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/CoreSecurity/pcapy.git
-PKG_SOURCE_VERSION:=37179f5b6187ec58d3ba11ef7b24e3c341cbabbb
+PKG_SOURCE_VERSION:=b91a418374d1636408c435f11799ef725ef70097
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_BUILD_DEPENDS:=python python-setuptools
PKG_NAME:=ply
PKG_VERSION:=3.9
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.dabeaz.com/ply
-PKG_MD5SUM:=c5c5767376eff902617fd9874f0c76b7
+PKG_HASH:=0d7e2940b9c57151392fceaa62b0865c45e06ce1e36687fd8d03f011a907f43e
-PKG_BUILD_DEPENDS:=python python-setuptools
-HOST_BUILD_DEPENDS:=python/host python-setuptools/host
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-$(PKG_NAME)-$(PKG_VERSION)
+PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
+
+HOST_BUILD_DEPENDS:=
+ifdef CONFIG_PACKAGE_python-ply
+HOST_BUILD_DEPENDS+=python/host
+endif
+ifdef CONFIG_PACKAGE_python3-ply
+HOST_BUILD_DEPENDS+=python3/host
+endif
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=README.md
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk
$(call include_mk, python-package.mk)
-$(call include_mk, python-host.mk)
+$(call include_mk, python3-package.mk)
+
+define Package/python-ply/Default
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ URL:=http://www.dabeaz.com/ply/
+endef
define Package/python-ply
- SECTION:=lang
- CATEGORY:=Languages
- SUBMENU:=Python
- TITLE:=python-ply
- URL:=http://www.dabeaz.com/ply/
- DEPENDS:=+python-light
+$(call Package/python-ply/Default)
+ TITLE:=python-ply
+ DEPENDS:=+python-light
+ VARIANT:=python
+endef
+
+define Package/python3-ply
+$(call Package/python-ply/Default)
+ TITLE:=python3-ply
+ DEPENDS:=+python3-light
+ VARIANT:=python3
endef
define Package/python-ply/description
and yacc.
endef
-define Build/Compile
- $(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
+define Package/python3-ply/description
+$(call Package/python-ply/description)
+.
+(Variant for Python3)
endef
-define Host/Compile
+ifdef CONFIG_PACKAGE_python-ply
+define Host/Compile/python-ply
$(call Build/Compile/HostPyMod,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)")
endef
+endif
+
+ifdef CONFIG_PACKAGE_python3-ply
+define Host/Compile/python3-ply
+ $(call Build/Compile/HostPy3Mod,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)")
+endef
+endif
+
+define Host/Compile
+$(call Host/Compile/python-ply)
+$(call Host/Compile/python3-ply)
+endef
define Host/Install
endef
$(eval $(call PyPackage,python-ply))
$(eval $(call BuildPackage,python-ply))
+
+$(eval $(call Py3Package,python3-ply))
+$(eval $(call BuildPackage,python3-ply))
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:=pycparser
PKG_VERSION:=2.14
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pycparser
-PKG_MD5SUM:=a2bc8d28c923b4fe2b2c3b4b51a4f935
+PKG_HASH:=7959b4a74abdc27b312fed1c21e6caf9309ce0b29ea86b591fd2e99ecdf27f73
-PKG_BUILD_DEPENDS:=python python-setuptools
-HOST_BUILD_DEPENDS:=python/host python-setuptools/host python-ply/host
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-$(PKG_NAME)-$(PKG_VERSION)
+PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
+
+HOST_BUILD_DEPENDS:=python-ply/host
+ifdef CONFIG_PACKAGE_python-pycparser
+HOST_BUILD_DEPENDS+=python/host
+endif
+ifdef CONFIG_PACKAGE_python3-pycparser
+HOST_BUILD_DEPENDS+=python3/host
+endif
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk
$(call include_mk, python-package.mk)
-$(call include_mk, python-host.mk)
+$(call include_mk, python3-package.mk)
+
+define Package/python-pycparser/Default
+ SECTION:=lang
+ CATEGORY:=Languages
+ SUBMENU:=Python
+ URL:=https://github.com/eliben/pycparser
+endef
define Package/python-pycparser
- SECTION:=lang
- CATEGORY:=Languages
- SUBMENU:=Python
- TITLE:=python-pycparser
- URL:=https://github.com/eliben/pycparser
- DEPENDS:=+python-light +python-ply
+$(call Package/python-pycparser/Default)
+ TITLE:=python-pycparser
+ DEPENDS:=+python-light +python-ply
+ VARIANT:=python
+endef
+
+define Package/python3-pycparser
+$(call Package/python-pycparser/Default)
+ TITLE:=python3-pycparser
+ DEPENDS:=+python3-light +python3-ply
+ VARIANT:=python3
endef
define Package/python-pycparser/description
C source code.
endef
-define Build/Compile
- $(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
+define Package/python3-pycparser/description
+$(call Package/python-pycparser/description)
+.
+(Variant for Python3)
endef
-define Host/Compile
+ifdef CONFIG_PACKAGE_python-pycparser
+define Host/Compile/python-pycparser
$(call Build/Compile/HostPyMod,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)")
endef
+endif
+
+ifdef CONFIG_PACKAGE_python3-pycparser
+define Host/Compile/python3-pycparser
+ $(call Build/Compile/HostPy3Mod,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)")
+endef
+endif
+
+define Host/Compile
+$(call Host/Compile/python-pycparser)
+$(call Host/Compile/python3-pycparser)
+endef
define Host/Install
endef
$(eval $(call PyPackage,python-pycparser))
$(eval $(call BuildPackage,python-pycparser))
+
+$(eval $(call Py3Package,python3-pycparser))
+$(eval $(call BuildPackage,python3-pycparser))
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=python-urllib3
-PKG_VERSION:=1.19
+PKG_VERSION:=1.20
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=urllib3-$(PKG_VERSION).tar.gz
PKG_BUILD_DIR:=$(BUILD_DIR)/urllib3-$(PKG_VERSION)/
-PKG_SOURCE_URL:=https://pypi.python.org/packages/08/37/48b443a36af9eda6274f673b70a9140c13e2409edb2ef20b2d8a620efef5/
-PKG_MD5SUM:=4aa7c6c310cd938683e9b1831e110bac
+PKG_SOURCE_URL:=https://pypi.python.org/packages/20/56/a6aa403b0998f857b474a538343ee483f5c02491bd1aebf61d42a3f60f77/
+PKG_MD5SUM:=34691d4e7e20a8e9cdb452ea24fc38e7
PKG_BUILD_DEPENDS:=python python-setuptools
include $(INCLUDE_DIR)/package.mk
define Package/python-pip
$(call Package/python/Default)
TITLE:=Python $(PYTHON_VERSION) pip module
+ VERSION:=$(PYTHON_PIP_VERSION)
DEPENDS:=+python +python-setuptools +python-pip-conf
endef
define Package/python-setuptools
$(call Package/python/Default)
TITLE:=Python $(PYTHON_VERSION) setuptools module
+ VERSION:=$(PYTHON_SETUPTOOLS_VERSION)
DEPENDS:=+python
endef
PYTHON_VERSION:=2.7
PYTHON_VERSION_MICRO:=13
+PYTHON_SETUPTOOLS_VERSION:=28.8.0
+PYTHON_PIP_VERSION:=9.0.1
+
--- /dev/null
+diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
+index e478a57..eb297b4 100644
+--- a/Modules/_cursesmodule.c
++++ b/Modules/_cursesmodule.c
+@@ -117,7 +117,6 @@ char *PyCursesVersion = "2.2";
+ #defines many common symbols (such as "lines") which breaks the
+ curses module in other ways. So the code will just specify
+ explicit prototypes here. */
+-extern int setupterm(char *,int,int *);
+ #ifdef __sgi
+ #include <term.h>
+ #endif
include $(TOPDIR)/rules.mk
PKG_NAME:=python3-bottle
-PKG_VERSION:=0.12.8
+PKG_VERSION:=0.12.12
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
-PKG_SOURCE:=$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/bottlepy/bottle/archive
-PKG_MD5SUM:=50a6ebada59391e8d01b2bd2ec52f05b
+PKG_SOURCE:=bottle-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://pypi.python.org/packages/f7/dd/8ceaa148eeed5371a83fa1fb5a54b01dfc95000799c649924ece23f9f0e1/
+PKG_MD5SUM:=3d4b6b0e22f67b421c273105b30d9a21fd147eaf0c1576172378ee034fbf5313
PKG_BUILD_DIR:=$(BUILD_DIR)/bottle-$(PKG_VERSION)
+PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
include $(INCLUDE_DIR)/package.mk
$(call include_mk, python3-package.mk)
define Package/python3-pip
$(call Package/python3/Default)
TITLE:=Python $(PYTHON3_VERSION) pip module
+ VERSION:=$(PYTHON3_PIP_VERSION)
DEPENDS:=+python3 +python3-setuptools +python-pip-conf
endef
define Package/python3-setuptools
$(call Package/python3/Default)
TITLE:=Python $(PYTHON3_VERSION) setuptools module
+ VERSION:=$(PYTHON3_SETUPTOOLS_VERSION)
DEPENDS:=+python3
endef
PYTHON3_VERSION:=$(PYTHON3_VERSION_MAJOR).$(PYTHON3_VERSION_MINOR)
+PYTHON3_SETUPTOOLS_VERSION:=28.8.0
+PYTHON3_PIP_VERSION:=9.0.1
+
--- /dev/null
+diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
+index 3bf2ca7..c156964 100644
+--- a/Modules/_cursesmodule.c
++++ b/Modules/_cursesmodule.c
+@@ -116,7 +116,6 @@ char *PyCursesVersion = "2.2";
+ #defines many common symbols (such as "lines") which breaks the
+ curses module in other ways. So the code will just specify
+ explicit prototypes here. */
+-extern int setupterm(char *,int,int *);
+ #ifdef __sgi
+ #include <term.h>
+ #endif
+diff --git a/setup.py b/setup.py
+index af9a414..ee19ecd 100644
+--- a/setup.py
++++ b/setup.py
+@@ -1349,7 +1349,6 @@ class PyBuildExt(build_ext):
+ panel_library = 'panel'
+ if curses_library == 'ncursesw':
+ curses_defines.append(('HAVE_NCURSESW', '1'))
+- curses_includes.append('/usr/include/ncursesw')
+ # Bug 1464056: If _curses.so links with ncursesw,
+ # _curses_panel.so must link with panelw.
+ panel_library = 'panelw'
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:=check
-PKG_VERSION:=0.9.14
-PKG_RELEASE:=2
+PKG_VERSION:=0.11.0
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@SF/check
-PKG_MD5SUM:=38263d115d784c17aa3b959ce94be8b8
+PKG_SOURCE_URL:=https://github.com/libcheck/check/releases/download/$(PKG_VERSION)
+PKG_HASH:=24f7a48aae6b74755bcbe964ce8bc7240f6ced2141f8d9cf480bc3b3de0d5616
PKG_LICENSE:=LGPL-2.1+
PKG_LICENSE_FILES:=COPYING.LESSER
-PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
+PKG_MAINTAINER:=Eduardo Abinader <eduardoabinader@gmail.com>
PKG_INSTALL:=1
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Unit testing framework for C
- URL:=http://check.sourceforge.net/
+ URL:=https://libcheck.github.io/check/
DEPENDS:= +libpthread +librt
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=confuse
-PKG_VERSION:=2.7
+PKG_VERSION:=3.0
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@SAVANNAH/confuse
-PKG_MD5SUM:=45932fdeeccbb9ef4228f1c1a25e9c8f
-PKG_MAINTAINER:=Steven Barth <cyrus@openwrt.org>
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://github.com/martinh/libconfuse/releases/download/v$(PKG_VERSION)
+PKG_HASH:=bb75174e02aa8b44fa1a872a47beeea1f5fe715ab669694c97803eb6127cc861
+PKG_MAINTAINER:=Daniel Engberg <daniel.engberg.lists@pyret.net>
PKG_LICENSE:=ISC
PKG_FIXUP:=autoreconf
SECTION:=libs
CATEGORY:=Libraries
TITLE:=libConfuse is a configuration file parser library
- URL:=http://www.nongnu.org/confuse/
+ URL:=https://github.com/martinh/libconfuse
endef
define Package/confuse/description
--disable-rpath \
--without-libiconv-prefix \
--without-libintl-prefix \
+ --disable-examples
MAKE_FLAGS += \
-C $(PKG_BUILD_DIR)/src \
include $(TOPDIR)/rules.mk
PKG_NAME:=fftw3
-PKG_VERSION:=3.3.6
+PKG_VERSION:=3.3.6-pl1
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0+
PKG_SOURCE:=fftw-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.fftw.org
-PKG_MD5SUM:=ccd91b5b12bd0a441e100070ff09a310
+PKG_MD5SUM:=682a0e78d6966ca37c7446d4ab4cc2a1
PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/fftw-$(PKG_VERSION)
PKG_FIXUP:=autoreconf
include $(TOPDIR)/rules.mk
PKG_NAME:=gnutls
-PKG_VERSION:=3.5.8
+PKG_VERSION:=3.5.9
PKG_RELEASE:=1
PKG_USE_MIPS16:=0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=ftp://ftp.gnutls.org/gcrypt/gnutls/v3.5
-PKG_MD5SUM:=113e892e51acdb11b81804cd355adfee
+PKG_MD5SUM:=0ab25eb6a1509345dd085bc21a387951
#PKG_FIXUP:=autoreconf gettext-version
PKG_MAINTAINER:=Nikos Mavrogiannopoulos <nmav@gnutls.org>
PKG_LICENSE:=LGPLv2.1+
--with-included-unistring \
--disable-guile \
--disable-nls \
+ --without-idn \
--without-zlib \
--enable-local-libopts \
--disable-doc \
PKG_NAME:=icu4c
PKG_VERSION:=58.2
-PKG_RELEASE:=1
+PKG_RELEASE:=5
PKG_SOURCE:=$(PKG_NAME)-58_2-src.tgz
PKG_SOURCE_URL:=http://download.icu-project.org/files/$(PKG_NAME)/$(PKG_VERSION)
endef
CONFIGURE_CMD:= ./runConfigureICU
-CONFIGURE_VARS:=
CONFIGURE_ARGS:= \
Linux/gcc \
+ CC="$(TARGET_CC)" \
+ CXX="$(TARGET_CXX)" \
+ --target=$(GNU_TARGET_NAME) \
+ --host=$(GNU_TARGET_NAME) \
+ --build=$(GNU_HOST_NAME) \
--disable-debug \
--enable-release \
--enable-shared \
--disable-tools \
--disable-tests \
--disable-samples \
- --with-cross-build="$(HOST_BUILD_DIR)" \
+ --with-cross-build="$(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)" \
--prefix=/usr
HOST_CONFIGURE_CMD:= ./runConfigureICU
--disable-tracing \
--disable-extras \
--enable-dyload \
- --prefix=$(HOST_BUILD_PREFIX)
+ --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
+define Host/Install
+ $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)/config
+ $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)/bin
+ $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)/lib
+ $(INSTALL_DATA) $(HOST_BUILD_DIR)/config/icucross.* $(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)/config/
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/icupkg $(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)/bin/
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/pkgdata $(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)/bin/
+ $(CP) $(HOST_BUILD_DIR)/lib/*.so* $(STAGING_DIR_HOSTPKG)/share/icu/$(PKG_VERSION)/lib/
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))
PKG_NAME:=libidn
PKG_VERSION:=1.33
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/libidn
SECTION:=net
CATEGORY:=Network
URL:=http://www.gnu.org/software/libidn/
- MAINTAINER:=Marcel Denia <naoir@gmx.net>
+ MAINTAINER:=Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
endef
define Package/idn/Default/description
$(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libidn.{a,so*} $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libidn.pc $(1)/usr/lib/pkgconfig/
endef
define Package/idn/install
EXTRA_DIST = cfg.mk maint.mk .clcopying
--- a/configure.ac
+++ b/configure.ac
-@@ -48,8 +48,6 @@ AC_PROG_LIBTOOL
+@@ -47,8 +47,6 @@ LT_INIT([win32-dll])
# Checks for programs.
AM_MISSING_PROG(PERL, perl, $missing_dir)
AM_MISSING_PROG(HELP2MAN, help2man, $missing_dir)
--- a/src/idn.c
+++ b/src/idn.c
-@@ -169,7 +169,7 @@ main (int argc, char *argv[])
+@@ -170,7 +170,7 @@ main (int argc, char *argv[])
(args_info.idna_to_unicode_given ? 1 : 0) +
(args_info.nfkc_given ? 1 : 0) != 1)
{
usage (EXIT_FAILURE);
}
-@@ -184,7 +184,7 @@ main (int argc, char *argv[])
+@@ -185,7 +185,7 @@ main (int argc, char *argv[])
if (!args_info.quiet_given
&& args_info.inputs_num == 0
&& isatty (fileno (stdin)))
"terminated by a newline character.\n"));
do
-@@ -199,7 +199,7 @@ main (int argc, char *argv[])
+@@ -197,7 +197,7 @@ main (int argc, char *argv[])
if (feof (stdin))
break;
+ error (EXIT_FAILURE, errno, "%s", _("input error"));
}
- if (readbuf[strlen (readbuf) - 1] == '\n')
-@@ -216,7 +216,7 @@ main (int argc, char *argv[])
+ if (strlen (line) > 0)
+@@ -215,7 +215,7 @@ main (int argc, char *argv[])
if (!q)
{
free (p);
_("could not convert from UTF-8 to UCS-4"));
}
-@@ -241,7 +241,7 @@ main (int argc, char *argv[])
+@@ -240,7 +240,7 @@ main (int argc, char *argv[])
if (!q)
{
free (r);
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=libsearpc
-PKG_VERSION:=5.1.4
+PKG_VERSION:=6.0.7
PKG_RELEASE=$(PKG_SOURCE_VERSION)-1
PKG_LICENSE:=GPL-3.0
CONFIGURE_ARGS += \
--with-ssl=openssl
-define Build/Configure
- ( cd $(PKG_BUILD_DIR); ./autogen.sh )
- $(call Build/Configure/Default)
-endef
-
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include/
$(CP) \
--- /dev/null
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,7 +1,7 @@
+ include $(top_srcdir)/build/Makefile.am.lm
+
+-SUBDIRS = loudmouth docs examples $(TEST_DIRS)
+-DIST_SUBDIRS = loudmouth docs examples tests
++SUBDIRS = loudmouth
++DIST_SUBDIRS = loudmouth
+
+ ACLOCAL_AMFLAGS = -I m4
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -307,12 +307,7 @@ AC_SUBST(LOUDMOUTH_LIBS)
+
+ AC_OUTPUT([
+ Makefile
+-docs/Makefile
+-docs/reference/Makefile
+ loudmouth/Makefile
+-examples/Makefile
+-tests/Makefile
+-tests/parser-tests/Makefile
+ loudmouth-1.0.pc])
+
+ dnl ==========================================================================
include $(TOPDIR)/rules.mk
PKG_NAME:=opus
-PKG_VERSION:=1.1.3
-PKG_RELEASE:=2
+PKG_VERSION:=1.1.4
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://downloads.xiph.org/releases/opus/
-PKG_MD5SUM:=32bbb6b557fe1b6066adc0ae1f08b629
+PKG_MD5SUM:=a2c09d995d0885665ff83b5df2505a5f
+PKG_HASH:=9122b6b380081dd2665189f97bfd777f04f92dc3ab6698eea1dbb27ad59d8692
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=COPYING
-PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
+PKG_MAINTAINER:=Ted Hess <thess@kitchensync.net> Ian Leonard <antonlacon@gmail.com>
PKG_INSTALL:=1
--- /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:=protobuf
-PKG_VERSION:=2.6.1
+PKG_VERSION:=3.1.0
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-cpp-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/google/protobuf/releases/download/v$(PKG_VERSION)
-PKG_MD5SUM:=11aaac2d704eef8efd1867a807865d85
+PKG_MD5SUM:=bd5e3eed635a8d32e2b99658633815ef
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
SECTION:=libs
CATEGORY:=Libraries
TITLE:=A structured data encoding library
- URL:=http://code.google.com/p/protobuf/
+ URL:=https://github.com/google/protobuf
DEPENDS:=+zlib +libpthread +libstdcpp
- MAINTAINER:=Jacob Siverskog <jacob@teenageengineering.com>
+ MAINTAINER:=Per Sandström <per.j.sandstrom@gmail.com>
endef
define Package/protobuf/description
+++ /dev/null
---- - 2015-05-19 16:27:29.770936016 +0200
-+++ protobuf-2.6.1/src/google/protobuf/stubs/platform_macros.h 2015-05-19 13:49:52.115444643 +0200
-@@ -55,7 +55,7 @@
- #elif defined(__aarch64__)
- #define GOOGLE_PROTOBUF_ARCH_AARCH64 1
- #define GOOGLE_PROTOBUF_ARCH_64_BIT 1
--#elif defined(__MIPSEL__)
-+#elif defined(__MIPSEL__) || defined(__MIPSEB__)
- #if defined(__LP64__)
- #define GOOGLE_PROTOBUF_ARCH_MIPS64 1
- #define GOOGLE_PROTOBUF_ARCH_64_BIT 1
+++ /dev/null
---- - 2015-05-19 16:29:09.614344473 +0200
-+++ protobuf-2.6.1/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h 2015-05-19 13:49:52.127442746 +0200
-@@ -150,7 +150,7 @@
- }
-
- inline void MemoryBarrier() {
-- __asm__ __volatile__("sync" : : : "memory");
-+ __asm__ __volatile__(".set mips2; sync; .set mips0" : : : "memory");
- }
-
- inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) {
PKG_NAME:=postfix
PKG_RELEASE:=1
PKG_SOURCE_URL:=ftp://ftp.porcupine.org/mirrors/postfix-release/official/
-PKG_VERSION:=3.1.3
-PKG_MD5SUM:=28a1dedbbbedfcf5fc09fd88bac116b6
+PKG_VERSION:=3.1.4
+PKG_MD5SUM:=878a059d92ee3b093d7d3e97248c915d
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_MAINTAINER:=Denis Shulyaka <Shulyaka@gmail.com>
PKG_LICENSE:=IPL-1.0
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:=minidlna
-PKG_VERSION:=1.1.5
+PKG_VERSION:=1.1.6+git-8a996b
PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@SF/minidlna
-PKG_MD5SUM:=1970e553a1eb8a3e7e302e2ce292cbc4
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL=http://git.code.sf.net/p/minidlna/git
+PKG_SOURCE_SUBDIR=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=8a996b4b624ef45538a5de10730b8e94c55e7768
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_MIRROR_HASH:=fddbb7c96b40e335a251b919ff5c674519f266a59b8a43011761ba952c0df1b6
+
PKG_LICENSE:=GPL-2.0 BSD-3-Clause
PKG_LICENSE_FILES:=COPYING LICENCE.miniupnpd
PKG_MAINTAINER:=Knyazkov Dmitry <medavedik@gmail.com>
+PKG_FIXUP:=autoreconf
+
PKG_BUILD_PARALLEL:=0
PKG_BUILD_DEPENDS:=util-linux
endef
TARGET_CPPFLAGS += \
- -I$(STAGING_DIR)/usr/include \
- -I$(STAGING_DIR)/usr/include/FLAC \
- -I$(STAGING_DIR)/usr/include/libexif \
- -I$(STAGING_DIR)/usr/include/uuid \
- -I$(STAGING_DIR)/usr/include/vorbis \
-I$(ICONV_PREFIX)/include \
-I$(INTL_PREFIX)/include \
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 \
--- /dev/null
+From c8245740c3a8699cfe7d7e5aa0d427b931018ad5 Mon Sep 17 00:00:00 2001
+From: Yusuke Yanbe <y.yanbe@gmail.com>
+Date: Mon, 4 Jul 2016 08:20:46 +0900
+Subject: [PATCH] Add support for grouping videos by directory for Panasonic
+ TVs
+
+---
+ upnpsoap.c | 24 +++++++++++++++++++-----
+ upnpsoap.h | 5 ++++-
+ 2 files changed, 23 insertions(+), 6 deletions(-)
+
+--- a/upnpsoap.c
++++ b/upnpsoap.c
+@@ -1052,6 +1052,15 @@ callback(void *args, int argc, char **ar
+ add_res(size, duration, bitrate, sampleFrequency, nrAudioChannels,
+ resolution, dlna_buf, mime, detailID, ext, passed_args);
+ }
++
++ DPRINTF(E_DEBUG, L_HTTP, "Title: %s - %d Returned / %d childCount\n",
++ title, passed_args->returned, passed_args->childCount);
++
++ ret = strcatf(str, "<pxn:groupTopFlag>%d</pxn:groupTopFlag>"
++ "<pxn:groupID>%s</pxn:groupID>"
++ "<pxn:groupTitle>%s</pxn:groupTitle>"
++ "<pxn:groupMemberNum>%d</pxn:groupMemberNum>",
++ passed_args->returned == passed_args->childCount, parent, passed_args->parentTitle, passed_args->childCount);
+ break;
+ case ESamsungSeriesCDE:
+ case ELGDevice:
+@@ -1314,8 +1323,11 @@ BrowseContentDirectory(struct upnphttp *
+ if (!where[0])
+ sqlite3_snprintf(sizeof(where), where, "PARENT_ID = '%q'", ObjectID);
+
+- if (!totalMatches)
++ if (!totalMatches) {
+ totalMatches = get_child_count(ObjectID, magic);
++ args.childCount = totalMatches;
++ args.parentTitle = sql_get_text_field(db, "SELECT d.TITLE FROM OBJECTS o LEFT JOIN DETAILS d ON (d.ID = o.DETAIL_ID) WHERE OBJECT_ID='%q'", ObjectID);
++ }
+ ret = 0;
+ if (SortCriteria && !orderBy)
+ {
+@@ -1354,14 +1366,16 @@ BrowseContentDirectory(struct upnphttp *
+ SoapError(h, 709, "Unsupported or invalid sort criteria");
+ goto browse_error;
+ }
+-
+ sql = sqlite3_mprintf("SELECT %s, %s, %s, " COLUMNS
+ "from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)"
+- " where %s %s limit %d, %d;",
++ " where %s order by d.date limit %d, %d;",
+ objectid_sql, parentid_sql, refid_sql,
+- where, THISORNUL(orderBy), StartingIndex, RequestedCount);
++ where, StartingIndex, RequestedCount);
+ DPRINTF(E_DEBUG, L_HTTP, "Browse SQL: %s\n", sql);
+ ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg);
++ if (args.parentTitle) {
++ sqlite3_free(args.parentTitle);
++ }
+ }
+ if( (ret != SQLITE_OK) && (zErrMsg != NULL) )
+ {
+@@ -1795,7 +1809,7 @@ SearchContentDirectory(struct upnphttp *
+ (*ContainerID == '*') ? NULL :
+ sqlite3_mprintf("UNION ALL " SELECT_COLUMNS
+ "from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID)"
+- " where OBJECT_ID = '%q' and (%s) ", ContainerID, where),
++ " where OBJECT_ID = '%q' and (%s) ORDER BY d.date", ContainerID, where),
+ orderBy, StartingIndex, RequestedCount);
+ DPRINTF(E_DEBUG, L_HTTP, "Search SQL: %s\n", sql);
+ ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg);
+--- a/upnpsoap.h
++++ b/upnpsoap.h
+@@ -27,7 +27,8 @@
+ #define CONTENT_DIRECTORY_SCHEMAS \
+ " xmlns:dc=\"http://purl.org/dc/elements/1.1/\"" \
+ " xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\"" \
+- " xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\""
++ " xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"" \
++ " xmlns:pxn=\"urn:schemas-panasonic-com:pxn\""
+ #define DLNA_NAMESPACE \
+ " xmlns:dlna=\"urn:schemas-dlna-org:metadata-1-0/\""
+ #define PV_NAMESPACE \
+@@ -39,6 +40,8 @@ struct Response
+ int start;
+ int returned;
+ int requested;
++ int childCount;
++ char *parentTitle;
+ int iface;
+ uint32_t filter;
+ uint32_t flags;
--- /dev/null
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -17,7 +17,7 @@
+
+ AM_CFLAGS = -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 @STATIC_CFLAGS@
+
+-SUBDIRS=po
++SUBDIRS=
+
+ sbin_PROGRAMS = minidlnad
+ check_PROGRAMS = testupnpdescgen
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -633,6 +633,8 @@ case "$target_os" in
+ esac
+
+
+-AC_OUTPUT([ po/Makefile.in
+-Makefile
+-])
++# AC_OUTPUT([ po/Makefile.in
++# Makefile
++# ])
++AC_CONFIG_FILES([Makefile])
++AC_OUTPUT
+++ /dev/null
---- a/libav.h
-+++ b/libav.h
-@@ -167,7 +167,7 @@
- static inline int
- lav_is_thumbnail_stream(AVStream *s, uint8_t **data, int *size)
- {
--#if LIBAVFORMAT_VERSION_INT >= ((54<<16)+(6<<8))
-+/*if LIBAVFORMAT_VERSION_INT >= ((54<<16)+(6<<8))
- if (s->disposition & AV_DISPOSITION_ATTACHED_PIC &&
- s->codec->codec_id == AV_CODEC_ID_MJPEG)
- {
-@@ -177,6 +177,6 @@
- *size = s->attached_pic.size;
- return 1;
- }
--#endif
-+endif*/
- return 0;
- }
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
-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:=chrony
-PKG_VERSION:=2.4.1
+PKG_VERSION:=3.1
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://download.tuxfamily.org/chrony/
-PKG_MD5SUM:=d08dd5a7d79a89891d119adcccb4397d
+PKG_HASH:=9d9107dcdb7768a03dc129d33b2a7a25f1eea2f5620bc85eb00cfea07c1b6075
PKG_MAINTAINER:=Miroslav Lichvar <mlichvar0@gmail.com>
PKG_LICENSE:=GPL-2.0
--host-system=Linux \
--sysconfdir=/etc/chrony \
--prefix=/usr \
- --chronysockdir=/var/run/chrony \
+ --chronyrundir=/var/run/chrony \
--disable-readline \
--disable-rtc \
--with-user=chrony
# Don't log client accesses
noclientlog
+
+# set the system clock else the kernel will always stay in UNSYNC state
+rtcsync
PKG_VERSION:=2.7.6
# Release == build
# increase on changes of services files or tld_names.dat
-PKG_RELEASE:=12
+PKG_RELEASE:=13
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
. /lib/functions/network.sh
# GLOBAL VARIABLES #
-VERSION="2.7.6"
+VERSION="2.7.6-13"
SECTION_ID="" # hold config's section name
VERBOSE=0 # default mode is log to console, but easily changed with parameter
MYPROG=$(basename $0) # my program call name
get_local_ip () {
# $1 Name of Variable to store local IP (LOCAL_IP)
local __CNT=0 # error counter
- local __RUNPROG __DATA __URL __ERR __TMP
+ local __RUNPROG __DATA __URL __ERR
[ $# -ne 1 ] && write_log 12 "Error calling 'get_local_ip()' - wrong number of parameters"
write_log 7 "Detect local IP on '$ip_source'"
# remove remove remove replace replace
# link inet6 fxxx sec forever=>-1 / => ' ' to separate subnet from ip
sed "/link/d; /inet6 f/d; s/sec//g; s/forever/-1/g; s/\// /g" $DATFILE | \
- awk '{ print $3" "$4" "$NF }' > ${DATFILE}_tmp
+ awk '{ print $3" "$4" "$NF }' > $ERRFILE # temp reuse ERRFILE
# we only need inet? IP prefered time
local __TIME4=0; local __TIME6=0
__DATA4="$__ADR"
__TIME4="$__TIME"
}
- done < ${DATFILE}_tmp
- rm ${DATFILE}_tmp
+ done < $ERRFILE
else
write_log 3 "ip Error: '$__ERR'"
write_log 7 "$(cat $ERRFILE)" # report error
org.om
pro.om
+// onion : https://tools.ietf.org/html/rfc7686
+onion
+
// org : https://en.wikipedia.org/wiki/.org
org
// su : https://en.wikipedia.org/wiki/.su
su
-adygeya.su
-arkhangelsk.su
-balashov.su
-bashkiria.su
-bryansk.su
-dagestan.su
-grozny.su
-ivanovo.su
-kalmykia.su
-kaluga.su
-karelia.su
-khakassia.su
-krasnodar.su
-kurgan.su
-lenug.su
-mordovia.su
-msk.su
-murmansk.su
-nalchik.su
-nov.su
-obninsk.su
-penza.su
-pokrovsk.su
-sochi.su
-spb.su
-togliatti.su
-troitsk.su
-tula.su
-tuva.su
-vladikavkaz.su
-vladimir.su
-vologda.su
// sv : http://www.svnet.org.sv/niveldos.pdf
sv
// Amazon S3 : https://aws.amazon.com/s3/
// Submitted by Luke Wells <psl-maintainers@amazon.com>
-*.s3.amazonaws.com
+s3.amazonaws.com
s3-ap-northeast-1.amazonaws.com
s3-ap-northeast-2.amazonaws.com
s3-ap-south-1.amazonaws.com
s3-ca-central-1.amazonaws.com
s3-eu-central-1.amazonaws.com
s3-eu-west-1.amazonaws.com
+s3-eu-west-2.amazonaws.com
s3-external-1.amazonaws.com
s3-fips-us-gov-west-1.amazonaws.com
s3-sa-east-1.amazonaws.com
s3.cn-north-1.amazonaws.com.cn
s3.ca-central-1.amazonaws.com
s3.eu-central-1.amazonaws.com
+s3.eu-west-2.amazonaws.com
s3.us-east-2.amazonaws.com
s3.dualstack.ap-northeast-1.amazonaws.com
s3.dualstack.ap-northeast-2.amazonaws.com
s3.dualstack.ca-central-1.amazonaws.com
s3.dualstack.eu-central-1.amazonaws.com
s3.dualstack.eu-west-1.amazonaws.com
+s3.dualstack.eu-west-2.amazonaws.com
s3.dualstack.sa-east-1.amazonaws.com
s3.dualstack.us-east-1.amazonaws.com
s3.dualstack.us-east-2.amazonaws.com
s3-website.ap-south-1.amazonaws.com
s3-website.ca-central-1.amazonaws.com
s3-website.eu-central-1.amazonaws.com
+s3-website.eu-west-2.amazonaws.com
s3-website.us-east-2.amazonaws.com
// Amune : https://amune.org/
// Submitted by Peter Ruibal <public-suffix@fb.com>
apps.fbsbx.com
-// Fastly Inc. http://www.fastly.com/
-// Submitted by Vladimir Vuksan <vladimir@fastly.com>
+// FAITID : https://faitid.org/
+// Submitted by Maxim Alzoba <tech.contact@faitid.org>
+// https://www.flexireg.net/stat_info
+ru.net
+adygeya.ru
+bashkiria.ru
+bir.ru
+cbg.ru
+com.ru
+dagestan.ru
+grozny.ru
+kalmykia.ru
+kustanai.ru
+marine.ru
+mordovia.ru
+msk.ru
+mytis.ru
+nalchik.ru
+nov.ru
+pyatigorsk.ru
+spb.ru
+vladikavkaz.ru
+vladimir.ru
+abkhazia.su
+adygeya.su
+aktyubinsk.su
+arkhangelsk.su
+armenia.su
+ashgabad.su
+azerbaijan.su
+balashov.su
+bashkiria.su
+bryansk.su
+bukhara.su
+chimkent.su
+dagestan.su
+east-kazakhstan.su
+exnet.su
+georgia.su
+grozny.su
+ivanovo.su
+jambyl.su
+kalmykia.su
+kaluga.su
+karacol.su
+karaganda.su
+karelia.su
+khakassia.su
+krasnodar.su
+kurgan.su
+kustanai.su
+lenug.su
+mangyshlak.su
+mordovia.su
+msk.su
+murmansk.su
+nalchik.su
+navoi.su
+north-kazakhstan.su
+nov.su
+obninsk.su
+penza.su
+pokrovsk.su
+sochi.su
+spb.su
+tashkent.su
+termez.su
+togliatti.su
+troitsk.su
+tselinograd.su
+tula.su
+tuva.su
+vladikavkaz.su
+vladimir.su
+vologda.su
+
+// Fastly Inc. : http://www.fastly.com/
+// Submitted by Fastly Security <security@fastly.com>
+map.fastly.net
+a.prod.fastly.net
+global.prod.fastly.net
a.ssl.fastly.net
b.ssl.fastly.net
global.ssl.fastly.net
-a.prod.fastly.net
-global.prod.fastly.net
+fastlylb.net
+map.fastlylb.net
// Featherhead : https://featherhead.xyz/
// Submitted by Simon Menke <simon@featherhead.xyz>
"able.or.kr" "http://able.or.kr/ddns/src/update.php?hostname=[DOMAIN]&myip=[IP]&ddnsuser=[USERNAME]&pwd=[PASSWORD]"
-"afraid.org-basicauth" "http://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP]
+"afraid.org-basicauth" "http://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
"afraid.org-keyauth" "http://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]"
"all-inkl.com" "http://[USERNAME]:[PASSWORD]@dyndns.kasserver.com/?myip=[IP]"
"duckdns.org" "http://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ip=[IP]" "OK"
-"duiadns.net" "http://[USERNAME]:[PASSWORD]@ipv4.duia.ro/dynamic.duia?host=[DOMAIN]&ip4=[IP]"
+"duiadns.net" "http://ip.duiadns.net/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip4=[IP]"
"dy.fi" "http://[USERNAME]:[PASSWORD]@www.dy.fi/nic/update?hostname=[DOMAIN]" "good|nochg"
#.godaddy.com-v1 !!! Please install additional package "ddns-scripts_godaddy.com-v1"
#.no-ip.com / noip.com !!! Please install additional package "ddns-scripts_no-ip_com"
-"afraid.org-basicauth" "http://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP]
+"afraid.org-basicauth" "http://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
"afraid.org-keyauth" "http://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]"
"all-inkl.com" "http://[USERNAME]:[PASSWORD]@dyndns.kasserver.com/?myip=[IP]"
"duckdns.org" "http://www.duckdns.org/update?domains=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]" "OK"
-"duiadns.net" "http://[USERNAME]:[PASSWORD]@ipv6.duia.ro/dynamic.duia?host=[DOMAIN]&ip6=[IP]"
+"duiadns.net" "http://ip.duiadns.net/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip6=[IP]"
"dyn.com" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
"dyndns.org" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg"
include $(TOPDIR)/rules.mk
PKG_NAME:=git
-PKG_VERSION:=2.11.0
+PKG_VERSION:=2.11.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/software/scm/git/
-PKG_MD5SUM:=dd4e3360e28aec5bb902fb34dd7fce3b
+PKG_HASH:=c0a779cae325d48a1d5ba08b6ee1febcc31d0657a6da01fd1dec1c6e10976415
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
--- /dev/null
+#
+# Copyright (C) 2017 Daniel Engberg <daniel.engberg.lists@pyret.net>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=inadyn
+PKG_VERSION=2017-02-02
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Daniel Engberg <daniel.engberg.lists@pyret.net>
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL=https://github.com/troglobit/inadyn
+PKG_SOURCE_SUBDIR=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=3b9ae1c22f96194232cc86ded33af9e0a1602af2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_MIRROR_HASH:=9db6cd8d2b421d8bc61d4ae60c8215a86d73657746a1b06d79f4fbfd79734f6e
+
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/inadyn
+ SECTION:=net
+ CATEGORY:=Network
+ DEPENDS:=+confuse +libopenssl +ca-certificates
+ TITLE:=A Dynamic DNS client with SSL/TLS support
+ URL:=https://github.com/troglobit/inadyn
+ SUBMENU:=IP Addresses and Names
+endef
+
+define Package/inadyn/description
+ Suitable for embedded systems, written in C.
+endef
+
+define Package/inadyn/conffiles
+/etc/inadyn.conf
+endef
+
+CONFIGURE_ARGS += --enable-shared --disable-static --enable-openssl
+
+define Package/inadyn/install
+ $(INSTALL_DIR) $(1)/etc
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/examples/dyndns.conf $(1)/etc/inadyn.conf
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/inadyn $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,inadyn))
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: ");
+++ /dev/null
-#
-# Copyright (C) 2010 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-bcp38
-PKG_VERSION:=2
-PKG_RELEASE:=2
-PKG_LICENSE:=Apache-2.0
-LUCI_DIR:=/usr/lib/lua/luci
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/luci-app-bcp38
- SECTION:=luci
- CATEGORY:=LuCI
- TITLE:=BCP38 LuCI interface
- MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
- PKGARCH:=all
- DEPENDS:= lua luci-base +bcp38
- SUBMENU:=3. Applications
-endef
-
-define Package/luci-app-bcp38/description
- Control BCP38 subnet blocking
-endef
-
-define Build/Compile
-endef
-
-define Build/Configure
-endef
-
-define Package/luci-app-bcp38/install
- $(INSTALL_DIR) $(1)$(LUCI_DIR)/controller $(1)$(LUCI_DIR)/model/cbi
- $(INSTALL_DATA) ./files/bcp38-controller.lua $(1)$(LUCI_DIR)/controller/bcp38.lua
- $(INSTALL_DATA) ./files/bcp38-cbi.lua $(1)$(LUCI_DIR)/model/cbi/bcp38.lua
- $(INSTALL_DIR) $(1)/etc/uci-defaults
- $(INSTALL_BIN) ./files/uci-defaults-bcp38 $(1)/etc/uci-defaults/luci-bcp38
-endef
-
-define Package/luci-app-bcp38/postinst
-#!/bin/sh
-[ -x /etc/uci-defaults/luci-bcp38 ] && /etc/uci-defaults/luci-bcp38 || exit 0
-endef
-
-define Package/luci-app-bcp38/postrm
-#!/bin/sh
-uci delete ucitrack.@bcp38[0]
-uci commit
-endef
-
-$(eval $(call BuildPackage,luci-app-bcp38))
+++ /dev/null
---[[
-LuCI - Lua Configuration Interface
-
-Copyright 2014 Toke Høiland-Jørgensen <toke@toke.dk>
-
-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
-
-$Id$
-]]--
-
-local wa = require "luci.tools.webadmin"
-local net = require "luci.model.network".init()
-local ifaces = net:get_interfaces()
-
-m = Map("bcp38", translate("BCP38"),
- translate("This function blocks packets with private address destinations " ..
- "from going out onto the internet as per " ..
- "<a href=\"http://tools.ietf.org/html/bcp38\">BCP 38</a>. " ..
- "For IPv6, only source specific default routes are installed, so " ..
- "no BCP38 firewall routes are needed."))
-
-s = m:section(TypedSection, "bcp38", translate("BCP38 config"))
-s.anonymous = true
--- BASIC
-e = s:option(Flag, "enabled", translate("Enable"))
-e.rmempty = false
-
-a = s:option(Flag, "detect_upstream", translate("Auto-detect upstream IP"),
- translate("Attempt to automatically detect if the upstream IP " ..
- "will be blocked by the configuration, and add an exception if it will. " ..
- "If this does not work correctly, you can add exceptions manually below."))
-a.rmempty = false
-
-n = s:option(ListValue, "interface", translate("Interface name"), translate("Interface to apply the blocking to " ..
- "(should be the upstream WAN interface)."))
-for _, iface in ipairs(ifaces) do
- if iface:is_up() then
- n:value(iface:name())
- end
-end
-n.rmempty = false
-
-ma = s:option(DynamicList, "match",
- translate("Blocked IP ranges"))
-
-ma.datatype = "ip4addr"
-
-nm = s:option(DynamicList, "nomatch",
- translate("Allowed IP ranges"), translate("Takes precedence over blocked ranges. "..
- "Use to whitelist your upstream network if you're behind a double NAT " ..
- "and the auto-detection doesn't work."))
-
-nm.datatype = "ip4addr"
-
-
-return m
+++ /dev/null
-module("luci.controller.bcp38", package.seeall)
-
-function index()
- entry({"admin", "network", "firewall", "bcp38"},
- cbi("bcp38"),
- _("BCP38"), 50).dependent = false
-end
+++ /dev/null
-#!/bin/sh
-
-uci -q batch <<-EOF >/dev/null
- delete ucitrack.@bcp38[-1]
- add ucitrack bcp38
- add_list ucitrack.@bcp38[0].affects=firewall
- commit ucitrack
-EOF
-
-rm -f /tmp/luci-indexcache
-exit 0
+++ /dev/null
-#
-# Copyright (C) 2015 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-clamav
-PKG_RELEASE:=20150520
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-
-PKG_LICENSE:=Apache-2.0
-PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/luci-app-clamav
- SECTION:=luci
- CATEGORY:=LuCI
- SUBMENU:=3. Applications
- TITLE:=ClamAV Web UI
- DEPENDS:=+luci-mod-admin-full +clamav
-endef
-
-define Package/luci-app-clamav/description
- This package will install ClamAV Web UI.
-endef
-
-define Build/Prepare
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/luci-app-clamav/install
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller/
- $(INSTALL_BIN) \
- ./files/controller/clamav-controller.lua \
- $(1)/usr/lib/lua/luci/controller/clamav.lua
-
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/
- $(INSTALL_BIN) \
- ./files/model/cbi/clamav-cbi.lua \
- $(1)/usr/lib/lua/luci/model/cbi/clamav.lua
-endef
-
-$(eval $(call BuildPackage,luci-app-clamav))
+++ /dev/null
---[[
-
-LuCI ClamAV module
-
-Copyright (C) 2015, Itus Networks, 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: Marko Ratkaj <marko.ratkaj@sartura.hr>
- Luka Perkov <luka.perkov@sartura.hr>
-
-]]--
-
-module("luci.controller.clamav", package.seeall)
-
-function index()
- entry({"admin", "services", "clamav"}, cbi("clamav"), _("ClamAV"))
-end
+++ /dev/null
---[[
-
-LuCI ClamAV module
-
-Copyright (C) 2015, Itus Networks, 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: Marko Ratkaj <marko.ratkaj@sartura.hr>
- Luka Perkov <luka.perkov@sartura.hr>
-
-]]--
-
-local fs = require "nixio.fs"
-local sys = require "luci.sys"
-require "ubus"
-
-m = Map("clamav", translate("ClamAV"))
-m.on_after_commit = function() luci.sys.call("/etc/init.d/clamav restart") end
-
-s = m:section(TypedSection, "clamav")
-s.anonymous = true
-s.addremove = false
-
-s:tab("tab_advanced", translate("Settings"))
-s:tab("tab_logs", translate("Log"))
-
---------------- Settings --------------
-
-LogFileMaxSize = s:taboption("tab_advanced", Value, "LogFileMaxSize", translate("Max size of log file"))
-LogFileMaxSize:value("512K", translate("512K"))
-LogFileMaxSize:value("1M", translate("1M"))
-LogFileMaxSize:value("2M", translate("2M"))
-LogFileMaxSize.default = "1M"
-
-LogTime = s:taboption("tab_advanced", ListValue, "LogTime", translate("Log time with each message"))
-LogTime:value("no", translate("No"))
-LogTime:value("yes", translate("Yes"))
-LogTime.default = "no"
-
-LogVerbose = s:taboption("tab_advanced", ListValue, "LogVerbose", translate("Enable verbose logging"))
-LogVerbose:value("no", translate("No"))
-LogVerbose:value("yes", translate("Yes"))
-LogVerbose.default = "no"
-
-ExtendedDetectionInfo = s:taboption("tab_advanced", ListValue, "ExtendedDetectionInfo", translate("Log additional infection info"))
-ExtendedDetectionInfo:value("no", translate("No"))
-ExtendedDetectionInfo:value("yes", translate("Yes"))
-ExtendedDetectionInfo.default = "no"
-
-dummy3 = s:taboption("tab_advanced", DummyValue, "")
-dummy4 = s:taboption("tab_advanced", DummyValue, "")
-
-MaxDirectoryRecursion = s:taboption("tab_advanced", Value, "MaxDirectoryRecursion", translate("Max directory scan depth"))
-MaxDirectoryRecursion:value("15", translate("15"))
-MaxDirectoryRecursion:value("20", translate("20"))
-MaxDirectoryRecursion.default = "15"
-
-FollowDirectorySymlink = s:taboption("tab_advanced", ListValue, "FollowDirectorySymlink", translate("Follow directory symlinks"))
-FollowDirectorySymlink:value("no", translate("No"))
-FollowDirectorySymlink:value("yes", translate("Yes"))
-FollowDirectorySymlink.default = "no"
-
-FollowFileSymlinks = s:taboption("tab_advanced", ListValue, "FollowFileSymlinks", translate("Follow file symlinks"))
-FollowFileSymlinks:value("no", translate("No"))
-FollowFileSymlinks:value("yes", translate("Yes"))
-FollowFileSymlinks.default = "no"
-
-DetectPUA = s:taboption("tab_advanced", ListValue, "DetectPUA", translate("Detect possibly unwanted apps"))
-DetectPUA:value("no", translate("No"))
-DetectPUA:value("yes", translate("Yes"))
-DetectPUA.default = "no"
-
-ScanPE = s:taboption("tab_advanced", ListValue, "ScanPE", translate("Scan portable executables"))
-ScanPE:value("no", translate("No"))
-ScanPE:value("yes", translate("Yes"))
-ScanPE.default = "yes"
-
-ScanELF = s:taboption("tab_advanced", ListValue, "ScanELF", translate("Scan ELF files"))
-ScanELF:value("no", translate("No"))
-ScanELF:value("yes", translate("Yes"))
-ScanELF.default = "yes"
-
-DetectBrokenExecutables = s:taboption("tab_advanced", ListValue, "DetectBrokenExecutables", translate("Detect broken executables"))
-DetectBrokenExecutables:value("no", translate("No"))
-DetectBrokenExecutables:value("yes", translate("Yes"))
-DetectBrokenExecutables.default = "no"
-
-ScanOLE2 = s:taboption("tab_advanced", ListValue, "ScanOLE2", translate("Scan MS Office and .msi files"))
-ScanOLE2:value("no", translate("No"))
-ScanOLE2:value("yes", translate("Yes"))
-ScanOLE2.default = "yes"
-
-ScanPDF = s:taboption("tab_advanced", ListValue, "ScanPDF", translate("Scan pdf files"))
-ScanPDF:value("no", translate("No"))
-ScanPDF:value("yes", translate("Yes"))
-ScanPDF.default = "yes"
-
-ScanSWF = s:taboption("tab_advanced", ListValue, "ScanSWF", translate("Scan swf files"))
-ScanSWF:value("no", translate("No"))
-ScanSWF:value("yes", translate("Yes"))
-ScanSWF.default = "yes"
-
-ScanMail = s:taboption("tab_advanced", ListValue, "ScanMail", translate("Scan emails"))
-ScanMail:value("no", translate("No"))
-ScanMail:value("yes", translate("Yes"))
-ScanMail.default = "yes"
-
-ScanPartialMessages = s:taboption("tab_advanced", ListValue, "ScanPartialMessages", translate("Scan RFC1341 messages split over many emails"))
-ScanPartialMessages:value("no", translate("No"))
-ScanPartialMessages:value("yes", translate("Yes"))
-ScanPartialMessages.default = "no"
-
-ScanArchive = s:taboption("tab_advanced", ListValue, "ScanArchive", translate("Scan archives"))
-ScanArchive:value("no", translate("No"))
-ScanArchive:value("yes", translate("Yes"))
-ScanArchive.default = "yes"
-
-ArchiveBlockEncrypted = s:taboption("tab_advanced", ListValue, "ArchiveBlockEncrypted", translate("Block encrypted archives"))
-ArchiveBlockEncrypted:value("no", translate("No"))
-ArchiveBlockEncrypted:value("yes", translate("Yes"))
-ArchiveBlockEncrypted.default = "no"
-
-dummy5 = s:taboption("tab_advanced", DummyValue, "")
-dummy6 = s:taboption("tab_advanced", DummyValue, "")
-
-StreamMinPort = s:taboption("tab_advanced", Value, "StreamMinPort", translate("Port range, lowest port"))
-StreamMinPort.datatype = "portrange"
-StreamMinPort:value("1024",translate("1024"))
-StreamMinPort.default = "1024"
-
-StreamMaxPort = s:taboption("tab_advanced", Value, "StreamMaxPort", translate("Port range, highest port"))
-StreamMaxPort.datatype = "portrange"
-StreamMaxPort:value("2048",translate("2048"))
-StreamMaxPort.default = "2048"
-
-MaxThreads = s:taboption("tab_advanced", Value, "MaxThreads", translate("Max number of threads"))
-MaxThreads.datatype = "and(uinteger,min(1))"
-MaxThreads:value("10",translate("10"))
-MaxThreads:value("20",translate("20"))
-MaxThreads.default = "10"
-
-SelfCheck = s:taboption("tab_advanced", Value, "SelfCheck", translate("Database check every N sec"))
-SelfCheck.datatype = "and(uinteger,min(1))"
-SelfCheck:value("600",translate("600"))
-SelfCheck.default = "600"
-
-MaxFileSize = s:taboption("tab_advanced", Value, "MaxFileSize", translate("Max size of scanned file"))
-MaxFileSize.datatype = "string"
-MaxFileSize:value("150M",translate("150M"))
-MaxFileSize:value("50M",translate("50M"))
-MaxFileSize.default = "150M"
-
------------------- Log --------------------
-
-clamav_logfile = s:taboption("tab_logs", TextValue, "lines", "")
-clamav_logfile.wrap = "off"
-clamav_logfile.rows = 25
-clamav_logfile.rmempty = true
-
-function clamav_logfile.cfgvalue()
- local uci = require "luci.model.uci".cursor_state()
- local file = "/tmp/clamd.log"
- if file then
- return fs.readfile(file) or ""
- else
- return ""
- end
-end
-
-function clamav_logfile.write()
-end
-
-return m
+++ /dev/null
-#
-# Copyright (C) 2015 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-e2guardian
-PKG_RELEASE:=20150520
-
-PKG_LICENSE:=Apache-2.0
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/luci-app-e2guardian
- SECTION:=luci
- CATEGORY:=LuCI
- SUBMENU:=3. Applications
- TITLE:=E2Guardian Web UI
- DEPENDS:=+luci-mod-admin-full +e2guardian
- MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
-endef
-
-define Package/luci-app-e2guardian/description
- This package will install E2Guardian Web UI.
-endef
-
-define Build/Prepare
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/luci-app-e2guardian/install
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller/
- $(INSTALL_BIN) \
- ./files/e2guardian-controller.lua \
- $(1)/usr/lib/lua/luci/controller/e2guardian.lua
-
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/
- $(INSTALL_BIN) \
- ./files//e2guardian-cbi.lua \
- $(1)/usr/lib/lua/luci/model/cbi/e2guardian.lua
-endef
-
-$(eval $(call BuildPackage,luci-app-e2guardian))
+++ /dev/null
---[[
-
-LuCI E2Guardian module
-
-Copyright (C) 2015, Itus Networks, 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: Marko Ratkaj <marko.ratkaj@sartura.hr>
- Luka Perkov <luka.perkov@sartura.hr>
-
-]]--
-
-local fs = require "nixio.fs"
-local sys = require "luci.sys"
-
-m = Map("e2guardian", translate("E2Guardian"))
-m.on_after_commit = function() luci.sys.call("/etc/init.d/e2guardian restart") end
-
-s = m:section(TypedSection, "e2guardian")
-s.anonymous = true
-s.addremove = false
-
-s:tab("tab_general", translate("General Settings"))
-s:tab("tab_additional", translate("Additional Settings"))
-s:tab("tab_logs", translate("Logs"))
-
-
------------------ General Settings Tab -----------------------
-
-filterip = s:taboption("tab_general", Value, "filterip", translate("IP that E2Guardian listens"))
-filterip.datatype = "ip4addr"
-
-filterports = s:taboption("tab_general", Value, "filterports", translate("Port that E2Guardian listens"))
-filterports.datatype = "portrange"
-filterports.placeholder = "0-65535"
-
-proxyip = s:taboption("tab_general", Value, "proxyip", translate("IP address of the proxy"))
-proxyip.datatype = "ip4addr"
-proxyip.default = "127.0.0.1"
-
-proxyport = s:taboption("tab_general", Value, "proxyport", translate("Port of the proxy"))
-proxyport.datatype = "portrange"
-proxyport.placeholder = "0-65535"
-
-languagedir = s:taboption("tab_general", Value, "languagedir", translate("Language dir"))
-languagedir.datatype = "string"
-languagedir.default = "/usr/share/e2guardian/languages"
-
-language = s:taboption("tab_general", Value, "language", translate("Language to use"))
-language.datatype = "string"
-language.default = "ukenglish"
-
-loglevel = s:taboption("tab_general", ListValue, "loglevel", translate("Logging Settings"))
-loglevel:value("0", translate("none"))
-loglevel:value("1", translate("just denied"))
-loglevel:value("2", translate("all text based"))
-loglevel:value("3", translate("all requests"))
-loglevel.default = "2"
-
-logexceptionhits = s:taboption("tab_general", ListValue, "logexceptionhits", translate("Log Exception Hits"))
-logexceptionhits:value("0", translate("never"))
-logexceptionhits:value("1", translate("log, but don't mark as exceptions"))
-logexceptionhits:value("2", translate("log and mark"))
-logexceptionhits.default = "2"
-
-logfileformat = s:taboption("tab_general", ListValue, "logfileformat", translate("Log File Format"))
-logfileformat:value("1", translate("DansgGuardian format, space delimited"))
-logfileformat:value("2", translate("CSV-style format"))
-logfileformat:value("3", translate("Squid Log File Format"))
-logfileformat:value("4", translate("Tab delimited"))
-logfileformat:value("5", translate("Protex format"))
-logfileformat:value("6", translate("Protex format with server field blanked"))
-logfileformat.default = "1"
-
-accessdeniedaddress = s:taboption("tab_general", Value, "accessdeniedaddress", translate("Access denied address"),
-translate("Server to which the cgi e2guardian reporting script was copied. Reporting levels 1 and 2 only"))
-accessdeniedaddress.datatype = "string"
-accessdeniedaddress.default = "http://YOURSERVER.YOURDOMAIN/cgi-bin/e2guardian.pl"
-
-usecustombannedimage = s:taboption("tab_general", ListValue, "usecustombannedimage", translate("Banned image replacement"))
-usecustombannedimage:value("on", translate("Yes"))
-usecustombannedimage:value("off", translate("No"))
-usecustombannedimage.default = "on"
-
-custombannedimagefile = s:taboption("tab_general", Value, "custombannedimagefile", translate("Custom banned image file"))
-custombannedimagefile.datatype = "string"
-custombannedimagefile.default = "/usr/share/e2guardian/transparent1x1.gif"
-
-usecustombannedflash = s:taboption("tab_general", ListValue, "usecustombannedflash", translate("Banned flash replacement"))
-usecustombannedflash:value("on", translate("Yes"))
-usecustombannedflash:value("off", translate("No"))
-usecustombannedflash.default = "on"
-
-custombannedflashfile = s:taboption("tab_general", Value, "custombannedflashfile", translate("Custom banned flash file"))
-custombannedflashfile.datatype = "string"
-custombannedflashfile.default = "/usr/share/e2guardian/blockedflash.swf"
-
-filtergroups = s:taboption("tab_general", Value, "filtergroups", translate("Number of filter groups"))
-filtergroups.datatype = "and(uinteger,min(1))"
-filtergroups.default = "1"
-
-filtergroupslist = s:taboption("tab_general", Value, "filtergroupslist", translate("List of filter groups"))
-filtergroupslist.datatype = "string"
-filtergroupslist.default = "/etc/e2guardian/lists/filtergroupslist"
-
-bannediplist = s:taboption("tab_general", Value, "bannediplist", translate("List of banned IPs"))
-bannediplist.datatype = "string"
-bannediplist.default = "/etc/e2guardian/lists/bannediplist"
-
-exceptioniplist = s:taboption("tab_general", Value, "exceptioniplist", translate("List of IP exceptions"))
-exceptioniplist.datatype = "string"
-exceptioniplist.default = "/etc/e2guardian/lists/exceptioniplist"
-
-perroomblockingdirectory = s:taboption("tab_general", Value, "perroomblockingdirectory", translate("Per-Room blocking definition directory"))
-perroomblockingdirectory.datatype = "string"
-perroomblockingdirectory.default = "/etc/e2guardian/lists/bannedrooms/"
-
-showweightedfound = s:taboption("tab_general", ListValue, "showweightedfound", translate("Show weighted phrases found"))
-showweightedfound:value("on", translate("Yes"))
-showweightedfound:value("off", translate("No"))
-showweightedfound.default = "on"
-
-weightedphrasemode = s:taboption("tab_general", ListValue, "weightedphrasemode", translate("Weighted phrase mode"))
-weightedphrasemode:value("0", translate("off"))
-weightedphrasemode:value("1", translate("on, normal operation"))
-weightedphrasemode:value("2", translate("on, phrase found only counts once on a page"))
-weightedphrasemode.default = "2"
-
-urlcachenumber = s:taboption("tab_general", Value, "urlcachenumber", translate("Clean result caching for URLs"))
-urlcachenumber.datatype = "and(uinteger,min(0))"
-urlcachenumber.default = "1000"
-
-urlcacheage = s:taboption("tab_general", Value, "urlcacheage", translate("Age before they should be ignored in seconds"))
-urlcacheage.datatype = "and(uinteger,min(0))"
-urlcacheage.default = "900"
-
-scancleancache = s:taboption("tab_general", ListValue, "scancleancache", translate("Cache for content (AV) scans as 'clean'"))
-scancleancache:value("on", translate("Yes"))
-scancleancache:value("off", translate("No"))
-scancleancache.default = "on"
-
-phrasefiltermode = s:taboption("tab_general", ListValue, "phrasefiltermode", translate("Filtering options"))
-phrasefiltermode:value("0", translate("raw"))
-phrasefiltermode:value("1", translate("smart"))
-phrasefiltermode:value("2", translate("both raw and smart"))
-phrasefiltermode:value("3", translate("meta/title"))
-phrasefiltermode.default = "2"
-
-preservecase = s:taboption("tab_general", ListValue, "perservecase", translate("Lower caseing options"))
-preservecase:value("0", translate("force lower case"))
-preservecase:value("1", translate("don't change"))
-preservecase:value("2", translate("scan fist in lower, then in original"))
-preservecase.default = "0"
-
-hexdecodecontent = s:taboption("tab_general", ListValue, "hexdecodecontent", translate("Hex decoding options"))
-hexdecodecontent:value("on", translate("Yes"))
-hexdecodecontent:value("off", translate("No"))
-hexdecodecontent.default = "off"
-
-forcequicksearch = s:taboption("tab_general", ListValue, "forcequicksearch", translate("Quick search"))
-forcequicksearch:value("on", translate("Yes"))
-forcequicksearch:value("off", translate("No"))
-forcequicksearch.default = "off"
-
-reverseaddresslookups= s:taboption("tab_general", ListValue, "reverseaddresslookups", translate("Reverse lookups for banned site and URLs"))
-reverseaddresslookups:value("on", translate("Yes"))
-reverseaddresslookups:value("off", translate("No"))
-reverseaddresslookups.default = "off"
-
-reverseclientiplookups = s:taboption("tab_general", ListValue, "reverseclientiplookups", translate("Reverse lookups for banned and exception IP lists"))
-reverseclientiplookups:value("on", translate("Yes"))
-reverseclientiplookups:value("off", translate("No"))
-reverseclientiplookups.default = "off"
-
-logclienthostnames = s:taboption("tab_general", ListValue, "logclienthostnames", translate("Perform reverse lookups on client IPs for successful requests"))
-logclienthostnames:value("on", translate("Yes"))
-logclienthostnames:value("off", translate("No"))
-logclienthostnames.default = "off"
-
-createlistcachefiles = s:taboption("tab_general", ListValue, "createlistcachefiles", translate("Build bannedsitelist and bannedurllist cache files"))
-createlistcachefiles:value("on",translate("Yes"))
-createlistcachefiles:value("off",translate("No"))
-createlistcachefiles.default = "on"
-
-prefercachedlists = s:taboption("tab_general", ListValue, "prefercachedlists", translate("Prefer cached list files"))
-prefercachedlists:value("on", translate("Yes"))
-prefercachedlists:value("off", translate("No"))
-prefercachedlists.default = "off"
-
-maxuploadsize = s:taboption("tab_general", Value, "maxuploadsize", translate("Max upload size (in Kbytes)"))
-maxuploadsize:value("-1", translate("no blocking"))
-maxuploadsize:value("0", translate("complete block"))
-maxuploadsize.default = "-1"
-
-maxcontentfiltersize = s:taboption("tab_general", Value, "maxcontentfiltersize", translate("Max content filter size"),
-translate("The value must not be higher than max content ram cache scan size or 0 to match it"))
-maxcontentfiltersize.datatype = "and(uinteger,min(0))"
-maxcontentfiltersize.default = "256"
-
-maxcontentramcachescansize = s:taboption("tab_general", Value, "maxcontentramcachescansize", translate("Max content ram cache scan size"),
-translate("This is the max size of file that DG will download and cache in RAM"))
-maxcontentramcachescansize.datatype = "and(uinteger,min(0))"
-maxcontentramcachescansize.default = "2000"
-
-maxcontentfilecachescansize = s:taboption("tab_general", Value, "maxcontentfilecachescansize", translate("Max content file cache scan size"))
-maxcontentfilecachescansize.datatype = "and(uinteger,min(0))"
-maxcontentfilecachescansize.default = "20000"
-
-proxytimeout = s:taboption("tab_general", Value, "proxytimeout", translate("Proxy timeout (5-100)"))
-proxytimeout.datatype = "range(5,100)"
-proxytimeout.default = "20"
-
-proxyexchange = s:taboption("tab_general", Value, "proxyexchange", translate("Proxy header excahnge (20-300)"))
-proxyexchange.datatype = "range(20,300)"
-proxyexchange.default = "20"
-
-pcontimeout = s:taboption("tab_general", Value, "pcontimeout", translate("Pconn timeout"),
-translate("How long a persistent connection will wait for other requests"))
-pcontimeout.datatype = "range(5,300)"
-pcontimeout.default = "55"
-
-filecachedir = s:taboption("tab_general", Value, "filecachedir", translate("File cache directory"))
-filecachedir.datatype = "string"
-filecachedir.default = "/tmp"
-
-deletedownloadedtempfiles = s:taboption("tab_general", ListValue, "deletedownloadedtempfiles", translate("Delete file cache after user completes download"))
-deletedownloadedtempfiles:value("on", translate("Yes"))
-deletedownloadedtempfiles:value("off", translate("No"))
-deletedownloadedtempfiles.default = "on"
-
-initialtrickledelay = s:taboption("tab_general", Value, "initialtrickledelay", translate("Initial Trickle delay"),
-translate("Number of seconds a browser connection is left waiting before first being sent *something* to keep it alive"))
-initialtrickledelay.datatype = "and(uinteger,min(0))"
-initialtrickledelay.default = "20"
-
-trickledelay = s:taboption("tab_general", Value, "trickledelay", translate("Trickle delay"),
-translate("Number of seconds a browser connection is left waiting before being sent more *something* to keep it alive"))
-trickledelay.datatype = "and(uinteger,min(0))"
-trickledelay.default = "10"
-
-downloadmanager = s:taboption("tab_general", Value, "downloadmanager", translate("Download manager"))
-downloadmanager.datatype = "string"
-downloadmanager.default = "/etc/e2guardian/downloadmanagers/default.conf"
-
-contentscannertimeout = s:taboption("tab_general", Value, "contentscannertimeout", translate("Content scanner timeout"))
-contentscannertimeout.datatype = "and(uinteger,min(0))"
-contentscannertimeout.default = "60"
-
-contentscanexceptions = s:taboption("tab_general", ListValue, "contentscanexceptions", translate("Content scan exceptions"))
-contentscanexceptions:value("on", translate("Yes"))
-contentscanexceptions:value("off", translate("No"))
-contentscanexceptions.default = "off"
-
-recheckreplacedurls = s:taboption("tab_general", ListValue, "recheckreplacedurls", translate("e-check replaced URLs"))
-recheckreplacedurls:value("on", translate("Yes"))
-recheckreplacedurls:value("off", translate("No"))
-recheckreplacedurls.default = "off"
-
-forwardedfor = s:taboption("tab_general", ListValue, "forwardedfor", translate("Misc setting: forwardedfor"),
-translate("If on, it may help solve some problem sites that need to know the source ip."))
-forwardedfor:value("on", translate("Yes"))
-forwardedfor:value("off", translate("No"))
-forwardedfor.default = "off"
-
-usexforwardedfor = s:taboption("tab_general", ListValue, "usexforwardedfor", translate("Misc setting: usexforwardedfor"),
-translate("This is for when you have squid between the clients and E2Guardian"))
-usexforwardedfor:value("on", translate("Yes"))
-usexforwardedfor:value("off", translate("No"))
-usexforwardedfor.default = "off"
-
-logconnectionhandlingerrors = s:taboption("tab_general", ListValue, "logconnectionhandlingerrors", translate("Log debug info about log()ing and accept()ing"))
-logconnectionhandlingerrors:value("on", translate("Yes"))
-logconnectionhandlingerrors:value("off", translate("No"))
-logconnectionhandlingerrors.default = "on"
-
-logchildprocesshandling = s:taboption("tab_general", ListValue, "logchildprocesshandling", translate("Log child process handling"))
-logchildprocesshandling:value("on", translate("Yes"))
-logchildprocesshandling:value("off", translate("No"))
-logchildprocesshandling.default = "off"
-
-maxchildren = s:taboption("tab_general", Value, "maxchildren", translate("Max number of processes to spawn"))
-maxchildren.datatype = "and(uinteger,min(0))"
-maxchildren.default = "180"
-
-minchildren = s:taboption("tab_general", Value, "minchildren", translate("Min number of processes to spawn"))
-minchildren.datatype = "and(uinteger,min(0))"
-minchildren.default = "20"
-
-minsparechildren = s:taboption("tab_general", Value, "minsparechildren", translate("Min number of processes to keep ready"))
-minsparechildren.datatype = "and(uinteger,min(0))"
-minsparechildren.default = "16"
-
-preforkchildren = s:taboption("tab_general", Value, "preforkchildren", translate("Sets minimum nuber of processes when it runs out"))
-preforkchildren.datatype = "and(uinteger,min(0))"
-preforkchildren.default = "10"
-
-maxsparechildren = s:taboption("tab_general", Value, "maxsparechildren", translate("Sets the maximum number of processes to have doing nothing"))
-maxsparechildren.datatype = "and(uinteger,min(0))"
-maxsparechildren.default = "32"
-
-maxagechildren = s:taboption("tab_general", Value, "maxagechildren", translate("Max age of child process"))
-maxagechildren.datatype = "and(uinteger,min(0))"
-maxagechildren.default = "500"
-
-maxips = s:taboption("tab_general", Value, "maxips", translate("Max number of clinets allowed to connect"))
-maxips:value("0", translate("no limit"))
-maxips.default = "0"
-
-ipipcfilename = s:taboption("tab_general", Value, "ipipcfilename", translate("IP list IPC server directory and filename"))
-ipipcfilename.datatype = "string"
-ipipcfilename.default = "/tmp/.dguardianipc"
-
-urlipcfilename = s:taboption("tab_general", Value, "urlipcfilename", translate("Defines URL list IPC server directory and filename used to communicate with the URL cache process"))
-urlipcfilename.datatype = "string"
-urlipcfilename.default = "/tmp/.dguardianurlipc"
-
-ipcfilename = s:taboption("tab_general", Value, "ipcfilename", translate("Defines URL list IPC server directory and filename used to communicate with the URL cache process"))
-ipcfilename.datatype = "string"
-ipcfilename.default = "/tmp/.dguardianipipc"
-
-nodeamon = s:taboption("tab_general", ListValue, "nodeamon", translate("Disable deamoning"))
-nodeamon:value("on", translate("Yes"))
-nodeamon:value("off", translate("No"))
-nodeamon.default = "off"
-
-nologger = s:taboption("tab_general", ListValue, "nologger", translate("Disable logger"))
-nologger:value("on", translate("Yes"))
-nologger:value("off", translate("No"))
-nologger.default = "off"
-
-logadblock = s:taboption("tab_general", ListValue, "logadblock", translate("Enable logging of ADs"))
-logadblock:value("on", translate("Yes"))
-logadblock:value("off", translate("No"))
-logadblock.default = "off"
-
-loguseragent = s:taboption("tab_general", ListValue, "loguseragent", translate("Enable logging of client user agent"))
-loguseragent:value("on", translate("Yes"))
-loguseragent:value("off", translate("No"))
-loguseragent.default = "off"
-
-softrestart = s:taboption("tab_general", ListValue, "softrestart", translate("Enable soft restart"))
-softrestart:value("on", translate("Yes"))
-softrestart:value("off", translate("No"))
-softrestart.default = "off"
-
-
------------------------- Additional Settings Tab ----------------------------
-
-e2guardian_config_file = s:taboption("tab_additional", TextValue, "_data", "")
-e2guardian_config_file.wrap = "off"
-e2guardian_config_file.rows = 25
-e2guardian_config_file.rmempty = false
-
-function e2guardian_config_file.cfgvalue()
- local uci = require "luci.model.uci".cursor_state()
- file = "/etc/e2guardian/e2guardianf1.conf"
- if file then
- return fs.readfile(file) or ""
- else
- return ""
- end
-end
-
-function e2guardian_config_file.write(self, section, value)
- if value then
- local uci = require "luci.model.uci".cursor_state()
- file = "/etc/e2guardian/e2guardianf1.conf"
- fs.writefile(file, value:gsub("\r\n", "\n"))
- end
-end
-
-
----------------------------- Logs Tab -----------------------------
-
-e2guardian_logfile = s:taboption("tab_logs", TextValue, "lines", "")
-e2guardian_logfile.wrap = "off"
-e2guardian_logfile.rows = 25
-e2guardian_logfile.rmempty = true
-
-function e2guardian_logfile.cfgvalue()
- local uci = require "luci.model.uci".cursor_state()
- file = "/tmp/e2guardian/access.log"
- if file then
- return fs.readfile(file) or ""
- else
- return "Can't read log file"
- end
-end
-
-function e2guardian_logfile.write()
- return ""
-end
-
-return m
+++ /dev/null
---[[
-
-LuCI E2Guardian module
-
-Copyright (C) 2015, Itus Networks, 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: Marko Ratkaj <marko.ratkaj@sartura.hr>
- Luka Perkov <luka.perkov@sartura.hr>
-
-]]--
-
-module("luci.controller.e2guardian", package.seeall)
-
-function index()
- entry({"admin", "services", "e2guardian"}, cbi("e2guardian"), _("E2Guardian"))
-end
+++ /dev/null
-#
-# Copyright (C) 2015 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-squid
-PKG_RELEASE:=20150608
-
-PKG_LICENSE:=Apache-2.0
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/luci-app-squid
- SECTION:=luci
- CATEGORY:=LuCI
- SUBMENU:=3. Applications
- TITLE:=Squid Web UI
- DEPENDS:=+luci-mod-admin-full +squid
- MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
-endef
-
-define Package/luci-app-squid/description
- This package will install Squid Web UI.
-endef
-
-define Build/Prepare
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/luci-app-squid/install
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller/
- $(INSTALL_BIN) \
- ./files/squid-controller.lua \
- $(1)/usr/lib/lua/luci/controller/squid.lua
-
- $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/
- $(INSTALL_BIN) \
- ./files//squid-cbi.lua \
- $(1)/usr/lib/lua/luci/model/cbi/squid.lua
-endef
-
-$(eval $(call BuildPackage,luci-app-squid))
+++ /dev/null
---[[
-
-LuCI Squid module
-
-Copyright (C) 2015, OpenWrt.org
-
-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: Marko Ratkaj <marko.ratkaj@sartura.hr>
-
-]]--
-
-local fs = require "nixio.fs"
-local sys = require "luci.sys"
-require "ubus"
-
-m = Map("squid", translate("Squid"))
-m.on_after_commit = function() luci.sys.call("/etc/init.d/squid restart") end
-
-s = m:section(TypedSection, "squid")
-s.anonymous = true
-s.addremove = false
-
-s:tab("general", translate("General Settings"))
-
-http_port = s:taboption("general", Value, "http_port", translate("Port"))
-http_port.datatype = "portrange"
-http_port.placeholder = "0-65535"
-
-visible_hostname = s:taboption("general", Value, "visible_hostname", translate("Visible Hostname"))
-visible_hostname.datatype="string"
-visible_hostname.placeholder = "OpenWrt"
-
-coredump_dir = s:taboption("general", Value, "coredump_dir", translate("Coredump files directory"))
-coredump_dir.datatype="string"
-coredump_dir.placeholder = "/tmp/squid"
-
-s:tab("advanced", translate("Advanced Settings"))
-
-squid_config_file = s:taboption("advanced", TextValue, "_data", "")
-squid_config_file.wrap = "off"
-squid_config_file.rows = 25
-squid_config_file.rmempty = false
-
-function squid_config_file.cfgvalue()
- local uci = require "luci.model.uci".cursor_state()
- local file = uci:get("squid", "squid", "config_file")
- if file then
- return fs.readfile(file) or ""
- else
- return ""
- end
-end
-
-function squid_config_file.write(self, section, value)
- if value then
- local uci = require "luci.model.uci".cursor_state()
- local file = uci:get("squid", "squid", "config_file")
- fs.writefile(file, value:gsub("\r\n", "\n"))
- end
-end
-
-return m
+++ /dev/null
---[[
-
-LuCI Squid module
-
-Copyright (C) 2015, OpenWrt.org
-
-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: Marko Ratkaj <marko.ratkaj@sartura.hr>
-
-]]--
-
-module("luci.controller.squid", package.seeall)
-
-function index()
- entry({"admin", "services", "squid"}, cbi("squid"), _("Squid"))
-end
PKG_NAME:=net-snmp
PKG_VERSION:=5.7.3
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/net-snmp
option args /proc/sys/fs/file-nr
# option miboid 1.2.3.4
+config engineid
+# option engineid 'LEDE'
+ option engineidtype '3'
+ option engineidnic 'eth0'
echo "$disk $partition $size" >> $CONFIGFILE
}
+snmpd_engineid_add() {
+ local cfg="$1"
+
+ config_get engineid "$cfg" engineid
+ [ -n "$engineid" ] && echo "engineID $engineid" >> $CONFIGFILE
+ config_get engineidtype "$cfg" engineidtype
+ [ "$engineidtype" -ge 1 -a "$engineidtype" -le 3 ] && \
+ echo "engineIDType $engineidtype" >> $CONFIGFILE
+ config_get engineidnic "$cfg" engineidnic
+ [ -n "$engineidnic" ] && echo "engineIDNic $engineidnic" >> $CONFIGFILE
+}
+
start_service() {
[ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
config_foreach snmpd_pass_add pass
config_foreach snmpd_exec_add exec
config_foreach snmpd_disk_add disk
+ config_foreach snmpd_engineid_add engineid
procd_set_param command $PROG -Lf /dev/null -f
procd_set_param file $CONFIGFILE
prompt "Enable HTTP auth basic"
default y
+config NGINX_HTTP_AUTH_REQUEST
+ bool
+ prompt "Enable HTTP auth request module"
+ default n
+
config NGINX_HTTP_AUTOINDEX
bool
prompt "Enable HTTP autoindex module"
prompt "Enable HTTP cache"
default y
+config NGINX_HTTP_V2
+ bool
+ prompt "Enable HTTP_V2 module"
+ default n
+
config NGINX_PCRE
bool
prompt "Enable PCRE library usage"
prompt "Enable Lua module"
default n
+config NGINX_HTTP_REAL_IP
+ bool
+ prompt "Enable HTTP real ip module"
+ default n
+
+config NGINX_HTTP_SECURE_LINK
+ bool
+ prompt "Enable HTTP secure link module"
+ default n
+
endmenu
include $(TOPDIR)/rules.mk
PKG_NAME:=nginx
-PKG_VERSION:=1.10.2
+PKG_VERSION:=1.10.3
PKG_RELEASE:=1
PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://nginx.org/download/
-PKG_MD5SUM:=e8f5f4beed041e63eb97f9f4f55f3085
+PKG_MD5SUM:=204a20cb4f0b0c9db746c630d89ff4ea
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>
PKG_LICENSE:=2-clause BSD-like license
CONFIG_NGINX_HTTP_USERID \
CONFIG_NGINX_HTTP_ACCESS \
CONFIG_NGINX_HTTP_AUTH_BASIC \
+ CONFIG_NGINX_HTTP_AUTH_REQUEST \
CONFIG_NGINX_HTTP_AUTOINDEX \
CONFIG_NGINX_HTTP_GEO \
CONFIG_NGINX_HTTP_MAP \
CONFIG_NGINX_HTTP_UPSTREAM_KEEPALIVE \
CONFIG_NGINX_HTTP_UPSTREAM_ZONE \
CONFIG_NGINX_HTTP_CACHE \
+ CONFIG_NGINX_HTTP_V2 \
CONFIG_NGINX_PCRE \
CONFIG_NGINX_NAXSI \
- CONFIG_NGINX_LUA
+ CONFIG_NGINX_LUA \
+ CONFIG_NGINX_HTTP_REAL_IP \
+ CONFIG_NGINX_HTTP_SECURE_LINK
include $(INCLUDE_DIR)/package.mk
ifneq ($(CONFIG_NGINX_HTTP_AUTH_BASIC),y)
ADDITIONAL_MODULES += --without-http_auth_basic_module
endif
+ifeq ($(CONFIG_NGINX_HTTP_AUTH_REQUEST),y)
+ ADDITIONAL_MODULES += --with-http_auth_request_module
+endif
ifneq ($(CONFIG_NGINX_HTTP_AUTOINDEX),y)
ADDITIONAL_MODULES += --without-http_autoindex_module
endif
ifneq ($(CONFIG_NGINX_HTTP_UPSTREAM_KEEPALIVE),y)
ADDITIONAL_MODULES += --without-http_upstream_keepalive_module
endif
+ifeq ($(CONFIG_NGINX_HTTP_V2),y)
+ ADDITIONAL_MODULES += --with-http_v2_module
+endif
+ifeq ($(CONFIG_NGINX_HTTP_REAL_IP),y)
+ ADDITIONAL_MODULES += --with-http_realip_module
+endif
+ifeq ($(CONFIG_NGINX_HTTP_SECURE_LINK),y)
+ ADDITIONAL_MODULES += --with-http_secure_link_module
+endif
TARGET_CFLAGS += -fvisibility=hidden -ffunction-sections -fdata-sections -DNGX_LUA_NO_BY_LUA_BLOCK
TARGET_LDFLAGS += -Wl,--gc-sections
include $(TOPDIR)/rules.mk
PKG_NAME:=ngircd
-PKG_VERSION:=23
+PKG_VERSION:=24
PKG_RELEASE:=1
PKG_MAINTAINER:=Claudio Leite <leitec@staticky.com>
PKG_LICENSE:=GPL-2.0
PKG_SOURCE_URL:= \
http://ngircd.barton.de/pub/ngircd/ \
ftp://ftp.berlios.de/pub/ngircd/
-PKG_MD5SUM:=a58e0075fea60176fa7df092ca7e2c6a
+PKG_MD5SUM:=59b2d56f6eb55b85225e91ebfbfc848b
PKG_INSTALL:=1
- config NUT_SERVER
- depends on PACKAGE_nut
- bool "Include server components (upsd)"
- help
- upsd is responsible for serving the data from the drivers to the
- clients. It connects to each driver and maintains a local cache of the
- current state. Queries from the clients are served from this cache, so
- delays are minimal. This program is essential, and must be running at
- all times to actually make any use out of the drivers and clients.
- default y
-
- config NUT_CLIENTS_UPSC
- depends on PACKAGE_nut
- bool "Include command line client (upsc)"
- help
- upsc is provided as a quick way to poll the status of a UPS server. It
- can be used inside shell scripts and other programs that need UPS data
- but don't want to include the full interface.
- default y
-
- config NUT_CLIENTS_UPSLOG
- depends on PACKAGE_nut
- bool "Include logging client (upslog)"
- help
- upslog is a daemon that will poll a UPS at periodic intervals, fetch the
- variables that interest you, format them, and write them to a file.
- default n
-
- config NUT_CLIENTS_UPSCMD
- depends on PACKAGE_nut
- bool "Include UPS controller (upscmd)"
- help
- upscmd allows you to invoke "instant commands" in your UPS hardware. Not
- all hardware supports this, so check the list with -l to see if anything
- will work on your equipment. On hardware that supports it, you can use
- this program to start and stop battery tests, invoke a front panel test
- (beep!), turn the load on or off, and more.
- default n
-
- config NUT_CLIENTS_UPSRW
- depends on PACKAGE_nut
- bool "Include UPS variable editor (upsrw)"
- help
- upsrw allows you to view and change the read/write variables inside your
- UPS. It sends commands via the upsd to your driver, which configures the
- hardware for you. The list of variables that allow you to change their
- values is based on the capabilities of your UPS equipment. Not all
- models support this feature. Typically, cheaper hardware does not
- support any of them.
- default n
-
- config NUT_CLIENTS_UPSMON
- depends on PACKAGE_nut
- bool "Include monitor and shutdown controller (upsmon)"
- help
- upsmon is the client process that is responsible for the most important
- part of UPS monitoring--shutting down the system when the power goes
- out. It can call out to other helper programs for notification purposes
- during power events. upsmon can monitor multiple systems using a single
- process. Every UPS that is defined in the upsmon.conf configuration file
- is assigned a power value and a type (slave or master).
- default y
-
- config NUT_CLIENTS_UPSSCHED
- depends on NUT_CLIENTS_UPSMON
- bool "Include helper for triggering events from upsmon (upssched)"
- help
- upssched was created to allow users to execute programs at times relative
- to events being monitored by upsmon. The original purpose was to allow
- for a shutdown to occur after some fixed period on battery, but there are
- other uses that are possible.
- You can alternatively write your own script and save some space.
- default n
-
config NUT_SSL
depends on PACKAGE_nut
bool "Build with support for OpenSSL"
help
If you have a UPS you can connect to via SNMP, select this.
default n
-
+
+ config NUT_DRIVER_SERIAL
+ depends on PACKAGE_nut
+ bool "Build with suport for serial drivers"
+ help
+ If you have a UPS connected via serial cable, select this.
+ default n
-#
-# Copyright (C) 2006-2015 OpenWrt.org
+
+# Copyright (C) 2006-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=nut
PKG_VERSION:=2.7.4
-PKG_RELEASE:=2
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.networkupstools.org/source/2.7/
PKG_MD5SUM:=3ba53656933d7471f95140b32a5b8d5c
-PKG_MAINTAINER:=Martin Rowe <martin.p.rowe@gmail.com>
+PKG_MAINTAINER:=Daniel Dickinson <lede@cshore.thecshore.com>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE-GPL2
-PKG_BUILD_DIR:=$(BUILD_DIR)/nut-$(PKG_VERSION)
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL:=1
PKG_CONFIG_DEPENDS:= \
- CONFIG_NUT_CLIENTS_UPSC \
- CONFIG_NUT_CLIENTS_UPSCMD \
- CONFIG_NUT_CLIENTS_UPSLOG \
- CONFIG_NUT_CLIENTS_UPSMON \
- CONFIG_NUT_CLIENTS_UPSRW \
- CONFIG_NUT_CLIENTS_UPSSCHED \
CONFIG_NUT_DRIVER_SNMP \
CONFIG_NUT_DRIVER_USB \
- CONFIG_NUT_SERVER \
+ CONFIG_NUT_DRIVER_SERIAL \
CONFIG_NUT_SSL
include $(INCLUDE_DIR)/package.mk
SECTION:=net
CATEGORY:=Network
URL:=http://www.networkupstools.org/
- DEPENDS:=nut
+ TITLE:=Network UPS Tools (NUT)
endef
-define Package/nut/description
+define Package/nut/description/Default
Network UPS Tools (NUT) is a client/server monitoring system that
allows computers to share uninterruptible power supply (UPS) and
power distribution unit (PDU) hardware. Clients access the hardware
define Package/nut
$(call Package/nut/Default)
- TITLE:=Network UPS Tools
- DEPENDS:= \
- +libpthread \
- +NUT_DRIVER_SNMP:libnetsnmp \
- +NUT_DRIVER_USB:libusb-compat \
- +NUT_SSL:libopenssl
MENU:=1
endef
+define Package/nut/description
+$(call Package/nut/description/Default)
+endef
+
define Package/nut/config
source "$(SOURCE)/Config.in"
endef
-define Package/nut/conffiles
-/etc/nut/nut.conf
-$(if $(CONFIG_NUT_CLIENTS_UPSMON),/etc/nut/upsmon.conf)
-$(if $(CONFIG_NUT_CLIENTS_UPSSCHED),/etc/nut/upssched.conf)
-$(if $(CONFIG_NUT_SERVER),/etc/nut/ups.conf)
-$(if $(CONFIG_NUT_SERVER),/etc/nut/upsd.conf)
-$(if $(CONFIG_NUT_SERVER),/etc/nut/upsd.users)
+define Package/nut/install
+ true
endef
-define Package/nut/install
+define Package/nut-server/install
+ $(INSTALL_DIR) $(1)/etc/nut
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_DIR) $(1)/usr/share/nut
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/nut-server.init $(1)/etc/init.d/nut-server
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsd $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsdrvctl $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/cmdvartab $(1)/usr/share/nut/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/driver.list $(1)/usr/share/nut/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/nut_server $(1)/etc/config/nut_server
+ ln -sf /var/etc/nut/nut.conf $(1)/etc/nut/nut.conf
+ ln -sf /var/etc/nut/ups.conf $(1)/etc/nut/ups.conf
+ ln -sf /var/etc/nut/upsd.users $(1)/etc/nut/upsd.users
+ ln -sf /var/etc/nut/upsd.conf $(1)/etc/nut/upsd.conf
+endef
+
+define Package/nut-common
+ $(call Package/nut/Default)
+ TITLE+= (common)
+ DEPENDS:= nut \
+ +NUT_DRIVER_SNMP:libnetsnmp \
+ +NUT_DRIVER_USB:libusb-compat \
+ +NUT_SSL:libopenssl \
+ +PACKAGE_libwrap:libwrap
+endef
+
+define Package/nut-common/description
+$(call Package/nut/description/Default)
+This package contains the common files.
+endef
+
+define Package/nut-common/install
$(INSTALL_DIR) $(1)/etc/nut
- $(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libupsclient.so* $(1)/usr/lib/
+ ln -sf /var/etc/nut/nut.conf $(1)/etc/nut/nut.conf
+endef
+
+define Package/nut-server
+ $(call Package/nut/Default)
+ TITLE+= (server)
+ DEPENDS:=nut +nut-common
+endef
+
+define Package/nut-server/description
+$(call Package/nut/description/Default)
+upsd is responsible for serving the data from the drivers to the
+clients. It connects to each driver and maintains a local cache of the
+current state. Queries from the clients are served from this cache, so
+delays are minimal. This program is essential, and must be running at
+all times to actually make any use out of the drivers and clients.
+endef
+
+define Package/nut-server/conffiles
+/etc/config/nut_server
+endef
+
+define Package/nut-upsmon
+ $(call Package/nut/Default)
+ TITLE+= (monitor)
+ DEPENDS:=nut +nut-common
+ USERID:=nut=113:nut=113
+endef
+
+define Package/nut-upsmon/description
+$(call Package/nut/description/Default)
+upsmon is the client process that is responsible for the most important
+part of UPS monitoring--shutting down the system when the power goes
+out. It can call out to other helper programs for notification purposes
+during power events. upsmon can monitor multiple systems using a single
+process. Every UPS that is defined in the upsmon.conf configuration file
+is assigned a power value and a type (slave or master).
+endef
+
+define Package/nut-upsmon/conffiles
+/etc/config/nut_monitor
+endef
+
+define Package/nut-upsmon/install
+ $(INSTALL_DIR) $(1)/etc/nut
$(INSTALL_DIR) $(1)/usr/sbin
- $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/nut.conf.sample $(1)/etc/nut/nut.conf
- $(if $(or $(CONFIG_NUT_CLIENTS_UPSC),\
- $(CONFIG_NUT_CLIENTS_UPSCMD),\
- $(CONFIG_NUT_CLIENTS_LOG),\
- $(CONFIG_NUT_CLIENTS_UPSRW),\
- $(CONFIG_NUT_CLIENTS_UPSMON),\
- $(CONFIG_NUT_CLIENTS_UPSSCHED)),$(CP) $(PKG_INSTALL_DIR)/usr/lib/libupsclient.so* $(1)/usr/lib/)
- $(if $(or $(CONFIG_NUT_SERVER),\
- $(CONFIG_NUT_CLIENTS_UPSMON)),$(INSTALL_DIR) $(1)/etc/init.d)
- $(if $(CONFIG_NUT_SERVER),$(INSTALL_DIR) $(1)/lib/nut)
- $(if $(CONFIG_NUT_SERVER),$(INSTALL_DIR) $(1)/usr/share/nut)
- $(if $(CONFIG_NUT_SERVER),$(CP) ./files/nut-server.init $(1)/etc/init.d/)
- $(if $(CONFIG_NUT_SERVER),$(CP) $(PKG_INSTALL_DIR)/usr/sbin/upsd $(1)/usr/sbin)
- $(if $(CONFIG_NUT_SERVER),$(CP) $(PKG_INSTALL_DIR)/usr/sbin/upsdrvctl $(1)/usr/sbin)
- $(if $(CONFIG_NUT_SERVER),$(CP) $(PKG_INSTALL_DIR)/usr/share/nut/cmdvartab $(1)/usr/share/nut/)
- $(if $(CONFIG_NUT_SERVER),$(CP) $(PKG_INSTALL_DIR)/usr/share/nut/driver.list $(1)/usr/share/nut/)
- $(if $(CONFIG_NUT_SERVER),$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/ups.conf.sample $(1)/etc/nut/ups.conf)
- $(if $(CONFIG_NUT_SERVER),$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsd.conf.sample $(1)/etc/nut/upsd.conf)
- $(if $(CONFIG_NUT_SERVER),$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsd.users.sample $(1)/etc/nut/upsd.users)
- $(if $(CONFIG_NUT_CLIENTS_UPSC),$(CP) $(PKG_INSTALL_DIR)/usr/bin/upsc $(1)/usr/bin/)
- $(if $(CONFIG_NUT_CLIENTS_UPSCMD),$(CP) $(PKG_INSTALL_DIR)/usr/bin/upscmd $(1)/usr/bin/)
- $(if $(CONFIG_NUT_CLIENTS_UPSLOG),$(CP) $(PKG_INSTALL_DIR)/usr/bin/upslog $(1)/usr/bin/)
- $(if $(CONFIG_NUT_CLIENTS_UPSRW),$(CP) $(PKG_INSTALL_DIR)/usr/bin/upsrw $(1)/usr/bin/)
- $(if $(CONFIG_NUT_CLIENTS_UPSMON),$(CP) ./files/nut-monitor.init $(1)/etc/init.d/)
- $(if $(CONFIG_NUT_CLIENTS_UPSMON),$(CP) $(PKG_INSTALL_DIR)/usr/sbin/upsmon $(1)/usr/sbin/)
- $(if $(CONFIG_NUT_CLIENTS_UPSMON),$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsmon.conf.sample $(1)/etc/nut/upsmon.conf)
- $(if $(CONFIG_NUT_CLIENTS_UPSSCHED),$(CP) $(PKG_INSTALL_DIR)/usr/bin/upssched-cmd $(1)/usr/bin/)
- $(if $(CONFIG_NUT_CLIENTS_UPSSCHED),$(CP) $(PKG_INSTALL_DIR)/usr/sbin/upssched $(1)/usr/sbin/)
- $(if $(CONFIG_NUT_CLIENTS_UPSSCHED),$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upssched.conf.sample $(1)/etc/nut/upssched.conf)
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/nut-monitor.init $(1)/etc/init.d/nut-monitor
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsmon $(1)/usr/sbin/
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/nut_monitor $(1)/etc/config/nut_monitor
+ ln -sf /var/etc/nut/upsmon.conf $(1)/etc/nut/upsmon.conf
+endef
+
+define Package/nut-upsmon-sendmail-notify
+ $(call Package/nut/Default)
+ TITLE+= (upsmon with notifications via sendmail)
+ DEPENDS:=nut +nut-upsmon
+ CONFLICTS:=nut-upssched
+endef
+
+define Package/nut-upsmon-sendmail-notify/description
+$(call Package/nut/description/Default)
+upsmon with default notification via sendmail
+endef
+
+define Package/nut-upsmon-sendmail-notify/install
+ $(INSTALL_DIR) $(1)/usr/bin $(1)/etc/uci-defaults
+ $(INSTALL_BIN) ./files/nut-sendmail-notify $(1)/usr/bin/
+ $(INSTALL_DATA) ./files/nut-sendmail-notify.default $(1)/etc/uci-defaults/nut-sendmail-notify
+endef
+
+define Package/nut-upsc
+ $(call Package/nut/Default)
+ TITLE+= (upsc command)
+ DEPENDS:=nut +nut-common
+endef
+
+define Package/nut-upsc/description
+$(call Package/nut/description/Default)
+upsc is provided as a quick way to poll the status of a UPS server. It
+can be used inside shell scripts and other programs that need UPS data
+but don not want to include the full interface.
+endef
+
+define Package/nut-upsc/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/upsc $(1)/usr/bin
+endef
+
+define Package/nut-upslog
+ $(call Package/nut/Default)
+ TITLE+= (logging client)
+ DEPENDS:=nut +nut-common
+endef
+
+define Package/nut-upslog/description
+$(call Package/nut/description/Default)
+upslog is a daemon that will poll a UPS at periodic intervals, fetch the
+variables that interest you, format them, and write them to a file.
+endef
+
+define Package/nut-upslog/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/upslog $(1)/usr/bin/
+endef
+
+define Package/nut-upscmd
+ $(call Package/nut/Default)
+ TITLE+= (controller)
+ DEPENDS:=nut +nut-common
+endef
+
+define Package/nut-upscmd/description
+$(call Package/nut/description/Default)
+upscmd allows you to invoke "instant commands" in your UPS hardware. Not
+all hardware supports this, so check the list with -l to see if anything
+will work on your equipment. On hardware that supports it, you can use
+this program to start and stop battery tests, invoke a front panel test
+(beep!), turn the load on or off, and more.
+endef
+
+define Package/nut-upscmd/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/upscmd $(1)/usr/bin/
+endef
+
+define Package/nut-upsrw
+ $(call Package/nut/Default)
+ TITLE+= (variable editor)
+ DEPENDS:=nut +nut-common
+endef
+
+define Package/nut-upsrw/description
+$(call Package/nut/description/Default)
+upsrw allows you to view and change the read/write variables inside your
+UPS. It sends commands via the upsd to your driver, which configures the
+hardware for you. The list of variables that allow you to change their
+values is based on the capabilities of your UPS equipment. Not all
+models support this feature. Typically, cheaper hardware does not
+support any of them.
+endef
+
+define Package/nut-upsrw/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/upsrw $(1)/usr/bin/
+endef
+
+define Package/nut-upssched
+ $(call Package/nut/Default)
+ TITLE+= (helper for triggering events from upsmon)
+ DEPENDS:=nut +nut-common +nut-upsmon
+endef
+
+define Package/nut-upssched/description
+$(call Package/nut/description/Default)
+upssched was created to allow users to execute programs at times relative
+to events being monitored by upsmon. The original purpose was to allow
+for a shutdown to occur after some fixed period on battery, but there are
+other uses that are possible.
+You can alternatively write your own script and save some space.
+endef
+
+define Package/nut-upssched/conffiles
+/etc/nut/upssched.conf
+endef
+
+define Package/nut-upssched/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_DIR) $(1)/etc/nut
+ $(INSTALL_DIR) $(1)/etc/uci-defaults
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/upssched-cmd $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upssched $(1)/usr/sbin/
+ $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upssched.conf.sample $(1)/etc/nut/upssched.conf
+ $(INSTALL_DATA) ./files/nut-sched.default $(1)/etc/uci-defaults/nut-upssched
endef
define Package/nut-web-cgi
$(call Package/nut/Default)
TITLE+= Web CGI interface
- DEPENDS+=+libgd
+ DEPENDS:=nut +nut-common +libgd
endef
define Package/nut-web-cgi/description
/etc/nut/upsset.conf
/etc/nut/upsstats.html
/etc/nut/upsstats-single.html
+/etc/config/nut_cgi
+/etc/httpd.conf
endef
define Package/nut-web-cgi/install
+ $(INSTALL_DIR) $(1)/www/cgi-bin/nut $(1)/www/nut
$(INSTALL_DIR) $(1)/etc/nut
- $(INSTALL_DIR) $(1)/usr/share/www/cgi-bin
- $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/hosts.conf.sample $(1)/etc/nut/hosts.conf
- $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsset.conf.sample $(1)/etc/nut/upsset.conf
+ $(CP) $(PKG_INSTALL_DIR)/usr/html/* $(1)/www/nut/
+ $(INSTALL_DIR) $(1)/etc/uci-defaults
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/cgi-bin/* $(1)/www/cgi-bin/nut
+ $(INSTALL_CONF) ./files/add_nut_httpd_conf $(1)/etc/uci-defaults/add_nut_httpd_conf
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsstats.html.sample $(1)/etc/nut/upsstats.html
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsstats-single.html.sample $(1)/etc/nut/upsstats-single.html
- $(CP) $(PKG_INSTALL_DIR)/usr/share/www/nut $(1)/usr/share/www/
- $(CP) $(PKG_INSTALL_DIR)/usr/share/www/cgi-bin/nut $(1)/usr/share/www/cgi-bin/
+ $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nut/upsset.conf.sample $(1)/etc/nut/upsset.conf
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/nut_cgi $(1)/etc/config/nut_cgi
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/nut-cgi.init $(1)/etc/init.d/nut-cgi
+ ln -sf /var/etc/nut/hosts.conf $(1)/etc/nut/hosts.conf
endef
define Package/nut-avahi-service
$(call Package/nut/Default)
TITLE+= (Avahi service)
- DEPENDS+=+avahi-daemon
+ DEPENDS:=nut +avahi-daemon
endef
define Package/nut-avahi-service/description
define Package/nut-driver-$(2)
$(call Package/nut/Default)
TITLE:=$(2) (NUT $(1) driver)
+ DEPENDS:=nut +nut-common
$(if $(filter $(1),snmp),DEPENDS+= @NUT_DRIVER_SNMP)
$(if $(filter $(1),usb),DEPENDS+= @NUT_DRIVER_USB)
+ $(if $(filter $(1),serial),DEPENDS+= @NUT_DRIVER_SERIAL)
endef
# Deliberately empty description in order to trigger a build failure.
# It should be overridden by the list below, and when updating to a
--$(if $(CONFIG_NUT_DRIVER_USB),with,without)-usb \
--without-avahi \
--$(if $(CONFIG_NUT_DRIVER_SNMP),with,without)-snmp \
+ --$(if $(CONFIG_NUT_DRIVER_SERAL),with,without)-serial \
--without-neon \
--without-powerman \
+ --without-wrap \
+ --with-cgi \
--without-ipmi \
--without-freeipmi \
--$(if $(CONFIG_NUT_SSL),with,without)-ssl $(if $(CONFIG_NUT_SSL),--with-openssl) \
--without-libltdl \
- --$(if $(CONFIG_PACKAGE_nut-web-cgi),with,without)-cgi \
- --with-statepath=/var/run \
+ --with-statepath=/var/run/nut \
--with-drvpath=/lib/nut \
- --with-cgipath=/usr/share/www/cgi-bin/nut \
- --with-htmlpath=/usr/share/www/nut \
--with-user=root \
--with-group=root
endef
$(eval $(call BuildPackage,nut))
+$(eval $(call BuildPackage,nut-common))
+$(eval $(call BuildPackage,nut-server))
+$(eval $(call BuildPackage,nut-upsmon))
+$(eval $(call BuildPackage,nut-upsmon-sendmail-notify))
+$(eval $(call BuildPackage,nut-upsc))
+$(eval $(call BuildPackage,nut-upscmd))
+$(eval $(call BuildPackage,nut-upslog))
+$(eval $(call BuildPackage,nut-upsrw))
+$(eval $(call BuildPackage,nut-upssched))
$(eval $(call BuildPackage,nut-web-cgi))
$(eval $(call BuildPackage,nut-avahi-service))
$(foreach d,$(filter-out $(SERIAL_DRIVERLIST_IGNORE),$(SERIAL_DRIVERLIST)),$(eval $(call BuildPackage,nut-driver-$(d))))
--- /dev/null
+#!/bin/sh
+
+grep -q '/cgi-bin/nut' /etc/httpd.conf 2>/dev/null || {
+ echo '/cgi-bin/nut:root:$p$root' >>/etc/httpd.conf
+ /etc/init.d/uhttpd restart
+}
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright © 2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+START=51
+
+DEFAULT=/etc/default/nut
+UPSCGI_C=/var/etc/nut/hosts.conf
+
+nut_upscgi_add() {
+ local cfg="$1"
+ local upsname
+ local hostname
+ local port
+ local displayname
+
+ config_get upsname "$cfg" upsname
+ config_get hostname "$cfg" hostname localhost
+ config_get port "$cfg" port
+ config_get pass "$cfg" password
+ system="$upsname@$hostname"
+ if [ -n "$port" ]; then
+ system="$system:$port";
+ fi
+ config_get displayname "$cfg" displayname
+ echo "MONITOR $system \"$displayname\"" >> $UPSCGI_C
+}
+
+start() {
+ rm -f $UPSCGI_C
+
+ config_load nut_cgi
+
+ config_foreach nut_upscgi_add host
+
+ chmod 640 /var/etc/nut/hosts.conf
+}
+
+stop() {
+ rm -f $UPSCGI_C
+}
+
START=60
USE_PROCD=1
+UPSMON_C=/var/etc/nut/upsmon.conf
-restart() {
- stop_service
- start_service
+nut_upsmon_conf() {
+ local cfg="$1"
+
+ echo "# Config file automatically generated from UCI config" > $UPSMON_C
+
+ config_get runas "$cfg" runas "nut"
+ [ -n "$runas" ] && echo "RUN_AS_USER $runas" >> $UPSMON_C
+
+ config_get val "$cfg" minsupplies 1
+ echo "MINSUPPLIES $val" >> $UPSMON_C
+
+ config_get val "$cfg" shutdowncmd "/sbin/halt"
+ echo "SHUTDOWNCMD \"$val\"" >> $UPSMON_C
+
+ config_get val "$cfg" notifycmd
+ [ -n "$val" ] && echo "NOTIFYCMD \"$val\"" >> $UPSMON_C
+
+ config_get val "$cfg" pollfreq 5
+ echo "POLLFREQ $val" >> $UPSMON_C
+
+ config_get val "$cfg" pollfreqalert 5
+ echo "POLLFREQALERT $val" >> $UPSMON_C
+
+ config_get val "$cfg" hostsync 15
+ echo "HOSTSYNC $val" >> $UPSMON_C
+
+ config_get val "$cfg" deadtime 15
+ echo "DEADTIME $val" >> $UPSMON_C
+
+ config_get val "$cfg" powerdownflag /var/run/killpower
+ echo "POWERDOWNFLAG $val" >> $UPSMON_C
+
+ config_get val "$cfg" onlinemsg
+ [ -n "$val" ] && echo "NOTIFYMSG ONLINE \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" onbattmsg
+ [ -n "$val" ] && echo "NOTIFYMSG ONBATT \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" lowbattmsg
+ [ -n "$val" ] && echo "NOTIFYMSG LOWBATT \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" fsdmsg
+ [ -n "$val" ] && echo "NOTIFYMSG FSD \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" commokmsg
+ [ -n "$val" ] && echo "NOTIFYMSG COMMOK \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" commbadmsg
+ [ -n "$val" ] && echo "NOTIFYMSG COMMBAD \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" shutdownmsg
+ [ -n "$val" ] && echo "NOTIFYMSG SHUTDOWN \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" replbattmsg
+ [ -n "$val" ] && echo "NOTIFYMSG REPLBATT \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" nocommmsg
+ [ -n "$val" ] && echo "NOTIFYMSG NOCOMM \"$val\"" >> $UPSMON_C
+ config_get val "$cfg" noparentmsg
+ [ -n "$val" ] && echo "NOTIFYMSG NOPARENT \"$val\"" >> $UPSMON_C
+
+ notifylist() {
+ local value="$1"
+ append optval "$value" "+"
+ }
+
+ setnotify() {
+ local cfg="$1"
+ local optname="$2"
+ local optval
+ config_list_foreach "$cfg" "$optname" notifylist
+ if [ -z "$optval" ]; then
+ # If no list fallback to trying option, fallback to default
+ config_get optval "$cfg" "$optname" "$default"
+ if [ -n "$optval" ]; then
+ echo "$optval"
+ else
+ # No default, so do the NUT default
+ echo "SYSLOG"
+ fi
+ else
+ echo "$optval"
+ fi
+ }
+
+ local default optval
+ val=""
+ config_list_foreach "$cfg" defaultnotify notifylist
+ default="$optval"
+ echo "NOTIFYFLAG ONLINE $(setnotify "$cfg" onlinenotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG ONBATT $(setnotify "$cfg" onbattnotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG LOWBATT $(setnotify "$cfg" lowbatnotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG FSD $(setnotify "$cfg" fsdnotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG COMMOK $(setnotify "$cfg" commoknotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG COMMBAD $(setnotify "$cfg" commbadnotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG SHUTDOWN $(setnotify "$cfg" shutdownnotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG REPLBATT $(setnotify "$cfg" repolbattnotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG NOCOMM $(setnotify "$cfg" nocommnotify)" >> $UPSMON_C
+ echo "NOTIFYFLAG NOPARENT $(setnotify "$cfg" noparentnotify)" >> $UPSMON_C
+
+ config_get val "$cfg" rbwarntime 43200
+ echo "RBWARNTIME $val" >> $UPSMON_C
+
+ config_get val "$cfg" nocommwarntime 300
+ echo "NOCOMMWARNTIME $val" >> $UPSMON_C
+
+ config_get val "$cfg" finaldelay 5
+ echo "FINALDELAY $val" >> $UPSMON_C
+
+ config_get val "$cfg" certpath
+ if [ -n "$val" ]; then echo "CERTPATH $val" >> $UPSMON_C; fi
+
+ config_get_bool val "$cfg" certverify 0
+ if [ -n "$val" ]; then echo "CERTVERIFY $val" >> $UPSMON_C; fi
+
+ config_get_bool val "$cfg" forcessl 0
+ if [ -n "$val" ]; then echo "FORCESSL $val" >> $UPSMON_C; fi
+}
+
+nut_upsmon_add() {
+ local cfg="$1"
+ local type="$2"
+ local upsname
+ local hostname
+ local port
+ local powervalue
+ local username
+ local password
+ local system
+
+ # If no core config, use defaults
+ [ -r $UPSMON_C ] || nut_upsmon_conf ""
+
+ config_get upsname "$cfg" upsname
+ config_get hostname "$cfg" hostname localhost
+ config_get port "$cfg" port
+ config_get powervalue "$cfg" powervalue 1
+ config_get username "$cfg" username
+ config_get password "$cfg" password
+ system="$upsname@$hostname"
+ if [ -n "$port" ]; then
+ system="$system:$port";
+ fi
+ echo "MONITOR $system $powervalue $username $password $type" >> $UPSMON_C
}
start_service() {
- upsmon -p
+ rm -f $UPSMON_C
+
+ config_load nut_monitor
+
+ config_foreach nut_upsmon_conf upsmon
+ config_foreach nut_upsmon_add master master
+ config_foreach nut_upsmon_add slave slave
+
+ [ -z "$(cat /var/etc/nut/nut.conf)" ] && echo "MODE=netclient" >>/var/etc/nut/nut.conf
+
+ chmod 640 $UPSMON_C
+ chmod 640 /var/etc/nut/nut.conf
+
+ [ -d /var/run/nut ] || {
+ mkdir -m 0750 -p /var/run/nut
+ chown ${runas:-root}:$(id -gn ${runas:-root}) /var/run/nut
+ }
+
+ chown ${runas:-root}:$(id -gn ${runas:-root}) $UPSMON_C
+ $DEBUG /usr/sbin/upsmon $UPSMON_OPTIONS
}
stop_service() {
- upsmon -c stop
+ [ -r $PID_F ] && /usr/sbin/upsmon -c stop
+ rm -f $UPSMON_C
}
reload_service() {
--- /dev/null
+#!/bin/sh
+
+uci batch <<EOF
+set nut_monitor.@upsmon[-1]=upsmon
+set nut_monitor.@upsmon[-1].notifycmd=/usr/bin/upssched-cmd
+set nut_monitor.@upsmon[-1].defaultnotify="SYSLOG EXEC"
+commit nut_monitor
+EOF
+
+
--- /dev/null
+#!/bin/sh
+
+/usr/sbin/sendmail root <<EOF
+From: root
+To: root
+Subject: UPS $NOTIFYTYPE Notification
+
+$1
+.
+EOF
--- /dev/null
+#!/bin/sh
+
+. /lib/functions.sh
+
+REMOVEDEFAULTNOTIFY=0
+SKIPADDSYSLOG=0
+SKIPADDEXEC=0
+
+upsmon() {
+ local cfg="$1"
+ local val
+
+ config_get val "$cfg" defaultnotify
+ if [ -n "$val" ]; then
+ if echo "$val" |grep -q "IGNORE"; then
+ REMOVEDEFAULTNOTIFY=1
+ else
+ SKIPADDSYSLOG=1
+ if echo "$val" |grep -q "EXEC"; then
+ SKIPADDEXEC=1
+ fi
+ fi
+ fi
+}
+
+config_load nut_monitor
+config_foreach upsmon upsmon
+
+uci set nut_monitor.@upsmon[-1]=upsmon
+uci set nut_monitor.@upsmon[-1].notifycmd=/usr/bin/nut-sendmail-notify
+
+if [ "$REMOVEDEFAULTNOTIFY" = "1" ]; then
+ uci delete nut_monitor.@upsmon[-1].defaultnotify || true
+fi
+
+if [ "$SKIPADDEXEC" != "1" ]; then
+ uci add_list nut_monitor.@upsmon[-1].defaultnotify="EXEC"
+fi
+
+if [ "$SKIPADDSYSLOG" != "1" ]; then
+ uci add_list nut_monitor.@upsmon[-1].defaultnotify="SYSLOG"
+fi
+
+uci commit nut_monitor
#!/bin/sh /etc/rc.common
-
+# Copyright © 2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
START=50
+
+RUN_D=/var/run
+PID_F=$RUN_D/upsd.pid
+UPS_C=/var/etc/nut/ups.conf
+USERS_C=/var/etc/nut/upsd.users
+UPSD_C=/var/etc/nut/upsd.conf
+
USE_PROCD=1
-restart() {
- stop_service
- start_service
+listen_address() {
+ local cfg="$1"
+
+ config_get address "$cfg" address "::1"
+ config_get port "$cfg" port
+ echo "LISTEN $address $port" >>$UPSD_C
+}
+
+upsd_statepath() {
+ local cfg="$1"
+ config_get statepath "$cfg" statepath
+}
+
+upsd_config() {
+ local cfg="$1"
+ local maxage maxconn certfile
+
+ # Note runas support requires you make sure USB device file is readable by
+ # the runas user
+ config_get runas "$cfg" runas
+
+ config_get maxage "$cfg" maxage
+ [ -n "$maxage" ] && echo "MAXAGE $maxage" >>$UPSD_C
+
+ config_get statepath "$cfg" statepath
+ [ -n "$statepath" ] && echo "STATEPATH $statepath" >>$UPSD_C
+
+ config_get maxconn "$cfg" maxconn
+ [ -n "$maxconn" ] && echo "MAXCONN $maxconn" >>$UPSD_C
+
+ #NOTE: certs only apply to SSL-enabled version
+ config_get certfile "$cfg" certfile
+ [ -n "$certfile" ] && echo "CERTFILE $certfile" >>$UPSD_C
+}
+
+nut_user_add() {
+ local cfg="$1"
+ local a
+ local val
+
+ config_get val "$cfg" username "$1"
+ echo "[$val]" >> $USERS_C
+
+ config_get val "$cfg" password
+ echo " password = $val" >> $USERS_C
+
+ config_get val "$cfg" actions
+ for a in $val; do
+ echo " actions = $a" >> $USERS_C
+ done
+
+ instcmd() {
+ local val="$1"
+ echo " instcmds = $val" >> $USERS_C
+ }
+
+ config_list_foreach "$cfg" instcmd instcmd
+
+ config_get val "$cfg" upsmon
+ if [ -n "$val" ]; then
+ echo " upsmon $val" >> $USERS_C
+ fi
}
start_service() {
- upsdrvctl start
- upsd
+ local runas statepath
+
+ mkdir -p /var/etc/nut
+ chmod -R 750 /var/etc/nut
+
+ rm -f $UPSD_C
+ rm -f $USERS_C
+ rm -f $UPSD_C
+ rm -f /var/etc/nut/nut.conf
+
+ echo "# Config file automatically generated from UCI config" > $UPS_C
+ echo "# Config file automatically generated from UCI config" > $USERS_C
+ echo "# Config file automatically generated from UCI config" > $UPSD_C
+
+ local in_driver have_drivers
+ config_cb() {
+ if [ "$1" != "driver" ]; then
+ in_driver=
+ else
+ echo "[$2]" >> $UPS_C
+ in_driver=true
+ have_drivers=true
+ fi
+ }
+ option_cb() {
+ if [ "$in_driver" = "true" ]; then
+ echo " $1 = $2" >> $UPS_C
+ fi
+ }
+
+ config_load nut_server
+
+ config_foreach nut_user_add user
+ config_foreach upsd_config upsd
+ config_foreach listen_address listen_address
+
+ echo "MODE=netserver" >>/var/etc/nut/nut.conf
+
+ chmod 0640 $USERS_C
+ chmod 0640 $UPS_C
+ chmod 0640 $UPSD_C
+ chmod 0640 /var/etc/nut/nut.conf
+ [ -d "${statepath:-/var/run/nut}" ] || {
+ mkdir -m 0750 -p "${statepath:-/var/run/nut}"
+ chown $runas:$(id -gn $runas) "${statepath:-/var/run/nut}"
+ }
+
+ if [ -n "$runas" ]; then
+ chown -R $runas:$(id -gn $runas) /var/etc/nut
+ fi
+
+ if [ "$have_drivers" = "true" ]; then
+ $DEBUG /usr/sbin/upsd ${runas:+-u $runas} $OPTIONS
+ $DEBUG /usr/sbin/upsdrvctl ${runas:+-u $runas} start
+ fi
+}
+
+
+nut_driver_stop() {
+ local cfg="$1"
+ local driver
+
+ config_get driver "$cfg" driver
+
+ [ -r ${statepath:-/var/run/nut}/$driver-$cfg ] && /usr/sbin/upsdrvctl stop $cfg
}
stop_service() {
- upsd -c stop
- upsdrvctl stop
+ [ -r $PID_F ] && /usr/sbin/upsd -c stop
+ config_load ups
+ config_foreach upsd_statepath upsd
+ config_foreach nut_driver_stop driver
}
reload_service() {
--- /dev/null
+#config host
+# option upsname upsname
+# option hostname localhost
+# option port # optional port number
+# option displayname "Display Name"
+
--- /dev/null
+#config upsmon 'upsmon'
+# option runas run-as-user
+# option minsupplies 1
+# option shutdowncmd /sbin/halt
+# option notifycmd /path/to/cmd
+# list defaultnotify SYSLOG
+# option pollfreq 5
+# option pollfreqalert 5
+# option hostsync 15
+# option deadtime 15
+# option powerdownflags /var/run/killpower
+# option onlinemsg "online message"
+# option onbattmsg "on battery message"
+# option lowbattmsg "low battery message"
+# option fsdmsg "forced shutdown message"
+# option comokmsg "communications restored message"
+# option combadmsg "communications bad message"
+# option shutdowmsg "shutdown message"
+# option replbattmsg "replace battery message"
+# option nocommmsg "no communications message"
+# option noparentmsg "no parent message"
+# option onlinenotify "online notify flag 1|0"
+# option onbattnotify "on battery notify flag 1|0"
+# option lowbattnotify "low battery notify flag 1|0"
+# option fsdnotify "forced shutdown notify flag 1|0"
+# option comoknotify "communications restored notify flag 1|0"
+# option combadnotify "communications bad notify flag 1|0"
+# option shutdownotify "shutdown notify flag 1|0"
+# option replbattnotify "replace battery notify flag 1|0"
+# option nocommnotify "no communications notify flag 1|0"
+# option noparentnotify "no parent notify flag 1|0"
+# option rbwarntime 4200 # replace battery warn time
+# option nocommwarntime 300 # no communications warn time
+# option finaldelay 5 # final delay
+# option certpath /path/to/ca/dir
+# option certverify 0
+# option forcessl 0
+
+#config master
+# option upsname upsname
+# option hostname localhost
+# option port # optional port number
+# option powervalue 1
+# option username upsuser
+# option password upspassword
+
+#config slave
+# option upsname upsname
+# option hostname localhost
+# option port # optional port number
+# option powervalue 1
+# option username upsuser
+# option password upspassword
+
--- /dev/null
+#config driver 'upsname'
+# option driver usbhid-ups
+# option port auto
+# option other other-value
+# option runas root
+
+#config user
+# option username upsuser
+# option password upspassword
+# option actions optional-action
+# list instcmd optional-instant-command
+# option upsmon slave|master
+
+#config listen_address
+# option address ::1
+# option port 3493
+
+#config upsd 'upsd'
+# option maxage 15
+# option statepath /var/run/nut
+# option maxconn 1024
+# NB: certificates only apply to SSL-enabled version
+# option certfile /usr/local/etc/upsd.pem
include $(TOPDIR)/rules.mk
PKG_NAME:=ocserv
-PKG_VERSION:=0.11.6
-PKG_RELEASE:=2
+PKG_VERSION:=0.11.7
+PKG_RELEASE:=1
PKG_USE_MIPS16:=0
PKG_BUILD_DIR :=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=ftp://ftp.infradead.org/pub/ocserv/
-PKG_MD5SUM:=0e4f82d267d27f2f9d3fcba58ac6cf5a
+PKG_MD5SUM:=4c47b039bfaf1cecea6a2206dfe0ccd6
PKG_LICENSE:=GPLv2+
PKG_LICENSE_FILES:=COPYING
+++ /dev/null
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 5943a50..4b2c77c 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -23,18 +23,7 @@ noinst_LIBRARIES = libcmd-ocserv.a libipc.a
- libcmd_ocserv_a_SOURCES = ocserv-args.def ocserv-args.c ocserv-args.h
-
- ocserv-args.c: $(srcdir)/ocserv-args.def $(builddir)/version.inc
-- if test "$(AUTOGEN)" = ":";then \
-- rm -f $(builddir)/ocserv-args.c; \
-- rm -f $(builddir)/ocserv-args.h; \
-- cp $(srcdir)/autogen/ocserv-args.c $(builddir)/; \
-- cp $(srcdir)/autogen/ocserv-args.h $(builddir)/; \
-- else \
-- $(AUTOGEN) $<; \
-- if test -d $(srcdir)/autogen;then \
-- cp $(builddir)/ocserv-args.c $(srcdir)/autogen; \
-- cp $(builddir)/ocserv-args.h $(srcdir)/autogen; \
-- fi; \
-- fi
-+ $(AUTOGEN) $<
- ocserv-args.h: ocserv-args.c
-
- # Authentication module sources
-diff --git a/src/ocpasswd/Makefile.am b/src/ocpasswd/Makefile.am
-index 97e2491..6304607 100644
---- a/src/ocpasswd/Makefile.am
-+++ b/src/ocpasswd/Makefile.am
-@@ -21,17 +21,6 @@ ocpasswd_LDADD += $(LIBGNUTLS_LIBS) $(LIBCRYPT) $(CODE_COVERAGE_LDFLAGS) \
- $(LIBNETTLE_LIBS)
-
- args.c: $(srcdir)/args.def $(builddir)/../version.inc
-- if test "$(AUTOGEN)" = ":";then \
-- rm -f $(builddir)/args.c; \
-- rm -f $(builddir)/args.h; \
-- cp $(srcdir)/../autogen/ocpasswd-args.c $(builddir)/args.c; \
-- cp $(srcdir)/../autogen/ocpasswd-args.h $(builddir)/args.h; \
-- else \
-- $(AUTOGEN) $<; \
-- if test -d $(srcdir)/autogen;then \
-- cp $(builddir)/args.c $(srcdir)/../autogen/ocpasswd-args.c; \
-- cp $(builddir)/args.h $(srcdir)/../autogen/ocpasswd-args.h; \
-- fi; \
-- fi
-+ $(AUTOGEN) $<
- args.h: args.c
-
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
}
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=seafile-ccnet
-PKG_VERSION:=5.1.4
+PKG_VERSION:=6.0.7
PKG_RELEASE=$(PKG_SOURCE_VERSION)-1
PKG_LICENSE:=GPL-3.0
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/haiwen/ccnet.git
+PKG_SOURCE_URL:=https://github.com/haiwen/ccnet-server.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=44f74fdc5160c1bf16a92e71d79b856763ddbc15
+PKG_SOURCE_VERSION:=a0de32b9cfeca98ab93d84cacbe9d315d7ecca35
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
DEPENDS:=+libsearpc +libevent2 +libopenssl \
+glib2 +python +libzdb +libuuid \
+libpthread +libsqlite3 +jansson $(ICONV_DEPENDS)
- EXTRA_DEPENDS:=libsearpc (=5.1.4-8998e7b2c5587f0b94c48db24e2952d08def5add-1)
+ EXTRA_DEPENDS:=libsearpc (=6.0.7-8998e7b2c5587f0b94c48db24e2952d08def5add-1)
endef
define Package/seafile-ccnet/description
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=seafile-seahub
-PKG_VERSION:=5.1.4
-PKG_RELEASE=$(PKG_SOURCE_VERSION)-1
+PKG_VERSION:=6.0.7
+PKG_RELEASE=$(PKG_SOURCE_VERSION)-2
PKG_LICENSE:=Apache-2.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/haiwen/seahub.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=1e1c02aa4f2a0256ffa29a28224aad2d678f43a0
+PKG_SOURCE_VERSION:=2cf75b17a372216a88842172f769d61f621416fd
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
include $(INCLUDE_DIR)/package.mk
#
-# Copyright (C) 2007-2016 OpenWrt.org
+# Copyright (C) 2007-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:=seafile-server
-PKG_VERSION:=5.1.4
-PKG_RELEASE=$(PKG_SOURCE_VERSION)-1
+PKG_VERSION:=6.0.7
+PKG_RELEASE=$(PKG_SOURCE_VERSION)-3
PKG_LICENSE:=GPL-3.0
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=https://github.com/haiwen/seafile.git
+PKG_SOURCE_URL:=https://github.com/haiwen/seafile-server.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=b9dc96ee845bb0148d9075aec597e6e07652cbdc
+PKG_SOURCE_VERSION:=715f072c1bbc78eedddcaf7748e28c83c3f4dbc6
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
DEPENDS:=+libarchive +libopenssl +glib2 +libsearpc +seafile-ccnet +seafile-seahub +sqlite3-cli +python-mysql +python-urllib3 \
+jansson +libevent2 +libevent2-openssl +zlib +libzdb +libsqlite3 +libmysqlclient \
+libpthread +libuuid +bash +procps-ng +procps-ng-pkill +SEAFILE_FUSE_SUPPORT:libfuse $(ICONV_DEPENDS)
- EXTRA_DEPENDS:=seafile-ccnet (=5.1.4-44f74fdc5160c1bf16a92e71d79b856763ddbc15-1), seafile-seahub (=5.1.4-1e1c02aa4f2a0256ffa29a28224aad2d678f43a0-1)
+ EXTRA_DEPENDS:=seafile-ccnet (=6.0.7-a0de32b9cfeca98ab93d84cacbe9d315d7ecca35-1), seafile-seahub (=6.0.7-2cf75b17a372216a88842172f769d61f621416fd-2)
MENU:=1
endef
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
include $(TOPDIR)/rules.mk
PKG_NAME:=sqm-scripts
-PKG_SOURCE_VERSION:=c1d5dd07029ad7a25e82940dff7b8b1b778cb82a
-PKG_VERSION:=1.1.2
+PKG_SOURCE_VERSION:=8217081f7e52af342c362b29480461575c496387
+PKG_VERSION:=1.1.3
PKG_RELEASE:=1
PKG_LICENSE:=GPLv2
--disable-scripts \
--disable-static \
--disable-fast \
+ --enable-mediation \
--with-systemdsystemunitdir=no \
$(if $(CONFIG_PACKAGE_strongswan-utils),--enable-pki --enable-scepclient,--disable-pki --disable-scepclient) \
--with-random-device=/dev/random \
include $(TOPDIR)/rules.mk
PKG_NAME:=subversion
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_VERSION:=1.9.5
PKG_SOURCE_URL:=@APACHE/subversion
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
CATEGORY:=Network
SUBMENU:=Version Control Systems
TITLE:=A compelling replacement for CVS
- DEPENDS:=+zlib +libsqlite3 +libapr +libaprutil +libmagic \
+ DEPENDS:=+zlib +libsqlite3 +PACKAGE_unixodbc:unixodbc +libapr +libaprutil +libmagic \
$(ICONV_DEPENDS) $(INTL_DEPENDS)
URL:=http://subversion.apache.org/
endef
TARGET_CFLAGS += $(FPIC)
TARGET_CPPFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
+APU_LIBS=$(shell $(STAGING_DIR)/usr/bin/apu-1-config --link-libtool --libs)
CONFIGURE_ARGS += \
--with-apr="$(STAGING_DIR)/usr/bin/apr-1-config" \
endif
CONFIGURE_VARS += \
- LDFLAGS="$(TARGET_LDFLAGS) -lcrypt -lm \
+ LDFLAGS="$(TARGET_LDFLAGS) $(APU_LIBS) -lcrypt -lm \
-lz -lpthread $(if $(INTL_FULL),-lintl)"
CPPFLAGS="$(TARGET_CPPFLAGS)"
include $(TOPDIR)/rules.mk
PKG_NAME:=tinc
-PKG_VERSION:=1.0.30
+PKG_VERSION:=1.0.31
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.tinc-vpn.org/packages
-PKG_MD5SUM:=f3ca1fc1154ed1f2cac408ea06a1c1ca
+PKG_MD5SUM:=7a96f7eb12dfd43b21852b4207d860f2
PKG_INSTALL:=1
include $(TOPDIR)/rules.mk
PKG_NAME:=tor
-PKG_VERSION:=0.2.9.8
+PKG_VERSION:=0.2.9.9
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:=fbdd33d3384574297b88744622382008d1e0f9ddd300d330746c464b7a7d746a
+PKG_MD5SUM:=33325d2b250fd047ba2ddc5d11c2190c4e2951f4b03ec48ebd8bf0666e990d43
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.3.5
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
* 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
+* support 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
* 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\_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'
[...]
trm_script="/usr/bin/travelmate.sh"
-boot()
-{
- ubus -t 30 wait_for network.interface
- rc_procd start_service
-}
-
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
+ ubus -t 30 wait_for network.interface
+ 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
+ fi
}
service_triggers()
{
local iface="$(uci -q get travelmate.global.trm_iface)"
+ procd_open_trigger
+ procd_add_config_trigger "config.change" "travelmate" /etc/init.d/travelmate start
if [ -z "${iface}" ]
then
procd_add_raw_trigger "interface.*.down" 1000 /etc/init.d/travelmate start
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
+ procd_close_trigger
}
#
LC_ALL=C
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-trm_ver="0.3.2"
+trm_ver="0.3.5"
trm_enabled=1
trm_debug=0
trm_maxwait=20
trm_maxretry=3
+trm_radio="*"
trm_iw=1
f_envload()
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
}
if [ -z "${disabled}" ] || [ "${disabled}" = "0" ]
then
uci -q set wireless."${config}".disabled=1
- f_log "debug" "prepare ::: config: ${config}, interface: ${network}"
+ f_log "debug" "config: ${config}, interface: ${network}"
fi
fi
}
do
if [ "${mode}" = "ap" ]
then
- trm_ifstatus="$(ubus -S call network.wireless status | jsonfilter -l1 -e '@.*.up')"
+ ifname="$(ubus -S call network.wireless status | jsonfilter -l1 -e "@.${trm_radio}.interfaces[@.config.mode=\"ap\"].ifname")"
+ if [ -n "${ifname}" ]
+ then
+ trm_ifstatus="$(ubus -S call network.wireless status | jsonfilter -l1 -e "@.${trm_radio}.up")"
+ fi
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}, radio: ${trm_radio}, name: ${ifname}, status: ${trm_ifstatus}, count: ${cnt}, max-wait: ${trm_maxwait}"
}
# function to write to syslog
logger -t "travelmate-[${trm_ver}] ${class}" "${log_msg}"
if [ "${class}" = "error" ]
then
+ logger -t "travelmate-[${trm_ver}] ${class}" "Please check the online documentation 'https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md'"
exit 255
fi
fi
local ap_list ssid_list config network ssid cnt=1
local sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')"
+ f_log "info " "start travelmate scanning ..."
f_check "initial"
if [ "${trm_ifstatus}" != "true" ]
then
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}"
+ ap_list="$(ubus -S call network.wireless status | jsonfilter -e "@.${trm_radio}.interfaces[@.config.mode=\"ap\"].ifname" | awk '{ORS=" "; print $0}')"
+ f_log "debug" "ap-list: ${ap_list}, sta-list: ${trm_stalist}"
if [ -z "${ap_list}" ] || [ -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}
do
+ cnt=1
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}
f_check "sta"
if [ "${trm_ifstatus}" = "true" ]
then
- f_log "info " "status ::: wwan interface connected to uplink ${ssid} (${cnt}/${trm_maxretry}, ${sysver})"
+ f_log "info " "wwan interface connected to uplink ${ssid} (${cnt}/${trm_maxretry}, ${sysver})"
sleep 5
return 0
else
uci -q set wireless."${config}".disabled=1
uci -q commit 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} (${cnt}/${trm_maxretry}, ${sysver})"
fi
fi
done
else
- f_log "info " "status ::: empty uplink list (${cnt}/${trm_maxretry}, ${sysver})"
+ f_log "info " "empty uplink list (${cnt}/${trm_maxretry}, ${sysver})"
fi
cnt=$((cnt+1))
sleep 5
done
done
- f_log "info " "status ::: no wwan uplink found (${sysver})"
+ f_log "info " "no wwan uplink found (${sysver})"
else
- f_log "info " "status ::: wwan uplink still connected (${sysver})"
+ f_log "info " "wwan uplink still connected (${sysver})"
fi
}
f_envload
f_main
fi
-exit 0
\ No newline at end of file
+exit 0
PKG_NAME:=unbound
PKG_VERSION:=1.6.0
-PKG_RELEASE:=3
+PKG_RELEASE:=5
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/package.mk
define Package/unbound/Default
- TITLE:=Unbound is a validating, recursive, and caching DNS resolver.
+ TITLE:=Validating Recursive DNS Server
URL:=http://www.unbound.net/
DEPENDS:=+libopenssl
endef
SECTION:=net
CATEGORY:=Network
SUBMENU:=IP Addresses and Names
- TITLE+= (anchor utility)
+ TITLE+= (DSKEY utility)
DEPENDS+= +unbound +libexpat
endef
SECTION:=net
CATEGORY:=Network
SUBMENU:=IP Addresses and Names
- TITLE+= (control setup utility)
+ TITLE+= (control setup)
DEPENDS+= +unbound-control +openssl-util
endef
SECTION:=net
CATEGORY:=Network
SUBMENU:=IP Addresses and Names
- TITLE+= (DNS lookup utility)
+ TITLE+= (lookup utility)
DEPENDS+= +libunbound
endef
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 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/dhcp**:
config dnsmasq
- option noresolv '0'
+ option domain 'yourdomain'
+ option noresolv '1'
option resolvfile '/tmp/resolv.conf.auto'
option port '53'
list server '127.0.0.1#1053'
...
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 as 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.
-
-*note: You must install unbound-control. The lease file loads are done without starting, stopping, or re-writing conf files.*
+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.
*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.*
# "domain" = text domain suffix
# "bslaac" = boolean, use DHCPv4 MAC to find GA and ULA IPV6 SLAAC
# "bisolt" = boolean, format <host>.<network>.<domain>. so you can isolate
+# "bconf" = boolean, write conf file format rather than pipe records
#
##############################################################################
# only for provided hostnames and full /32 assignments
ptr = adr ; qpr = "" ; split( ptr, ptr, "." ) ;
slaac = slaac_eui64( id ) ;
- for( i=1; i<=4; i++ ) { qpr = ( ptr[i] "." qpr) ; }
- # DHCP A and PTR records with FQDN
- x = ( fqdn ". 120 IN A " adr ) ;
- y = ( qpr "in-addr.arpa. 120 IN PTR " fqdn ) ;
- print ( x "\n" y ) > hostfile ;
+ if ( bconf == 1 ) {
+ x = ( "local-data: \"" fqdn ". 120 IN A " adr "\"" ) ;
+ y = ( "local-data-ptr: \"" adr " 120 " fqdn "\"" ) ;
+ print ( x "\n" y ) > hostfile ;
+ }
+
+ else {
+ for( i=1; i<=4; i++ ) { qpr = ( ptr[i] "." qpr) ; }
+ x = ( fqdn ". 120 IN A " adr ) ;
+ y = ( qpr "in-addr.arpa. 120 IN PTR " fqdn ) ;
+ print ( x "\n" y ) > hostfile ;
+ }
- if ((bslaac == 1) && (slaac != 0)) {
+
+ if (( bslaac == 1 ) && ( slaac != 0 )) {
# UCI option to discover IPV6 routed SLAAC addresses
# NOT TODO - ping probe take too long when added in awk-rule loop
cmd = ( "ip -6 --oneline route show dev " net ) ;
while ( ( cmd | getline adr ) > 0 ) {
- if ( substr( adr, 1, 5 ) <= "fd00:" ) {
+ if (( substr( adr, 1, 5 ) <= "fd00:" ) \
+ && ( index( adr, "via" ) == 0 )) {
# GA or ULA routed addresses only (not LL or MC)
sub( /\/.*/, "", adr ) ;
adr = ( adr slaac ) ;
- if ( split( adr, tmp0, ":" ) >= 8 ) { sub( "::", ":", adr ) ; }
- qpr = ipv6_ptr( adr ) ;
- x = ( fqdn ". 120 IN AAAA " adr ) ;
- y = ( qpr " 120 IN PTR " fqdn ) ;
- print ( x "\n" y ) > hostfile ;
+
+
+ if ( split( adr, tmp0, ":" ) >= 8 ) {
+ sub( "::", ":", adr ) ;
+ }
+
+
+ if ( bconf == 1 ) {
+ x = ( "local-data: \"" fqdn ". 120 IN AAAA " adr "\"" ) ;
+ y = ( "local-data-ptr: \"" adr " 120 " fqdn "\"" ) ;
+ print ( x "\n" y ) > hostfile ;
+ }
+
+ else {
+ qpr = ipv6_ptr( adr ) ;
+ x = ( fqdn ". 120 IN AAAA " adr ) ;
+ y = ( qpr ". 120 IN PTR " fqdn ) ;
+ print ( x "\n" y ) > hostfile ;
+ }
}
}
else {
if (( cdr == 128 ) && ( hst != "-" )) {
- # only for provided hostnames and full /128 assignments
- qpr = ipv6_ptr( adr ) ;
- x = ( fqdn ". 120 IN AAAA " adr ) ;
- y = ( qpr " 120 IN PTR " fqdn ) ;
- print ( x "\n" y ) > hostfile ;
+ if ( bconf == 1 ) {
+ x = ( "local-data: \"" fqdn ". 120 IN AAAA " adr "\"" ) ;
+ y = ( "local-data-ptr: \"" adr " 120 " fqdn "\"" ) ;
+ print ( x "\n" y ) > hostfile ;
+ }
+
+ else {
+ # only for provided hostnames and full /128 assignments
+ qpr = ipv6_ptr( adr ) ;
+ x = ( fqdn ". 120 IN AAAA " adr ) ;
+ y = ( qpr ". 120 IN PTR " fqdn ) ;
+ print ( x "\n" y ) > hostfile ;
+ }
}
}
}
##############################################################################
-function slaac_eui64( mac, ary, glbit, eui64 ) {
+function slaac_eui64( mac, ary, glbit, eui64 ) {
if ( length(mac) >= 12 ) {
# RFC2373 and use DHCPv4 registered MAC to find SLAAC addresses
split( mac , ary , "" ) ;
eui64 = ( ary[1] ary[2] ary[3] ary[4] ":" ary[5] ary[6] "ff:fe" ) ;
eui64 = ( eui64 ary[7] ary[8] ":" ary[9] ary[10] ary[11] ary[12] ) ;
}
-
+
else {
eui64 = 0 ;
}
-
-
+
+
return eui64 ;
}
local dhcp_ls_add=$UNBOUND_VARDIR/dhcp_lease.add
local dhcp_ls_del=$UNBOUND_VARDIR/dhcp_lease.del
local dhcp_origin=$( uci get dhcp.@odhcpd[0].leasefile )
-
+
config_load unbound
config_foreach odhcpd_settings unbound
if [ "$UNBOUND_D_DHCP_LINK" = "odhcpd" -a -f "$dhcp_origin" ] ; then
- # Capture the lease file which could be changing often,
- # and unbound-control only for changes in hosts (or else...)
+ # Capture the lease file which could be changing often
cat $dhcp_origin | sort > $dhcp_ls_new
touch $dhcp_ls_old
sort $dhcp_ls_new $dhcp_ls_old $dhcp_ls_old | uniq -u > $dhcp_ls_add
sort $dhcp_ls_old $dhcp_ls_new $dhcp_ls_new | uniq -u > $dhcp_ls_del
- # Go through the messy business of coding up A, AAAA, and PTR records.
+ # Go through the messy business of coding up A, AAAA, and PTR records
+ # This static conf will be available if Unbound restarts asynchronously
+ awk -v hostfile=$UNBOUND_DHCP_CONF -v domain=$UNBOUND_TXT_DOMAIN \
+ -v bslaac=$UNBOUND_B_SLAAC6_MAC -v bisolt=0 -v bconf=1 \
+ -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_new
+
+ # Deleting and adding all records into Unbound can be a burden in a
+ # high density environment. Use unbound-control incrementally.
awk -v hostfile=$dns_ls_del -v domain=$UNBOUND_TXT_DOMAIN \
- -v bslaac=$UNBOUND_B_SLAAC6_MAC -v bisolt=0 \
+ -v bslaac=$UNBOUND_B_SLAAC6_MAC -v bisolt=0 -v bconf=0 \
-f /usr/lib/unbound/odhcpd.awk $dhcp_ls_del
awk -v hostfile=$dns_ls_add -v domain=$UNBOUND_TXT_DOMAIN \
- -v bslaac=$UNBOUND_B_SLAAC6_MAC -v bisolt=0 \
+ -v bslaac=$UNBOUND_B_SLAAC6_MAC -v bisolt=0 -v bconf=0 \
-f /usr/lib/unbound/odhcpd.awk $dhcp_ls_add
if [ -f "$dns_ls_del" ] ; then
cat $dns_ls_del | $UNBOUND_CONTROL_CFG local_datas_remove
fi
-
+
if [ -f "$dns_ls_add" ] ; then
cat $dns_ls_add | $UNBOUND_CONTROL_CFG local_datas
fi
-
-
+
+
# prepare next round
mv $dhcp_ls_new $dhcp_ls_old
- rm -f $dns_ls_del $dns_ls_add
+ rm -f $dns_ls_del $dns_ls_add $dhcp_ls_del $dhcp_ls_add
fi
}
UNBOUND_SRV_CONF=$UNBOUND_VARDIR/unbound_srv.conf
UNBOUND_EXT_CONF=$UNBOUND_VARDIR/unbound_ext.conf
+UNBOUND_DHCP_CONF=$UNBOUND_VARDIR/unbound_dhcp.conf
UNBOUND_CONFFILE=$UNBOUND_VARDIR/unbound.conf
UNBOUND_KEYFILE=$UNBOUND_VARDIR/root.key
{
for address in $addresses ; do
case $address in
- fe80:*|169.254.*)
+ fe80:*|169.254.*)
echo " # note link address $address"
;;
-
+
[1-9a-f]*:*[0-9a-f])
# GA and ULA IP6 for HOST IN AAA records (ip command is robust)
for name in $names ; do
{
for address in $addresses ; do
case $address in
- fe80:*|169.254.*)
+ fe80:*|169.254.*)
echo " # note link address $address"
;;
-
+
"${ulaprefix%%:/*}"*)
# Only this networks ULA and only hostname
echo " local-data: \"$UNBOUND_TXT_HOSTNAME. 120 IN AAAA $address\""
{
- # Amend your own extended clauses here like forward zones or disable
+ # Amend your own extended clauses here like forward zones or disable
# above (local, no encryption) and amend your own remote encrypted control
echo
echo "include: $UNBOUND_EXT_CONF" >> $UNBOUND_CONFFILE
{
# Amend your own "server:" stuff here
- echo
- echo "include: $UNBOUND_SRV_CONF"
+ echo " include: $UNBOUND_SRV_CONF"
echo
} >> $UNBOUND_CONFFILE
}
##############################################################################
+unbound_adblock() {
+ # TODO: Unbound 1.6.0 added "tags" and "views"; lets work with adblock team
+ local adb_enabled adb_file
+
+ if [ ! -x /usr/bin/adblock.sh -o ! -x /etc/init.d/adblock ] ; then
+ adb_enabled=0
+ else
+ /etc/init.d/adblock enabled && adb_enabled=1 || adb_enabled=0
+ fi
+
+
+ if [ "$adb_enabled" -gt 0 ] ; then
+ {
+ # Pull in your selected openwrt/pacakges/net/adblock generated lists
+ for adb_file in $UNBOUND_VARDIR/adb_list.* ; do
+ echo " include: $adb_file"
+ done
+ echo
+ } >> $UNBOUND_CONFFILE
+ fi
+}
+
+##############################################################################
+
unbound_hostname() {
if [ -n "$UNBOUND_TXT_DOMAIN" ] ; then
{
config_load dhcp
config_foreach create_interface_dns dhcp
fi
+
+
+ if [ -f "$UNBOUND_DHCP_CONF" ] ; then
+ {
+ # Seed DHCP records because dhcp scripts trigger externally
+ # Incremental Unbound restarts may drop unbound-control add records
+ echo " include: $UNBOUND_DHCP_CONF"
+ echo
+ } >> $UNBOUND_CONFFILE
+ fi
fi
}
if [ "$UNBOUND_B_MAN_CONF" -eq 0 ] ; then
unbound_conf
unbound_access
+ unbound_adblock
if [ "$UNBOUND_D_DHCP_LINK" = "dnsmasq" ] ; then
dnsmasq_link
include $(TOPDIR)/rules.mk
PKG_NAME:=vallumd
-PKG_VERSION:=0.1.2
+PKG_VERSION:=0.1.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/stintel/vallumd/archive/$(PKG_VERSION)/
-PKG_MD5SUM:=d48df2ca8043d4eec4787bec2bba5dbb87d7a8325ac3b136c05dcd1a48d81ae4
+PKG_MD5SUM:=b40bede34ea321daf799276111e0e804007dc7c10eb031a0a654982957dcfb25
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
include $(TOPDIR)/rules.mk
PKG_NAME:=vnstat
-PKG_VERSION:=1.16
+PKG_VERSION:=1.12
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://humdi.net/vnstat
-PKG_HASH:=420fec6c89229a100697f3189e824a1b81f7148dd651558f2ff03cc298308e8b
+PKG_MD5SUM:=a154b2196771e06a8accd1c24374009c
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
PKG_INSTALL:=1
$(INSTALL_DIR) $(1)/usr/sbin
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/vnstatd $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/etc
- $(INSTALL_CONF) $(PKG_BUILD_DIR)/cfg/vnstat.conf $(1)/etc/
+ $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/vnstat.conf $(1)/etc/
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/vnstat.config $(1)/etc/config/vnstat
$(INSTALL_DIR) $(1)/etc/init.d
--- /dev/null
+--- a/cfg/vnstat.conf
++++ b/cfg/vnstat.conf
+@@ -78,13 +78,13 @@ DaemonUser ""
+ DaemonGroup ""
+
+ # how often (in seconds) interface data is updated
+-UpdateInterval 30
++UpdateInterval 60
+
+ # how often (in seconds) interface status changes are checked
+-PollInterval 5
++PollInterval 30
+
+ # how often (in minutes) data is saved to file
+-SaveInterval 5
++SaveInterval 30
+
+ # how often (in minutes) data is saved when all interface are offline
+ OfflineSaveInterval 30
--- /dev/null
+--- a/Makefile
++++ b/Makefile
+@@ -66,11 +66,11 @@ install:
+
+ # install everything else
+ install -d -m 755 $(BIN) $(SBIN) $(MAN)/man1 $(MAN)/man5
+- install -s -m 755 src/vnstat $(BIN)
+- install -s -m 755 src/vnstatd $(SBIN)
++ install -m 755 src/vnstat $(BIN)
++ install -m 755 src/vnstatd $(SBIN)
+ @if [ -f "src/vnstati" ]; \
+- then echo install -s -m 755 src/vnstati $(BIN); \
+- install -s -m 755 src/vnstati $(BIN); \
++ then echo install -m 755 src/vnstati $(BIN); \
++ install -m 755 src/vnstati $(BIN); \
+ fi
+
+ # update man pages, gzip it if previous version was done so
+@@ -139,12 +139,12 @@ bsdinstall:
+
+ # install binaries
+ install -d -m 755 $(DESTDIR)/var/db/vnstat
+- install -s -m 755 src/vnstat $(BIN_BSD)
+- install -s -m 755 src/vnstatd $(SBIN_BSD)
++ install -m 755 src/vnstat $(BIN_BSD)
++ install -m 755 src/vnstatd $(SBIN_BSD)
+
+ @if [ -f "src/vnstati" ]; \
+- then echo install -s -m 755 src/vnstati $(BIN_BSD); \
+- install -s -m 755 src/vnstati $(BIN_BSD); \
++ then echo install -m 755 src/vnstati $(BIN_BSD); \
++ install -m 755 src/vnstati $(BIN_BSD); \
+ fi
+
+ # install default config if such doesn't exist
--- /dev/null
+--- a/Makefile
++++ b/Makefile
+@@ -33,12 +33,6 @@ debug:
+ install:
+ @echo "Installing vnStat..."
+
+-# check that system is really Linux
+- @if [ `uname` != "Linux" ]; \
+- then echo "This isn't a Linux system. Maybe 'make bsdinstall' is what you need?"; \
+- false; \
+- fi
+-
+ # check that there's something to install
+ @if [ ! -f "src/vnstat" ] || [ ! -f "src/vnstatd" ]; \
+ then echo "Nothing to install, run make first."; \
--- /dev/null
+--- a/src/common.h
++++ b/src/common.h
+@@ -22,6 +22,7 @@
+ #include <pwd.h>
+ #include <grp.h>
+ #include <libgen.h>
++#include <fcntl.h>
+
+ #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__FreeBSD_kernel__)
+ #include <sys/param.h>
+++ /dev/null
-From: Jo-Philipp Wich <jo@mein.io>
-Date: Thu, 26 Jan 2017 15:30:00 +0100
-Subject: [PATCH] config: adjust default values
-
-Adjust the default interval settings to be better suited for slower embedded
-devices.
-
-Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-
---- a/cfg/vnstat.conf
-+++ b/cfg/vnstat.conf
-@@ -87,13 +87,13 @@ DaemonUser ""
- DaemonGroup ""
-
- # how often (in seconds) interface data is updated
--UpdateInterval 30
-+UpdateInterval 60
-
- # how often (in seconds) interface status changes are checked
--PollInterval 5
-+PollInterval 30
-
- # how often (in minutes) data is saved to file
--SaveInterval 5
-+SaveInterval 30
-
- # how often (in minutes) data is saved when all interface are offline
- OfflineSaveInterval 30
+++ /dev/null
-From: Jo-Philipp Wich <jo@mein.io>
-Date: Thu, 26 Jan 2017 15:31:00 +0100
-Subject: [PATCH] make: do not invoke vnstat --showconfig
-
-In a cross-compile setting we cannot invoke the complied target executable,
-therfore commit out the --showconfig call in order to prevent make from
-exiting with an error.
-
-Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -104,9 +104,9 @@ release: distcheck
- ls -l $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar.gz
-
- install-data-hook:
-- $(DESTDIR)$(bindir)/vnstat$(EXEEXT) --showconfig >vnstat.conf && \
-- $(MKDIR_P) $(DESTDIR)$(sysconfdir) && \
-- mv -f vnstat.conf $(DESTDIR)$(sysconfdir)/vnstat.conf
-+ #$(DESTDIR)$(bindir)/vnstat$(EXEEXT) --showconfig >vnstat.conf && \
-+ # $(MKDIR_P) $(DESTDIR)$(sysconfdir) && \
-+ # mv -f vnstat.conf $(DESTDIR)$(sysconfdir)/vnstat.conf
- @echo
- @echo "============================================================================"
- @echo " Note: No service file has been installed for starting the daemon"
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -2051,9 +2051,9 @@ release: distcheck
- ls -l $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar.gz
-
- install-data-hook:
-- $(DESTDIR)$(bindir)/vnstat$(EXEEXT) --showconfig >vnstat.conf && \
-- $(MKDIR_P) $(DESTDIR)$(sysconfdir) && \
-- mv -f vnstat.conf $(DESTDIR)$(sysconfdir)/vnstat.conf
-+ #$(DESTDIR)$(bindir)/vnstat$(EXEEXT) --showconfig >vnstat.conf && \
-+ # $(MKDIR_P) $(DESTDIR)$(sysconfdir) && \
-+ # mv -f vnstat.conf $(DESTDIR)$(sysconfdir)/vnstat.conf
- @echo
- @echo "============================================================================"
- @echo " Note: No service file has been installed for starting the daemon"
include $(TOPDIR)/rules.mk
PKG_NAME:=vpnbypass
-PKG_VERSION:=1.0.0
+PKG_VERSION:=1.1.1
PKG_RELEASE:=4
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
define Package/$(PKG_NAME)/description
This service can be used to enable simple VPN split tunnelling.
-Supports accessing domains, IP ranges outside of your VPN tunnel.
+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
endef
define Build/Prepare
+ mkdir -p $(PKG_BUILD_DIR)/files/
+ $(CP) ./files/vpnbypass.init $(PKG_BUILD_DIR)/files/vpnbypass.init
+ sed -i "s|^\(PKG_VERSION\).*|\1='$(PKG_VERSION)-$(PKG_RELEASE)'|" $(PKG_BUILD_DIR)/files/vpnbypass.init
endef
define Build/Configure
define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/etc/init.d
- $(INSTALL_BIN) ./files/vpnbypass.init $(1)/etc/init.d/vpnbypass
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/vpnbypass.init $(1)/etc/init.d/vpnbypass
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/vpnbypass.conf $(1)/etc/config/vpnbypass
$(INSTALL_DIR) $(1)/etc/hotplug.d/firewall
- $(INSTALL_DATA) ./files/vpnbypass.hotplug $(1)/etc/hotplug.d/firewall/90-vpnbypass
+ $(INSTALL_DATA) ./files/vpnbypass.hotplug $(1)/etc/hotplug.d/firewall/94-vpnbypass
endef
-$(eval $(call BuildPackage,$(PKG_NAME)))
\ No newline at end of file
+$(eval $(call BuildPackage,$(PKG_NAME)))
-# OpenWrt Simple VPNBypass
-A simple PROCD-based vpnbypass init script for OpenWrt/LEDE Project. Useful if your router accesses internet thru VPN client/tunnel, but you want specific traffic (ports, IP ranges, domains or local IP ranges) to be routed outside of this tunnel.
+# VPN Bypass
+A simple PROCD-based vpnbypass service for OpenWrt/LEDE Project. Useful if your router accesses internet thru VPN client/tunnel, but you want specific traffic (ports, IP ranges, domains or local IP ranges) to be routed outside of this tunnel.
-# Features
-- Routes Plex Media Server traffic outside of the VPN tunnel.
-- Allows you to define IPs/ranges in local network so that their traffic is routed outside of the VPN tunnel.
-- Allows you to define list of domain names which are accessed outside of the VPN tunnel (useful for Netflix, Hulu, etc).
+## Features
+- Allows to define local ports so that traffic to them is routed outside of the VPN tunnel (by default routes Plex Media Server traffic (port 32400) outside of the VPN tunnel).
+- Allows to define IPs/subnets in local network so that their traffic is routed outside of the VPN tunnel (by default routes traffic from 192.168.1.81-192.168.1.87 outside of the VPN tunnel).
+- Allows to define remote IPs/ranges that they are accessed outside of the VPN tunnel (by default routes LogmeIn Hamachi traffic (25.0.0.0/8) outside of the VPN tunnel).
+- Allows to define list of domain names which are accessed outside of the VPN tunnel (useful for Netflix, Hulu, etc).
- Doesn't stay in memory -- creates the iptables rules which are automatically updated on WAN up/down.
+- Has a companion package (luci-app-vpnbypass) so everything can be configured with Web UI.
+- Proudly made in Canada, using locally-sourced electrons.
-# Requirements
-This service requires following packages to be installed on your router: ip-full ipset iptables dnsmasq-full (dnsmasq-full requires you uninstall dnsmasq first). Run the following commands to satisfy the requirements:
+## Screenshot (luci-app-vpnbypass)
+![screenshot](https://raw.githubusercontent.com/stangri/screenshots/master/vpnbypass/screenshot01.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:
```sh
opkg update
-opkg remove dnsmasq ip; opkg install ip-full ipset iptables dnsmasq-full
+opkg remove dnsmasq ip
+opkg install ip-full ipset iptables dnsmasq-full
```
-# How to install
+## How to install
```sh
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.80-192.168.1.88 outside of the VPN tunnel.
+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.
+
+## 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.
+
+### Bypass Domains Format/Syntax
+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.
-# Documentation / Discussion
-Please head to OpenWrt/LEDE Project Forums for discussion of this script.
+## What's New
+1.1.1
+- More reliable way of obtaining WAN gateway on boot (thanks @dibdot for the hint!).
+
+1.1.0:
+- Detects individual IP addresses in the config and converts them to subnet automatically.
+- Proper implementation of reload on vpnbypass config change.
-# What's New
1.0.0:
- Hotplug script created during install.
0.0.1:
- Initial release.
-# Known Issues
-Until user-defined domains are supported within vpnbypass config, you can set domains to be accessed outside of VPN tunnel like so:
+## 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:
```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'
uci commit dhcp
/etc/init.d/dnsmasq restart
-```
\ No newline at end of file
+```
config vpnbypass 'config'
option enabled '1'
list localport '32400'
+ list localsubnet '192.168.1.81/29'
list remotesubnet '25.0.0.0/8'
- list localsubnet '192.168.1.80/28'
#!/bin/sh /etc/rc.common
+PKG_VERSION=
-START=90
+START=94
USE_PROCD=1
-TID="200"; FW_MARK="0x010000"; IPSET="vpnbypass";
+readonly TID="200" FW_MARK="0x010000" IPSET="vpnbypass"
output() {
- [ -z "$verbosity" ] && config_get verbosity 'config' 'verbosity' '2'
- [ -n "$2" -a $((verbosity)) -ne $(($2)) ] && return 0;
+ [ -n "$2" ] && [ ! $(($verbosity & $2)) -gt 0 ] && return 0;
[ -t 1 ] && echo -e -n "$1"
- [ $(echo -e -n "$1" | wc -l) -gt 0 ] && logger -t "vpnbypass[$$]" "$(echo -e -n ${logmsg}${1})" && logmsg='' || logmsg=${logmsg}${1}
+ [ $(echo -e -n "$1" | wc -l) -gt 0 ] && logger -t "${PKG_NAME:-service} [$$]" "$(echo -e -n ${logmsg}${1})" && logmsg='' || logmsg=${logmsg}${1}
}
vpnbypass_enabled() {
- config_get_bool enabled 'config' 'enabled' 0
- [ $((enabled)) -gt 0 ] && return 0 || { output "VPNBypass is not enabled in the config file!\nTo enable, run 'uci set vpnbypass.config.enabled=1; uci commit vpnbypass'\n"; return 1; }
+ config_load vpnbypass
+ config_get_bool enabled 'config' 'enabled' 0
+ 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'
+ 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
}
-boot() { ubus -t 30 wait_for network.interface && rc_procd start_service || output 'ERROR: Failed to settle network interface!\n'; }
+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; }
+
+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"; }
start_service() {
- local ll
- config_load vpnbypass
- vpnbypass_enabled || return 1
- [ -d /etc/openvpn ] || return 1
- config_get lports 'config' 'localport'
- config_get rports 'config' 'remoteport'
- config_get routes 'config' 'remotesubnet'
- config_get ranges 'config' 'localsubnet'
- config_get domains 'config' 'domain'
+ local ll c=1
+ config_load vpnbypass
+ vpnbypass_enabled || return 1
+ config_get lports 'config' 'localport'
+ config_get rports 'config' 'remoteport'
+ config_get routes 'config' 'remotesubnet'
+ config_get ranges 'config' 'localsubnet'
+ config_get domains 'config' 'domain'
procd_open_instance
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
- . /lib/functions/network.sh; network_get_ipaddr wanip wan; network_get_gateway gwip wan; network_get_ipaddr lanip lan
- [ ! "$wanip" ] && output 'ERROR: Could not get wan ip\n' && exit 0
- [ ! "$gwip" ] && output 'ERROR: Could not get wan gateway\n' && exit 0
- for ll in ${routes}; do (ip route del $ll; ip route add $ll via $gwip) >/dev/null 2>&1; done
- (ip rule del fwmark $FW_MARK table $TID; iptables -t mangle -F; ipset -F $IPSET; ipset -X $IPSET) >/dev/null 2>&1
- (ip route flush table $TID; ip route flush cache) >/dev/null 2>&1
- (ip route add default via $gwip table $TID; ip route flush cache) >/dev/null 2>&1
- (modprobe xt_set || modprobe ip_set; insmod ip_set_hash_ip) >/dev/null 2>&1
- (ipset -N $IPSET iphash -q; ipset -F $IPSET) >/dev/null 2>&1
- 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 "vpnbypass"; 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 "vpnbypass"; done
- for ll in ${ranges}; do iptables -t mangle -I PREROUTING -s $ll -j MARK --set-mark $FW_MARK/$FW_MARK -m comment --comment "vpnbypass"; done
- iptables -t mangle -A PREROUTING -m set --match-set $IPSET dst -j MARK --set-mark $FW_MARK/$FW_MARK -m comment --comment "vpnbypass"
- ip rule add fwmark $FW_MARK table $TID
- output "vpnbypass started with TID: $TID FW_MARK: $FW_MARK\n"
+ 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";
+ 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
+ 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"
+ output "$p_name started with TID: $TID; FW_MARK: $FW_MARK\n"
}
stop_service() {
local ll
- config_load vpnbypass
- vpnbypass_enabled || return 1
- config_get routes 'config' 'remotesubnet'
+ vpnbypass_enabled || return 1
+ config_get routes 'config' 'remotesubnet'
- [ -d /etc/openvpn ] || return 1
- rm -f /etc/hotplug.d/firewall/${START}-${IPSET}
- . /lib/functions/network.sh; network_get_ipaddr wanip wan; network_get_gateway gwip wan; network_get_ipaddr lanip lan
- [ ! "$wanip" ] && output 'ERROR: Could not get wan ip\n' && exit 0
- [ ! "$gwip" ] && output 'ERROR: Could not get wan gateway\n' && exit 0
- for ll in ${routes}; do ip route del $ll >/dev/null 2>&1; done
-# iptables-save | grep -Fv -- "vpnbypass" | iptables-restore
- (ip rule del fwmark $FW_MARK table $TID; iptables -t mangle -F; ipset -F $IPSET; ipset -X $IPSET) >/dev/null 2>&1
- (ip route flush table $TID; ip route flush cache) >/dev/null 2>&1
- output "vpnbypass stopped\n"
+ 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 route flush table "$TID"; ip route flush cache;
+ output "$p_name stopped\n"
}
+reload_service() { start_service; }
+
service_triggers() {
- procd_add_reload_trigger 'vpnbypass'
- procd_add_reload_interface_trigger 'wan'
+ 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
+ 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
#
-# Copyright (C) 2016 Jason A. Donenfeld <Jason@zx2c4.com>
+# Copyright (C) 2016-2017 Jason A. Donenfeld <Jason@zx2c4.com>
# Copyright (C) 2016 Baptiste Jonglez <openwrt@bitsofnetworks.org>
# Copyright (C) 2016-2017 Dan Luedtke <mail@danrl.com>
#
PKG_NAME:=wireguard
-PKG_VERSION:=0.0.20170115
+PKG_VERSION:=0.0.20170223
PKG_RELEASE:=1
PKG_SOURCE:=WireGuard-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://git.zx2c4.com/WireGuard/snapshot/
-PKG_MD5SUM:=7e5f9f4699a2d4ace90d0df5d81bf0f67205ee08c45b95e0acc379bedef5ffe8
+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>
+ Dan Luedtke <mail@danrl.com>, \
+ Jason A. Donenfeld <Jason@zx2c4.com>
endef
define Package/wireguard/Default/description
$(call Build/Compile/Default)
endef
+define Package/wireguard/install
+ true
+endef
+
define Package/wireguard/description
$(call Package/wireguard/Default/description)
endef
+++ /dev/null
-#
-# Copyright (C) 2007-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:=wshaper
-PKG_VERSION:=1.1a
-PKG_RELEASE:=1
-
-PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/wshaper
- SECTION:=net
- CATEGORY:=Network
- DEPENDS:=+kmod-sched +tc
- TITLE:=wshaper
- URL:=http://lartc.org/wondershaper/
- PKGARCH:=all
-endef
-
-define Package/wshaper/description
- A script to do traffing shaping with the HTB algorithm.
- Wshaper attempts to:
- * Maintain low latency for interfactive traffic at all times
- * Allow 'surfing' at reasonable speeds while up or downloading
- * Make sure uploads don't harm downloads, and the other way around
-endef
-
-define Build/Prepare
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/wshaper/install
- $(INSTALL_DIR) $(1)/usr/sbin/ $(1)/etc/init.d $(1)/etc/config $(1)/etc/hotplug.d/iface
- $(INSTALL_BIN) ./files/wshaper.htb $(1)/usr/sbin/
- $(INSTALL_BIN) ./files/wshaper.init $(1)/etc/init.d/wshaper
- $(INSTALL_BIN) ./files/wshaper.iface $(1)/etc/hotplug.d/iface/10-wshaper
- $(INSTALL_DATA) ./files/wshaper.config $(1)/etc/config/wshaper
-endef
-
-define Package/wshaper/conffiles
-/etc/config/wshaper
-endef
-
-$(eval $(call BuildPackage,wshaper))
+++ /dev/null
-config 'wshaper' 'settings'
- option 'network' 'wan'
- option 'downlink' '2000'
- option 'uplink' '240'
+++ /dev/null
-#!/bin/sh
-# Wonder Shaper
-# please read the README before filling out these values
-#
-# Set the following values to somewhat less than your actual download
-# and uplink speed. In kilobits. Also set the device that is to be shaped.
-
-# All config needs to be done in /etc/config/wshaper
-
-. /lib/functions.sh
-. /lib/functions/network.sh
-
-config_load wshaper
-for s in downlink uplink network nopriohostdst nopriohostsrc noprioportdst noprioportsrc; do
- config_get $s settings $s
-done
-
-if ! network_get_device device "$network"; then
- logger -t wondershaper "Error: Could not find the device for network $network, aborting."
- exit 1
-fi
-
-[ -z "$downlink" ] && logger -t wondershaper "Error: Downlink speed not set, aborting." && exit 1
-[ -z "$uplink" ] && logger -t wondershaper "Error: Uplink speed not set, aborting." && exit 1
-
-MODULES='sch_ingress sch_sfq sch_htb cls_u32 act_police'
-DOWNLINK="$downlink"
-UPLINK="$uplink"
-DEV="$device"
-
-# low priority OUTGOING traffic - you can leave this blank if you want
-# low priority source netmasks
-NOPRIOHOSTSRC="$nopriohostsrc"
-
-# low priority destination netmasks
-NOPRIOHOSTDST="$nopriohostdst"
-
-# low priority source ports
-NOPRIOPORTSRC="$noprioportsrc"
-
-# low priority destination ports
-NOPRIOPORTDST="$noprioportdst"
-
-if [ "$1" = "status" ]
-then
- tc -s qdisc ls dev $DEV
- tc -s class ls dev $DEV
- exit
-fi
-
-
-# clean existing down- and uplink qdiscs, hide errors
-tc qdisc del dev $DEV root 2> /dev/null > /dev/null
-tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
-
-if [ "$1" = "stop" ]
-then
- for i in $MODULES ; do
- rmmod $i
- done
- exit
-fi
-
-for i in $MODULES ; do
- insmod $i
-done
-
-###### uplink
-
-# install root HTB, point default traffic to 1:20:
-
-tc qdisc add dev $DEV root handle 1: htb default 20
-
-# shape everything at $UPLINK speed - this prevents huge queues in your
-# DSL modem which destroy latency:
-
-tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 6k
-
-# high prio class 1:10:
-
-tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \
- burst 6k prio 1
-
-# bulk & default class 1:20 - gets slightly less traffic,
-# and a lower priority:
-
-tc class add dev $DEV parent 1:1 classid 1:20 htb rate $((9*$UPLINK/10))kbit \
- burst 6k prio 2
-
-tc class add dev $DEV parent 1:1 classid 1:30 htb rate $((8*$UPLINK/10))kbit \
- burst 6k prio 2
-
-# all get Stochastic Fairness:
-tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
-tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
-tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10
-
-# TOS Minimum Delay (ssh, NOT scp) in 1:10:
-
-tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
- match ip tos 0x10 0xff flowid 1:10
-
-# ICMP (ip protocol 1) in the interactive class 1:10 so we
-# can do measurements & impress our friends:
-tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
- match ip protocol 1 0xff flowid 1:10
-
-# To speed up downloads while an upload is going on, put ACK packets in
-# the interactive class:
-
-tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
- match ip protocol 6 0xff \
- match u8 0x05 0x0f at 0 \
- match u16 0x0000 0xffc0 at 2 \
- match u8 0x10 0xff at 33 \
- flowid 1:10
-
-# rest is 'non-interactive' ie 'bulk' and ends up in 1:20
-
-# some traffic however suffers a worse fate
-for a in $NOPRIOPORTDST
-do
- tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
- match ip dport $a 0xffff flowid 1:30
-done
-
-for a in $NOPRIOPORTSRC
-do
- tc filter add dev $DEV parent 1: protocol ip prio 15 u32 \
- match ip sport $a 0xffff flowid 1:30
-done
-
-for a in $NOPRIOHOSTSRC
-do
- tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
- match ip src $a flowid 1:30
-done
-
-for a in $NOPRIOHOSTDST
-do
- tc filter add dev $DEV parent 1: protocol ip prio 17 u32 \
- match ip dst $a flowid 1:30
-done
-
-# rest is 'non-interactive' ie 'bulk' and ends up in 1:20
-
-tc filter add dev $DEV parent 1: protocol ip prio 18 u32 \
- match ip dst 0.0.0.0/0 flowid 1:20
-
-
-########## downlink #############
-# slow downloads down to somewhat less than the real speed to prevent
-# queuing at our ISP. Tune to see how high you can set it.
-# ISPs tend to have *huge* queues to make sure big downloads are fast
-#
-# attach ingress policer:
-
-tc qdisc add dev $DEV handle ffff: ingress
-
-# filter *everything* to it (0.0.0.0/0), drop everything that's
-# coming in too fast:
-
-tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
- 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
-
-logger -t wondershaper "Wondershaper was started on device $device."
+++ /dev/null
-#!/bin/sh
-
-[ "$ACTION" = ifup ] && /etc/init.d/wshaper enabled && /etc/init.d/wshaper start || exit 0
+++ /dev/null
-#!/bin/sh /etc/rc.common
-
-START=45
-start() {
- wshaper.htb
-}
-
-stop() {
- wshaper.htb stop
-}
PKG_NAME:=xl2tpd
PKG_VERSION:=devel-20151125
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE
--- /dev/null
+From 97adf987cf230e47a4800c2f0a0940a1d0d98109 Mon Sep 17 00:00:00 2001
+From: wendy2001011 <wendy2001011@163.com>
+Date: Thu, 9 Feb 2017 17:32:14 +0800
+Subject: [PATCH] xl2tpd-control: fix xl2tpd hanged up in "fopen"
+
+This is a fix for xl2tpd hanged up in "fopen" result fifo while working
+on xl2tpd with OpenWrt.
+
+Root cause is as followings,
+1. xl2tpd-control open result fifo ##fifo readers=1
+2. xl2tpd-control read result fifo
+3. xl2tpd-control close result fifo ##fifo readers=0
+4. xl2tpd fopen result fifo ##xl2tpd is hanged up here to wait readers
+5. xl2tpd-control unlink result fifo
+
+The fix replaces the order of "unlink" and "close" when cleaning up to
+avoid hang up issue in fopen, and add the retry waiting when reading
+result fifo.
+
+[Yousong Zhou: 2s as the timeout and 10ms as the check interval]
+---
+ xl2tpd-control.c | 23 +++++++++++++++++++++--
+ 1 file changed, 21 insertions(+), 2 deletions(-)
+
+diff --git a/xl2tpd-control.c b/xl2tpd-control.c
+index 9fcab76..b8bf822 100644
+--- a/xl2tpd-control.c
++++ b/xl2tpd-control.c
+@@ -35,6 +35,7 @@
+
+ #define TUNNEL_REQUIRED 1
+ #define TUNNEL_NOT_REQUIRED 0
++#define TIMEOUT 2000000 //timeout is 2s
+
+ char result_filename[128];
+ int result_fd = -1;
+@@ -149,9 +150,9 @@ void help()
+ void cleanup(void)
+ {
+ /* cleaning up */
+- if (result_fd >= 0)
+- close (result_fd);
+ unlink (result_filename);
++ if (result_fd >= 0)
++ close (result_fd);
+ }
+
+ int main (int argc, char *argv[])
+@@ -340,6 +341,7 @@ void print_error (int level, const char *fmt, ...)
+ va_end (args);
+ }
+
++
+ int read_result(int result_fd, char* buf, ssize_t size)
+ {
+ /* read result from result_fd */
+@@ -348,6 +350,11 @@ int read_result(int result_fd, char* buf, ssize_t size)
+ */
+ ssize_t readed = 0;
+ ssize_t len;
++ int write_pipe = 0;
++ struct timeval tvs;
++ struct timeval tve;
++ unsigned long diff;
++ gettimeofday(&tvs, NULL);
+
+ do
+ {
+@@ -360,8 +367,20 @@ int read_result(int result_fd, char* buf, ssize_t size)
+ "error: can't read command result: %s\n", strerror (errno));
+ break;
+ } else if (len == 0) {
++ if(!write_pipe) {
++ gettimeofday(&tve, NULL);
++ diff = (tve.tv_sec - tvs.tv_sec) * 1000000 + (tve.tv_usec - tvs.tv_usec);
++ if (diff >= TIMEOUT) {
++ print_error (DEBUG_LEVEL, "error: read timout\n");
++ break;
++ } else {
++ usleep(10000);
++ continue;
++ }
++ }
+ break;
+ } else {
++ write_pipe = 1;
+ readed += len;
+ if ((size - readed) <= 0)
+ break;
+--
+2.6.4
+
include $(TOPDIR)/rules.mk
PKG_NAME:=znc
-PKG_VERSION:=1.6.3
-PKG_RELEASE:=5
+PKG_VERSION:=1.6.4
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://znc.in/releases \
http://znc.in/releases/archive
-PKG_MD5SUM:=0dad0307e2faea26b9e304e308f7ec63
+PKG_MD5SUM:=431097eb17860bfc980f3e68fdd75f98af4bdeecd793c84835c6cb11c3320d1c
PKG_MAINTAINER:=Jonas Gorski <jogo@openwrt.org>
PKG_LICENSE:=Apache-2.0
--- a/src/main.cpp
+++ b/src/main.cpp
-@@ -304,19 +304,6 @@ int main(int argc, char** argv) {
+@@ -312,19 +312,6 @@ int main(int argc, char** argv) {
CUtils::PrintStatus(true, "");
}
if (bMakeConf) {
if (!pZNC->WriteNewConfig(sConfig)) {
CZNC::DestroyInstance();
-@@ -338,6 +325,20 @@ int main(int argc, char** argv) {
+@@ -346,6 +333,20 @@ int main(int argc, char** argv) {
return 1;
}
+++ /dev/null
-From d81a18d87d15bbf54ddbd675bfa829cf7dfdce9e Mon Sep 17 00:00:00 2001
-From: Edoardo Spadolini <kerio00@gmail.com>
-Date: Mon, 8 Feb 2016 14:01:51 +0100
-Subject: [PATCH] Add some #ifdef feature checks to fix compilation with
- BoringSSL
-
----
- Csocket.cc | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
---- a/src/Csocket.cpp
-+++ b/src/Csocket.cpp
-@@ -45,9 +45,12 @@
-
- #ifdef HAVE_LIBSSL
- #include <stdio.h>
-+#include <openssl/ssl.h>
- #include <openssl/conf.h>
- #include <openssl/engine.h>
-+#ifndef OPENSSL_NO_COMP
- #include <openssl/comp.h>
-+#endif
- #endif /* HAVE_LIBSSL */
-
- #ifdef HAVE_ICU
-@@ -531,8 +534,12 @@ void ShutdownCsocket()
- {
- #ifdef HAVE_LIBSSL
- ERR_remove_state( 0 );
-+#ifndef OPENSSL_NO_ENGINE
- ENGINE_cleanup();
-+#endif
-+#ifndef OPENSSL_IS_BORINGSSL
- CONF_modules_unload( 1 );
-+#endif
- ERR_free_strings();
- EVP_cleanup();
- CRYPTO_cleanup_all_ex_data();
-@@ -573,6 +580,7 @@ bool InitSSL( ECompType eCompressionType
- }
- #endif /* _WIN32 */
-
-+#ifndef OPENSSL_NO_COMP
- COMP_METHOD *cm = NULL;
-
- if( CT_ZLIB & eCompressionType )
-@@ -588,6 +596,7 @@ bool InitSSL( ECompType eCompressionType
- if( cm )
- SSL_COMP_add_compression_method( CT_RLE, cm );
- }
-+#endif
-
- // setting this up once in the begining
- s_iCsockSSLIdx = SSL_get_ex_new_index( 0, NULL, NULL, NULL, NULL );
-@@ -1724,6 +1733,8 @@ SSL_CTX * Csock::SetupServerCTX()
- #ifndef OPENSSL_NO_ECDH
- // Errors for the following block are non-fatal (ECDHE is nice to have
- // but not a requirement)
-+#ifndef OPENSSL_IS_BORINGSSL
-+ // BoringSSL does this thing automatically
- #if defined( SSL_CTX_set_ecdh_auto )
- // Auto-select sensible curve
- if( !SSL_CTX_set_ecdh_auto( pCTX , 1 ) )
-@@ -1742,6 +1753,7 @@ SSL_CTX * Csock::SetupServerCTX()
- ERR_clear_error();
- }
- #endif /* SSL_CTX_set_tmp_ecdh */
-+#endif /* !OPENSSL_IS_BORINGSSL */
- #endif /* OPENSSL_NO_ECDH */
-
- if( !ConfigureCTXOptions( pCTX ) )
--- a/src/main.cpp
+++ b/src/main.cpp
-@@ -296,10 +296,12 @@ int main(int argc, char** argv) {
+@@ -304,10 +304,12 @@ int main(int argc, char** argv) {
CUtils::PrintStatus(false, "");
CUtils::PrintError("No modules found. Perhaps you didn't install ZNC properly?");
CUtils::PrintError("Read http://wiki.znc.in/Installation for instructions.");
include $(TOPDIR)/rules.mk
PKG_NAME:=collectd
-PKG_VERSION:=5.5.3
-PKG_RELEASE:=1
+PKG_VERSION:=5.7.1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=http://collectd.org/files/
-PKG_MD5SUM:=6f10633d0f73f99ef61472a8e377d4a058de161e80f3353b4b17d394c68f2f44
+PKG_SOURCE_URL:=https://collectd.org/files/ \
+ https://github.com/collectd/collectd/releases/download/collectd-$(PKG_VERSION)
+PKG_HASH:=7edd3643c0842215553b2421d5456f4e9a8a58b07e216b40a7e8e91026d8e501
PKG_FIXUP:=autoreconf
PKG_REMOVE_FILES:=aclocal.m4 libltdl/aclocal.m4
-PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
+PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>, Hannu Nyman <hannu.nyman@iki.fi>
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
battery \
ceph \
cgroups \
+ chrony \
+ cpusleep \
curl_json \
curl_xml \
dbi \
+ dpdkstat \
drbd \
ethstat \
fhcount \
genericjmx \
gmond \
+ gps \
+ grpc \
hddtemp \
+ hugepages \
+ intel_rdt \
ipc \
ipmi \
ipvs \
java \
log_logstash \
+ lua \
lvm \
lpar \
mbmon \
memcached \
mic \
monitorus \
+ mqtt \
multimeter \
netapp \
nfs \
notify_desktop \
notify_email \
+ notify_nagios \
numa \
openldap \
openvz \
write_kafka \
write_log \
write_mongodb \
+ write_prometheus \
write_redis \
write_riemann \
write_sensu \
write_tsdb \
+ xencpu \
xmms \
zfs_arc \
+ zone \
zookeeper
COLLECTD_PLUGINS_SELECTED:= \
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Lightweight system statistics collection daemon
- URL:=http://verplant.org/collectd/
+ URL:=https://collectd.org/
endef
define Package/collectd
and provides mechanismns to store the values in a variety of ways.
endef
-define Package/collectd/config
- config PACKAGE_COLLECTD_ENCRYPTED_NETWORK
- bool "Enable ability to use encrypted networking"
- default n
- depends on PACKAGE_collectd
- select PACKAGE_collectd-mod-network
-endef
-
ifneq ($(CONFIG_avr32),)
TARGET_CFLAGS += -fsigned-char
endif
# common configure args
CONFIGURE_ARGS+= \
+ --disable-werror \
--disable-debug \
--enable-daemon \
--with-nan-emulation \
+ --with-libyajl=no \
+ --without-libgcrypt \
--without-perl-bindings \
--without-libudev
-ifneq ($(CONFIG_PACKAGE_COLLECTD_ENCRYPTED_NETWORK),)
-CONFIGURE_ARGS+= \
- --with-libgcrypt=$(STAGING_DIR)/include
-else
-CONFIGURE_ARGS+= \
- --without-libgcrypt
-endif
-
CONFIGURE_VARS+= \
CFLAGS="$$$$CFLAGS $(FPIC)" \
LDFLAGS="$$$$LDFLAGS -lm -lz" \
$(eval $(call BuildPlugin,memory,physical memory usage input,memory,))
$(eval $(call BuildPlugin,modbus,read variables through libmodbus,modbus,+PACKAGE_collectd-mod-modbus:libmodbus))
$(eval $(call BuildPlugin,netlink,netlink input,netlink,+PACKAGE_collectd-mod-netlink:libmnl))
-$(eval $(call BuildPlugin,network,network input/output,network,+PACKAGE_COLLECTD_ENCRYPTED_NETWORK:libgcrypt))
+$(eval $(call BuildPlugin,network,network input/output,network,))
$(eval $(call BuildPlugin,nginx,nginx status input,nginx,+PACKAGE_collectd-mod-nginx:libcurl))
$(eval $(call BuildPlugin,ntpd,NTP daemon status input,ntpd,))
-$(eval $(call BuildPlugin,nut,UPS monitoring input,nut,+PACKAGE_collectd-mod-nut:nut))
+$(eval $(call BuildPlugin,nut,UPS monitoring input,nut,+PACKAGE_collectd-mod-nut:nut-common))
$(eval $(call BuildPlugin,olsrd,OLSRd status input,olsrd,))
$(eval $(call BuildPlugin,onewire,onewire sensor input,onewire,+PACKAGE_collectd-mod-onewire:libow-capi @BROKEN))
$(eval $(call BuildPlugin,openvpn,OpenVPN traffic/compression input,openvpn,))
+++ /dev/null
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -7,7 +7,7 @@ SUBDIRS += daemon
- PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '\<module_register\>'
-
- if COMPILER_IS_GCC
--AM_CFLAGS = -Wall -Werror
-+AM_CFLAGS = -Wall
- endif
-
- AM_CPPFLAGS = -I$(srcdir)/daemon
---- a/src/libcollectdclient/Makefile.am
-+++ b/src/libcollectdclient/Makefile.am
-@@ -1,7 +1,7 @@
- AUTOMAKE_OPTIONS = foreign no-dependencies
-
- if COMPILER_IS_GCC
--AM_CFLAGS = -Wall -Werror
-+AM_CFLAGS = -Wall
- endif
-
- pkginclude_HEADERS = collectd/client.h collectd/network.h collectd/network_buffer.h collectd/lcc_features.h
--- a/src/rrdtool.c
+++ b/src/rrdtool.c
-@@ -82,6 +82,7 @@ static const char *config_keys[] =
- "HeartBeat",
- "RRARows",
- "RRATimespan",
-+ "RRASingle",
- "XFF",
- "WritesPerSecond",
- "RandomTimeout"
-@@ -103,6 +104,8 @@ static rrdcreate_config_t rrdcreate_conf
- /* timespans = */ NULL,
- /* timespans_num = */ 0,
-
-+ /* rrasingle = */ 0,
+@@ -61,6 +61,7 @@ typedef struct rrd_queue_s rrd_queue_t;
+ static const char *config_keys[] = {
+ "CacheTimeout", "CacheFlush", "CreateFilesAsync", "DataDir",
+ "StepSize", "HeartBeat", "RRARows", "RRATimespan",
++ "RRASingle",
+ "XFF", "WritesPerSecond", "RandomTimeout"};
+ static int config_keys_num = STATIC_ARRAY_SIZE(config_keys);
+
+@@ -78,6 +79,8 @@ static rrdcreate_config_t rrdcreate_conf
+ /* timespans = */ NULL,
+ /* timespans_num = */ 0,
+
++ /* rrasingle = */ 0,
+
- /* consolidation_functions = */ NULL,
- /* consolidation_functions_num = */ 0,
+ /* consolidation_functions = */ NULL,
+ /* consolidation_functions_num = */ 0,
-@@ -1110,6 +1113,14 @@ static int rrd_config (const char *key,
+@@ -971,6 +974,12 @@ static int rrd_config(const char *key, c
+ /* compar = */ rrd_compare_numeric);
- free (value_copy);
- }
-+ else if (strcasecmp ("RRASingle", key) == 0)
-+ {
+ free(value_copy);
++ } else if (strcasecmp ("RRASingle", key) == 0) {
+ if (IS_TRUE (value))
+ {
+ rrdcreate_config.rrasingle = 1;
+ NOTICE ("rrdtool plugin: RRASingle = true: creating only AVERAGE RRAs");
+ }
-+ }
- else if (strcasecmp ("XFF", key) == 0)
- {
- double tmp = atof (value);
+ } else if (strcasecmp("XFF", key) == 0) {
+ double tmp = atof(value);
+ if ((tmp < 0.0) || (tmp >= 1.0)) {
--- a/src/utils_rrdcreate.c
+++ b/src/utils_rrdcreate.c
-@@ -213,6 +213,9 @@ static int rra_get (char ***ret, const v
+@@ -180,6 +180,9 @@ static int rra_get(char ***ret, const va
rts_num = rra_timespans_num;
}
+ rra_types_num = 1;
+
rra_max = rts_num * rra_types_num;
- assert (rra_max > 0);
+ assert(rra_max > 0);
--- a/src/utils_rrdcreate.h
+++ b/src/utils_rrdcreate.h
-@@ -41,6 +41,8 @@ struct rrdcreate_config_s
+@@ -40,6 +40,8 @@ struct rrdcreate_config_s {
int *timespans;
size_t timespans_num;
--- a/src/daemon/configfile.c
+++ b/src/daemon/configfile.c
-@@ -111,7 +111,7 @@ static cf_global_option_t cf_global_opti
- {"BaseDir", NULL, PKGLOCALSTATEDIR},
- {"PIDFile", NULL, PIDFILE},
- {"Hostname", NULL, NULL},
-- {"FQDNLookup", NULL, "true"},
-+ {"FQDNLookup", NULL, "false"},
- {"Interval", NULL, NULL},
- {"ReadThreads", NULL, "5"},
- {"WriteThreads", NULL, "5"},
+@@ -104,7 +104,7 @@ static cf_global_option_t cf_global_opti
+ {"BaseDir", NULL, 0, PKGLOCALSTATEDIR},
+ {"PIDFile", NULL, 0, PIDFILE},
+ {"Hostname", NULL, 0, NULL},
+- {"FQDNLookup", NULL, 0, "true"},
++ {"FQDNLookup", NULL, 0, "false"},
+ {"Interval", NULL, 0, NULL},
+ {"ReadThreads", NULL, 0, "5"},
+ {"WriteThreads", NULL, 0, "5"},
+++ /dev/null
---- a/version-gen.sh
-+++ b/version-gen.sh
-@@ -2,7 +2,7 @@
-
- DEFAULT_VERSION="5.5.3.git"
-
--VERSION="`git describe 2> /dev/null | grep collectd | sed -e 's/^collectd-//'`"
-+#VERSION="`git describe 2> /dev/null | grep collectd | sed -e 's/^collectd-//'`"
-
- if test -z "$VERSION"; then
- VERSION="$DEFAULT_VERSION"
--- a/src/daemon/plugin.c
+++ b/src/daemon/plugin.c
-@@ -1149,7 +1149,7 @@ static int plugin_insert_read (read_func
- int status;
- llentry_t *le;
+@@ -1108,7 +1108,7 @@ static int plugin_insert_read(read_func_
+ int status;
+ llentry_t *le;
-- rf->rf_next_read = cdtime ();
-+ rf->rf_next_read = cdtime () + (cdtime_t) 1073741824; //delay first read 1s
- rf->rf_effective_interval = rf->rf_interval;
+- rf->rf_next_read = cdtime();
++ rf->rf_next_read = cdtime() + (cdtime_t) 1073741824; //delay first read 1s
+ rf->rf_effective_interval = rf->rf_interval;
- pthread_mutex_lock (&read_lock);
+ pthread_mutex_lock(&read_lock);
--- a/src/olsrd.c
+++ b/src/olsrd.c
-@@ -658,7 +658,7 @@ static int olsrd_read (void) /* {{{ */
+@@ -585,7 +585,7 @@ static int olsrd_read(void) /* {{{ */
if (fh == NULL)
return (-1);
-- fputs ("\r\n", fh);
-+ fputs ("/all \r\n", fh);
- fflush (fh);
+- fputs("\r\n", fh);
++ fputs("/all \r\n", fh);
+ fflush(fh);
- while (fgets (buffer, sizeof (buffer), fh) != NULL)
+ while (fgets(buffer, sizeof(buffer), fh) != NULL) {
--- a/configure.ac
+++ b/configure.ac
-@@ -2627,7 +2627,7 @@ then
+@@ -3186,7 +3186,7 @@ then
SAVE_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $with_libmodbus_cflags"
--- /dev/null
+--- a/configure.ac
++++ b/configure.ac
+@@ -833,10 +833,7 @@
+ have_cpuid_h="no"
+ AC_CHECK_HEADERS(cpuid.h, [have_cpuid_h="yes"])
+
+-have_capability="yes"
+-AC_CHECK_HEADERS(sys/capability.h,
+- [have_capability="yes"],
+- [have_capability="no (<sys/capability.h> not found)"])
++have_capability="no"
+ if test "x$have_capability" = "xyes"; then
+ AC_CHECK_LIB(cap, cap_get_bound,
+ [have_capability="yes"],
--- a/configure.ac
+++ b/configure.ac
-@@ -705,6 +705,9 @@ AC_CHECK_HEADERS(net/pfvar.h,
- have_termios_h="no"
- AC_CHECK_HEADERS(termios.h, [have_termios_h="yes"])
+@@ -804,6 +804,9 @@ AC_CACHE_CHECK([whether clock_boottime a
+ [c_cv_have_clock_boottime_monotonic="no"]))
+
+# For the iwinfo plugin
+AC_CHECK_LIB(iwinfo, iwinfo_backend, [with_iwinfo="yes"], [with_iwinfo="no (libiwinfo not found)"], [])
# For the turbostat plugin
have_asm_msrindex_h="no"
AC_CHECK_HEADERS(asm/msr-index.h, [have_asm_msrindex_h="yes"])
-@@ -5310,6 +5313,7 @@ plugin_interface="no"
+@@ -5946,6 +5949,7 @@ plugin_interface="no"
plugin_ipmi="no"
plugin_ipvs="no"
plugin_irq="no"
plugin_load="no"
plugin_log_logstash="no"
plugin_memory="no"
-@@ -5713,6 +5717,7 @@ AC_PLUGIN([ipmi], [$plugin_ipmi],
- AC_PLUGIN([iptables], [$with_libiptc], [IPTables rule counters])
- AC_PLUGIN([ipvs], [$plugin_ipvs], [IPVS connection statistics])
- AC_PLUGIN([irq], [$plugin_irq], [IRQ statistics])
-+AC_PLUGIN([iwinfo], [$with_iwinfo], [Common iwinfo wireless statistics])
- AC_PLUGIN([java], [$with_java], [Embed the Java Virtual Machine])
- AC_PLUGIN([load], [$plugin_load], [System load])
- AC_PLUGIN([logfile], [yes], [File logging plugin])
-@@ -6042,6 +6047,7 @@ Configuration:
- oracle . . . . . . . $with_oracle
- protobuf-c . . . . . $have_protoc_c
- python . . . . . . . $with_python
-+ iwinfo . . . . . . . $with_iwinfo
-
- Features:
- daemon mode . . . . . $enable_daemon
-@@ -6091,6 +6097,7 @@ Configuration:
- iptables . . . . . . $enable_iptables
- ipvs . . . . . . . . $enable_ipvs
- irq . . . . . . . . . $enable_irq
-+ iwinfo . . . . . . . $enable_iwinfo
- java . . . . . . . . $enable_java
- load . . . . . . . . $enable_load
- logfile . . . . . . . $enable_logfile
+@@ -6416,6 +6420,7 @@ AC_PLUGIN([ipmi], [$plugi
+ AC_PLUGIN([iptables], [$with_libiptc], [IPTables rule counters])
+ AC_PLUGIN([ipvs], [$plugin_ipvs], [IPVS connection statistics])
+ AC_PLUGIN([irq], [$plugin_irq], [IRQ statistics])
++AC_PLUGIN([iwinfo], [$with_iwinfo], [Common iwinfo wireless statistics])
+ AC_PLUGIN([java], [$with_java], [Embed the Java Virtual Machine])
+ AC_PLUGIN([load], [$plugin_load], [System load])
+ AC_PLUGIN([log_logstash], [$plugin_log_logstash], [Logstash json_event compatible logging])
+@@ -6797,6 +6802,7 @@ AC_MSG_RESULT([ libyajl . . . . . . .
+ AC_MSG_RESULT([ oracle . . . . . . . $with_oracle])
+ AC_MSG_RESULT([ protobuf-c . . . . . $have_protoc_c])
+ AC_MSG_RESULT([ protoc 3 . . . . . . $have_protoc3])
++AC_MSG_RESULT([ iwinfo . . . . . . . $with_iwinfo])
+ AC_MSG_RESULT()
+ AC_MSG_RESULT([ Features:])
+ AC_MSG_RESULT([ daemon mode . . . . . $enable_daemon])
+@@ -6853,6 +6859,7 @@ AC_MSG_RESULT([ ipmi . . . . . . . .
+ AC_MSG_RESULT([ iptables . . . . . . $enable_iptables])
+ AC_MSG_RESULT([ ipvs . . . . . . . . $enable_ipvs])
+ AC_MSG_RESULT([ irq . . . . . . . . . $enable_irq])
++AC_MSG_RESULT([ iwinfo . . . . . . . $enable_iwinfo])
+ AC_MSG_RESULT([ java . . . . . . . . $enable_java])
+ AC_MSG_RESULT([ load . . . . . . . . $enable_load])
+ AC_MSG_RESULT([ logfile . . . . . . . $enable_logfile])
--- a/src/collectd.conf.in
+++ b/src/collectd.conf.in
-@@ -128,6 +128,7 @@
+@@ -135,6 +135,7 @@
#@BUILD_PLUGIN_IPTABLES_TRUE@LoadPlugin iptables
#@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs
#@BUILD_PLUGIN_IRQ_TRUE@LoadPlugin irq
#@BUILD_PLUGIN_JAVA_TRUE@LoadPlugin java
@BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load
#@BUILD_PLUGIN_LPAR_TRUE@LoadPlugin lpar
-@@ -582,6 +583,12 @@
+@@ -649,6 +650,12 @@
# IgnoreSelected true
#</Plugin>
# JVMArg "-Djava.class.path=@prefix@/share/collectd/java/collectd-api.jar"
--- a/src/collectd.conf.pod
+++ b/src/collectd.conf.pod
-@@ -2612,6 +2612,27 @@ and all other interrupts are collected.
+@@ -3127,6 +3127,27 @@ and all other interrupts are collected.
=back
+}
--- a/src/Makefile.am
+++ b/src/Makefile.am
-@@ -457,6 +457,13 @@ irq_la_SOURCES = irq.c
+@@ -568,6 +568,13 @@ irq_la_SOURCES = irq.c
irq_la_LDFLAGS = $(PLUGIN_LDFLAGS)
endif
java_la_SOURCES = java.c
--- a/src/types.db
+++ b/src/types.db
-@@ -228,6 +228,7 @@ voltage value:GAUGE:U:U
- vs_memory value:GAUGE:0:9223372036854775807
- vs_processes value:GAUGE:0:65535
- vs_threads value:GAUGE:0:65535
-+stations value:GAUGE:0:256
+@@ -260,6 +260,7 @@ voltage_threshold value:GAUGE:U:U,
+ vs_memory value:GAUGE:0:9223372036854775807
+ vs_processes value:GAUGE:0:65535
+ vs_threads value:GAUGE:0:65535
++stations value:GAUGE:0:256
#
# Legacy types
--- a/src/ping.c
+++ b/src/ping.c
-@@ -655,7 +655,7 @@ static int ping_read (void) /* {{{ */
- / ((double) (pkg_recv * (pkg_recv - 1))));
+@@ -635,7 +635,7 @@ static int ping_read(void) /* {{{ */
+ ((double)(pkg_recv * (pkg_recv - 1))));
/* Calculate drop rate. */
-- droprate = ((double) (pkg_sent - pkg_recv)) / ((double) pkg_sent);
-+ droprate = ((double) (pkg_sent - pkg_recv)) * 100 / ((double) pkg_sent);
+- droprate = ((double)(pkg_sent - pkg_recv)) / ((double)pkg_sent);
++ droprate = ((double)(pkg_sent - pkg_recv)) * 100 / ((double)pkg_sent);
- submit (hl->host, "ping", latency_average);
- submit (hl->host, "ping_stddev", latency_stddev);
+ submit(hl->host, "ping", latency_average);
+ submit(hl->host, "ping_stddev", latency_stddev);
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)
+OFILES = $(CFILES:.c=.o)
+
+libdfa.a: $(OFILES)
-+ ar rc $@ $?
++ $(AR) rc $@ $?
+
+clean:
+ $(RM) $(OFILES) libdfa.a
--- /dev/null
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=irqbalance
+PKG_VERSION:=1.2.0
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/Irqbalance/irqbalance.git
+PKG_SOURCE_VERSION:=0e0dd4cfe5464de2f81eaef504eab7183f1fb030
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_LICENSE:=GPLv2
+
+PKG_MAINTAINER:=Hannu Nyman <hannu.nyman@iki.fi>
+
+PKG_FIXUP:=autoreconf
+PKG_REMOVE_FILES:=autogen.sh
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/irqbalance
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=IRQ usage balancing for multi-core systems
+ URL:=https://github.com/Irqbalance/irqbalance
+endef
+
+define Package/irqbalance/description
+ The purpose of irqbalance is to distribute hardware interrupts across
+ processors/cores on a multiprocessor/multicore system in order to
+ increase performance.
+endef
+
+CONFIGURE_ARGS+= \
+ --disable-numa \
+ --with-libcap_ng=no \
+ --with-systemd=no \
+ --without-glib2
+
+define Package/irqbalance/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/irqbalance $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,irqbalance))
--- /dev/null
+Revert upstream commit bf9297132d219539e07506c125c6801dd77202f4
+to prevent building the UI component. Also disable manpage.
+
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -24,19 +24,14 @@ AUTOMAKE_OPTIONS = no-dependencies
+ ACLOCAL_AMFLAGS = -I m4
+ EXTRA_DIST = COPYING autogen.sh misc/irqbalance.service misc/irqbalance.env
+
+-UI_DIR = ui
+ AM_CFLAGS = $(LIBCAP_NG_CFLAGS) $(GLIB_CFLAGS)
+ AM_CPPFLAGS = -I${top_srcdir} -W -Wall -Wshadow -Wformat -Wundef -D_GNU_SOURCE
+ noinst_HEADERS = bitmap.h constants.h cpumask.h irqbalance.h non-atomic.h \
+- types.h $(UI_DIR)/helpers.h $(UI_DIR)/irqbalance-ui.h $(UI_DIR)/ui.h
+-sbin_PROGRAMS = irqbalance irqbalance-ui
++ types.h
++sbin_PROGRAMS = irqbalance
+ irqbalance_SOURCES = activate.c bitmap.c classify.c cputree.c irqbalance.c \
+ irqlist.c numa.c placement.c procinterrupts.c
+ irqbalance_LDADD = $(LIBCAP_NG_LIBS) $(GLIB_LIBS)
+-irqbalance_ui_SOURCES = $(UI_DIR)/helpers.c $(UI_DIR)/irqbalance-ui.c \
+- $(UI_DIR)/ui.c
+-irqbalance_ui_LDADD = $(GLIB_LIBS) $(CURSES_LIBS)
+-dist_man_MANS = irqbalance.1
+
+ CONFIG_CLEAN_FILES = debug*.list config/*
+ clean-generic:
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,7 +3,7 @@ AC_PREREQ(2.12)dnl
+ AM_CONFIG_HEADER(config.h)
+
+ AC_CONFIG_MACRO_DIR([m4])
+-AM_INIT_AUTOMAKE([foreign] [subdir-objects])
++AM_INIT_AUTOMAKE([foreign])
+ AM_PROG_LIBTOOL
+ AC_SUBST(LIBTOOL_DEPS)
+
+@@ -26,8 +26,6 @@ AC_CHECK_FUNCS(getopt_long)
+ AC_CHECK_LIB(numa, numa_available)
+ AC_CHECK_LIB(m, floor)
+
+-AC_CHECK_LIB(curses, mvprintw)
+-
+ AC_C_CONST
+ AC_C_INLINE
+ AM_PROG_CC_C_O
--- /dev/null
+Revert upstream commit d1993bcde2a524346a9508754671f096ec129ad1
+to avoid glib dependency. That commit polluted the main code
+with glib types.
+
+--- a/irqbalance.h
++++ b/irqbalance.h
+@@ -8,7 +8,6 @@
+
+ #include <stdint.h>
+ #include <glib.h>
+-#include <glib-unix.h>
+ #include <syslog.h>
+ #include <limits.h>
+
+@@ -63,7 +62,6 @@ extern GList *packages;
+ extern GList *cache_domains;
+ extern GList *cpus;
+ extern int numa_avail;
+-extern GList *cl_banned_irqs;
+
+ extern int debug_mode;
+ extern int journal_logging;
+@@ -171,7 +169,5 @@ extern unsigned int log_mask;
+ }while(0)
+ #endif /* HAVE_LIBSYSTEMD */
+
+-#define SOCKET_PATH "irqbalance"
+-
+ #endif /* __INCLUDE_GUARD_IRQBALANCE_H_ */
+
+--- a/irqbalance.c
++++ b/irqbalance.c
+@@ -31,8 +31,6 @@
+ #include <time.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <sys/socket.h>
+-#include <sys/un.h>
+ #include <fcntl.h>
+ #ifdef HAVE_GETOPT_LONG
+ #include <getopt.h>
+@@ -44,7 +42,6 @@
+ #include "irqbalance.h"
+
+ volatile int keep_going = 1;
+-int socket_fd;
+ int one_shot_mode;
+ int debug_mode;
+ int foreground_mode;
+@@ -61,9 +58,6 @@ char *banscript = NULL;
+ char *polscript = NULL;
+ long HZ;
+ int sleep_interval = SLEEP_INTERVAL;
+-GMainLoop *main_loop;
+-
+-char *banned_cpumask_from_ui = NULL;
+
+ static void sleep_approx(int seconds)
+ {
+@@ -236,224 +230,22 @@ static void force_rebalance_irq(struct i
+ info->assigned_obj = NULL;
+ }
+
+-gboolean handler(gpointer data __attribute__((unused)))
++static void handler(int signum)
+ {
++ (void)signum;
+ keep_going = 0;
+- g_main_loop_quit(main_loop);
+- return TRUE;
+ }
+
+-gboolean force_rescan(gpointer data __attribute__((unused)))
++static void force_rescan(int signum)
+ {
++ (void)signum;
+ if (cycle_count)
+ need_rescan = 1;
+- return TRUE;
+-}
+-
+-gboolean scan(gpointer data)
+-{
+- log(TO_CONSOLE, LOG_INFO, "\n\n\n-----------------------------------------------------------------------------\n");
+- clear_work_stats();
+- parse_proc_interrupts();
+- parse_proc_stat();
+-
+-
+- /* cope with cpu hotplug -- detected during /proc/interrupts parsing */
+- if (need_rescan) {
+- need_rescan = 0;
+- cycle_count = 0;
+- log(TO_CONSOLE, LOG_INFO, "Rescanning cpu topology \n");
+- clear_work_stats();
+-
+- free_object_tree();
+- build_object_tree();
+- for_each_irq(NULL, force_rebalance_irq, NULL);
+- parse_proc_interrupts();
+- parse_proc_stat();
+- sleep_approx(sleep_interval);
+- clear_work_stats();
+- parse_proc_interrupts();
+- parse_proc_stat();
+- }
+-
+- if (cycle_count)
+- update_migration_status();
+-
+- calculate_placement();
+- activate_mappings();
+-
+- if (debug_mode)
+- dump_tree();
+- if (one_shot_mode)
+- keep_going = 0;
+- cycle_count++;
+-
+- if (data != &sleep_interval) {
+- data = &sleep_interval;
+- g_timeout_add_seconds(sleep_interval, scan, data);
+- return FALSE;
+- }
+-
+- if (keep_going)
+- return TRUE;
+- else
+- return FALSE;
+-}
+-
+-void get_irq_data(struct irq_info *irq, void *data)
+-{
+- sprintf(data + strlen(data),
+- "IRQ %d LOAD %lu DIFF %lu CLASS %d ", irq->irq, irq->load,
+- (irq->irq_count - irq->last_irq_count), irq->class);
+-}
+-
+-void get_object_stat(struct topo_obj *object, void *data)
+-{
+- char irq_data[1024] = "\0";
+-
+- if (g_list_length(object->interrupts) > 0) {
+- for_each_irq(object->interrupts, get_irq_data, irq_data);
+- }
+- sprintf(data + strlen(data), "TYPE %d NUMBER %d LOAD %lu SAVE_MODE %d %s",
+- object->obj_type, object->number, object->load,
+- object->powersave_mode, irq_data);
+- if (object->obj_type != OBJ_TYPE_CPU) {
+- for_each_object(object->children, get_object_stat, data);
+- }
+-}
+-
+-gboolean sock_handle(gint fd, GIOCondition condition, gpointer user_data __attribute__((unused)))
+-{
+- char buff[500];
+- int sock;
+- int recv_size = 0;
+- int valid_user = 0;
+-
+- struct iovec iov = { buff, 500 };
+- struct msghdr msg = { NULL, 0, &iov, 1, NULL, 0, 0 };
+- msg.msg_control = malloc(CMSG_SPACE(sizeof(struct ucred)));
+- msg.msg_controllen = CMSG_SPACE(sizeof(struct ucred));
+-
+- struct cmsghdr *cmsg;
+-
+- if (condition == G_IO_IN) {
+- sock = accept(fd, NULL, NULL);
+- if (sock < 0) {
+- log(TO_ALL, LOG_WARNING, "Connection couldn't be accepted.\n");
+- return TRUE;
+- }
+- if ((recv_size = recvmsg(sock, &msg, 0)) < 0) {
+- log(TO_ALL, LOG_WARNING, "Error while receiving data.\n");
+- return TRUE;
+- }
+- cmsg = CMSG_FIRSTHDR(&msg);
+- if ((cmsg->cmsg_level == SOL_SOCKET) &&
+- (cmsg->cmsg_type == SCM_CREDENTIALS)) {
+- struct ucred *credentials = (struct ucred *) CMSG_DATA(cmsg);
+- if (!credentials->uid) {
+- valid_user = 1;
+- }
+- }
+- if (!valid_user) {
+- log(TO_ALL, LOG_INFO, "Permission denied for user to connect to socket.\n");
+- return TRUE;
+- }
+-
+- if (!strncmp(buff, "stats", strlen("stats"))) {
+- char stats[2048] = "\0";
+- for_each_object(numa_nodes, get_object_stat, stats);
+- send(sock, stats, strlen(stats), 0);
+- }
+- if (!strncmp(buff, "settings ", strlen("settings "))) {
+- if (!(strncmp(buff + strlen("settings "), "sleep ",
+- strlen("sleep ")))) {
+- char *sleep_string = malloc(
+- sizeof(char) * (recv_size - strlen("settings sleep ")));
+- strncpy(sleep_string, buff + strlen("settings sleep "),
+- recv_size - strlen("settings sleep "));
+- int new_iterval = strtoul(sleep_string, NULL, 10);
+- if (new_iterval >= 1) {
+- sleep_interval = new_iterval;
+- }
+- } else if (!(strncmp(buff + strlen("settings "), "ban irqs ",
+- strlen("ban irqs ")))) {
+- char *end;
+- char *irq_string = malloc(
+- sizeof(char) * (recv_size - strlen("settings ban irqs ")));
+- strncpy(irq_string, buff + strlen("settings ban irqs "),
+- recv_size - strlen("settings ban irqs "));
+- g_list_free_full(cl_banned_irqs, free);
+- cl_banned_irqs = NULL;
+- need_rescan = 1;
+- if (!strncmp(irq_string, "NONE", strlen("NONE"))) {
+- return TRUE;
+- }
+- int irq = strtoul(irq_string, &end, 10);
+- do {
+- add_cl_banned_irq(irq);
+- } while((irq = strtoul(end, &end, 10)));
+- } else if (!(strncmp(buff + strlen("settings "), "cpus ",
+- strlen("cpus")))) {
+- char *cpu_ban_string = malloc(
+- sizeof(char) * (recv_size - strlen("settings cpus ")));
+- strncpy(cpu_ban_string, buff + strlen("settings cpus "),
+- recv_size - strlen("settings cpus "));
+- banned_cpumask_from_ui = strtok(cpu_ban_string, " ");
+- if (!strncmp(banned_cpumask_from_ui, "NULL", strlen("NULL"))) {
+- banned_cpumask_from_ui = NULL;
+- }
+- need_rescan = 1;
+- }
+- }
+- if (!strncmp(buff, "setup", strlen("setup"))) {
+- char setup[2048] = "\0";
+- snprintf(setup, 2048, "SLEEP %d ", sleep_interval);
+- if(g_list_length(cl_banned_irqs) > 0) {
+- for_each_irq(cl_banned_irqs, get_irq_data, setup);
+- }
+- char banned[512];
+- cpumask_scnprintf(banned, 512, banned_cpus);
+- snprintf(setup + strlen(setup), 2048 - strlen(setup),
+- "BANNED %s", banned);
+- send(sock, setup, strlen(setup), 0);
+- }
+-
+- close(sock);
+- }
+- return TRUE;
+-}
+-
+-int init_socket(char *socket_name)
+-{
+- struct sockaddr_un addr;
+- memset(&addr, 0, sizeof(struct sockaddr_un));
+-
+- socket_fd = socket(AF_LOCAL, SOCK_STREAM, 0);
+- if (socket_fd < 0) {
+- log(TO_ALL, LOG_WARNING, "Socket couldn't be created.\n");
+- return 1;
+- }
+-
+- addr.sun_family = AF_UNIX;
+- addr.sun_path[0] = '\0';
+- strncpy(addr.sun_path + 1, socket_name, strlen(socket_name));
+- if (bind(socket_fd, (struct sockaddr *)&addr,
+- sizeof(sa_family_t) + strlen(socket_name) + 1) < 0) {
+- log(TO_ALL, LOG_WARNING, "Daemon couldn't be bound to the socket.\n");
+- return 1;
+- }
+- int optval = 1;
+- if (setsockopt(socket_fd, SOL_SOCKET, SO_PASSCRED, &optval, sizeof(optval)) < 0) {
+- log(TO_ALL, LOG_WARNING, "Unable to set socket options.\n");
+- return 1;
+- }
+- listen(socket_fd, 1);
+- g_unix_fd_add(socket_fd, G_IO_IN, sock_handle, NULL);
+- return 0;
+ }
+
+ int main(int argc, char** argv)
+ {
++ struct sigaction action, hupaction;
+ sigset_t sigset, old_sigset;
+
+ sigemptyset(&sigset);
+@@ -553,11 +345,19 @@ int main(int argc, char** argv)
+ }
+ }
+
+- g_unix_signal_add(SIGINT, handler, NULL);
+- g_unix_signal_add(SIGTERM, handler, NULL);
+- g_unix_signal_add(SIGUSR1, handler, NULL);
+- g_unix_signal_add(SIGUSR2, handler, NULL);
+- g_unix_signal_add(SIGHUP, force_rescan, NULL);
++ action.sa_handler = handler;
++ sigemptyset(&action.sa_mask);
++ action.sa_flags = 0;
++ sigaction(SIGINT, &action, NULL);
++ sigaction(SIGTERM, &action, NULL);
++ sigaction(SIGUSR1, &action, NULL);
++ sigaction(SIGUSR2, &action, NULL);
++
++ hupaction.sa_handler = force_rescan;
++ sigemptyset(&hupaction.sa_mask);
++ hupaction.sa_flags = 0;
++ sigaction(SIGHUP, &hupaction, NULL);
++
+ sigprocmask(SIG_SETMASK, &old_sigset, NULL);
+
+ #ifdef HAVE_LIBCAP_NG
+@@ -566,32 +366,58 @@ int main(int argc, char** argv)
+ capng_lock();
+ capng_apply(CAPNG_SELECT_BOTH);
+ #endif
++
+ for_each_irq(NULL, force_rebalance_irq, NULL);
+
+ parse_proc_interrupts();
+ parse_proc_stat();
+
+- char socket_name[64];
+- snprintf(socket_name, 64, "%s%d.sock", SOCKET_PATH, getpid());
++ while (keep_going) {
++ sleep_approx(sleep_interval);
++ log(TO_CONSOLE, LOG_INFO, "\n\n\n-----------------------------------------------------------------------------\n");
+
+- if (init_socket(socket_name)) {
+- return EXIT_FAILURE;
+- }
+- main_loop = g_main_loop_new(NULL, FALSE);
+- int *last_interval = &sleep_interval;
+- g_timeout_add_seconds(sleep_interval, scan, last_interval);
+- g_main_loop_run(main_loop);
+
+- g_main_loop_quit(main_loop);
++ clear_work_stats();
++ parse_proc_interrupts();
++ parse_proc_stat();
++
++ /* cope with cpu hotplug -- detected during /proc/interrupts parsing */
++ if (need_rescan) {
++ need_rescan = 0;
++ cycle_count = 0;
++ log(TO_CONSOLE, LOG_INFO, "Rescanning cpu topology \n");
++ clear_work_stats();
++
++ free_object_tree();
++ build_object_tree();
++ for_each_irq(NULL, force_rebalance_irq, NULL);
++ parse_proc_interrupts();
++ parse_proc_stat();
++ sleep_approx(sleep_interval);
++ clear_work_stats();
++ parse_proc_interrupts();
++ parse_proc_stat();
++ }
++
++ if (cycle_count)
++ update_migration_status();
++
++ calculate_placement();
++ activate_mappings();
+
++ if (debug_mode)
++ dump_tree();
++ if (one_shot_mode)
++ keep_going = 0;
++ cycle_count++;
++
++ }
+ free_object_tree();
+ free_cl_opts();
+
+ /* Remove pidfile */
+ if (!foreground_mode && pidfile)
+ unlink(pidfile);
+- /* Remove socket */
+- close(socket_fd);
+
+ return EXIT_SUCCESS;
+ }
+--- a/cputree.c
++++ b/cputree.c
+@@ -38,7 +38,6 @@
+
+ #include "irqbalance.h"
+
+-extern char *banned_cpumask_from_ui;
+
+ GList *cpus;
+ GList *cache_domains;
+@@ -77,15 +76,11 @@ static void setup_banned_cpus(void)
+ cpus_clear(nohz_full);
+
+ /* A manually specified cpumask overrides auto-detection. */
+- if (banned_cpumask_from_ui != NULL) {
+- cpulist_parse(banned_cpumask_from_ui,
+- strlen(banned_cpumask_from_ui), banned_cpus);
+- goto out;
+- }
+ if (getenv("IRQBALANCE_BANNED_CPUS")) {
+ cpumask_parse_user(getenv("IRQBALANCE_BANNED_CPUS"), strlen(getenv("IRQBALANCE_BANNED_CPUS")), banned_cpus);
+ goto out;
+ }
++
+ file = fopen("/sys/devices/system/cpu/isolated", "r");
+ if (file) {
+ if (getline(&line, &size, file) > 0) {
+@@ -117,8 +112,6 @@ out:
+ log(TO_CONSOLE, LOG_INFO, "Isolated CPUs: %s\n", buffer);
+ cpumask_scnprintf(buffer, 4096, nohz_full);
+ log(TO_CONSOLE, LOG_INFO, "Adaptive-ticks CPUs: %s\n", buffer);
+- cpumask_scnprintf(buffer, 4096, banned_cpus);
+- log(TO_CONSOLE, LOG_INFO, "Banned CPUs: %s\n", buffer);
+ }
+
+ static struct topo_obj* add_cache_domain_to_package(struct topo_obj *cache,
include $(TOPDIR)/rules.mk
PKG_NAME:=joe
-PKG_VERSION:=4.3
+PKG_VERSION:=4.4
PKG_RELEASE:=1
PKG_SOURCE_URL:=@SF/joe-editor
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=5a167f5e88e62c77bb42b0145d72c466
+PKG_MD5SUM:=59e63debe60b456a6ee5c0c27a756a47
PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_MAINTAINER:=Vitaly Protsko <villy@sft.ru>
PKG_LICENCE:=GPL-2.0
+++ /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>
include $(TOPDIR)/rules.mk
PKG_NAME:=openocd
-PKG_VERSION:=v0.9.0
+PKG_VERSION:=v0.10.0
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
--disable-werror \
MAKEINFO=true \
--enable-dummy \
- --enable-sysfsgpio \
- --enable-usb_blaster_libftdi \
- --enable-openjtag_ftdi \
- --enable-presto_libftdi
+ --enable-sysfsgpio
define Build/Compile
+$(MAKE_VARS) \
--- /dev/null
+#
+# Copyright (C) 2008-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:=pcmciautils
+PKG_VERSION:=018
+PKG_RELEASE:=3
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=@KERNEL/linux/utils/kernel/pcmcia
+PKG_MD5SUM:=5d85669b3440baa4532363da6caaf1b4
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
+PKG_MAINATINER:=Tomasz Maciej Nowak <tomek_n@o2.pl>
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/pcmciautils
+ SECTION:=utils
+ CATEGORY:=Utilities
+ DEPENDS:=+libsysfs @PCMCIA_SUPPORT
+ TITLE:=PCMCIA Utilities
+ URL:=http://www.kernel.org/pub/linux/utils/kernel/pcmcia/pcmcia.html
+endef
+
+define Build/Compile
+ $(call Build/Compile/Default, \
+ LD="$(TARGET_CC)" UDEV=false \
+ CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS) \
+ -DPCMCIAUTILS_VERSION=\\\"$(PKG_VERSION)\\\"" \
+ prefix=/usr all \
+ )
+endef
+
+define Package/pcmciautils/install
+ $(INSTALL_DIR) $(1)/usr/sbin/
+ $(CP) $(PKG_BUILD_DIR)/pccardctl $(1)/usr/sbin/
+ $(CP) $(PKG_BUILD_DIR)/pcmcia-check-broken-cis $(1)/usr/sbin/
+ $(CP) $(PKG_BUILD_DIR)/pcmcia-socket-startup $(1)/usr/sbin/
+ rm -f $(1)/usr/sbin/lspcmcia
+ ln -s pccardctl $(1)/usr/sbin/lspcmcia
+ $(INSTALL_DIR) $(1)/etc/pcmcia/
+ $(CP) $(PKG_BUILD_DIR)/config/config.opts $(1)/etc/pcmcia/
+ $(CP) files/* $(1)/
+endef
+
+define Package/pcmciautils/conffiles
+/etc/pcmcia/config.opts
+endef
+
+$(eval $(call BuildPackage,pcmciautils))
--- /dev/null
+#!/bin/sh
+# Copyright (C) 2008 OpenWrt.org
+
+case "$ACTION" in
+ add)
+ SYSFS=/sys/bus/pcmcia/devices/
+ DEVPATH=$SOCKET_NO.$((0x$DEVICE_NO))
+
+ # check whether the CIS is completely broken
+ if [ ! -h $SYSFS$DEVPATH/driver ]; then
+ CISFILE=$(/usr/sbin/pcmcia-check-broken-cis $SOCKET_NO)
+ echo PCMCIA: $CISFILE;
+ if [ ! -z $CISFILE ]; then
+ if [ -f /lib/firmware/$CISFILE ]; then
+ cat /lib/firmware/$CISFILE > $SYSFS/class/pcmcia_socket/pcmcia_socket$(SOCKET_NO)/cis
+ fi;
+ fi;
+ fi;
+
+ # allow a match solely based on the "function ID" field
+ if [ ! -h $SYSFS$DEVPATH/driver ]; then
+ if [ -w $SYSFS$DEVPATH/allow_func_id_match ]; then
+ echo PCMCIA: allowing func_id based match for PCMCIA device $SOCKET_NO.$DEVICE_NO
+ echo -n "42" > $SYSFS$DEVPATH/allow_func_id_match;
+ fi;
+ fi;
+ ;;
+esac
--- /dev/null
+#!/bin/sh
+# Copyright (C) 2008 OpenWrt.org
+
+case "$ACTION" in
+ add)
+ echo PCMCIA: socket number: $SOCKET_NO
+
+ sleep 1;
+ /usr/sbin/pcmcia-socket-startup $SOCKET_NO
+ DONE_FILE=/sys/class/pcmcia_socket/pcmcia_socket$SOCKET_NO/available_resources_setup_done
+ if [ -f $DONE_FILE ]; then
+ if [ -w $DONE_FILE ]; then
+ echo -n "42" > $DONE_FILE
+ fi;
+ fi;
+ ;;
+
+esac
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008 OpenWrt.org
+
+START=42
+start() {
+ if [ -d /sys/bus/pcmcia/devices/ ]; then
+ # 2.6 kernels
+ cd /sys/bus/pcmcia/devices/
+ for PCMCIA_DEVICE in *; do
+ if [ $PCMCIA_DEVICE == \* ]; then
+ continue;
+ fi;
+ MODALIAS=$(cat $PCMCIA_DEVICE/modalias)
+ echo PCMCIA: $MODALIAS $PCMCIA_DEVICE
+ if [ -z $MODALIAS ]; then
+ continue;
+ fi;
+ ACTION=add
+ SOCKET_NO=$(echo $PCMCIA_DEVICE | cut -d. -f1)
+ DEVICE_NO=$(echo $MODALIAS | sed 's/.*pfn\(..\).*/\1/')
+ export MODALIAS ACTION SOCKET_NO DEVICE_NO
+ /sbin/hotplug-call pcmcia
+ done;
+ fi;
+}
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008 OpenWrt.org
+
+START=41
+start() {
+ if [ -d /sys/class/pcmcia_socket/ ]; then
+ # 2.6 kernels
+ cd /sys/class/pcmcia_socket/
+ for PCMCIA_SOCKET in *; do
+ if [ $PCMCIA_SOCKET == \* ]; then
+ continue;
+ fi;
+ SOCKET_NO=$(echo $PCMCIA_SOCKET | cut -b14-)
+ ACTION=add
+ export SOCKET_NO ACTION
+ /sbin/hotplug-call pcmcia_socket
+ done;
+ fi;
+}
--- /dev/null
+--- a/src/yacc_config.y
++++ b/src/yacc_config.y
+@@ -40,7 +40,7 @@
+
+ %union {
+ char *str;
+- u_long num;
++ unsigned long num;
+ struct adjust_list_t *adjust;
+ }
+
--- /dev/null
+--- pcmciautils-018/src/lex_config.l
++++ pcmciautils-018/src/lex_config.l
+@@ -1,8 +1,8 @@
+ /* Special state for handling include files */
+ %x src
+-%option noinput nounput
++%option noinput nounput noyywrap
+
+ %{
+ /*
+ * Startup tool for non statically mapped PCMCIA sockets
+ *
+@@ -75,14 +75,10 @@ module /* skip */ ;
+
+ . return yytext[0];
+
+ %%
+
+-#ifndef yywrap
+-int yywrap() { return 1; }
+-#endif
+-
+ /*======================================================================
+
+ Stuff to parse basic data types
+
+ ======================================================================*/
#!/bin/sh /etc/rc.common
# Copyright (C) 2011-2014 OpenWrt.org
-START=98
+START=25
USE_PROCD=1
PROG=/sbin/rngd
--- /dev/null
+#
+# Copyright (C) 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:=tree
+PKG_RELEASE:=1
+PKG_VERSION:=1.7.0
+PKG_SOURCE_URL:=ftp://mama.indstate.edu/linux/tree/
+PKG_HASH:=6957c20e82561ac4231638996e74f4cfa4e6faabc5a2f511f0b4e3940e8f7b12
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
+PKG_MAINTAINER:=Banglang Huang <banglang.huang@foxmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/tree
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=List contents of directories in a tree-like format
+ DEPENDS:=+libc +libgcc
+endef
+
+define Package/tree/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/tree $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,tree))
include $(TOPDIR)/rules.mk
PKG_NAME:=ttyd
-PKG_VERSION:=1.2.1
+PKG_VERSION:=1.3.0
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"