include $(TOPDIR)/rules.mk
PKG_NAME:=debootstrap
-PKG_VERSION:=1.0.78
+PKG_VERSION:=1.0.79
PKG_RELEASE:=1
PKG_MAINTAINER=Daniel Golle <daniel@makrotopia.org>
PKG_SOURCE:=$(PKG_NAME)-udeb_$(PKG_VERSION)_all.udeb
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/d/debootstrap
-PKG_MD5SUM:=687d56b8ebde6f35a2ad322be9731723
+PKG_MD5SUM:=48dae2747db960f5484fe5355678c249
PKG_LICENSE:=Unique
PKG_LICENSE_FILES:=debian/copyright
include $(TOPDIR)/rules.mk
PKG_NAME:=pkg-config
-PKG_VERSION:=0.29
-PKG_RELEASE:=2
+PKG_VERSION:=0.29.1
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://pkgconfig.freedesktop.org/releases/
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=77f27dce7ef88d0634d0d6f90e03a77f
+PKG_MD5SUM:=f739a28cae4e0ca291f82d1d41ef107d
PKG_MAINTAINER:=Heinrich Schuchardt <xypron.glpk@gmx.de>
PKG_LICENSE:=GPL-2+
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 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:=perl-cgi
-PKG_VERSION:=4.25
+PKG_VERSION:=4.26
PKG_RELEASE:=1
PKG_SOURCE_URL:=http://www.cpan.org/authors/id/L/LE/LEEJO
PKG_SOURCE:=CGI-$(PKG_VERSION).tar.gz
-PKG_MD5SUM:=e047bec455105cdfa413b9c776f95bb9
+PKG_MD5SUM:=bf606eda81c9dc5347c1f3483732b2d2
PKG_LICENSE:=GPL Artistic-2.0
PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=cffi
PKG_VERSION:=1.5.0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/c/cffi
endef
define Host/Compile
- $(call Build/Compile/HostPyMod,,install --prefix="/usr" --root="$(STAGING_DIR)/host")
+ $(call Build/Compile/HostPyMod,,install --prefix="" --root="$(STAGING_DIR)/host")
endef
define Host/Install
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-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:=cryptography
-PKG_VERSION:=1.2.2
+PKG_VERSION:=1.2.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/c/cryptography
-PKG_MD5SUM:=2b25eebd1d3c6bae52b46f0dcec74dfb
+PKG_MD5SUM:=5474d2b3e8c7555a60852e48d2743f85
PKG_BUILD_DEPENDS:=python-cffi/host
include $(TOPDIR)/rules.mk
PKG_NAME:=python-pip
-PKG_VERSION:=7.1.2
-PKG_RELEASE:=3
+PKG_VERSION:=8.1.0
+PKG_RELEASE:=1
PKG_SOURCE:=pip-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pip/
-PKG_MD5SUM:=3823d2343d9f3aaab21cf9c917710196
+PKG_MD5SUM:=e9c3844db343f47d16040b32ad9072be
PKG_BUILD_DIR:=$(BUILD_DIR)/pip-$(PKG_VERSION)
PKG_USE_MIPS16:=0
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=ply
PKG_VERSION:=3.8
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.dabeaz.com/ply
$(call Build/Compile/PyMod,,install --prefix="/usr" --root="$(PKG_INSTALL_DIR)")
endef
-define Build/InstallDev
- $(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)
- $(CP) \
- $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/* \
- $(1)$(PYTHON_PKG_DIR)
-endef
-
define Host/Compile
- $(call Build/Compile/HostPyMod,,install --prefix="/usr" --root="$(STAGING_DIR)/host")
+ $(call Build/Compile/HostPyMod,,install --prefix="" --root="$(STAGING_DIR)/host")
endef
define Host/Install
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=pycparser
PKG_VERSION:=2.14
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pycparser
endef
define Host/Compile
- $(call Build/Compile/HostPyMod,,install --prefix="/usr" --root="$(STAGING_DIR)/host")
+ $(call Build/Compile/HostPyMod,,install --prefix="" --root="$(STAGING_DIR)/host")
endef
define Host/Install
#
-# Copyright (C) 2014 OpenWrt.org
+# Copyright (C) 2014-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:=python-setuptools
-PKG_VERSION:=19.4
+PKG_VERSION:=20.2.2
PKG_RELEASE:=1
PKG_SOURCE:=setuptools-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/s/setuptools/
-PKG_MD5SUM:=c5a7d90c1e0acf8c4ec5c2bf31bc25b5
+PKG_MD5SUM:=bf37191cb4c1472fb61e6f933d2006b1
HOST_BUILD_DEPENDS:=python/host
define Host/Compile
$(call Build/Compile/HostPyMod,,\
- install --root="$(STAGING_DIR)/host" --prefix="/usr" \
+ install --root="$(STAGING_DIR)/host" --prefix="" \
--single-version-externally-managed \
)
endef
#
-# 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:=python
PKG_VERSION:=$(PYTHON_VERSION).$(PYTHON_VERSION_MICRO)
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/Python-$(PKG_VERSION)
PKG_BUILD_DEPENDS:=python/host
-HOST_BUILD_DEPENDS:=bzip2/host expat/host
+HOST_BUILD_DEPENDS:=bzip2/host expat/host libffi/host
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk
$(PKG_INSTALL_DIR)/usr/include/python$(PYTHON_VERSION) \
$(1)/usr/include/
$(CP) \
- $(STAGING_DIR)/host/usr/lib/python$(PYTHON_VERSION) \
+ $(STAGING_DIR)/host/lib/python$(PYTHON_VERSION) \
$(PKG_INSTALL_DIR)/usr/lib/libpython$(PYTHON_VERSION).so* \
$(1)/usr/lib/
$(CP) \
--without-cxx-main \
--without-pymalloc \
--with-threads \
- --prefix=$(STAGING_DIR)/host/usr \
--with-system-expat=$(STAGING_DIR)/host \
+ --with-system-ffi="$(STAGING_DIR)/host" \
--with-ensurepip=upgrade \
CONFIG_SITE= \
CFLAGS="$(HOST_CFLAGS)"
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
-HOST_PYTHON_INC_DIR:=$(STAGING_DIR)/host/usr/include/python$(PYTHON_VERSION)
+HOST_PYTHON_DIR:=$(STAGING_DIR)/host
+HOST_PYTHON_INC_DIR:=$(HOST_PYTHON_DIR)/include/python$(PYTHON_VERSION)
+HOST_PYTHON_LIB_DIR:=$(HOST_PYTHON_DIR)/lib/python$(PYTHON_VERSION)
-HOST_PYTHON_PKG_DIR:=/usr/lib/python$(PYTHON_VERSION)/site-packages
+HOST_PYTHON_PKG_DIR:=/lib/python$(PYTHON_VERSION)/site-packages
+
+HOST_PYTHON_BIN:=$(HOST_PYTHON_DIR)/bin/python$(PYTHON_VERSION)
HOST_PYTHONPATH:=$(HOST_PYTHON_LIB_DIR):$(STAGING_DIR)/host/$(HOST_PYTHON_PKG_DIR)
+
define HostPython
if [ "$(strip $(3))" == "HOST" ]; then \
export PYTHONPATH="$(HOST_PYTHONPATH)"; \
- export _python_sysroot="$(STAGING_DIR)/host"; \
+ export PYTHONDONTWRITEBYTECODE=0; \
else \
export PYTHONPATH="$(PYTHONPATH)"; \
+ export PYTHONDONTWRITEBYTECODE=1; \
export _python_sysroot="$(STAGING_DIR)"; \
+ export _python_prefix="/usr"; \
+ export _python_exec_prefix="/usr"; \
fi; \
export PYTHONOPTIMIZE=""; \
- export PYTHONDONTWRITEBYTECODE=1; \
- export _python_prefix="/usr"; \
- export _python_exec_prefix="/usr"; \
$(1) \
$(HOST_PYTHON_BIN) $(2);
endef
-# These configure args are needed in detection of path to Python header files
-# using autotools.
-HOST_CONFIGURE_ARGS += \
- _python_sysroot="$(STAGING_DIR)/host" \
- _python_prefix="/usr" \
- _python_exec_prefix="/usr"
-
# $(1) => build subdir
# $(2) => additional arguments to setup.py
# $(3) => additional variables
CPPFLAGS="$(HOST_CPPFLAGS) -I$(HOST_PYTHON_INC_DIR)" \
LDFLAGS="$(HOST_LDFLAGS) -lpython$(PYTHON_VERSION)" \
_PYTHON_HOST_PLATFORM=linux2 \
- __PYVENV_LAUNCHER__="/usr/bin/$(PYTHON)" \
$(3) \
, \
./setup.py $(2) \
#
-# 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.
PYTHON:=python$(PYTHON_VERSION)
-HOST_PYTHON_LIB_DIR:=$(STAGING_DIR)/host/usr/lib/python$(PYTHON_VERSION)
-HOST_PYTHON_BIN:=$(STAGING_DIR)/host/bin/python2
-
PYTHONPATH:=$(PYTHON_LIB_DIR):$(STAGING_DIR)/$(PYTHON_PKG_DIR):$(PKG_INSTALL_DIR)/$(PYTHON_PKG_DIR)
# These configure args are needed in detection of path to Python header files
include $(TOPDIR)/rules.mk
PKG_NAME:=python3-pip
-PKG_VERSION:=7.1.2
+PKG_VERSION:=8.1.0
PKG_RELEASE:=1
PKG_SOURCE:=pip-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/p/pip/
-PKG_MD5SUM:=3823d2343d9f3aaab21cf9c917710196
+PKG_MD5SUM:=e9c3844db343f47d16040b32ad9072be
PKG_LICENSE:=MIT
include $(TOPDIR)/rules.mk
PKG_NAME:=python3-setuptools
-PKG_VERSION:=19.4
+PKG_VERSION:=20.2.2
PKG_RELEASE:=1
PKG_SOURCE:=setuptools-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/source/s/setuptools/
-PKG_MD5SUM:=c5a7d90c1e0acf8c4ec5c2bf31bc25b5
+PKG_MD5SUM:=bf37191cb4c1472fb61e6f933d2006b1
PKG_LICENSE:=PSF
include $(TOPDIR)/rules.mk
PKG_NAME:=ruby
-PKG_VERSION:=2.2.4
-PKG_RELEASE:=2
+PKG_VERSION:=2.3.0
+PKG_RELEASE:=1
-PKG_LIBVER:=2.2
+PKG_LIBVER:=2.3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://cache.ruby-lang.org/pub/ruby/$(PKG_LIBVER)/
-PKG_MD5SUM:=c3d65f6d2ebe90dda81a37885ea244f5
+PKG_MD5SUM:=f0d9f9bbdc87372ca98988a571875819
PKG_MAINTAINER:=Luiz Angelo Daros de Luca <luizluca@gmail.com>
PKG_LICENSE:=BSD-2-Clause
PKG_LICENSE_FILES:=COPYING
--disable-install-doc \
--disable-install-rdoc \
--disable-install-capi \
- --with-static-linked-ext \
+ --without-gmp \
--with-out-ext=tk,tk/tkutil,win32,win32ole,dbm,gdbm,readline \
+# Does not compile with this. Workaround is --without-gmp
+# https://bugs.ruby-lang.org/issues/11940
+ #--with-static-linked-ext \
+
# even not used, host build with restricted exts results in gems not being
# compiled for target (probably some cross compiling problem like checking
# host for selecting target features)
) | ( cd $(1); $(TAR) -xf - )
endef
+define Host/Install
+ # When ruby version is updated, make install asks in some cases before replace
+ # an existing different file. Remove them before install and avoid the interaction
+ rm -f $(HOST_BUILD_PREFIX)/bin/rake
+ $(call Host/Install/Default)
+endef
+
define Package/ruby/Default
SUBMENU:=Ruby
SECTION:=lang
define Package/ruby-cgi/files
/usr/lib/ruby/$(PKG_LIBVER)/cgi
/usr/lib/ruby/$(PKG_LIBVER)/cgi.rb
+/usr/lib/ruby/$(PKG_LIBVER)/*/cgi/escape.so
endef
define Package/ruby-csv/files
/usr/lib/ruby/$(PKG_LIBVER)/*/objspace.so
endef
+define Package/ruby-did-you-mean/files
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/did_you_mean-*.gemspec
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/did_you_mean-*/
+endef
+define Package/ruby-did-you-mean/files-excluded
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/did_you_mean-*/benchmark
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/did_you_mean-*/doc
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/did_you_mean-*/evaluation
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/did_you_mean-*/test
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/did_you_mean-*/*.md
+endef
+
define Package/ruby-digest/description
Provides digest* files. Can be configured to use OpenSSL or
bundled hash functions.
endef
define Package/ruby-minitest/files-excluded
/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/minitest-*/test
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/minitest-*/*.rdoc
/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/minitest-*/*.txt
endef
/usr/lib/ruby/$(PKG_LIBVER)/net/*
endef
+define Package/ruby-net-telnet/files
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/net-telnet-*.gemspec
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/net-telnet-*/
+endef
+define Package/ruby-net-telnet/files-excluded
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/net-telnet-*/*.md
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/net-telnet-*/*.txt
+endef
+
define Package/ruby-nkf/files
/usr/lib/ruby/$(PKG_LIBVER)/kconv.rb
/usr/lib/ruby/$(PKG_LIBVER)/*/nkf.so
define Package/ruby-psych/files
/usr/lib/ruby/$(PKG_LIBVER)/psych
/usr/lib/ruby/$(PKG_LIBVER)/psych.rb
+/usr/lib/ruby/$(PKG_LIBVER)/psych_jars.rb
/usr/lib/ruby/$(PKG_LIBVER)/*/psych.so
/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/psych-*.gemspec
endef
endef
define Package/ruby-rake/files
-/usr/lib/ruby/$(PKG_LIBVER)/rake/
-/usr/lib/ruby/$(PKG_LIBVER)/rake.rb
-/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/default/rake-*.gemspec
+/usr/lib/ruby/gems/$(PKG_LIBVER)/specifications/rake-*.gemspec
/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rake-*/
endef
+define Package/ruby-rake/files-excluded
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rake-*/doc
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rake-*/test
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rake-*/*.rdoc
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rake-*/*.txt
+/usr/lib/ruby/gems/$(PKG_LIBVER)/gems/rake-10.4.2/lib/rake/runtest.rb
+endef
define Package/ruby-rake/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rake $(1)/usr/bin/;
$(call RubyBuildPackage/install,rake,$(1))
endef
-define Package/ruby-rake/files-excluded
-/usr/lib/ruby/$(PKG_LIBVER)/rake/runtest.rb
-endef
define Package/ruby-rbconfig/files
/usr/lib/ruby/$(PKG_LIBVER)/*/rbconfig.rb
$(eval $(call RubyBuildPackage,datetime,date library))
$(eval $(call RubyBuildPackage,dbm,support for dbm,+libdb47))
$(eval $(call RubyBuildPackage,debuglib,debug library,+ruby-multithread +ruby-prettyprint))
+$(eval $(call RubyBuildPackage,did-you-mean,did you mean? experience,+ruby-misc))
$(eval $(call RubyBuildPackage,digest,Digest Library,+RUBY_DIGEST_USE_OPENSSL:libopenssl))
$(eval $(call RubyBuildPackage,drb,distributed object system,+ruby-filelib +ruby-patterns +ruby-socket))
$(eval $(call RubyBuildPackage,enc,character re-coding library charset (small subset),))
$(eval $(call RubyBuildPackage,mkmf,makefile library,+ruby-filelib +ruby-optparse +ruby-rbconfig))
$(eval $(call RubyBuildPackage,multithread,multithread library,+ruby-misc))
$(eval $(call RubyBuildPackage,net,Network Protocols Library,+ruby-datetime +ruby-digest +ruby-filelib +ruby-uri))
+$(eval $(call RubyBuildPackage,net-telnet,telnet client,+ruby-net))
$(eval $(call RubyBuildPackage,nkf,Network Kanji Filter,+ruby-enc))
-$(eval $(call RubyBuildPackage,openssl,support for openssl,+ruby-enc +ruby-misc +libopenssl))
+$(eval $(call RubyBuildPackage,openssl,support for openssl,+ruby-enc +ruby-multithread +libopenssl))
$(eval $(call RubyBuildPackage,optparse,command-line option analysis,+ruby-misc))
$(eval $(call RubyBuildPackage,patterns,design patterns implementation,+ruby-multithread))
$(eval $(call RubyBuildPackage,powerassert,Gem power_assert,+ruby-ripper))
--- /dev/null
+https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/53414
+
+Fixes:
+
+https://bugs.ruby-lang.org/issues/11941
+
+It might be incorporated in the following release
+
+Index: aclocal.m4
+===================================================================
+--- a/aclocal.m4 (revision 53413)
++++ b/aclocal.m4 (revision 53414)
+@@ -1,46 +0,0 @@
+-# -*- autoconf -*-
+-
+-AC_DEFUN([_COLORIZE_RESULT_PREPARE], [
+- msg_checking= msg_result_yes= msg_result_no= msg_result_other= msg_reset=
+- AS_IF([test "x${CONFIGURE_TTY}" = xyes -o -t 1], [
+- msg_begin="`tput smso 2>/dev/null`"
+- AS_CASE(["$msg_begin"], ['\e@<:@'*m],
+- [msg_begin="`echo "$msg_begin" | sed ['s/[0-9]*m$//']`"
+- msg_checking="${msg_begin}33m"
+- AS_IF([test ${TEST_COLORS:+set}], [
+- msg_result_yes=[`expr ":$TEST_COLORS:" : ".*:pass=\([^:]*\):"`]
+- msg_result_no=[`expr ":$TEST_COLORS:" : ".*:fail=\([^:]*\):"`]
+- msg_result_other=[`expr ":$TEST_COLORS:" : ".*:skip=\([^:]*\):"`]
+- ])
+- msg_result_yes="${msg_begin}${msg_result_yes:-32;1}m"
+- msg_result_no="${msg_begin}${msg_result_no:-31;1}m"
+- msg_result_other="${msg_begin}${msg_result_other:-33;1}m"
+- msg_reset="${msg_begin}m"
+- ])
+- AS_UNSET(msg_begin)
+- ])
+- AS_REQUIRE_SHELL_FN([colorize_result],
+- [AS_FUNCTION_DESCRIBE([colorize_result], [MSG], [Colorize result])],
+- [AS_CASE(["$[]1"],
+- [yes], [AS_ECHO(["${msg_result_yes}$[]1${msg_reset}]")],
+- [no], [AS_ECHO(["${msg_result_no}$[]1${msg_reset}]")],
+- [AS_ECHO(["${msg_result_other}$[]1${msg_reset}]")])])
+-])
+-
+-AC_DEFUN([COLORIZE_RESULT], [AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
+- AS_LITERAL_IF([$1],
+- [m4_case([$1],
+- [yes], [AS_ECHO(["${msg_result_yes}$1${msg_reset}"])],
+- [no], [AS_ECHO(["${msg_result_no}$1${msg_reset}"])],
+- [AS_ECHO(["${msg_result_other}$1${msg_reset}"])])],
+- [colorize_result "$1"]) dnl
+-])
+-
+-AC_DEFUN([AC_CHECKING],[dnl
+-AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
+-AS_MESSAGE([checking ${msg_checking}$1${msg_reset}...])])
+-
+-AC_DEFUN([AC_MSG_RESULT], [dnl
+-{ _AS_ECHO_LOG([result: $1])
+-COLORIZE_RESULT([$1]); dnl
+-}])
+Index: acinclude.m4
+===================================================================
+--- a/acinclude.m4 (revision 0)
++++ b/acinclude.m4 (revision 53414)
+@@ -0,0 +1,46 @@
++# -*- autoconf -*-
++
++AC_DEFUN([_COLORIZE_RESULT_PREPARE], [
++ msg_checking= msg_result_yes= msg_result_no= msg_result_other= msg_reset=
++ AS_IF([test "x${CONFIGURE_TTY}" = xyes -o -t 1], [
++ msg_begin="`tput smso 2>/dev/null`"
++ AS_CASE(["$msg_begin"], ['\e@<:@'*m],
++ [msg_begin="`echo "$msg_begin" | sed ['s/[0-9]*m$//']`"
++ msg_checking="${msg_begin}33m"
++ AS_IF([test ${TEST_COLORS:+set}], [
++ msg_result_yes=[`expr ":$TEST_COLORS:" : ".*:pass=\([^:]*\):"`]
++ msg_result_no=[`expr ":$TEST_COLORS:" : ".*:fail=\([^:]*\):"`]
++ msg_result_other=[`expr ":$TEST_COLORS:" : ".*:skip=\([^:]*\):"`]
++ ])
++ msg_result_yes="${msg_begin}${msg_result_yes:-32;1}m"
++ msg_result_no="${msg_begin}${msg_result_no:-31;1}m"
++ msg_result_other="${msg_begin}${msg_result_other:-33;1}m"
++ msg_reset="${msg_begin}m"
++ ])
++ AS_UNSET(msg_begin)
++ ])
++ AS_REQUIRE_SHELL_FN([colorize_result],
++ [AS_FUNCTION_DESCRIBE([colorize_result], [MSG], [Colorize result])],
++ [AS_CASE(["$[]1"],
++ [yes], [AS_ECHO(["${msg_result_yes}$[]1${msg_reset}]")],
++ [no], [AS_ECHO(["${msg_result_no}$[]1${msg_reset}]")],
++ [AS_ECHO(["${msg_result_other}$[]1${msg_reset}]")])])
++])
++
++AC_DEFUN([COLORIZE_RESULT], [AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
++ AS_LITERAL_IF([$1],
++ [m4_case([$1],
++ [yes], [AS_ECHO(["${msg_result_yes}$1${msg_reset}"])],
++ [no], [AS_ECHO(["${msg_result_no}$1${msg_reset}"])],
++ [AS_ECHO(["${msg_result_other}$1${msg_reset}"])])],
++ [colorize_result "$1"]) dnl
++])
++
++AC_DEFUN([AC_CHECKING],[dnl
++AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
++AS_MESSAGE([checking ${msg_checking}$1${msg_reset}...])])
++
++AC_DEFUN([AC_MSG_RESULT], [dnl
++{ _AS_ECHO_LOG([result: $1])
++COLORIZE_RESULT([$1]); dnl
++}])
+
+Property changes on: acinclude.m4
+___________________________________________________________________
+Added: svn:eol-style
+## -0,0 +1 ##
++LF
+\ No newline at end of property
+Index: common.mk
+===================================================================
+--- a/common.mk (revision 53413)
++++ b/common.mk (revision 53414)
+@@ -518,7 +518,7 @@
+ $(Q)$(RM) id.c id.h probes.dmyh
+ $(Q)$(CHDIR) $(srcdir) && $(exec) $(RM) parse.c parse.h lex.c enc/trans/newline.c $(PRELUDES) revision.h
+ $(Q)$(CHDIR) $(srcdir) && $(exec) $(RM) id.c id.h probes.dmyh
+- $(Q)$(CHDIR) $(srcdir) && $(exec) $(RM) configure tool/config.guess tool/config.sub gems/*.gem
++ $(Q)$(CHDIR) $(srcdir) && $(exec) $(RM) configure aclocal.m4 tool/config.guess tool/config.sub gems/*.gem
+ realclean-ext:: PHONY
+ realclean-golf: distclean-golf
+ $(Q)$(RM) $(GOLFPRELUDES)
+Index: Makefile.in
+===================================================================
+--- a/Makefile.in (revision 53413)
++++ b/Makefile.in (revision 53414)
+@@ -22,6 +22,7 @@
+ YACC = bison
+ PURIFY =
+ AUTOCONF = autoconf
++ACLOCAL = aclocal
+ CONFIGURE = @CONFIGURE@
+ @SET_MAKE@
+ MKFILES = @MAKEFILES@
+@@ -310,6 +311,9 @@
+ $(srcdir)/$(CONFIGURE): $(srcdir)/configure.in $(srcdir)/aclocal.m4
+ $(CHDIR) $(srcdir) && exec $(AUTOCONF) -o $(@F)
+
++$(srcdir)/aclocal.m4: $(srcdir)/acinclude.m4
++ $(CHDIR) $(srcdir) && exec $(ACLOCAL)
++
+ incs: id.h
+ all-incs: probes.h
+
+++ /dev/null
-References:
-
-https://github.com/rdoc/rdoc/pull/340
-
---- ruby-2.1.2.orig/lib/rdoc.rb 2014-09-02 17:14:28.719224215 -0300
-+++ ruby-2.1.2/lib/rdoc.rb 2014-09-02 17:14:28.762223911 -0300
-@@ -109,6 +109,8 @@
- def self.load_yaml
- begin
- gem 'psych'
-+ rescue NameError => e # --disable-gems
-+ raise unless e.name == :gem
- rescue Gem::LoadError
- end
-
---- ruby-2.1.2.orig/lib/rdoc/markdown.rb 2014-09-02 17:14:28.761223918 -0300
-+++ ruby-2.1.2/lib/rdoc/markdown.rb 2014-09-02 17:14:28.805223607 -0300
-@@ -525,7 +525,6 @@
-
-
-
-- require 'rubygems'
- require 'rdoc'
- require 'rdoc/markup/to_joined_paragraph'
- require 'rdoc/markdown/entities'
---- ruby-2.1.2.orig/lib/rdoc/text.rb 2014-09-02 17:14:28.721224201 -0300
-+++ ruby-2.1.2/lib/rdoc/text.rb 2014-09-02 17:14:28.764223897 -0300
-@@ -10,6 +10,8 @@
-
- begin
- gem 'json'
-+rescue NameError => e # --disable-gems
-+ raise unless e.name == :gem
- rescue Gem::LoadError
- end
-
SUBMENU:=Tcl
SECTION:=lang
CATEGORY:=Languages
- DEPENDS:=+libpthread
+ DEPENDS:=+libpthread @BROKEN
TITLE:=The Tcl language
URL:=http://www.tcl.tk/
endef
include $(TOPDIR)/rules.mk
PKG_NAME:=c-ares
-PKG_VERSION:=1.10.0
+PKG_VERSION:=1.11.0
PKG_RELEASE:=1
PKG_LICENSE:=MIT
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://c-ares.haxx.se/download
-PKG_MD5SUM:=1196067641411a75d3cbebe074fd36d8
+PKG_MD5SUM:=d5c6d522cfc54bb6f215a0b7912d46be
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
#
-# 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:=flac
PKG_VERSION:=1.3.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://downloads.xiph.org/releases/flac/
--- /dev/null
+--- a/src/libFLAC/cpu.c
++++ b/src/libFLAC/cpu.c
+@@ -243,7 +243,7 @@ void FLAC__cpu_info(FLAC__CPUInfo *info)
+ struct sigaction sigill_save;
+ struct sigaction sigill_sse;
+ sigill_sse.sa_sigaction = sigill_handler_sse_os;
+- __sigemptyset(&sigill_sse.sa_mask);
++ sigemptyset(&sigill_sse.sa_mask);
+ sigill_sse.sa_flags = SA_SIGINFO | SA_RESETHAND; /* SA_RESETHAND just in case our SIGILL return jump breaks, so we don't get stuck in a loop */
+ if(0 == sigaction(SIGILL, &sigill_sse, &sigill_save))
+ {
include $(TOPDIR)/rules.mk
PKG_NAME:=glpk
-PKG_VERSION:=4.57
+PKG_VERSION:=4.58
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
-PKG_MD5SUM:=237531a54f73155842f8defe51aedb0f
+PKG_MD5SUM:=924ff878278d07a52f2e06240f2fe30a
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=COPYING
config GNUTLS_CRYPTODEV
bool "enable /dev/crypto support"
- select PACKAGE_kmod-cryptodev
default n
config GNUTLS_HEARTBEAT
include $(TOPDIR)/rules.mk
PKG_NAME:=gnutls
-PKG_VERSION:=3.4.9
+PKG_VERSION:=3.4.10
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.4
-PKG_MD5SUM:=1b3b6d55d0e2b6d01a54f53129f1da9b
+PKG_MD5SUM:=fe9a0dc5adf205122f01a3e7dac5f8dd
#PKG_FIXUP:=autoreconf gettext-version
PKG_MAINTAINER:=Nikos Mavrogiannopoulos <nmav@gnutls.org>
PKG_LICENSE:=LGPLv2.1+
define Package/libgnutls
$(call Package/gnutls/Default)
TITLE+= (library)
- DEPENDS+= +libnettle +!LIBNETTLE_MINI:libgmp +GNUTLS_EXT_LIBTASN1:libtasn1 +GNUTLS_PKCS11:p11-kit
+ DEPENDS+= +libnettle +!LIBNETTLE_MINI:libgmp +GNUTLS_EXT_LIBTASN1:libtasn1 +GNUTLS_PKCS11:p11-kit +GNUTLS_CRYPTODEV:kmod-cryptodev
endef
define Package/libgnutls/description
#
-# Copyright (C) 2008-2015 OpenWrt.org
+# Copyright (C) 2008-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=libesmtp
PKG_VERSION:=1.0.6
-PKG_RELEASE:=2
-PKG_MD5SUM:=c4fedc999b6c3820296b0eb92cc2e252
+PKG_RELEASE:=3
PKG_MAINTAINER:=Othmar Truniger <github@truniger.ch>
PKG_LICENSE:=LGPL-2.0+
PKG_LICENSE_FILES:=COPYING
-PKG_SOURCE_URL:=http://www.stafford.uklinux.net/libesmtp
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/tru7/libesmtp.git
+PKG_SOURCE_VERSION=10e9a6df9f76da610941addf71b9a3cbf94f2e9f
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_BUILD_PARALLEL:=1
SECTION:=libs
CATEGORY:=Libraries
TITLE:=A Library for Posting Electronic Mail
- URL:=http://www.stafford.uklinux.net/libesmtp/
- DEPENDS:=+libpthread
+ URL:=https://github.com/tru7/libesmtp.git
+ DEPENDS:=+libpthread +libopenssl
endef
-CONFIGURE_ARGS += \
- --without-openssl
-
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libesmtp-config $(1)/usr/bin/
include $(TOPDIR)/rules.mk
PKG_NAME:=libev
-PKG_VERSION:=4.20
-PKG_RELEASE:=2
+PKG_VERSION:=4.22
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://dist.schmorp.de/libev/Attic/
-PKG_MD5SUM:=1cac539cfc560f381a490c9fba940de9
+PKG_MD5SUM:=bf0007e37240103d3c2be80ca9bee3f9
PKG_LICENSE:=BSD-2-Clause
PKG_MAINTAINER:=Karl Palsson <karlp@tweak.net.au>
include $(TOPDIR)/rules.mk
PKG_NAME:=libinput
-PKG_VERSION:=1.1.7
+PKG_VERSION:=1.2.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://www.freedesktop.org/software/libinput/
-PKG_MD5SUM:=a501715a6135ac1f772bb5f3e3183481
+PKG_MD5SUM:=2b36d32362111c3e99f19c83bc535332
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=COPYING
TARGET_CFLAGS+= -std=gnu99
+CONFIGURE_ARGS += --disable-libwacom
+
define Package/libinput
SECTION:=libs
CATEGORY:=Libraries
include $(TOPDIR)/rules.mk
PKG_NAME:=v4l-utils
-PKG_VERSION:=1.6.3
+PKG_VERSION:=1.10.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.linuxtv.org/downloads/v4l-utils
-PKG_MD5SUM:=307858616be6374f63bf946307f15a7f
+PKG_MD5SUM:=945a38979138997e805828a4a53e53ec
PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
This package contains the video4linux utilities.
endef
-TARGET_CFLAGS += $(FPIC) -std=gnu99
+TARGET_CFLAGS += $(FPIC)
TARGET_LDFLAGS += -largp
CONFIGURE_ARGS+= \
+++ /dev/null
---- a/lib/libv4lconvert/control/libv4lcontrol.c
-+++ b/lib/libv4lconvert/control/libv4lcontrol.c
-@@ -570,7 +570,7 @@ static void v4lcontrol_get_flags_from_db
- struct v4lcontrol_data *v4lcontrol_create(int fd, void *dev_ops_priv,
- const struct libv4l_dev_ops *dev_ops, int always_needs_conversion)
- {
-- int shm_fd;
-+ int shm_fd, fdflags;
- int i, rc, got_usb_info, speed, init = 0;
- char *s, shm_name[256], pwd_buf[1024];
- struct v4l2_capability cap;
-@@ -695,33 +695,38 @@ struct v4lcontrol_data *v4lcontrol_creat
-
- if (getpwuid_r(geteuid(), &pwd, pwd_buf, sizeof(pwd_buf), &pwd_p) == 0) {
- if (got_usb_info)
-- snprintf(shm_name, 256, "/libv4l-%s:%s:%04x:%04x:%s", pwd.pw_name,
-+ snprintf(shm_name, 256, "/dev/shm/libv4l-%s:%s:%04x:%04x:%s", pwd.pw_name,
- cap.bus_info, (int)vendor_id, (int)product_id, cap.card);
- else
-- snprintf(shm_name, 256, "/libv4l-%s:%s:%s", pwd.pw_name,
-+ snprintf(shm_name, 256, "/dev/shm/libv4l-%s:%s:%s", pwd.pw_name,
- cap.bus_info, cap.card);
- } else {
- perror("libv4lcontrol: error getting username using uid instead");
- if (got_usb_info)
-- snprintf(shm_name, 256, "/libv4l-%lu:%s:%04x:%04x:%s",
-+ snprintf(shm_name, 256, "/dev/shm/libv4l-%lu:%s:%04x:%04x:%s",
- (unsigned long)geteuid(), cap.bus_info,
- (int)vendor_id, (int)product_id, cap.card);
- else
-- snprintf(shm_name, 256, "/libv4l-%lu:%s:%s", (unsigned long)geteuid(),
-+ snprintf(shm_name, 256, "/dev/shm/libv4l-%lu:%s:%s", (unsigned long)geteuid(),
- cap.bus_info, cap.card);
- }
-
- /* / is not allowed inside shm names */
-- for (i = 1; shm_name[i]; i++)
-+ for (i = 9; shm_name[i]; i++) /* start after "/dev/shm", i = 9 */
- if (shm_name[i] == '/')
- shm_name[i] = '-';
-
- /* Open the shared memory object identified by shm_name */
-- shm_fd = shm_open(shm_name, (O_CREAT | O_EXCL | O_RDWR), (S_IREAD | S_IWRITE));
-+ shm_fd = open(shm_name, (O_CREAT | O_EXCL | O_RDWR), (S_IREAD | S_IWRITE));
- if (shm_fd >= 0)
- init = 1;
- else
-- shm_fd = shm_open(shm_name, O_RDWR, (S_IREAD | S_IWRITE));
-+ shm_fd = open(shm_name, O_RDWR, (S_IREAD | S_IWRITE));
-+
-+ /* This is all uClibc > 0.9.30 seems to do for shm_open() in librt/shm.c */
-+ fdflags = fcntl(shm_fd, F_GETFD, 0);
-+ if (fdflags >= 0)
-+ fdflags = fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC);
-
- if (shm_fd >= 0) {
- /* Set the shared memory size */
+++ /dev/null
---- a/configure.ac
-+++ b/configure.ac
-@@ -80,6 +80,20 @@ gl_VISIBILITY
- AC_CHECK_HEADERS([sys/klog.h])
- AC_CHECK_FUNCS([klogctl])
-
-+AC_CACHE_CHECK([for ioctl with POSIX signature],
-+ [gl_cv_func_ioctl_posix_signature],
-+ [AC_COMPILE_IFELSE(
-+ [AC_LANG_PROGRAM(
-+ [[#include <sys/ioctl.h>]],
-+ [[int ioctl (int, int, ...);]])
-+ ],
-+ [gl_cv_func_ioctl_posix_signature=yes],
-+ [gl_cv_func_ioctl_posix_signature=no])
-+ ])
-+if test "x$gl_cv_func_ioctl_posix_signature" = xyes; then
-+ AC_DEFINE([HAVE_POSIX_IOCTL], [1], [Have ioctl with POSIX signature])
-+fi
-+
- # Check host os
- case "$host_os" in
- linux*)
--- /dev/null
+--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
+@@ -671,15 +671,18 @@ static bool parse_subset(char *optarg)
+
+ static bool parse_next_subopt(char **subs, char **value)
+ {
+- static char *const subopts[] = {
+- NULL
+- };
+- int opt = getsubopt(subs, subopts, value);
++ char *stmp = *subs;
++ *value = NULL;
+
+- if (opt < 0 || *value)
++ if (*subs) {
++ *subs = strchr(stmp, ',');
++ if (*subs)
++ *(*subs)++ = 0;
++ else *subs = stmp + strlen(stmp);
++
++ *value = stmp;
+ return false;
+- fprintf(stderr, "No value given to suboption <%s>\n",
+- subopts[opt]);
++ }
+ return true;
+ }
+
+++ /dev/null
---- a/lib/libv4lconvert/libv4lsyscall-priv.h
-+++ b/lib/libv4lconvert/libv4lsyscall-priv.h
-@@ -35,18 +35,23 @@
- which is broken on some systems and doesn't include them itself :( */
-
- #ifdef linux
-+#define __NEED_off_t
- #include <sys/time.h>
- #include <syscall.h>
- #include <linux/types.h>
- #include <linux/ioctl.h>
- /* On 32 bits archs we always use mmap2, on 64 bits archs there is no mmap2 */
- #ifdef __NR_mmap2
-+#undef SYS_mmap2
- #define SYS_mmap2 __NR_mmap2
- #define MMAP2_PAGE_SHIFT 12
- #else
- #define SYS_mmap2 SYS_mmap
- #define MMAP2_PAGE_SHIFT 0
- #endif
-+#if !(defined(__UCLIBC__) || defined(__GLIBC__))
-+typedef off_t __off_t;
-+#endif
- #endif
-
- #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
---- a/lib/libv4l1/v4l1compat.c
-+++ b/lib/libv4l1/v4l1compat.c
-@@ -62,7 +62,7 @@ LIBV4L_PUBLIC int open(const char *file,
- return fd;
- }
-
--#ifdef linux
-+#if defined(linux) && (defined(__GLIBC__) || defined(__UCLIBC__))
- LIBV4L_PUBLIC int open64(const char *file, int oflag, ...)
- {
- int fd;
-@@ -94,7 +94,11 @@ LIBV4L_PUBLIC int dup(int fd)
- return v4l1_dup(fd);
- }
-
-+#ifdef HAVE_POSIX_IOCTL
-+LIBV4L_PUBLIC int ioctl(int fd, int request, ...)
-+#else
- LIBV4L_PUBLIC int ioctl(int fd, unsigned long int request, ...)
-+#endif
- {
- void *arg;
- va_list ap;
-@@ -112,12 +116,12 @@ LIBV4L_PUBLIC ssize_t read(int fd, void
- }
-
- LIBV4L_PUBLIC void *mmap(void *start, size_t length, int prot, int flags, int fd,
-- __off_t offset)
-+ off_t offset)
- {
- return v4l1_mmap(start, length, prot, flags, fd, offset);
- }
-
--#ifdef linux
-+#if defined(linux) && (defined(__GLIBC__) || defined(__UCLIBC__))
- LIBV4L_PUBLIC void *mmap64(void *start, size_t length, int prot, int flags, int fd,
- __off64_t offset)
- {
---- a/lib/libv4l2/v4l2convert.c
-+++ b/lib/libv4l2/v4l2convert.c
-@@ -86,7 +86,7 @@ LIBV4L_PUBLIC int open(const char *file,
- return fd;
- }
-
--#ifdef linux
-+#if defined(linux) && (defined(__GLIBC__) || defined(__UCLIBC__))
- LIBV4L_PUBLIC int open64(const char *file, int oflag, ...)
- {
- int fd;
-@@ -121,7 +121,11 @@ LIBV4L_PUBLIC int dup(int fd)
- return v4l2_dup(fd);
- }
-
-+#ifdef HAVE_POSIX_IOCTL
-+LIBV4L_PUBLIC int ioctl(int fd, int request, ...)
-+#else
- LIBV4L_PUBLIC int ioctl(int fd, unsigned long int request, ...)
-+#endif
- {
- void *arg;
- va_list ap;
-@@ -144,7 +148,7 @@ LIBV4L_PUBLIC void *mmap(void *start, si
- return v4l2_mmap(start, length, prot, flags, fd, offset);
- }
-
--#ifdef linux
-+#if defined(linux) && (defined(__GLIBC__) || defined(__UCLIBC__))
- LIBV4L_PUBLIC void *mmap64(void *start, size_t length, int prot, int flags, int fd,
- __off64_t offset)
- {
include $(TOPDIR)/rules.mk
PKG_NAME:=libwebsockets
-PKG_VERSION:=1.6.2
+PKG_VERSION:=1.7.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_NAME:=postfix
PKG_RELEASE:=1
PKG_SOURCE_URL:=ftp://ftp.porcupine.org/mirrors/postfix-release/official/
-PKG_VERSION:=3.0.3
-PKG_MD5SUM:=61caffae689c11d09b4c972a394ae3b1
+PKG_VERSION:=3.1.0
+PKG_MD5SUM:=b4a506fa74c69c6fb1875c0971268344
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_MAINTAINER:=Denis Shulyaka <Shulyaka@gmail.com>
PKG_LICENSE:=IPL-1.0
# postconf -d > /tmp/main.cf.new
# 3. Transfer /tmp/main.cf.new file to the build system
# 4. Execute the following command:
-# cat /tmp/main.cf.new | ( echo '# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE'; echo '# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX.'; echo '#'; grep -v ^alias_maps\ = |grep -v ^alias_database\ = |grep -v ^command_directory\ = |grep -v ^config_directory\ = |grep -v ^daemon_directory\ = |grep -v ^data_directory\ = |grep -v ^default_database_type\ = |grep -v ^html_directory\ = |grep -v ^mail_spool_directory\ = |grep -v ^mailq_path\ = |grep -v ^manpage_directory\ = |grep -v ^meta_directory\ = |grep -v ^mydomain\ = |grep -v ^myhostname\ = |grep -v ^mynetworks\ = |grep -v ^mynetworks_style\ = |grep -v ^newaliases_path\ = |grep -v ^queue_directory\ = |grep -v ^readme_directory\ = |grep -v ^sample_directory\ = |grep -v ^sendmail_path\ = |grep -v ^shlib_directory\ = |grep -v ^smtputf8_enable\ = |grep -v ^virtual_maps\ = ) > files/main.cf.default
+# cat /tmp/main.cf.new | ( echo '# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE'; echo '# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX.'; echo '#'; grep -v ^alias_maps\ = |grep -v ^alias_database\ = |grep -v ^command_directory\ = |grep -v ^config_directory\ = |grep -v ^daemon_directory\ = |grep -v ^data_directory\ = |grep -v ^default_database_type\ = |grep -v ^html_directory\ = |grep -v ^mail_spool_directory\ = |grep -v ^mailq_path\ = |grep -v ^manpage_directory\ = |grep -v ^meta_directory\ = |grep -v ^mydomain\ = |grep -v ^myhostname\ = |grep -v ^mynetworks\ = |grep -v ^mynetworks_style\ = |grep -v ^newaliases_path\ = |grep -v ^queue_directory\ = |grep -v ^readme_directory\ = |grep -v ^sample_directory\ = |grep -v ^sendmail_path\ = |grep -v ^shlib_directory\ = |grep -v ^smtputf8_enable\ = |grep -v ^virtual_maps\ = |grep -v ^process_id\ = ) > files/main.cf.default
# 5. Done. Now you can rebuild the package with new main.cf.default.
#
address_verify_negative_cache = yes
address_verify_negative_expire_time = 3d
address_verify_negative_refresh_time = 3h
+address_verify_pending_request_limit = 5000
address_verify_poll_count = ${stress?{1}:{3}}
address_verify_poll_delay = 3s
address_verify_positive_expire_time = 31d
default_recipient_refill_delay = 5s
default_recipient_refill_limit = 100
default_transport = smtp
+default_transport_rate_delay = 0s
default_verp_delimiters = +=
defer_code = 450
defer_service_name = defer
disable_mime_output_conversion = no
disable_verp_bounces = no
disable_vrfy_command = no
+dns_ncache_ttl_fix_enable = no
dnsblog_reply_delay = 0s
dnsblog_service_name = dnsblog
dont_remove = 0
error_recipient_refill_delay = $default_recipient_refill_delay
error_recipient_refill_limit = $default_recipient_refill_limit
error_service_name = error
+error_transport_rate_delay = $default_transport_rate_delay
execution_directory_expansion_filter = 1234567890!@%-_=+:,./abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
expand_owner_alias = no
export_environment = TZ MAIL_CONFIG LANG
lmtp_dns_support_level =
lmtp_enforce_tls = no
lmtp_extra_recipient_limit = $default_extra_recipient_limit
+lmtp_fallback_relay =
lmtp_generic_maps =
lmtp_header_checks =
lmtp_host_lookup = dns
lmtp_tls_trust_anchor_file =
lmtp_tls_verify_cert_match = hostname
lmtp_tls_wrappermode = no
+lmtp_transport_rate_delay = $default_transport_rate_delay
lmtp_use_tls = no
lmtp_xforward_timeout = 300s
local_command_shell =
local_recipient_refill_delay = $default_recipient_refill_delay
local_recipient_refill_limit = $default_recipient_refill_limit
local_transport = local:$myhostname
+local_transport_rate_delay = $default_transport_rate_delay
luser_relay =
mail_name = Postfix
mail_owner = postfix
-mail_release_date = 20151010
-mail_version = 3.0.3
+mail_release_date = 20160224
+mail_version = 3.1.0
mailbox_command =
mailbox_command_maps =
mailbox_delivery_lock = fcntl, dotlock
milter_header_checks =
milter_helo_macros = {tls_version} {cipher} {cipher_bits} {cert_subject} {cert_issuer}
milter_macro_daemon_name = $myhostname
+milter_macro_defaults =
milter_macro_v = $mail_name $mail_version
milter_mail_macros = i {auth_type} {auth_authen} {auth_author} {mail_addr} {mail_host} {mail_mailer}
milter_protocol = 6
non_fqdn_reject_code = 504
non_smtpd_milters =
notify_classes = resource, software
+openssl_path = openssl
owner_request_special = yes
parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,permit_mx_backup_networks,qmqpd_authorized_clients,relay_domains,smtpd_access_maps
permit_mx_backup_networks =
postscreen_discard_ehlo_keyword_address_maps = $smtpd_discard_ehlo_keyword_address_maps
postscreen_discard_ehlo_keywords = $smtpd_discard_ehlo_keywords
postscreen_dnsbl_action = ignore
+postscreen_dnsbl_max_ttl = ${postscreen_dnsbl_ttl?{$postscreen_dnsbl_ttl}:{1}}h
+postscreen_dnsbl_min_ttl = 60s
postscreen_dnsbl_reply_map =
postscreen_dnsbl_sites =
postscreen_dnsbl_threshold = 1
postscreen_dnsbl_timeout = 10s
-postscreen_dnsbl_ttl = 1h
postscreen_dnsbl_whitelist_threshold = 0
postscreen_enforce_tls = $smtpd_enforce_tls
postscreen_expansion_filter = $smtpd_expansion_filter
postscreen_watchdog_timeout = 10s
postscreen_whitelist_interfaces = static:all
prepend_delivered_header = command, file, forward
-process_id = 13574
process_id_directory = pid
process_name = postconf
propagate_unmatched_extensions = canonical, virtual
relay_recipient_refill_delay = $default_recipient_refill_delay
relay_recipient_refill_limit = $default_recipient_refill_limit
relay_transport = relay
+relay_transport_rate_delay = $default_transport_rate_delay
relayhost =
relocated_maps =
remote_header_rewrite_domain =
retry_recipient_limit = $default_recipient_limit
retry_recipient_refill_delay = $default_recipient_refill_delay
retry_recipient_refill_limit = $default_recipient_refill_limit
+retry_transport_rate_delay = $default_transport_rate_delay
rewrite_service_name = rewrite
send_cyrus_sasl_authzid = no
sender_bcc_maps =
smtp_tls_block_early_mail_reply = no
smtp_tls_cert_file =
smtp_tls_ciphers = medium
+smtp_tls_dane_insecure_mx_policy = dane
smtp_tls_dcert_file =
smtp_tls_dkey_file = $smtp_tls_dcert_file
smtp_tls_eccert_file =
smtp_tls_trust_anchor_file =
smtp_tls_verify_cert_match = hostname
smtp_tls_wrappermode = no
+smtp_transport_rate_delay = $default_transport_rate_delay
smtp_use_tls = no
smtp_xforward_timeout = 300s
smtpd_authorized_verp_clients = $authorized_verp_clients
smtpd_authorized_xclient_hosts =
smtpd_authorized_xforward_hosts =
smtpd_banner = $myhostname ESMTP $mail_name
+smtpd_client_auth_rate_limit = 0
smtpd_client_connection_count_limit = 50
smtpd_client_connection_rate_limit = 0
smtpd_client_event_limit_exceptions = ${smtpd_client_connection_limit_exceptions:$mynetworks}
smtpd_policy_service_default_action = 451 4.3.5 Server configuration problem
smtpd_policy_service_max_idle = 300s
smtpd_policy_service_max_ttl = 1000s
+smtpd_policy_service_policy_context =
smtpd_policy_service_request_limit = 0
smtpd_policy_service_retry_delay = 1s
smtpd_policy_service_timeout = 100s
tls_disable_workarounds =
tls_eecdh_strong_curve = prime256v1
tls_eecdh_ultra_curve = secp384r1
-tls_export_cipherlist = aNULL:-aNULL:ALL:+RC4:@STRENGTH
-tls_high_cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH
+tls_export_cipherlist = aNULL:-aNULL:HIGH:MEDIUM:LOW:EXPORT:+RC4:@STRENGTH
+tls_high_cipherlist = aNULL:-aNULL:HIGH:@STRENGTH
tls_legacy_public_key_fingerprints = no
-tls_low_cipherlist = aNULL:-aNULL:ALL:!EXPORT:+RC4:@STRENGTH
-tls_medium_cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH
+tls_low_cipherlist = aNULL:-aNULL:HIGH:MEDIUM:LOW:+RC4:@STRENGTH
+tls_medium_cipherlist = aNULL:-aNULL:HIGH:MEDIUM:+RC4:@STRENGTH
tls_null_cipherlist = eNULL:!aNULL
tls_preempt_cipherlist = no
tls_random_bytes = 32
virtual_recipient_refill_delay = $default_recipient_refill_delay
virtual_recipient_refill_limit = $default_recipient_refill_limit
virtual_transport = virtual
+virtual_transport_rate_delay = $default_transport_rate_delay
virtual_uid_maps =
diff -rupN postfix-2.8.1/src/smtpd/smtpd_check.c postfix-2.8.1_patched/src/smtpd/smtpd_check.c
--- postfix-2.8.1/src/smtpd/smtpd_check.c 2011-01-04 22:03:50.000000000 +0300
+++ postfix-2.8.1_patched/src/smtpd/smtpd_check.c 2011-03-06 19:35:39.000000000 +0300
-@@ -5277,7 +5277,7 @@ char *smtpd_check_queue(SMTPD_STATE *s
+@@ -5296,7 +5296,7 @@ char *smtpd_check_queue(SMTPD_STATE *s
*/
#define BLOCKS(x) ((x) / fsbuf.block_size)
diff -Naur postfix-2.10.2/conf/post-install postfix-2.10.2_patched/conf/post-install
--- postfix-2.10.2/conf/post-install 2013-06-13 18:07:46.000000000 +0400
+++ postfix-2.10.2_patched/conf/post-install 2013-11-19 21:17:49.572820573 +0400
-@@ -359,10 +359,10 @@
+@@ -361,10 +361,10 @@
# Sanity checks
case $setgid_group in
no) echo $0: Error: setgid_group no longer accepts \"no\" values. 1>&2
-@@ -370,7 +370,7 @@
+@@ -372,7 +372,7 @@
esac
for path in "$daemon_directory" "$command_directory" "$queue_directory" \
"$meta_directory"
do
case "$path" in
-@@ -379,7 +379,7 @@
+@@ -381,7 +381,7 @@
esac
done
diff -Naur postfix-2.10.2/postfix-install postfix-2.10.2_patched/postfix-install
--- postfix-2.10.2/postfix-install 2012-05-22 23:40:29.000000000 +0400
+++ postfix-2.10.2_patched/postfix-install 2013-11-19 21:12:20.694160734 +0400
-@@ -543,13 +543,13 @@
+@@ -554,13 +554,13 @@
exit 1;;
esac
for path in "$html_directory" "$readme_directory" "$shlib_directory"
do
-@@ -562,7 +562,7 @@
+@@ -573,7 +573,7 @@
done
for path in "$daemon_directory" "$data_directory" "$command_directory" "$queue_directory" \
"$meta_directory"
do
case "$path" in
-@@ -758,8 +758,8 @@
+@@ -780,8 +780,8 @@
compare_or_replace $mode "$owner" "$group" html/$file \
$HTML_DIRECTORY/$file || exit 1;;
'$manpage_directory')
diff -Naur postfix-2.11.1/src/util/sys_defs.h postfix-2.11.1.patched/src/util/sys_defs.h
--- postfix-2.11.1/src/util/sys_defs.h 2013-09-30 00:51:55.000000000 +0400
+++ postfix-2.11.1.patched/src/util/sys_defs.h 2014-09-29 03:11:48.962277971 +0400
-@@ -768,9 +768,8 @@
+@@ -769,9 +769,8 @@
#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK
#define DEF_MAILBOX_LOCK "fcntl, dotlock" /* RedHat >= 4.x */
#define HAS_FSYNC
--- a/makedefs 2016-01-28 12:30:14.444082390 -0500
+++ b/makedefs 2016-01-28 13:44:02.092006512 -0500
-@@ -193,7 +193,7 @@ error() {
+@@ -198,7 +198,7 @@ error() {
case $# in
# Officially supported usage.
RELEASE=`(uname -r) 2>/dev/null`
# No ${x%%y} support in Solaris 11 /bin/sh
RELEASE_MAJOR=`expr "$RELEASE" : '\([0-9]*\)'` || exit 1
-@@ -207,6 +207,15 @@ case $# in
+@@ -212,6 +212,15 @@ case $# in
esac
case "$SYSTEM.$RELEASE" in
diff -Naur postfix-2.11.1/postfix-install postfix-2.11.1.patched/postfix-install
--- postfix-2.11.1/postfix-install 2014-10-05 20:43:58.598876904 +0400
+++ postfix-2.11.1.patched/postfix-install 2014-10-05 20:47:36.076700082 +0400
-@@ -830,23 +830,23 @@
+@@ -852,23 +852,23 @@
esac
done
diff -Naur postfix-2.11.1/conf/post-install postfix-2.11.1.patched/conf/post-install
--- postfix-2.11.1/conf/post-install 2014-10-05 20:43:58.597876946 +0400
+++ postfix-2.11.1.patched/conf/post-install 2014-10-11 16:28:01.258874097 +0400
-@@ -319,7 +319,7 @@
+@@ -321,7 +321,7 @@
case `uname -s` in
HP-UX*) FMT=cat;;
SunOS*) FMT=fake_fmt;;
- *) FMT=fmt;;
-+ *) FMT="xargs echo";;
++ *) FMT=cat;;
esac
# If a parameter is not set via the command line or environment,
include $(TOPDIR)/rules.mk
PKG_NAME:=adblock
-PKG_VERSION:=0.80.1
+PKG_VERSION:=1.0.0
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Dirk Brenken <openwrt@brenken.org>
define Package/$(PKG_NAME)/description
Powerful adblock script to block ad/abuse domains.
-Currently the script supports 15 domain blacklist sites plus manual black- and whitelist overrides.
-Please see README.md in /etc/adblock for further information.
+Currently the script supports 16 domain blacklist sites plus manual black- and whitelist overrides.
+Please see https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md for further information.
endef
$(INSTALL_CONF) ./files/adblock.conf $(1)/etc/adblock/adblock.conf.default
$(INSTALL_CONF) ./files/adblock.blacklist $(1)/etc/adblock/
$(INSTALL_CONF) ./files/adblock.whitelist $(1)/etc/adblock/
- $(INSTALL_CONF) ./files/README.md $(1)/etc/adblock/
$(INSTALL_DIR) $(1)/www/adblock
$(INSTALL_DATA) ./files/www/adblock/* $(1)/www/adblock/
# adblock script for openwrt
## Description
-A lot of people already use adblocker plugins within their desktop browsers,
-but what if you are using your (smart) phone, tablet, watch or any other wlan gadget...getting rid of annoying ads, trackers and other abuse sites (like facebook ;-) is simple: block them with your router.
-
-When the dns server on your router receives dns requests, you will sort out queries that ask for the resource records of ad servers and return the local ip address of your router and the internal web server delivers a transparent pixel instead.
+A lot of people already use adblocker plugins within their desktop browsers, but what if you are using your (smart) phone, tablet, watch or any other wlan gadget...getting rid of annoying ads, trackers and other abuse sites (like facebook ;-) is simple: block them with your router. When the dns server on your router receives dns requests, you will sort out queries that ask for the resource records of ad servers and return the local ip address of your router and the internal web server delivers a transparent pixel instead.
## Main Features
* support of the following domain blocklist sources (free for private usage, for commercial use please check their individual licenses):
* => numerous updates on the same day, approx. 1.800 entries
* [palevotracker](https://palevotracker.abuse.ch)
* => daily updates, approx. 15 entries
- * [ruadlist+easylist](https://code.google.com/p/ruadlist)
+ * [ruadlist/easylist](https://code.google.com/p/ruadlist)
* => weekly updates, approx. 2.000 entries
* [shallalist](http://www.shallalist.de) (categories "adv" "costtraps" "spyware" "tracker" "warez" enabled by default)
* => daily updates, approx. 32.000 entries (a short description of all shallalist categories can be found [online](http://www.shallalist.de/categories.html))
* [spam404](http://www.spam404.com)
* => infrequent updates, approx. 5.000 entries
+ * [sysctl/cameleon](http://sysctl.org/cameleon)
+ * => weekly updates, approx. 21.000 entries
* [whocares](http://someonewhocares.org)
* => weekly updates, approx. 12.000 entries
* [winhelp](http://winhelp2002.mvps.org)
* adblock source list parsing by fast & flexible regex rulesets
* additional white- and blacklist support for manual overrides
* quality checks during & after update of adblock lists to ensure a reliable dnsmasq service
-* wan update check, to wait for an active wan uplink before update
* basic adblock statistics via iptables packet counters for each chain
* status & error logging to stdout and syslog
-* use of dynamic uhttpd instance as adblock pixel server
+* use a dynamic uhttpd instance as an adblock pixel server
+* use dynamic iptables rulesets for adblock related redirects/rejects
* openwrt init system support (start/stop/restart/reload)
-* hotplug support, adblock start will be triggered by wan 'ifup' event
-* optional features (disabled by default):
- * adblock list backup/restore
- * debug logging to separate file
+* hotplug support, the adblock start will be triggered by wan 'ifup' event
+* optional: adblock list backup/restore (disabled by default)
## Prerequisites
* [openwrt](https://openwrt.org), tested with latest stable release (Chaos Calmer 15.05) and with current trunk (Designated Driver > r47025)
* optional: 'kmod-ipt-nat6' for IPv6 support
* the above dependencies and requirements will be checked during package installation & script runtime
-## Installation & Usage
-* install the adblock package (*opkg update & opkg install adblock*)
+## Designated Driver Installation & Usage
+* install the adblock package (*opkg install adblock*)
* start the adblock service with */etc/init.d/adblock start* and check *logread -e "adblock"* for adblock related information
* optional: enable/disable your required adblock list sources in */etc/config/adblock* - 'adaway', 'disconnect' and 'yoyo' are enabled by default
* optional: maintain the adblock service in luci under 'System => Startup'
## LuCI adblock companion package
For easy management of the various blocklist sources and and the adblock options there is also a nice & efficient LuCI frontend available.
-Please install the package 'luci-app-adblock'. Then you will find the application in LuCI located under 'Services' menu.
+Please install the package 'luci-app-adblock' (*opkg install luci-app-adblock*). Then you will find the application in LuCI located under 'Services' menu.
Thanks to Hannu Nyman for this great adblock LuCI frontend!
-## CC installation notes
+## Chaos Calmer installation notes
* currently the adblock package is *not* part of the CC package repository
-* download the latest adblock package *adblock_x.xx.x-1_all.ipk* from a DD snapshot [package directory](https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/packages)
+* download the latest adblock package *adblock_x.xx.x-1_all.ipk* from a development snapshot [package directory](https://downloads.openwrt.org/snapshots/trunk/ar71xx/nand/packages/packages)
+* due to server hardware troubles the package directory link above may not work, if so please check the [main openwrt download area](https://downloads.openwrt.org) manually
* manual transfer the package to your router and install the opkg package as usual
## Tweaks
* there is no need to enable all blacklist sites at once, for normal use one to three adblock list sources should be sufficient
-* if you really need to handle all blacklists at once add an usb stick or any other storage device to supersize your temp directory with a swap partition => see [openwrt wiki](https://wiki.openwrt.org/doc/uci/fstab) for further details
-* add static, personal domain white- or blacklist entries, one domain per line (wildcards & regex are not allowed!), by default both lists are located in */etc/adblock*
-* enable the backup/restore feature, to restore automatically the latest, stable backup of your adblock lists in case of any processing error
-* enable the logging feature for continuous logfile writing to monitor the adblock runs over a longer period
+* if you really need to handle all blacklists at once add an usb stick or any other storage device to enlarge your temp directory with a swap partition => see [openwrt wiki](https://wiki.openwrt.org/doc/uci/fstab) for further details
+* add personal domain white- or blacklist entries as an additional blocklist source, one domain per line (wildcards & regex are not allowed!), by default both empty lists are located in */etc/adblock*
+* enable the backup/restore feature, to restore automatically the latest stable backup of your adblock lists in case of any (partial) processing error (i.e. a single blocklist source server is down). Please use an (external) solid partition and *not* your volatile router temp directory for this
* for a scheduled call of the adblock service via */etc/init.d/adblock start* add an appropriate crontab entry
+* in case of any script runtime errors, you should enable script debugging: for this please change the value of the main 'DEBUG' switch, you'll find it in the header of */usr/bin/adblock-update.sh*
## Further adblock config options
* usually the adblock autodetection works quite well and no manual config overrides are needed, all options apply to 'global' adblock config section:
- * adb\_enabled => main switch to enable/disable adblock service (default: '1' (enabled))
+ * adb\_enabled => main switch to enable/disable adblock service (default: '1', enabled)
* adb\_cfgver => config version string (do not change!) - adblock checks this entry and automatically applies the current config, if none or an older revision was found.
* adb\_wanif => name of the logical wan interface (default: 'wan')
* adb\_lanif => name of the logical lan interface (default: 'lan')
* adb\_port => port of the adblock uhttpd instance (default: '65535')
* adb\_nullipv4 => IPv4 blackhole ip address (default: '192.0.2.1')
* adb\_nullipv6 => IPv6 blackhole ip address (default: '::ffff:c000:0201')
+ * adb\_forcedns => redirect all DNS queries to local dnsmasq resolver (default: '1', enabled)
## Background
This adblock package is a dns/dnsmasq based adblock solution for openwrt.
Queries to ad/abuse domains are never forwarded and always replied with a local IP address which may be IPv4 or IPv6.
For that purpose adblock uses an ip address from the private 'TEST-NET-1' subnet (192.0.2.1 / ::ffff:c000:0201) by default.
Furthermore all ad/abuse queries will be filtered by ip(6)tables and redirected to internal adblock pixel server (in PREROUTING chain) or rejected (in FORWARD or OUTPUT chain).
-All iptables and uhttpd related adblock additions are non-destructive, no hard-coded changes in 'firewall.user', 'uhttpd' config or any other openwrt related config files. There is *no* adblock background daemon running, the (scheduled) start of the adblock service keeps only the adblock lists up-to-date.
+All iptables and uhttpd related adblock additions are non-destructive, no hard-coded changes in 'firewall.user', 'uhttpd' config or any other openwrt related config files. There is *no* adblock background daemon running, the (scheduled) start of the adblock service keeps only the adblock lists up-to-date.
## Support
-Please join the adblock discussion in this [openwrt forum thread](https://forum.openwrt.org/viewtopic.php?id=59803) or contact me by mail <openwrt@brenken.org>
+Please join the adblock discussion in this [openwrt forum thread](https://forum.openwrt.org/viewtopic.php?id=59803) or contact me by mail <openwrt@brenken.org>
## Removal
* stop all adblock related services with */etc/init.d/adblock stop*
#!/bin/sh
-#################################################
-# function library used by adblock-update.sh #
-# written by Dirk Brenken (openwrt@brenken.org) #
-#################################################
+# function library used by adblock-update.sh
+# written by Dirk Brenken (openwrt@brenken.org)
#####################################
# f_envload: load adblock environment
# get version string from default adblock configuration file
#
- cfg_version="$(/sbin/uci -q get adblock.global.adb_cfgver 2>/dev/null)"
- cfg_enabled="$(/sbin/uci -q get adblock.global.adb_enabled 2>/dev/null)"
+ cfg_version="$(/sbin/uci -q get adblock.global.adb_cfgver)"
+ cfg_enabled="$(/sbin/uci -q get adblock.global.adb_enabled)"
rc=$?
if [ $((rc)) -ne 0 ] || [ "${cfg_version}" != "${adb_scriptver%.*}" ]
then
- cp -pf "/etc/adblock/adblock.conf.default" "/etc/config/adblock" >/dev/null 2>&1
+ cp -pf "/etc/adblock/adblock.conf.default" "/etc/config/adblock"
rc=$?
if [ $((rc)) -eq 0 ]
then
#
if [ -r "/lib/functions.sh" ]
then
- . "/lib/functions.sh" 2>/dev/null
+ . "/lib/functions.sh"
else
rc=110
f_log "openwrt function library not found" "${rc}"
#
if [ -r "/lib/functions/network.sh" ]
then
- . "/lib/functions/network.sh" 2>/dev/null
+ . "/lib/functions/network.sh"
else
rc=115
f_log "openwrt network library not found" "${rc}"
f_log "adblock installation finished, 'opkg' currently locked by package installer"
f_exit
fi
- pkg_list="$(opkg list-installed 2>/dev/null)"
+ pkg_list="$(opkg list-installed)"
if [ -z "${pkg_list}" ]
then
rc=120
adb_nullipv6="::ffff:c000:0201"
adb_blacklist="/etc/adblock/adblock.blacklist"
adb_whitelist="/etc/adblock/adblock.whitelist"
+ adb_forcedns=1
# function to read global options by callback
#
# function to iterate through config list, read only options in "enabled" sections
#
- adb_cfglist="adb_backupdir adb_logfile adb_src"
+ adb_cfglist="adb_backupdir adb_src"
unset adb_sources
parse_config()
{
# set more script defaults (can't be overwritten by adblock config options)
#
- adb_cnt=0
- adb_minspace=20000
- adb_unique=1
- adb_tmpfile="$(mktemp -tu 2>/dev/null)"
- adb_tmpdir="$(mktemp -p /tmp -d 2>/dev/null)"
+ adb_count=0
+ adb_minspace=12000
+ adb_tmpfile="$(mktemp -tu)"
+ adb_tmpdir="$(mktemp -p /tmp -d)"
adb_dnsdir="/tmp/dnsmasq.d"
adb_dnsprefix="adb_list"
adb_prechain_ipv4="prerouting_rule"
adb_fwdchain_ipv6="forwarding_rule"
adb_outchain_ipv6="output_rule"
adb_fetch="/usr/bin/wget"
- unset adb_srclist
- unset adb_revsrclist
- unset adb_errsrclist
+ unset adb_srclist adb_revsrclist adb_errsrclist
# set adblock source ruleset definitions
#
- rset_start="sed -r 's/[[:space:]]|[\[!#/:;_].*|[0-9\.]*localhost.*//g; s/[\^#/:;_\.\t ]*$//g'"
- rset_end="tr -cd '[0-9a-z\.\-]\n' | sed -r 's/^[ \.\-].*$|^[a-z0-9]*[ \.\-]*$//g; /^[#/:;_\s]*$/d'"
- rset_adaway="${rset_start} | sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-1]\{1,1\}//g' | ${rset_end}"
- rset_blacklist="${rset_start} | ${rset_end}"
- rset_disconnect="${rset_start} | ${rset_end}"
- rset_dshield="${rset_start} | ${rset_end}"
- rset_feodo="${rset_start} | ${rset_end}"
- rset_malware="${rset_start} | ${rset_end}"
- rset_malwarelist="${rset_start} | sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-1]\{1,1\}//g' | ${rset_end}"
- rset_openphish="sed -e 's|^[^/]*//||' -e 's|/.*$||'"
- rset_palevo="${rset_start} | ${rset_end}"
- rset_ruadlist="sed -e '/^\|\|/! s/.*//; /\^$/! s/.*//; s/\^$//g; /[\.]/! s/.*//; s/^[\|]\{1,2\}//g' | ${rset_end}"
- rset_shalla="${rset_start} | sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}$//g' | ${rset_end}"
- rset_spam404="${rset_start} | sed 's/^\|\|//g' | ${rset_end}"
- rset_whocares="${rset_start} | sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-1]\{1,1\}//g' | ${rset_end}"
- rset_winhelp="${rset_start} | sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-1]\{1,1\}//g' | ${rset_end}"
- rset_yoyo="${rset_start} | sed 's/,/\n/g' | ${rset_end}"
- rset_zeus="${rset_start} | ${rset_end}"
+ rset_core="([A-Za-z0-9_-]+\.){1,}[A-Za-z]+"
+ rset_adaway="awk '\$0 ~/^127\.0\.0\.1[ \t]+${rset_core}/{print tolower(\$2)}'"
+ rset_blacklist="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_disconnect="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_dshield="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_feodo="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_malware="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_malwarelist="awk '\$0 ~/^127\.0\.0\.1[ \t]+${rset_core}/{print tolower(\$2)}'"
+ rset_openphish="awk -F '/' '\$3 ~/^${rset_core}/{print tolower(\$3)}'"
+ rset_palevo="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_ruadlist="awk -F '[|^]' '\$0 ~/^\|\|${rset_core}\^$/{print tolower(\$3)}'"
+ rset_shalla="awk -F '/' '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_spam404="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_sysctl="awk '\$0 ~/^127\.0\.0\.1[ \t]+${rset_core}/{print tolower(\$2)}'"
+ rset_whocares="awk '\$0 ~/^127\.0\.0\.1[ \t]+${rset_core}/{print tolower(\$2)}'"
+ rset_winhelp="awk '\$0 ~/^0\.0\.0\.0[ \t]+${rset_core}/{print tolower(\$2)}'"
+ rset_yoyo="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
+ rset_zeus="awk '\$1 ~/^${rset_core}/{print tolower(\$1)}'"
# get logical wan update interfaces (with default route) and their device names
#
- network_find_wan adb_wanif4 2>/dev/null
- network_find_wan6 adb_wanif6 2>/dev/null
+ network_find_wan adb_wanif4
+ network_find_wan6 adb_wanif6
if [ -z "${adb_wanif4}" ] && [ -z "${adb_wanif6}" ]
then
rc=125
f_log "LAN only (${adb_lanif}) network, no valid IPv4/IPv6 wan update interface found" "${rc}"
f_exit
else
- network_get_device adb_wandev4 "${adb_wanif4}" 2>/dev/null
- network_get_device adb_wandev6 "${adb_wanif6}" 2>/dev/null
+ network_get_device adb_wandev4 "${adb_wanif4}"
+ network_get_device adb_wandev6 "${adb_wanif6}"
break
fi
# get lan ip addresses
#
- network_get_ipaddr adb_ipv4 "${adb_lanif}" 2>/dev/null
- network_get_ipaddr6 adb_ipv6 "${adb_lanif}" 2>/dev/null
+ network_get_ipaddr adb_ipv4 "${adb_lanif}"
+ network_get_ipaddr6 adb_ipv6 "${adb_lanif}"
if [ -z "${adb_ipv4}" ] && [ -z "${adb_ipv6}" ]
then
rc=130
#
if [ -n "${adb_wanif6}" ]
then
- check="$(printf "${pkg_list}" | grep "^ip6tables -" 2>/dev/null)"
+ check="$(printf "${pkg_list}" | grep "^ip6tables -")"
if [ -z "${check}" ]
then
- f_log "package 'ip6tables' not found, IPv6 support wíll be disabled"
+ f_log "package 'ip6tables' not found, IPv6 support will be disabled"
unset adb_wanif6
else
- check="$(printf "${pkg_list}" | grep "^kmod-ipt-nat6 -" 2>/dev/null)"
+ check="$(printf "${pkg_list}" | grep "^kmod-ipt-nat6 -")"
if [ -z "${check}" ]
then
- f_log "package 'kmod-ipt-nat6' not found, IPv6 support wíll be disabled"
+ f_log "package 'kmod-ipt-nat6' not found, IPv6 support will be disabled"
unset adb_wanif6
fi
fi
# check ca-certificates package and set wget parms accordingly
#
wget_parm="--no-config --quiet --tries=1 --no-cache --no-cookies --max-redirect=0 --dns-timeout=5 --connect-timeout=5 --read-timeout=5"
- check="$(printf "${pkg_list}" | grep "^ca-certificates -" 2>/dev/null)"
+ check="$(printf "${pkg_list}" | grep "^ca-certificates -")"
if [ -z "${check}" ]
then
wget_parm="${wget_parm} --no-check-certificate"
#
if [ ! -r "${adb_blacklist}" ]
then
- rc=135
- f_log "adblock blacklist not found (${adb_blacklist})" "${rc}"
- f_exit
- elif [ ! -r "${adb_whitelist}" ]
+ f_log "adblock blacklist not found, source will be disabled"
+ fi
+ if [ ! -r "${adb_whitelist}" ]
then
- rc=135
- f_log "adblock whitelist not found (${adb_whitelist})" "${rc}"
- f_exit
+ f_log "adblock whitelist not found, source will be disabled"
fi
# check adblock temp directory
f_space "${adb_tmpdir}"
if [ "${space_ok}" = "false" ]
then
- rc=140
- f_log "not enough space in '${adb_tmpdir}', please supersize your temp directory" "${rc}"
- f_exit
+ if [ $((av_space)) -le 2000 ]
+ then
+ rc=135
+ f_log "not enough free space in '${adb_tmpdir}' (avail. ${av_space} kb)" "${rc}"
+ f_exit
+ else
+ f_log "not enough free space to handle all adblock list sources at once in '${adb_tmpdir}' (avail. ${av_space} kb)"
+ fi
fi
else
- rc=140
+ rc=135
f_log "temp directory not found" "${rc}"
f_exit
fi
# memory check
#
- mem_total="$(awk '$1 ~ /^MemTotal/ {print $2}' "/proc/meminfo" 2>/dev/null)"
- mem_free="$(awk '$1 ~ /^MemFree/ {print $2}' "/proc/meminfo" 2>/dev/null)"
- mem_swap="$(awk '$1 ~ /^SwapTotal/ {print $2}' "/proc/meminfo" 2>/dev/null)"
+ mem_total="$(awk '$1 ~ /^MemTotal/ {printf $2}' "/proc/meminfo")"
+ mem_free="$(awk '$1 ~ /^MemFree/ {printf $2}' "/proc/meminfo")"
+ mem_swap="$(awk '$1 ~ /^SwapTotal/ {printf $2}' "/proc/meminfo")"
if [ $((mem_total)) -le 64000 ] && [ $((mem_swap)) -eq 0 ]
then
- adb_unique=0
- f_log "not enough memory, overall sort processing will be disabled (total: ${mem_total}, free: ${mem_free}, swap: ${mem_swap})"
+ mem_ok="false"
+ f_log "not enough free memory, overall sort processing will be disabled (total: ${mem_total}, free: ${mem_free}, swap: ${mem_swap})"
fi
# check backup configuration
f_space "${adb_backupdir}"
if [ "${space_ok}" = "false" ]
then
- f_log "not enough space in '${adb_backupdir}', backup/restore will be disabled"
+ f_log "not enough free space in '${adb_backupdir}'(avail. ${av_space} kb), backup/restore will be disabled"
backup_ok="false"
else
f_log "backup/restore will be enabled"
f_log "backup/restore will be disabled"
fi
- # check log configuration
- #
- adb_logdir="${adb_logfile%/*}"
- if [ -n "${adb_logdir}" ] && [ -d "${adb_logdir}" ]
- then
- f_space "${adb_logdir}"
- if [ "${space_ok}" = "false" ]
- then
- f_log "not enough space in '${adb_logdir}', logging will be disabled"
- log_ok="false"
- else
- f_log "logging will be enabled"
- log_ok="true"
- fi
- else
- log_ok="false"
- f_log "logging will be disabled"
- fi
-
# check ipv4/iptables configuration
#
if [ -n "${adb_wanif4}" ] && [ -n "${adb_wandev4}" ]
then
f_firewall "IPv4" "nat" "A" "${adb_prechain_ipv4}" "adb-prerouting" "! -i ${adb_wandev4} -p tcp -d ${adb_nullipv4} -m multiport --dports 80,443 -j REDIRECT --to-ports ${adb_port}"
- f_firewall "IPv4" "nat" "A" "${adb_prechain_ipv4}" "adb-dns" "! -i ${adb_wandev4} -p udp --dport 53 -j REDIRECT"
- f_firewall "IPv4" "nat" "A" "${adb_prechain_ipv4}" "adb-dns" "! -i ${adb_wandev4} -p tcp --dport 53 -j REDIRECT"
f_firewall "IPv4" "filter" "A" "${adb_fwdchain_ipv4}" "adb-forward" "! -i ${adb_wandev4} -d ${adb_nullipv4} -j REJECT --reject-with icmp-host-unreachable"
f_firewall "IPv4" "filter" "A" "${adb_outchain_ipv4}" "adb-output" "! -i ${adb_wandev4} -d ${adb_nullipv4} -j REJECT --reject-with icmp-host-unreachable"
+ if [ $((adb_forcedns)) -eq 1 ]
+ then
+ f_firewall "IPv4" "nat" "A" "${adb_prechain_ipv4}" "adb-dns" "! -i ${adb_wandev4} -p udp --dport 53 -j REDIRECT"
+ f_firewall "IPv4" "nat" "A" "${adb_prechain_ipv4}" "adb-dns" "! -i ${adb_wandev4} -p tcp --dport 53 -j REDIRECT"
+ fi
if [ "${fw_done}" = "true" ]
then
f_log "created volatile IPv4 firewall ruleset"
if [ -n "${adb_wanif6}" ] && [ -n "${adb_wandev6}" ]
then
f_firewall "IPv6" "nat" "A" "${adb_prechain_ipv6}" "adb-prerouting" "! -i ${adb_wandev6} -p tcp -d ${adb_nullipv6} -m multiport --dports 80,443 -j REDIRECT --to-ports ${adb_port}"
- f_firewall "IPv6" "nat" "A" "${adb_prechain_ipv6}" "adb-dns" "! -i ${adb_wandev6} -p udp --dport 53 -j REDIRECT"
- f_firewall "IPv6" "nat" "A" "${adb_prechain_ipv6}" "adb-dns" "! -i ${adb_wandev6} -p tcp --dport 53 -j REDIRECT"
f_firewall "IPv6" "filter" "A" "${adb_fwdchain_ipv6}" "adb-forward" "! -i ${adb_wandev6} -d ${adb_nullipv6} -j REJECT --reject-with icmp6-addr-unreachable"
f_firewall "IPv6" "filter" "A" "${adb_outchain_ipv6}" "adb-output" "! -i ${adb_wandev6} -d ${adb_nullipv6} -j REJECT --reject-with icmp6-addr-unreachable"
+ if [ $((adb_forcedns)) -eq 1 ]
+ then
+ f_firewall "IPv6" "nat" "A" "${adb_prechain_ipv6}" "adb-dns" "! -i ${adb_wandev6} -p udp --dport 53 -j REDIRECT"
+ f_firewall "IPv6" "nat" "A" "${adb_prechain_ipv6}" "adb-dns" "! -i ${adb_wandev6} -p tcp --dport 53 -j REDIRECT"
+ fi
if [ "${fw_done}" = "true" ]
then
f_log "created volatile IPv6 firewall ruleset"
# check volatile adblock uhttpd instance configuration
#
- rc="$(ps | grep "[u]httpd.*\-h /www/adblock" >/dev/null 2>&1; printf ${?})"
+ rc="$(ps | grep -q "[u]httpd.*\-h /www/adblock"; printf ${?})"
if [ $((rc)) -ne 0 ]
then
if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
then
- uhttpd -h "/www/adblock" -k 5 -N 200 -t 0 -T 1 -D -S -E "/adblock.html" -p "${adb_ipv4}:${adb_port}" -p "[${adb_ipv6}]:${adb_port}">/dev/null 2>&1
+ uhttpd -h "/www/adblock" -k 5 -N 200 -t 0 -T 1 -D -S -E "/index.html" -p "${adb_ipv4}:${adb_port}" -p "[${adb_ipv6}]:${adb_port}"
rc=${?}
- if [ $((rc)) -eq 0 ]
- then
- f_log "created volatile uhttpd instance (${adb_ipv4}:${adb_port}, [${adb_ipv6}]:${adb_port})"
- else
- f_log "failed to initialize volatile uhttpd instance (${adb_ipv4}:${adb_port}, [${adb_ipv6}]:${adb_port})" "${rc}"
- f_restore
- fi
elif [ -n "${adb_wanif4}" ]
then
- uhttpd -h "/www/adblock" -k 5 -N 200 -t 0 -T 1 -D -S -E "/adblock.html" -p "${adb_ipv4}:${adb_port}" >/dev/null 2>&1
+ uhttpd -h "/www/adblock" -k 5 -N 200 -t 0 -T 1 -D -S -E "/index.html" -p "${adb_ipv4}:${adb_port}"
rc=${?}
- if [ $((rc)) -eq 0 ]
- then
- f_log "created volatile uhttpd instance (${adb_ipv4}:${adb_port})"
- else
- f_log "failed to initialize volatile uhttpd instance (${adb_ipv4}:${adb_port})" "${rc}"
- f_restore
- fi
elif [ -n "${adb_wanif6}" ]
then
- uhttpd -h "/www/adblock" -k 5 -N 200 -t 0 -T 1 -D -S -E "/adblock.html" -p "[${adb_ipv6}]:${adb_port}" >/dev/null 2>&1
+ uhttpd -h "/www/adblock" -k 5 -N 200 -t 0 -T 1 -D -S -E "/index.html" -p "[${adb_ipv6}]:${adb_port}"
rc=${?}
- if [ $((rc)) -eq 0 ]
- then
- f_log "created volatile uhttpd instance ([${adb_ipv6}]:${adb_port})"
- else
- f_log "failed to initialize volatile uhttpd instance ([${adb_ipv6}]:${adb_port})" "${rc}"
- f_restore
- fi
+ fi
+ if [ $((rc)) -eq 0 ]
+ then
+ f_log "created volatile uhttpd instance"
+ else
+ f_log "failed to initialize volatile uhttpd instance" "${rc}"
+ f_restore
fi
fi
local check
local package="${1}"
- check="$(printf "${pkg_list}" | grep "^${package} -" 2>/dev/null)"
+ check="$(printf "${pkg_list}" | grep "^${package} -")"
if [ -z "${check}" ]
then
- rc=150
+ rc=140
f_log "package '${package}' not found" "${rc}"
f_exit
fi
# check whether iptables rule already applied and proceed accordingly
#
- rc="$("${ipt}" -w -t "${table}" -C "${chain}" -m comment --comment "${notes}" ${rules} >/dev/null 2>&1; printf ${?})"
+ rc="$("${ipt}" -w -t "${table}" -C "${chain}" -m comment --comment "${notes}" ${rules}; printf ${?})"
if [ $((rc)) -ne 0 ]
then
- "${ipt}" -w -t "${table}" -"${ctype}" "${chain}" -m comment --comment "${notes}" ${rules} >/dev/null 2>&1
+ "${ipt}" -w -t "${table}" -"${ctype}" "${chain}" -m comment --comment "${notes}" ${rules}
rc=${?}
if [ $((rc)) -eq 0 ]
then
fi
}
-###################################################
-# f_log: log messages to stdout, syslog and logfile
+##########################################
+# f_log: log messages to stdout and syslog
#
f_log()
{
log_parm="-s"
fi
- # log to different output devices, set log class accordingly
+ # log to different output devices and set log class accordingly
#
if [ -n "${log_msg}" ]
then
log_rc=", rc: ${log_rc}"
log_msg="${log_msg}${log_rc}"
fi
- /usr/bin/logger ${log_parm} -t "adblock[${adb_pid}] ${class}" "${log_msg}"
- if [ "${log_ok}" = "true" ]
- then
- printf "%s\n" "$(/bin/date "+%d.%m.%Y %H:%M:%S") adblock[${adb_pid}] ${class}: ${log_msg}" >> "${adb_logfile}"
- fi
+ /usr/bin/logger ${log_parm} -t "adblock[${adb_pid}] ${class}" "${log_msg}" 2>&1
fi
}
#
if [ -d "${mp}" ]
then
- av_space="$(df "${mp}" 2>/dev/null | tail -n1 2>/dev/null | awk '{print $4}')"
+ av_space="$(df "${mp}" | tail -n1 | awk '{printf $4}')"
if [ $((av_space)) -lt $((adb_minspace)) ]
then
space_ok="false"
#
if [ -n "${adb_revsrclist}" ]
then
- rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f \( ${adb_revsrclist} \) -print -exec rm -f "{}" \; 2>/dev/null)"
+ rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f \( ${adb_revsrclist} \) -print -exec rm -f "{}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
then
#
if [ "${backup_ok}" = "true" ] && [ "$(printf "${adb_backupdir}/${adb_dnsprefix}."*)" != "${adb_backupdir}/${adb_dnsprefix}.*" ]
then
- restore_done="$(find "${adb_backupdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -print -exec cp -pf "{}" "${adb_dnsdir}" \; 2>/dev/null)"
+ restore_done="$(find "${adb_backupdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -print -exec cp -pf "{}" "${adb_dnsdir}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${restore_done}" ]
then
#
if [ -n "${restore_done}" ] || [ -n "${rm_done}" ]
then
- /etc/init.d/dnsmasq restart >/dev/null 2>&1
- sleep 2
- dns_status="$(ps 2>/dev/null | grep "[d]nsmasq" 2>/dev/null)"
- if [ -n "${dns_status}" ]
+ /etc/init.d/dnsmasq restart
+ sleep 1
+ rc="$(ps | grep -q "[d]nsmasq"; printf ${?})"
+ if [ $((rc)) -eq 0 ]
then
rc=0
+ adb_count="$(head -qn -3 "${adb_dnsdir}/${adb_dnsprefix}."* | wc -l)"
if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
then
- adb_count="$(($(head -qn -4 "${adb_dnsdir}/${adb_dnsprefix}."* 2>/dev/null | wc -l) / 2))"
- else
- adb_count="$(head -qn -4 "${adb_dnsdir}/${adb_dnsprefix}."* 2>/dev/null | wc -l)"
+ adb_count="$((adb_count / 2))"
fi
f_log "adblock lists with overall ${adb_count} domains loaded"
else
- rc=160
+ rc=145
f_log "dnsmasq restart failed, please check 'logread' output" "${rc}"
fi
fi
#
f_exit()
{
- local ipv4_prerouting
- local ipv4_forward
- local ipv4_output
- local ipv6_prerouting
- local ipv6_forward
- local ipv6_output
+ local ipv4_prerouting=0
+ local ipv4_forward=0
+ local ipv4_output=0
+ local ipv6_prerouting=0
+ local ipv6_forward=0
+ local ipv6_output=0
local iptv4="/usr/sbin/iptables"
local iptv6="/usr/sbin/ip6tables"
#
if [ -f "${adb_tmpfile}" ]
then
- rm -f "${adb_tmpfile}" >/dev/null 2>&1
+ rm -f "${adb_tmpfile}"
fi
if [ -d "${adb_tmpdir}" ]
then
- rm -rf "${adb_tmpdir}" >/dev/null 2>&1
+ rm -rf "${adb_tmpdir}"
fi
# final log message and iptables statistics
then
if [ -n "${adb_wanif4}" ]
then
- ipv4_prerouting="$(${iptv4} -t nat -vnL | awk '$11 ~ /^adb-prerouting$/ {sum += $1} END {print sum}')"
- ipv4_forward="$(${iptv4} -vnL | awk '$11 ~ /^adb-forward$/ {sum += $1} END {print sum}')"
- ipv4_output="$(${iptv4} -vnL | awk '$11 ~ /^adb-output$/ {sum += $1} END {print sum}')"
+ ipv4_prerouting="$(${iptv4} -t nat -vnL | awk '$11 ~ /^adb-prerouting$/ {sum += $1} END {printf sum}')"
+ ipv4_forward="$(${iptv4} -vnL | awk '$11 ~ /^adb-forward$/ {sum += $1} END {printf sum}')"
+ ipv4_output="$(${iptv4} -vnL | awk '$11 ~ /^adb-output$/ {sum += $1} END {printf sum}')"
fi
if [ -n "${adb_wanif6}" ]
then
- ipv6_prerouting="$(${iptv6} -t nat -vnL | awk '$10 ~ /^adb-prerouting$/ {sum += $1} END {print sum}')"
- ipv6_forward="$(${iptv6} -vnL | awk '$10 ~ /^adb-forward$/ {sum += $1} END {print sum}')"
- ipv6_output="$(${iptv6} -vnL | awk '$10 ~ /^adb-output$/ {sum += $1} END {print sum}')"
- fi
- if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
- then
- f_log "adblock firewall statistics (IPv4/IPv6):"
- f_log "${ipv4_prerouting}/${ipv6_prerouting} packets redirected in PREROUTING chain"
- f_log "${ipv4_forward}/${ipv6_forward} packets rejected in FORWARD chain"
- f_log "${ipv4_output}/${ipv6_output} packets rejected in OUTPUT chain"
- elif [ -n "${adb_wanif4}" ]
- then
- f_log "adblock firewall statistics (IPv4):"
- f_log "${ipv4_prerouting} packets redirected in PREROUTING chain"
- f_log "${ipv4_forward} packets rejected in FORWARD chain"
- f_log "${ipv4_output} packets rejected in OUTPUT chain"
- elif [ -n "${adb_wanif6}" ]
- then
- f_log "${ipv6_prerouting} packets redirected in PREROUTING chain"
- f_log "${ipv6_forward} packets rejected in FORWARD chain"
- f_log "${ipv6_output} packets rejected in OUTPUT chain"
+ ipv6_prerouting="$(${iptv6} -t nat -vnL | awk '$10 ~ /^adb-prerouting$/ {sum += $1} END {printf sum}')"
+ ipv6_forward="$(${iptv6} -vnL | awk '$10 ~ /^adb-forward$/ {sum += $1} END {printf sum}')"
+ ipv6_output="$(${iptv6} -vnL | awk '$10 ~ /^adb-output$/ {sum += $1} END {printf sum}')"
fi
+ f_log "adblock firewall statistics (IPv4/IPv6):"
+ f_log "${ipv4_prerouting}/${ipv6_prerouting} packets redirected in PREROUTING chain"
+ f_log "${ipv4_forward}/${ipv6_forward} packets rejected in FORWARD chain"
+ f_log "${ipv4_output}/${ipv6_output} packets rejected in OUTPUT chain"
f_log "domain adblock processing finished successfully (${adb_scriptver}, ${openwrt_version}, $(/bin/date "+%d.%m.%Y %H:%M:%S"))"
elif [ $((rc)) -gt 0 ]
then
else
rc=0
fi
- rm -f "${adb_pidfile}" >/dev/null 2>&1
+ rm -f "${adb_pidfile}"
exit ${rc}
}
#!/bin/sh
-#######################################################
-# ad/abuse domain blocking script for dnsmasq/openwrt #
-# written by Dirk Brenken (openwrt@brenken.org) #
-#######################################################
-
-# LICENSE
-# ========
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
+# ad/abuse domain blocking script for dnsmasq/openwrt
+# written by Dirk Brenken (openwrt@brenken.org)
+
+# This is free software, licensed under the GNU General Public License v3.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-###############
-# environment #
-###############
-
-# set the C locale, characters are single bytes, the charset is ASCII
-# speeds up things like sort, grep etc.
+# set the C locale
#
LC_ALL=C
+# script debug switch (disabled by default)
+# set 'DEBUG=1' to enable script debugging
+#
+DEBUG=0
+if [ $((DEBUG)) -eq 0 ]
+then
+ exec 2>/dev/null
+fi
+
# pid handling
#
adb_pid="${$}"
if [ -r "${adb_pidfile}" ]
then
rc=255
- /usr/bin/logger -t "adblock[${adb_pid}] error" "adblock service already running ($(cat ${adb_pidfile} 2>/dev/null))"
+ /usr/bin/logger -s -t "adblock[${adb_pid}] error" "adblock service already running ($(cat ${adb_pidfile}))"
exit ${rc}
else
printf "${adb_pid}" > "${adb_pidfile}"
# get current directory, script- and openwrt version
#
adb_scriptdir="${0%/*}"
-adb_scriptver="0.80.1"
-openwrt_version="$(cat /etc/openwrt_version 2>/dev/null)"
+adb_scriptver="1.0.0"
+openwrt_version="$(cat /etc/openwrt_version)"
# source in adblock function library
#
if [ -r "${adb_scriptdir}/adblock-helper.sh" ]
then
- . "${adb_scriptdir}/adblock-helper.sh" 2>/dev/null
+ . "${adb_scriptdir}/adblock-helper.sh"
else
rc=254
- /usr/bin/logger -t "adblock[${adb_pid}] error" "adblock function library not found"
+ /usr/bin/logger -s -t "adblock[${adb_pid}] error" "adblock function library not found"
+ rm -f "${adb_pidfile}"
exit ${rc}
fi
-################
-# main program #
-################
-
# call trap function on error signals (HUP, INT, QUIT, BUS, SEGV, TERM)
#
-trap "rc=253; f_log 'error signal received/trapped' '${rc}'; f_exit" 1 2 3 10 11 15
+trap "rc=250; f_log 'error signal received/trapped' '${rc}'; f_exit" 1 2 3 10 11 15
# load environment
#
shalla_file="${adb_tmpdir}/shallalist.txt"
src_name="shalla"
adb_dnsfile="${adb_dnsdir}/${adb_dnsprefix}.${src_name}"
- list_time="$(grep -F "# last modified: " "${adb_dnsfile}" 2>/dev/null)"
- list_time="${list_time/*: /}"
+ if [ -r "${adb_dnsfile}" ]
+ then
+ list_time="$(awk '$0 ~ /^# last modified/ {printf substr($0,18)}' "${adb_dnsfile}")"
+ fi
f_log "=> (pre-)processing adblock source '${src_name}'"
# only process shallalist archive with updated timestamp,
# extract and merge only domains of selected shallalist categories
#
- shalla_time="$(${adb_fetch} ${wget_parm} --server-response --spider "${adb_arc_shalla}" 2>&1 | grep -F "Last-Modified: " 2>/dev/null | tr -d '\r' 2>/dev/null)"
- shalla_time="${shalla_time/*: /}"
+ shalla_time="$(${adb_fetch} ${wget_parm} --server-response --spider "${adb_arc_shalla}" 2>&1 | awk '$0 ~ /Last-Modified/ {printf substr($0,18)}')"
if [ -z "${shalla_time}" ]
then
shalla_time="$(date)"
fi
if [ -z "${list_time}" ] || [ "${list_time}" != "${shalla_time}" ]
then
- ${adb_fetch} ${wget_parm} --output-document="${shalla_archive}" "${adb_arc_shalla}" 2>/dev/null
+ ${adb_fetch} ${wget_parm} --output-document="${shalla_archive}" "${adb_arc_shalla}"
rc=${?}
if [ $((rc)) -eq 0 ]
then
> "${shalla_file}"
for category in ${adb_cat_shalla}
do
- tar -xOzf "${shalla_archive}" BL/${category}/domains 2>/dev/null >> "${shalla_file}"
+ tar -xOzf "${shalla_archive}" BL/${category}/domains >> "${shalla_file}"
rc=${?}
if [ $((rc)) -ne 0 ]
then
# remove temporary files
#
- rm -f "${shalla_archive}" >/dev/null 2>&1
- rm -rf "${adb_tmpdir}/BL" >/dev/null 2>&1
+ rm -f "${shalla_archive}"
+ rm -rf "${adb_tmpdir}/BL"
if [ $((rc)) -eq 0 ]
then
adb_sources="${adb_sources} ${shalla_file}&ruleset=rset_shalla"
url="${src/\&ruleset=*/}"
src_name="${src/*\&ruleset=rset_/}"
adb_dnsfile="${adb_dnsdir}/${adb_dnsprefix}.${src_name}"
- list_time="$(grep -F "# last modified: " "${adb_dnsfile}" 2>/dev/null)"
- list_time="${list_time/*: /}"
+ if [ -r "${adb_dnsfile}" ]
+ then
+ list_time="$(awk '$0 ~ /^# last modified/ {printf substr($0,18)}' "${adb_dnsfile}")"
+ fi
f_log "=> processing adblock source '${src_name}'"
# prepare find statement with active adblock list sources
#
if [ "${src_name}" = "blacklist" ]
then
- url_time="$(date -r "${adb_blacklist}" 2>/dev/null)"
+ url_time="$(date -r "${adb_blacklist}")"
elif [ "${src_name}" = "shalla" ]
then
url_time="${shalla_time}"
else
- url_time="$(${adb_fetch} ${wget_parm} --server-response --spider "${url}" 2>&1 | grep -F "Last-Modified: " 2>/dev/null | tr -d '\r' 2>/dev/null)"
- url_time="${url_time/*: /}"
+ url_time="$(${adb_fetch} ${wget_parm} --server-response --spider "${url}" 2>&1 | awk '$0 ~ /Last-Modified/ {printf substr($0,18)}')"
fi
if [ -z "${url_time}" ]
then
then
if [ "${src_name}" = "blacklist" ]
then
- tmp_domains="$(cat "${adb_blacklist}" 2>/dev/null)"
+ tmp_domains="$(cat "${adb_blacklist}")"
rc=${?}
elif [ "${src_name}" = "shalla" ]
then
- tmp_domains="$(cat "${shalla_file}" 2>/dev/null)"
+ tmp_domains="$(cat "${shalla_file}")"
rc=${?}
else
- tmp_domains="$(${adb_fetch} ${wget_parm} --output-document=- "${url}" 2>/dev/null)"
+ tmp_domains="$(${adb_fetch} ${wget_parm} --output-document=- "${url}")"
rc=${?}
fi
else
#
if [ $((rc)) -eq 0 ] && [ -n "${tmp_domains}" ]
then
- eval "$(printf "${src}" | sed 's/\(.*\&ruleset=\)/ruleset=\$/g')"
- count="$(printf "%s\n" "${tmp_domains}" | tr '[A-Z]' '[a-z]' | eval "${ruleset}" | tee "${adb_tmpfile}" | wc -l)"
+ eval "src_rset=\${rset_${src_name}}"
+ count="$(printf "%s\n" "${tmp_domains}" | eval "${src_rset}" | tee "${adb_tmpfile}" | wc -l)"
f_log " source download finished (${count} entries)"
if [ "${src_name}" = "shalla" ]
then
- rm -f "${shalla_file}" >/dev/null 2>&1
+ rm -f "${shalla_file}"
fi
unset tmp_domains
elif [ $((rc)) -eq 0 ] && [ -z "${tmp_domains}" ]
then
if [ -s "${adb_whitelist}" ]
then
- grep -Fvxf "${adb_whitelist}" "${adb_tmpfile}" 2>/dev/null | sort 2>/dev/null | uniq -u 2>/dev/null | eval "${adb_dnsformat}" 2>/dev/null > "${adb_dnsfile}"
+ grep -Fvxf "${adb_whitelist}" "${adb_tmpfile}" | sort -u | eval "${adb_dnsformat}" > "${adb_dnsfile}"
rc=${?}
else
- sort "${adb_tmpfile}" 2>/dev/null | uniq -u 2>/dev/null | eval "${adb_dnsformat}" 2>/dev/null > "${adb_dnsfile}"
+ sort -u "${adb_tmpfile}" | eval "${adb_dnsformat}" > "${adb_dnsfile}"
rc=${?}
fi
adb_revsrclist="${adb_revsrclist} -o -name ${adb_dnsprefix}.${src_name}"
fi
- # write preliminary adblock list footer
+ # write preliminary footer
#
if [ $((rc)) -eq 0 ]
then
- if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
- then
- count="$(($(wc -l < "${adb_dnsdir}/${adb_dnsprefix}.${src_name}") / 2))"
- else
- count="$(wc -l < "${adb_dnsdir}/${adb_dnsprefix}.${src_name}")"
- fi
- printf "%s\n" "#------------------------------------------------------------------" >> "${adb_dnsfile}"
- printf "%s\n" "# ${0##*/} (${adb_scriptver}) - ${count} ad/abuse domains blocked" >> "${adb_dnsfile}"
- printf "%s\n" "# source: ${url}" >> "${adb_dnsfile}"
+ printf "%s\n" "#---------------------------------------------" >> "${adb_dnsfile}"
printf "%s\n" "# last modified: ${url_time}" >> "${adb_dnsfile}"
+ printf "%s\n" "##" >> "${adb_dnsfile}"
f_log " domain merging finished"
else
f_log " domain merging failed" "${rc}"
#
if [ -n "${adb_srclist}" ]
then
- rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" \( ${adb_srclist} \) -print -exec rm -f "{}" \; 2>/dev/null)"
+ rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" \( ${adb_srclist} \) -print -exec rm -f "{}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
then
f_log "disabled adblock lists removed"
if [ "${backup_ok}" = "true" ]
then
- rm_done="$(find "${adb_backupdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" \( ${adb_srclist} \) -print -exec rm -f "{}" \; 2>/dev/null)"
+ rm_done="$(find "${adb_backupdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" \( ${adb_srclist} \) -print -exec rm -f "{}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
then
f_exit
fi
else
- rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -print -exec rm -f "{}" \; 2>/dev/null)"
+ rm_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -print -exec rm -f "{}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
then
f_log "all adblock lists removed"
if [ "${backup_ok}" = "true" ]
then
- rm_done="$(find "${adb_backupdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -print -exec rm -f "{}" \; 2>/dev/null)"
+ rm_done="$(find "${adb_backupdir}" -maxdepth 1 -type f -name "${adb_dnsprefix}.*" -print -exec rm -f "{}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
then
#
if [ "${backup_ok}" = "true" ] && [ -n "${adb_errsrclist}" ]
then
- restore_done="$(find "${adb_backupdir}" -maxdepth 1 -type f \( ${adb_errsrclist} \) -print -exec cp -pf "{}" "${adb_dnsdir}" \; 2>/dev/null)"
+ restore_done="$(find "${adb_backupdir}" -maxdepth 1 -type f \( ${adb_errsrclist} \) -print -exec cp -pf "{}" "${adb_dnsdir}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${restore_done}" ]
then
fi
fi
-# make separate adblock lists unique
+# make separate adblock lists entries unique
#
-if [ $((adb_unique)) -eq 1 ]
+if [ "${mem_ok}" != "false" ]
then
if [ -n "${adb_revsrclist}" ]
then
f_log "remove duplicates in separate adblock lists"
- # generate a temporary, unique overall list
+ # generate a temporary unique overall list
#
- head -qn -4 "${adb_dnsdir}/${adb_dnsprefix}."* 2>/dev/null | sort -u 2>/dev/null > "${adb_dnsdir}/tmp.overall"
+ head -qn -3 "${adb_dnsdir}/${adb_dnsprefix}."* | sort -u > "${adb_dnsdir}/tmp.overall"
# loop through all separate lists, ordered by size (ascending)
#
- for list in $(ls -Sr "${adb_dnsdir}/${adb_dnsprefix}."* 2>/dev/null)
+ for list in $(ls -Sr "${adb_dnsdir}/${adb_dnsprefix}."*)
do
- # check separate lists vs. overall list,
- # rewrite only duplicate entries back to separate lists
+ # check original separate list vs. temporary overall list,
+ # rewrite only duplicate entries back to temporary separate list
#
list="${list/*./}"
- sort "${adb_dnsdir}/tmp.overall" "${adb_dnsdir}/${adb_dnsprefix}.${list}" 2>/dev/null | uniq -d 2>/dev/null > "${adb_dnsdir}/tmp.${list}"
+ sort "${adb_dnsdir}/tmp.overall" "${adb_dnsdir}/${adb_dnsprefix}.${list}" | uniq -d > "${adb_dnsdir}/tmp.${list}"
- # remove these entries from overall list,
- # rewrite only unique entries back to overall list
+ # rewrite only unique entries back to temporary overall list
#
- tmp_unique="$(sort "${adb_dnsdir}/tmp.overall" "${adb_dnsdir}/tmp.${list}" 2>/dev/null | uniq -u 2>/dev/null)"
+ tmp_unique="$(sort "${adb_dnsdir}/tmp.overall" "${adb_dnsdir}/tmp.${list}" | uniq -u)"
printf "%s\n" "${tmp_unique}" > "${adb_dnsdir}/tmp.overall"
- # write final adblocklist footer
+ # write unique result back to original separate list (with list footer)
#
- if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
- then
- count="$(($(wc -l < "${adb_dnsdir}/tmp.${list}") / 2))"
- else
- count="$(wc -l < "${adb_dnsdir}/tmp.${list}")"
- fi
- printf "%s\n" "#------------------------------------------------------------------" >> "${adb_dnsdir}/tmp.${list}"
- printf "%s\n" "# ${0##*/} (${adb_scriptver}) - ${count} ad/abuse domains blocked" >> "${adb_dnsdir}/tmp.${list}"
- tail -qn -2 "${adb_dnsdir}/$adb_dnsprefix.${list}" 2>/dev/null >> "${adb_dnsdir}/tmp.${list}"
- mv -f "${adb_dnsdir}/tmp.${list}" "${adb_dnsdir}/${adb_dnsprefix}.${list}" >/dev/null 2>&1
+ tail -qn 3 "${adb_dnsdir}/$adb_dnsprefix.${list}" >> "${adb_dnsdir}/tmp.${list}"
+ mv -f "${adb_dnsdir}/tmp.${list}" "${adb_dnsdir}/${adb_dnsprefix}.${list}"
done
- rm -f "${adb_dnsdir}/tmp.overall" >/dev/null 2>&1
+ rm -f "${adb_dnsdir}/tmp.overall"
fi
fi
-# get overall count
+# set separate list count & get overall count
#
-if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
-then
- adb_count="$(($(head -qn -4 "${adb_dnsdir}/${adb_dnsprefix}."* 2>/dev/null | wc -l) / 2))"
-else
- adb_count="$(head -qn -4 "${adb_dnsdir}/${adb_dnsprefix}."* 2>/dev/null | wc -l)"
-fi
+for list in $(ls -Sr "${adb_dnsdir}/${adb_dnsprefix}."*)
+do
+ list="${list/*./}"
+ count="$(head -qn -3 "${adb_dnsdir}/${adb_dnsprefix}.${list}" | wc -l)"
+ if [ -n "${adb_wanif4}" ] && [ -n "${adb_wanif6}" ]
+ then
+ count=$((count / 2))
+ fi
+ if [ "$(tail -qn 1 "${adb_dnsdir}/${adb_dnsprefix}.${list}")" = "##" ]
+ then
+ last_line="# ${0##*/} (${adb_scriptver}) - ${count} ad\/abuse domains blocked"
+ sed -i "s/^##$/${last_line}/" "${adb_dnsdir}/${adb_dnsprefix}.${list}"
+ fi
+ adb_count=$((adb_count + count))
+done
# restart dnsmasq with newly generated or deleted adblock lists,
# check dnsmasq startup afterwards
#
if [ -n "${adb_revsrclist}" ] || [ -n "${rm_done}" ] || [ -n "${restore_done}" ]
then
- /etc/init.d/dnsmasq restart >/dev/null 2>&1
- sleep 2
- dns_status="$(ps 2>/dev/null | grep "[d]nsmasq" 2>/dev/null)"
- if [ -n "${dns_status}" ]
+ /etc/init.d/dnsmasq restart
+ sleep 1
+ rc="$(ps | grep -q "[d]nsmasq"; printf ${?})"
+ if [ $((rc)) -eq 0 ]
then
f_log "adblock lists with overall ${adb_count} domains loaded"
else
- rc=105
+ rc=100
f_log "dnsmasq restart failed, please check 'logread' output" "${rc}"
f_restore
fi
#
if [ "${backup_ok}" = "true" ] && [ -n "${adb_revsrclist}" ] && [ "$(printf "${adb_dnsdir}/${adb_dnsprefix}."*)" != "${adb_dnsdir}/${adb_dnsprefix}.*" ]
then
- backup_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f \( ${adb_revsrclist} \) -print -exec cp -pf "{}" "${adb_backupdir}" \; 2>/dev/null)"
+ backup_done="$(find "${adb_dnsdir}" -maxdepth 1 -type f \( ${adb_revsrclist} \) -print -exec cp -pf "{}" "${adb_backupdir}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${backup_done}" ]
then
# adblock configuration, for further information
-# see '/etc/adblock/README.md'
+# see 'https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md'
config adblock 'global'
option adb_enabled '1'
- option adb_cfgver '0.80'
+ option adb_cfgver '1.0'
option adb_blacklist '/etc/adblock/adblock.blacklist'
option adb_whitelist '/etc/adblock/adblock.whitelist'
+ option adb_forcedns '1'
config service 'backup'
option enabled '0'
- option adb_backupdir '/tmp'
-
-config service 'log'
- option enabled '0'
- option adb_logfile '/tmp/adb_debug.log'
+ option adb_backupdir '/mnt'
config source 'adaway'
option enabled '1'
config source 'spam404'
option enabled '0'
- option adb_src 'http://spam404bl.com/spam404scamlist.txt&ruleset=rset_spam404'
+ option adb_src 'https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt&ruleset=rset_spam404'
option adb_srcdesc 'generic blocklist for suspicious domains, infrequent updates, approx. 5.000 entries'
+config source 'sysctl'
+ option enabled '0'
+ option adb_src 'http://sysctl.org/cameleon/hosts&ruleset=rset_sysctl'
+ option adb_srcdesc 'generic blocklist for ad related domains, weekly updates, approx. 21.000 entries'
+
config source 'whocares'
option enabled '0'
option adb_src 'http://someonewhocares.org/hosts/hosts&ruleset=rset_whocares'
config source 'yoyo'
option enabled '1'
- option adb_src 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=one-line&showintro=0&mimetype=plaintext&ruleset=rset_yoyo'
+ option adb_src 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=nohtml&showintro=0&mimetype=plaintext&ruleset=rset_yoyo'
option adb_srcdesc 'focus on ad related domains, weekly updates, approx. 2.500 entries'
config source 'zeus'
#!/bin/sh
#
-if [ -f "/var/run/adblock.pid" ] || [ "${ACTION}" != "ifup" ]
+adb_pid="${$}"
+adb_pidfile="/var/run/adblock.pid"
+adb_logger="/usr/bin/logger"
+
+if [ -f "${adb_pidfile}" ] || [ "${ACTION}" != "ifup" ]
then
exit 0
fi
. /lib/functions/network.sh
-adb_pid="${$}"
-adb_logger="/usr/bin/logger"
network_find_wan adb_wanif4
network_find_wan6 adb_wanif6
START=99
+exec 2>/dev/null
adb_pid="${$}"
adb_script="/usr/bin/adblock-update.sh"
adb_pidfile="/var/run/adblock.pid"
if [ -r "${adb_pidfile}" ]
then
- "${adb_logger}" ${log_parm} -t "adblock[${adb_pid}] error" "adblock service already running ($(cat ${adb_pidfile} 2>/dev/null))"
+ "${adb_logger}" ${log_parm} -t "adblock[${adb_pid}] error" "adblock service already running ($(cat ${adb_pidfile})" 2>&1
exit 255
fi
restart()
{
+ stop
start
}
stop()
{
- rm_done="$(find "/tmp/dnsmasq.d" -maxdepth 1 -type f -name "adb_list.*" -print -exec rm -f "{}" \; 2>/dev/null)"
+ rm_done="$(find "/tmp/dnsmasq.d" -maxdepth 1 -type f -name "adb_list.*" -print -exec rm -f "{}" \;)"
rc=${?}
if [ $((rc)) -eq 0 ] && [ -n "${rm_done}" ]
then
- /etc/init.d/dnsmasq restart >/dev/null 2>&1
- /etc/init.d/firewall restart >/dev/null 2>&1
+ /etc/init.d/dnsmasq restart
+ /etc/init.d/firewall restart
fi
- uhttpd_pid="$(ps 2>/dev/null | grep "[u]httpd.*\-h /www/adblock" 2>/dev/null | awk '{print $1}' 2>/dev/null)"
+ uhttpd_pid="$(ps | grep "[u]httpd.*\-h /www/adblock" | awk '{print $1}')"
if [ -n "${uhttpd_pid}" ]
then
- kill -9 "${uhttpd_pid}" >/dev/null 2>&1
+ kill -9 "${uhttpd_pid}"
fi
if [ -n "${rm_done}" ] || [ -n "${uhttpd_pid}" ]
then
- "${adb_logger}" ${log_parm} -t "adblock[${adb_pid}] info " "all adblock related services stopped"
+ "${adb_logger}" ${log_parm} -t "adblock[${adb_pid}] info " "all adblock related services stopped" 2>&1
fi
return 0
}
+++ /dev/null
-<html>
- <head><meta charset="utf-8"></head>
- <body>
- <img src="/adblock.png" border="0" alt=""></img>
- </body>
-</html>
--- /dev/null
+#
+# Copyright (C) 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:=arp-scan
+PKG_VERSION:=1.9-40-g69b2f70
+PKG_RELEASE:=1
+PKG_LICENSE:=GPL-3.0
+PKG_MAINTAINER:=Sergey Urushkin <urusha.v1.0@gmail.com>
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/royhills/arp-scan.git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=69b2f70588565385f3a61d9b1f100f01747cd5e1
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+
+PKG_FIXUP:=autoreconf
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/arp-scan
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=ARP scanner
+ DEPENDS:=+libpcap
+ URL:=https://github.com/royhills/arp-scan
+ PKG_MAINTAINER:=Sergey Urushkin <urusha.v1.0@gmail.com>
+endef
+
+define Package/arp-scan/description
+ ARP scanner
+endef
+
+define Package/arp-scan/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/arp-scan $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,arp-scan))
--- /dev/null
+--- a/acinclude.m4 2016-02-19 15:21:01.000000000 +0300
++++ b/acinclude.m4 2016-02-19 17:18:50.480874343 +0300
+@@ -211,7 +211,6 @@
+ LONG_LONG_INT_FORMAT=''
+
+ case $pgac_cv_snprintf_long_long_int_format in
+- cross) AC_MSG_RESULT([cannot test (not on host machine)]);;
+ ?*) AC_MSG_RESULT([$pgac_cv_snprintf_long_long_int_format])
+ LONG_LONG_INT_FORMAT=$pgac_cv_snprintf_long_long_int_format;;
+ *) AC_MSG_RESULT(none);;
include $(TOPDIR)/rules.mk
PKG_NAME:=bind
-PKG_VERSION:=9.9.8-P3
+PKG_VERSION:=9.9.8-P4
PKG_RELEASE:=2
USERID:=bind=57:bind=57
PKG_SOURCE_URL:= \
ftp://ftp.isc.org/isc/bind9/$(PKG_VERSION) \
http://www.mirrorservice.org/sites/ftp.isc.org/isc/bind9/$(PKG_VERSION)
-PKG_MD5SUM:=30b9bf88a78eee783d3fef5257445788
+PKG_MD5SUM:=5e401f6cf024f596044d733ceb0d6415
PKG_FIXUP:=autoreconf
PKG_REMOVE_FILES:=aclocal.m4 libtool.m4
PKG_NAME:=ddns-scripts
# Version == major.minor.patch
# increase on new functionality (minor) or patches (patch)
-PKG_VERSION:=2.6.2
+PKG_VERSION:=2.6.4
# Release == build
# increase on changes of services files or tld_names.dat
PKG_RELEASE:=1
. /lib/functions/network.sh
# GLOBAL VARIABLES #
-VERSION="2.6.1-1"
+VERSION="2.6.4-1"
SECTION_ID="" # hold config's section name
VERBOSE_MODE=1 # default mode is log to console, but easily changed with parameter
# force network/ip not supported
[ -n "$__BINDIP" ] && \
write_log 14 "uclient-fetch: FORCE binding to specific address not supported"
- # force ip version not supported
- [ $force_ipversion -eq 1 ] && \
- write_log 14 "uclient-fetch: Force connecting to IPv4 or IPv6 addresses not supported"
+ # force ip version to use
+ if [ $force_ipversion -eq 1 ]; then
+ [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6" # force IPv4/IPv6
+ fi
# https possibly not supported
[ $use_https -eq 1 -a ! -f /lib/libustream-ssl.so ] && \
write_log 14 "uclient-fetch: no HTTPS support! Additional install one of ustream-ssl packages"
ERR_LAST=$?
# No error or No IP set otherwise retry
[ $ERR_LAST -eq 0 -o $ERR_LAST -eq 127 ] || get_registered_ip REGISTERED_IP
+# on IPv6 we use expanded version to be shure when comparing
+[ $use_ipv6 -eq 1 ] && expand_ipv6 "$REGISTERED_IP" REGISTERED_IP
# loop endlessly, checking ip every check_interval and forcing an updating once every force_interval
write_log 6 "Starting main loop at $(eval $DATE_PROG)"
while : ; do
get_local_ip LOCAL_IP # read local IP
-
- # on IPv6 we use expanded version to be shure when comparing
- [ $use_ipv6 -eq 1 ] && {
- expand_ipv6 "$LOCAL_IP" LOCAL_IP
- expand_ipv6 "$REGISTERED_IP" REGISTERED_IP
- }
+ [ $use_ipv6 -eq 1 ] && expand_ipv6 "$LOCAL_IP" LOCAL_IP # on IPv6 we use expanded version
# prepare update
# never updated or forced immediate then NEXT_TIME = 0
REGISTERED_IP="" # clear variable
get_registered_ip REGISTERED_IP # get registered/public IP
+ [ $use_ipv6 -eq 1 ] && expand_ipv6 "$REGISTERED_IP" REGISTERED_IP # on IPv6 we use expanded version
# IP's are still different
if [ "$LOCAL_IP" != "$REGISTERED_IP" ]; then
# zzzz.io Free Dynamic DNS
"zzzz.io" "https://zzzz.io/api/v1/update/[DOMAIN]/?token=[PASSWORD]&ip=[IP]" "Updated|No change"
+
+# dynu.com
+"dynu.com" "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myip=[IP]&username=[USERNAME]&password=[PASSWORD]"
+
+# nubem.com
+"nubem.com" "http://[USERNAME]:[PASSWORD]@nubem.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
+
+# nettica.com
+"nettica.com" "http://www.nettica.com/Domain/Update.aspx?U=[USERNAME]&PC=[PASSWORD]&FQDN=[DOMAIN]&N=[IP]"
+
+# zerigo.com
+"zerigo.com" "http://update.zerigo.com/dynamic?host=[DOMAIN]&ip=[IP]&user=[USERNAME]&password=[PASSWORD]"
+
+# regfish.de
+"regfish.de" "http://dyndns.regfish.de/?fqdn=[DOMAIN]&forcehost=1&authtype=secure&token=[PASSWORD]&ipv4=[IP]" "success|100|101"
# IPv6 @ Dyn.com
"dyndns.org" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
-# zzzz.io Free Dynamic DNS
+# IPv6 @ zzzz.io Free Dynamic DNS
"zzzz.io" "https://zzzz.io/api/v1/update/[DOMAIN]/?token=[PASSWORD]&type=aaaa&ip=[IP]" "Updated|No change"
+
+# IPv6 @ zerigo.com
+"zerigo.com" "http://update.zerigo.com/dynamic?host=[DOMAIN]&ip=[IP]&user=[USERNAME]&password=[PASSWORD]"
+
+# IPv6 @ regfish.de
+"regfish.de" "http://dyndns.regfish.de/?fqdn=[DOMAIN]&forcehost=1&authtype=secure&token=[PASSWORD]&ipv6=[IP]" "success|100|101"
+
include $(TOPDIR)/rules.mk
PKG_NAME:=gnunet
-PKG_SOURCE_VERSION:=36713
+PKG_SOURCE_VERSION:=36918
PKG_VERSION:=0.10.1-svn$(PKG_SOURCE_VERSION)
-PKG_RELEASE:=3
+PKG_RELEASE:=2
# ToDo:
# - break-out {peer,name,data}store for each backend
$(if $(CONFIG_PACKAGE_$(PKG_NAME)-mysql),--with-mysql="$(STAGING_DIR)/usr",--without-mysql) \
$(if $(CONFIG_PACKAGE_$(PKG_NAME)-pgsql),--with-postgresql="$(STAGING_DIR)/usr/bin/pg_config",--without-postgresql) \
$(if $(CONFIG_PACKAGE_$(PKG_NAME)-sqlite),--with-sqlite="$(STAGING_DIR)/usr",--without-sqlite) \
- $(if $(CONFIG_PACKAGE_$(PKG_NAME)-experiments),--enable-experimental,--disable-experimental) \
+ --enable-experimental \
--with-extractor=$(STAGING_DIR)/usr \
--with-gnutls=$(STAGING_DIR)/usr \
--with-libgnurl=$(STAGING_DIR)/usr \
PLUGIN_transport-wlan:=transport_wlan
LIBEXEC_transport-wlan:=helper-transport-wlan
-DEPENDS_experiments:=+libglpk +gnunet-sqlite
-BIN_experiments:=multicast rps
-LIB_experiments:=consensus dv env multicast psyc psycstore psycutil rps secretsharing social
-PLUGIN_experiments:=ats_mlp ats_ril namecache_flat namestore_flat psycstore_sqlite transport_dv
-LIBEXEC_experiments:=service-consensus service-dv service-evil-consensus service-multicast service-psyc service-psycstore service-rps service-secretsharing service-social
-CONF_experiments:=consensus dv multicast psyc psycstore rps secretsharing social
+DEPENDS_experiments:=+libglpk
+PLUGIN_experiments:=ats_mlp ats_ril
+LIBEXEC_experiments:=service-dht-whanau service-dht-xvine
+
+# BIN_dv:=dv
+LIB_dv:=dv
+PLUGIN_dv:=transport_dv
+LIBEXEC_dv:=service-dv
+CONF_dv:=dv
DEPENDS_fs:=+gnunet-datastore +libextractor
BIN_fs:=auto-share directory download download-manager.scm fs publish unindex search
LIBEXEC_datastore:=daemon-latency-logger service-datastore
CONF_datastore:=datastore
+DEPENDS_flat:=+gnunet-gns
+PLUGIN_flat:=namecache_flat namestore_flat
+
DEPENDS_mysql:=+gnunet-gns +gnunet-datastore +libmysqlclient
LIB_mysql:=mysql
PLUGIN_mysql:=datastore_mysql
DEPENDS_pgsql:=+gnunet-gns +gnunet-datastore +libpq
-LIB_pgsql:=postgres
+LIB_pgsql:=postgres pq
PLUGIN_pgsql:=datacache_postgres datastore_postgres namecache_postgres namestore_postgres
+DEPENDS_rest:=+gnunet-gns +jansson
+LIB_rest:=rest
+PLUGIN_rest:=rest_gns rest_identity rest_namestore
+LIBEXEC_rest:=rest-server
+CONF_rest:=rest
+
+BIN_rps:=rps
+LIB_rps:=rps
+LIBEXEC_rps:=service-rps
+CONF_rps:=rps
+
+DEPENDS_social:=+gnunet-sqlite
+BIN_social:=multicast
+LIB_social:=consensus multicast psyc psycstore psycutil secretsharing social
+PLUGIN_social:=psycstore_sqlite
+LIBEXEC_social:=service-consensus service-evil-consensus service-multicast service-psyc service-psycstore service-secretsharing service-social
+CONF_social:=consensus multicast psyc psycstore secretsharing social
+
DEPENDS_sqlite:=+gnunet-gns +gnunet-datastore +libsqlite3
PLUGIN_sqlite:=datacache_sqlite datastore_sqlite namecache_sqlite namestore_sqlite peerstore_sqlite
$(eval $(call BuildPackage,gnunet))
$(eval $(call BuildComponent,conversation,conversation component,))
+$(eval $(call BuildComponent,datastore,data storage components,))
+$(eval $(call BuildComponent,dv,distance-vector routing component,))
$(eval $(call BuildComponent,experiments,experimental components,))
+$(eval $(call BuildComponent,flat,flat storage backends,))
$(eval $(call BuildComponent,fs,file-sharing components,))
$(eval $(call BuildComponent,gns,name resolution components,y))
-$(eval $(call BuildComponent,datastore,storage components,))
+$(eval $(call BuildComponent,mysql,mySQL datastore backend,))
+$(eval $(call BuildComponent,pgsql,PostgreSQL storage backends,))
+$(eval $(call BuildComponent,rest,REST interface,))
+$(eval $(call BuildComponent,rps,RPS routing component,))
+$(eval $(call BuildComponent,social,social components,))
+$(eval $(call BuildComponent,sqlite,libsqlite3 storage backends,y))
$(eval $(call BuildComponent,transport-bluetooth,bluetooth transport,))
$(eval $(call BuildComponent,transport-http_client,HTTP/HTTPS client transport,y))
$(eval $(call BuildComponent,transport-http_server,HTTP/HTTPS server transport,))
$(eval $(call BuildComponent,transport-wlan,WLAN transport,))
$(eval $(call BuildComponent,utils,administration utililties,))
$(eval $(call BuildComponent,vpn,vpn components,y))
-$(eval $(call BuildComponent,mysql,mySQL datastore backend,))
-$(eval $(call BuildComponent,pgsql,PostgreSQL backends,))
-$(eval $(call BuildComponent,sqlite,libsqlite3 backends,y))
include $(TOPDIR)/rules.mk
PKG_NAME:=mosquitto
-PKG_VERSION:=1.4.7
+PKG_VERSION:=1.4.8
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE.txt
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://mosquitto.org/files/source/
-PKG_MD5SUM:=4cb978502312bff2dcdaab6a433b1bf2
+PKG_MD5SUM:=d859cd474ffa61a6197bdabe007b9027
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk
This package is built without SSL support
endef
+define Package/libmosquittopp
+ SECTION:=libs
+ CATEGORY:=Libraries
+ DEPENDS:=+libmosquitto +libstdcpp
+ TITLE:= mosquitto - client c++ library
+endef
+
+define Package/libmosquittopp/description
+ C++ Library wrapper for libmosquitto.
+endef
define Package/$(PKG_NAME)/conffiles
/etc/mosquitto/mosquitto.conf
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mosquitto $(1)/usr/sbin/mosquitto
$(INSTALL_DIR) $(1)/etc/mosquitto
$(INSTALL_CONF) $(PKG_BUILD_DIR)/mosquitto.conf $(1)/etc/mosquitto/mosquitto.conf
- $(INSTALL_DIR) $(1)/etc/init.d
- $(INSTALL_BIN) ./files/mosquitto.init $(1)/etc/init.d/mosquitto
- $(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) ./files/mosquitto.uci.convert $(1)/usr/bin
+ $(CP) ./files/* $(1)/
endef
define Package/mosquitto-nossl/install
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_BUILD_DIR)/lib/mosquitto.h $(1)/usr/include
+ $(CP) $(PKG_BUILD_DIR)/lib/cpp/mosquittopp.h $(1)/usr/include
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/lib/libmosquitto.so.1 $(1)/usr/lib/
+ $(CP) $(PKG_BUILD_DIR)/lib/cpp/libmosquittopp.so.1 $(1)/usr/lib/
$(LN) libmosquitto.so.1 $(1)/usr/lib/libmosquitto.so
+ $(LN) libmosquittopp.so.1 $(1)/usr/lib/libmosquittopp.so
endef
# This installs files on the target. Compare with Build/InstallDev
endef
Package/libmosquitto-nossl/install = $(Package/libmosquitto/install)
+define Package/libmosquittopp/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/cpp/libmosquittopp.so.1 $(1)/usr/lib/
+ $(LN) libmosquittopp.so.1 $(1)/usr/lib/libmosquittopp.so
+endef
+
# Applies to all...
MAKE_FLAGS += WITH_DOCS=no
ifeq ($(BUILD_VARIANT),nossl)
$(eval $(call BuildPackage,$(PKG_NAME)-nossl))
$(eval $(call BuildPackage,libmosquitto))
$(eval $(call BuildPackage,libmosquitto-nossl))
+$(eval $(call BuildPackage,libmosquittopp))
$(eval $(call BuildPackage,mosquitto-client))
$(eval $(call BuildPackage,mosquitto-client-nossl))
--- /dev/null
+config owrt owrt
+ option use_uci 0
+
+config mosquitto mosquitto
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Basic init script for mosquitto
+# April 2012, OpenWrt.org
+# Provides support for the luci-app-mosquitto package, if installed
+
+START=80
+USE_PROCD=1
+TCONF=/tmp/mosquitto.generated.conf
+
+# Usage: append_if cfg uci_name output_name
+# add a config line of the form "output_name <value>"
+# if the "uci_name" was found.
+# output_name defaults to uci_name if not specified.
+append_if() {
+ local cfg="$1"
+ local uci_name="$2"
+ local out_name="$3"
+ if [ -z "$out_name" ]; then
+ out_name=$uci_name
+ fi
+ config_get val $cfg $uci_name
+ if [ -n "$val" ]; then
+ echo "$out_name $val" >> $TCONF
+ fi
+}
+
+# mosquitto uses true/false, uci uses 1/0
+# note that this is not shell truthy, but equality with 1!
+append_bool() {
+ if [ $2 -eq 1 ]; then
+ echo "$1 true" >> $TCONF
+ else
+ echo "$1 false" >> $TCONF
+ fi
+}
+
+# as per append_if, but gets the value as a uci bool, not raw
+append_optional_bool() {
+ local cfg="$1"
+ local uci_name="$2"
+ local out_name="$3"
+ config_get val $cfg $uci_name
+ if [ -n "$val" ]; then
+ config_get_bool real $cfg $uci_name
+ append_bool $out_name $real
+ fi
+}
+
+
+convert_mosq_general() {
+ local cfg="$1"
+ config_get destinations "$1" log_dest
+ for dest in $destinations; do
+ echo "log_dest $dest" >> $TCONF
+ done
+
+ config_get_bool no_remote "$1" no_remote_access 0
+ if [ "$no_remote" -eq 1 ]; then
+ echo "bind_address 127.0.0.1" >> $TCONF
+ fi
+
+ config_get port "$1" port 1883
+ echo "port $port" >> $TCONF
+ append_if "$1" protocol
+ append_if "$1" max_inflight_messages
+ append_if "$1" max_queued_messages
+}
+
+convert_persistence() {
+ local cfg="$1"
+
+ append_if "$cfg" client_expiration persistent_client_expiration
+ append_if "$cfg" autosave_interval
+ append_optional_bool "$cfg" autosave_on_changes autosave_on_changes
+ append_optional_bool "$cfg" persistence persistence
+ append_if "$cfg" file persistence_file
+ config_get loc "$cfg" location
+ if [ -n "$loc" ]; then
+ [ -d "$loc" ] || mkdir -p "$loc";
+ echo "persistence_location $loc" >> $TCONF
+ fi
+}
+
+add_listener() {
+ echo "" >> $TCONF
+ config_get port "$1" port
+ if [ -z "$port" ]; then
+ echo "Ignoring listener section without port"
+ return
+ fi
+ config_get_bool no_remote "$1" no_remote_access 0
+ if [ "$no_remote" -eq 1 ]; then
+ echo "listener $port 127.0.0.1" >> $TCONF
+ else
+ echo "listener $port" >> $TCONF
+ fi
+
+ append_if "$1" protocol
+}
+
+add_topic() {
+ echo "topic $1" >> $TCONF
+}
+
+add_bridge() {
+ config_get conn "$1" connection
+ config_get addr "$1" address
+ if [ -z "$conn" -o -z "$addr" ]; then
+ echo "Ignoring bridge section, misisng connection/address"
+ return
+ fi
+ echo "" >> $TCONF
+ echo "# Bridge connection from UCI section" >> $TCONF
+ append_if "$1" connection
+ append_if "$1" address
+
+ config_list_foreach "$1" topic add_topic
+ append_optional_bool "$1" cleansession cleansession
+ append_optional_bool "$1" try_private try_private
+
+ append_if "$1" clientid
+ append_if "$1" identity bridge_identity
+ append_if "$1" psk bridge_psk
+ append_if "$1" tls_version bridge_tls_version
+}
+
+
+convert_uci() {
+ rm -rf $TCONF
+ echo "Generating mosquitto config file in $TCONF"
+ echo "# mosquitto.conf file generated from UCI config." >>$TCONF
+ # Don't include a timestamp, it makes md5sum compares fail
+
+ config_load mosquitto
+ config_foreach convert_mosq_general "mosquitto"
+ config_foreach convert_persistence "persistence"
+ config_foreach add_listener "listener"
+ config_foreach add_bridge "bridge"
+}
+
+start_service_real() {
+ local cfg="$1"
+ local use_uci
+ config_get use_uci "$cfg" use_uci
+ if [ "$use_uci" -eq 1 ]; then
+ CONF=$TCONF
+ convert_uci
+ else
+ CONF=/etc/mosquitto/mosquitto.conf
+ fi
+
+ procd_open_instance
+ procd_set_param command mosquitto
+ procd_append_param command -c $CONF
+ # Makes /etc/init.d/mosquitto reload work if you edit the final file.
+ procd_set_param file $CONF
+ procd_close_instance
+}
+
+start_service() {
+ config_load mosquitto
+ config_foreach start_service_real owrt
+}
+
+service_triggers() {
+ # Makes "reload_config" work
+ procd_add_reload_trigger "mosquitto"
+}
+++ /dev/null
-#!/bin/sh /etc/rc.common
-# Basic init script for mosquitto
-# April 2012, OpenWrt.org
-# Provides support for the luci-app-mosquitto package, if installed
-
-START=80
-APP=`which mosquitto`
-USE_UCI_CONFIG=$(uci -q get mosquitto.owrt.use_uci)
-if [ $? -eq 1 ]; then
- USE_UCI_CONFIG=0
-fi
-
-SERVICE_DAEMONIZE=1
-SERVICE_WRITE_PID=1
-
-start() {
- if [ "$USE_UCI_CONFIG" -eq 1 ]; then
- CONF=/tmp/mosquitto.converted.$$.conf
- mosquitto.uci.convert -f $CONF
- else
- CONF=/etc/mosquitto/mosquitto.conf
- fi
- service_start $APP -c $CONF
-}
-
-stop() {
- service_stop $APP
-}
+++ /dev/null
-#!/bin/sh
-# Converts a uci config file into an appropriate mosquitto.conf snippet
-# expected to be used in an init file to generate a config file to run from
-# Karl Palsson <karlp@remake.is> 2012.
-# Considered to be released into the public domain
-
-[ -f $IPKG_INSTROOT/lib/functions.sh ] && . $IPKG_INSTROOT/lib/functions.sh
-
-TCONF=/tmp/mosquitto.generated.$$.conf
-while getopts "f:" o; do
- case $o in
- f)
- TCONF=$OPTARG
- ;;
- esac
-done
-
-if [ -e $TCONF ]; then
- echo "Odd, same temporary generated config file already existed: $TCONF"
- exit 1
-fi
-
-echo "Generating mosquitto config file in $TCONF"
-NOW=$(date)
-echo "# mosquitto.conf file generated from UCI config." >>$TCONF
-echo "# Config snippet generated by $0 on $NOW" >>$TCONF
-echo "#" >> $TCONF
-
-# Usage: append_if cfg uci_name output_name
-# add a config line of the form "output_name <value>"
-# if the "uci_name" was found.
-# output_name defaults to uci_name if not specified.
-append_if() {
- local cfg="$1"
- local uci_name="$2"
- local out_name="$3"
- if [ -z "$out_name" ]; then
- out_name=$uci_name
- fi
- config_get val $cfg $uci_name
- if [ -n "$val" ]; then
- echo "$out_name $val" >> $TCONF
- fi
-}
-
-# mosquitto uses true/false, uci uses 1/0
-# note that this is not shell truthy, but equality with 1!
-append_bool() {
- if [ $2 -eq 1 ]; then
- echo "$1 true" >> $TCONF
- else
- echo "$1 false" >> $TCONF
- fi
-}
-
-# as per append_if, but gets the value as a uci bool, not raw
-append_optional_bool() {
- local cfg="$1"
- local uci_name="$2"
- local out_name="$3"
- config_get val $cfg $uci_name
- if [ -n "$val" ]; then
- config_get_bool real $cfg $uci_name
- append_bool $out_name $real
- fi
-}
-
-mosq_general() {
- config_get destinations "$1" log_dest
- for dest in $destinations; do
- echo "log_dest $dest" >> $TCONF
- done
-
- config_get_bool no_remote "$1" no_remote_access 0
- if [ "$no_remote" -eq 1 ]; then
- echo "bind_address 127.0.0.1" >> $TCONF
- fi
-
- config_get port "$1" port 1883
- echo "port $port" >> $TCONF
- append_if "$1" protocol
- append_if "$1" max_inflight_messages
- append_if "$1" max_queued_messages
-
-}
-
-add_listener() {
- echo "" >> $TCONF
- config_get port "$1" port
- if [ -z "$port" ]; then
- echo "Ignoring listener section without port"
- return
- fi
- config_get_bool no_remote "$1" no_remote_access 0
- if [ "$no_remote" -eq 1 ]; then
- echo "listener $port 127.0.0.1" >> $TCONF
- else
- echo "listener $port" >> $TCONF
- fi
-
- append_if "$1" protocol
-}
-
-add_topic() {
- echo "topic $1" >> $TCONF
-}
-
-add_bridge() {
- config_get conn "$1" connection
- config_get addr "$1" address
- if [ -z "$conn" -o -z "$addr" ]; then
- echo "Ignoring bridge section, misisng connection/address"
- return
- fi
- echo "" >> $TCONF
- echo "# Bridge connection from UCI section" >> $TCONF
- append_if "$1" connection
- append_if "$1" address
-
- config_list_foreach "$1" topic add_topic
- append_optional_bool "$1" cleansession cleansession
- append_optional_bool "$1" try_private try_private
-
- append_if "$1" clientid
- append_if "$1" identity bridge_identity
- append_if "$1" psk bridge_psk
- append_if "$1" tls_version bridge_tls_version
-}
-
-
-config_load "mosquitto"
-config_foreach mosq_general "mosquitto"
-config_foreach add_listener "listener"
-config_foreach add_bridge "bridge"
}
service_triggers(){
+ local script=$(readlink "$initscript")
+ local name=$(basename ${script:-$initscript})
+
+ procd_open_trigger
+ procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload
+ procd_close_trigger
+
procd_add_reload_trigger 'snmpd'
}
include $(TOPDIR)/rules.mk
PKG_NAME:=ola
-PKG_VERSION:=0.9.7
+PKG_VERSION:=0.10.1
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/OpenLightingProject/ola.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=2a306e4f0221fea9f4833ba04b042e72c6f10cd3
+PKG_SOURCE_VERSION:=5b86f5802e2e5b23c6a010dc8d10788e6dc57614
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_LICENSE:=LGPL-2.1+
include $(TOPDIR)/rules.mk
PKG_NAME:=openssh
-PKG_VERSION:=7.1p2
+PKG_VERSION:=7.2p2
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ \
http://ftp.belnet.be/pub/OpenBSD/OpenSSH/portable/
-PKG_MD5SUM:=4d8547670e2a220d5ef805ad9e47acf2
+PKG_MD5SUM:=13009a9156510d8f27e752659075cced
PKG_LICENSE:=BSD ISC
PKG_LICENSE_FILES:=LICENCE
PKG_NAME:=openvswitch
-PKG_RELEASE:=4
+PKG_RELEASE:=5
PKG_VERSION:=2.5.0
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_LICENSE:=Apache-2.0
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/openvswitch/ovs
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=98b94d1e7002063ce2ea3c3221fe9234cac4e124
+PKG_SOURCE_VERSION:=22d4614ddf83988a3771fb379ea029e663b4455a
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_BUILD_PARALLEL:=1
--- /dev/null
+From 8147cec9ee8feea9440cf79365709ddc32ff57d5 Mon Sep 17 00:00:00 2001
+From: Alexandru Ardelean <ardeleanalex@gmail.com>
+Date: Thu, 4 Feb 2016 09:20:34 +0200
+Subject: [PATCH] lib/ovs-thread: Ensure that thread stacks are always at least
+ 512 kB.
+
+This makes a difference for libc implementations (such as musl libc) that
+have a really small default pthread stack size.
+
+Will reference this discussion:
+http://patchwork.ozlabs.org/patch/572340/
+
+Reported-by: Robert McKay <robert@mckay.com>
+Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
+[blp@ovn.org made style changes]
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+---
+ lib/ovs-thread.c | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+diff --git a/lib/ovs-thread.c b/lib/ovs-thread.c
+index 6ebda07..b0e10ee 100644
+--- a/lib/ovs-thread.c
++++ b/lib/ovs-thread.c
+@@ -340,6 +340,25 @@ ovsthread_wrapper(void *aux_)
+ return aux.start(aux.arg);
+ }
+
++static void
++set_min_stack_size(pthread_attr_t *attr, size_t min_stacksize)
++{
++ size_t stacksize;
++ int error;
++
++ error = pthread_attr_getstacksize(attr, &stacksize);
++ if (error) {
++ ovs_abort(error, "pthread_attr_getstacksize failed");
++ }
++
++ if (stacksize < min_stacksize) {
++ error = pthread_attr_setstacksize(attr, min_stacksize);
++ if (error) {
++ ovs_abort(error, "pthread_attr_setstacksize failed");
++ }
++ }
++}
++
+ /* Starts a thread that calls 'start(arg)'. Sets the thread's name to 'name'
+ * (suffixed by its ovsthread_id()). Returns the new thread's pthread_t. */
+ pthread_t
+@@ -358,10 +377,20 @@ ovs_thread_create(const char *name, void *(*start)(void *), void *arg)
+ aux->arg = arg;
+ ovs_strlcpy(aux->name, name, sizeof aux->name);
+
++ /* Some small systems use a default stack size as small as 80 kB, but OVS
++ * requires approximately 384 kB according to the following analysis:
++ * http://openvswitch.org/pipermail/dev/2016-January/065049.html
++ *
++ * We use 512 kB to give us some margin of error. */
++ pthread_attr_t attr;
++ pthread_attr_init(&attr);
++ set_min_stack_size(&attr, 512 * 1024);
++
+ error = pthread_create(&thread, NULL, ovsthread_wrapper, aux);
+ if (error) {
+ ovs_abort(error, "pthread_create failed");
+ }
++ pthread_attr_destroy(&attr);
+ return thread;
+ }
+ \f
+--
+2.1.4
+
include $(TOPDIR)/rules.mk
PKG_NAME:=shadowsocks-client
-PKG_VERSION:=0.5
+PKG_VERSION:=0.6
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=http://github.com/zhao-gang/shadowsocks-tiny.git
+PKG_SOURCE_URL:=https://github.com/zhao-gang/shadowsocks-tiny.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=d8ef02715f40de0fb7ba0f7267d3f8260f38ba80
+PKG_SOURCE_VERSION:=b59d754f838213d60b908aed0b7d4d5a81f273e2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MAINTAINER:=Zhao, Gang <gang.zhao.42@gmail.com>
+++ /dev/null
---- a/client.c
-+++ b/client.c
-@@ -111,7 +111,7 @@ int client_do_local_read(int sockfd, str
- goto out;
- }
-
-- if (encrypt(sockfd, ln) == -1)
-+ if (crypto_encrypt(sockfd, ln) == -1)
- goto out;
-
- ret = do_send(ln->server_sockfd, ln, "cipher", 0);
-@@ -172,7 +172,7 @@ int client_do_server_read(int sockfd, st
- }
- }
-
-- if (decrypt(sockfd, ln) == -1)
-+ if (crypto_decrypt(sockfd, ln) == -1)
- goto out;
-
- if (ln->state & SS_UDP) {
---- a/crypto.c
-+++ b/crypto.c
-@@ -185,7 +185,7 @@ err:
- return -1;
- }
-
--int encrypt(int sockfd, struct link *ln)
-+int crypto_encrypt(int sockfd, struct link *ln)
- {
- int len, cipher_len;
- EVP_CIPHER_CTX *ctx_p;
-@@ -223,7 +223,7 @@ err:
- return -1;
- }
-
--int decrypt(int sockfd, struct link *ln)
-+int crypto_decrypt(int sockfd, struct link *ln)
- {
- int len, text_len;
- EVP_CIPHER_CTX *ctx_p;
---- a/crypto.h
-+++ b/crypto.h
-@@ -15,7 +15,7 @@ extern int iv_len;
-
- int crypto_init(char *key, char *method);
- void crypto_exit(void);
--int encrypt(int sockfd, struct link *ln);
--int decrypt(int sockfd, struct link *ln);
-+int crypto_encrypt(int sockfd, struct link *ln);
-+int crypto_decrypt(int sockfd, struct link *ln);
-
- #endif
---- a/server.c
-+++ b/server.c
-@@ -36,7 +36,7 @@ int server_do_remote_read(int sockfd, st
- goto out;
- }
-
-- if (encrypt(sockfd, ln) == -1)
-+ if (crypto_encrypt(sockfd, ln) == -1)
- goto out;
-
- ret = do_send(ln->local_sockfd, ln, "cipher", 0);
-@@ -91,7 +91,7 @@ int server_do_local_read(int sockfd, str
- }
- }
-
-- if (decrypt(sockfd, ln) == -1)
-+ if (crypto_decrypt(sockfd, ln) == -1)
- goto out;
-
- if (ln->state & SS_UDP) {
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
-# uses libcom_err.la
-PKG_BUILD_DEP:=libext2fs
-
include $(INCLUDE_DIR)/package.mk
define Package/squid/Default
--disable-auth-basic \
--disable-arch-native \
--with-krb5-config=no \
+ --without-mit-krb5 \
--without-libcap \
--without-netfilter-conntrack
#
-# Copyright (C) 2014-2015 OpenWrt.org
+# Copyright (C) 2014-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:=shairplay
-PKG_VERSION:=2015-09-29
+PKG_VERSION:=2016-01-01
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git://github.com/juhovh/shairplay.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=498bc5bcdd305e04721f94a04b9f26a7da72673f
+PKG_SOURCE_VERSION:=ce80e005908f41d0e6fde1c4a21e9cb8ee54007b
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
--- a/src/shairplay.c
+++ b/src/shairplay.c
-@@ -346,7 +346,7 @@ main(int argc, char *argv[])
+@@ -350,7 +350,7 @@ main(int argc, char *argv[])
raop_cbs.audio_destroy = audio_destroy;
raop_cbs.audio_set_volume = audio_set_volume;
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-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:=shairport-sync
-PKG_VERSION:=2.6
-PKG_RELEASE:=2
+PKG_VERSION:=2.8.0
+PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git://github.com/mikebrady/shairport-sync.git
CATEGORY:=Sound
TITLE:=AirPlay compatible audio player
DEPENDS:=@AUDIO_SUPPORT +libpthread +alsa-lib +libconfig +libdaemon +libpopt
+ PROVIDES:=shairport-sync
URL:=http://github.com/mikebrady/shairport-sync
endef
define Package/shairport-sync-openssl
$(Package/shairport-sync/default)
TITLE+= (openssl)
- DEPENDS+= +PACKAGE_shairport-sync-openssl:libopenssl +libavahi-client +libsoxr
+ DEPENDS+= +libopenssl +libavahi-client +libsoxr
VARIANT:=openssl
endef
define Package/shairport-sync-polarssl
$(Package/shairport-sync/default)
TITLE+= (polarssl)
- DEPENDS+= +PACKAGE_shairport-sync-polarssl:libpolarssl +libavahi-client +libsoxr
+ DEPENDS+= +libpolarssl +libavahi-client +libsoxr
VARIANT:=polarssl
DEFAULT_VARIANT:=1
endef
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=squeezelite
PKG_VERSION:=1.8
-PKG_RELEASE=1
+PKG_RELEASE=2
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=LICENSE.txt
option decoder_auto_conf '1'
option dsd_over_pcm '0'
option ircontrol '0'
+ option interface ''
option enabled '1'
config_get model_name options model_name "SqueezeLite"
cmdline="$cmdline -M $model_name"
+ config_get interface options interface ""
+ [ -n "$interface" ] && cmdline="$cmdline -I $interface"
+
config_get device options device ""
- [ -n $device ] && cmdline="$cmdline -o $device"
+ [ -n "$device" ] && cmdline="$cmdline -o $device"
config_get alsa_buffer options alsa_buffer 200
[ $alsa_buffer -eq 0 ] && alsa_buffer="200"
# ***NOTE: codec lib names are in squeezelite.h (set decode_auto_conf to 0 to ignore)
#
local excl_codecs=""
+ local vorbis_lib="libvorbisidec.so.1"
+
excl_codecs=`checkcodec decode_flac "libFLAC.so.8" flac "$excl_codecs"`
excl_codecs=`checkcodec decode_mp3 "libmad.so.0" mp3 "$excl_codecs"`
excl_codecs=`checkcodec decode_aac "libfaad.so.2" aac "$excl_codecs"`
- excl_codecs=`checkcodec decode_ogg "libvorbisfile.so.3" ogg "$excl_codecs"`
+
+ [ -e "/usr/lib/$vorbis_lib" ] || vorbis_lib="libvorbisfile.so.3"
+
+ excl_codecs=`checkcodec decode_ogg "$vorbis_lib" ogg "$excl_codecs"`
excl_codecs=`checkcodec decode_wma_alac "libavcodec.so.56" wma,alac "$excl_codecs"`
cmdline="$cmdline $excl_codecs"
--- /dev/null
+--- a/main.c
++++ b/main.c
+@@ -69,6 +69,7 @@ static void usage(const char *argv0) {
+ #if IR
+ " -i [<filename>]\tEnable lirc remote control support (lirc config file ~/.lircrc used if filename not specified)\n"
+ #endif
++ " -I <interface>\t\tNetwork interface used to send discovery\n"
+ " -m <mac addr>\t\tSet mac address, format: ab:cd:ef:12:34:56\n"
+ " -M <modelname>\tSet the squeezelite player model name sent to the server (default: " MODEL_NAME_STRING ")\n"
+ " -n <name>\t\tSet the player name\n"
+@@ -197,6 +198,8 @@ int main(int argc, char **argv) {
+ char *modelname = NULL;
+ char *logfile = NULL;
+ u8_t mac[6];
++ char *iface = NULL;
++ in_addr_t bcast_addr = 0;
+ unsigned stream_buf_size = STREAMBUF_SIZE;
+ unsigned output_buf_size = 0; // set later
+ unsigned rates[MAX_SUPPORTED_SAMPLERATES] = { 0 };
+@@ -233,6 +236,7 @@ int main(int argc, char **argv) {
+ log_level log_ir = lWARN;
+ #endif
+
++ memset(mac, 0, sizeof(mac));
+ char *optarg = NULL;
+ int optind = 1;
+ int i;
+@@ -240,8 +244,6 @@ int main(int argc, char **argv) {
+ #define MAXCMDLINE 512
+ char cmdline[MAXCMDLINE] = "";
+
+- get_mac(mac);
+-
+ for (i = 0; i < argc && (strlen(argv[i]) + strlen(cmdline) + 2 < MAXCMDLINE); i++) {
+ strcat(cmdline, argv[i]);
+ strcat(cmdline, " ");
+@@ -249,7 +251,7 @@ int main(int argc, char **argv) {
+
+ while (optind < argc && strlen(argv[optind]) >= 2 && argv[optind][0] == '-') {
+ char *opt = argv[optind] + 1;
+- if (strstr("oabcCdefmMnNpPrs"
++ if (strstr("oabcCdefImMnNpPrs"
+ #if ALSA
+ "UV"
+ #endif
+@@ -334,6 +336,9 @@ int main(int argc, char **argv) {
+ case 'f':
+ logfile = optarg;
+ break;
++ case 'I':
++ iface = optarg;
++ break;
+ case 'm':
+ {
+ int byte = 0;
+@@ -556,6 +561,11 @@ int main(int argc, char **argv) {
+ winsock_init();
+ #endif
+
++ if (!(bcast_addr = get_iface_info(log_slimproto, iface, mac))) {
++ fprintf(stderr, "Error binding to network or none given\n");
++ exit(1);
++ }
++
+ stream_init(log_stream, stream_buf_size);
+
+ if (!strcmp(output_device, "-")) {
+@@ -599,7 +609,7 @@ int main(int argc, char **argv) {
+ exit(1);
+ }
+
+- slimproto(log_slimproto, server, mac, name, namefile, modelname);
++ slimproto(log_slimproto, server, bcast_addr, mac, name, namefile, modelname);
+
+ decode_close();
+ stream_close();
+--- a/squeezelite.h
++++ b/squeezelite.h
+@@ -374,7 +374,7 @@ typedef enum { EVENT_TIMEOUT = 0, EVENT_
+
+ char *next_param(char *src, char c);
+ u32_t gettime_ms(void);
+-void get_mac(u8_t *mac);
++in_addr_t get_iface_info(log_level level, char *iface, u8_t *mac);
+ void set_nonblock(sockfd s);
+ int connect_timeout(sockfd sock, const struct sockaddr *addr, socklen_t addrlen, int timeout);
+ void server_addr(char *server, in_addr_t *ip_ptr, unsigned *port_ptr);
+@@ -426,7 +426,7 @@ void buf_init(struct buffer *buf, size_t
+ void buf_destroy(struct buffer *buf);
+
+ // slimproto.c
+-void slimproto(log_level level, char *server, u8_t mac[6], const char *name, const char *namefile, const char *modelname);
++void slimproto(log_level level, char *server, in_addr_t bcast_addr, u8_t *mac, const char *name, const char *namefile, const char *modelname);
+ void slimproto_stop(void);
+ void wake_controller(void);
+
+--- a/slimproto.c
++++ b/slimproto.c
+@@ -107,7 +107,7 @@ void send_packet(u8_t *packet, size_t le
+ }
+ }
+
+-static void sendHELO(bool reconnect, const char *fixed_cap, const char *var_cap, u8_t mac[6]) {
++static void sendHELO(bool reconnect, const char *fixed_cap, const char *var_cap, u8_t *mac) {
+ const char *base_cap = "Model=squeezelite,AccuratePlayPoints=1,HasDigitalOut=1,HasPolarityInversion=1,Firmware=" VERSION;
+ struct HELO_packet pkt;
+
+@@ -730,7 +730,7 @@ void wake_controller(void) {
+ wake_signal(wake_e);
+ }
+
+-in_addr_t discover_server(void) {
++in_addr_t discover_server(in_addr_t bcast_addr) {
+ struct sockaddr_in d;
+ struct sockaddr_in s;
+ char *buf;
+@@ -746,7 +746,7 @@ in_addr_t discover_server(void) {
+ memset(&d, 0, sizeof(d));
+ d.sin_family = AF_INET;
+ d.sin_port = htons(PORT);
+- d.sin_addr.s_addr = htonl(INADDR_BROADCAST);
++ d.sin_addr.s_addr = bcast_addr;
+
+ pollinfo.fd = disc_sock;
+ pollinfo.events = POLLIN;
+@@ -777,7 +777,7 @@ in_addr_t discover_server(void) {
+ #define FIXED_CAP_LEN 256
+ #define VAR_CAP_LEN 128
+
+-void slimproto(log_level level, char *server, u8_t mac[6], const char *name, const char *namefile, const char *modelname) {
++void slimproto(log_level level, char *server, in_addr_t bcast_addr, u8_t *mac, const char *name, const char *namefile, const char *modelname) {
+ struct sockaddr_in serv_addr;
+ static char fixed_cap[FIXED_CAP_LEN], var_cap[VAR_CAP_LEN] = "";
+ bool reconnect = false;
+@@ -795,7 +795,7 @@ void slimproto(log_level level, char *se
+ }
+
+ if (!slimproto_ip) {
+- slimproto_ip = discover_server();
++ slimproto_ip = discover_server(bcast_addr);
+ }
+
+ if (!slimproto_port) {
+@@ -870,7 +870,7 @@ void slimproto(log_level level, char *se
+
+ // rediscover server if it was not set at startup
+ if (!server && ++failed_connect > 5) {
+- slimproto_ip = serv_addr.sin_addr.s_addr = discover_server();
++ slimproto_ip = serv_addr.sin_addr.s_addr = discover_server(bcast_addr);
+ }
+
+ } else {
+--- a/utils.c
++++ b/utils.c
+@@ -21,11 +21,11 @@
+ #include "squeezelite.h"
+
+ #if LINUX || OSX || FREEBSD
+-#include <sys/ioctl.h>
++#include <sys/types.h>
+ #include <net/if.h>
+-#include <netdb.h>
+-#if FREEBSD
+ #include <ifaddrs.h>
++#include <netdb.h>
++#if FREEBSD || OSX
+ #include <net/if_dl.h>
+ #include <net/if_types.h>
+ #endif
+@@ -33,15 +33,11 @@
+ #if WIN
+ #include <iphlpapi.h>
+ #endif
+-#if OSX
+-#include <net/if_dl.h>
+-#include <net/if_types.h>
+-#include <ifaddrs.h>
+-#include <netdb.h>
+-#endif
+
+ #include <fcntl.h>
+
++static log_level loglevel;
++
+ // logging functions
+ const char *logtime(void) {
+ static char buf[100];
+@@ -99,67 +95,101 @@ u32_t gettime_ms(void) {
+ #endif
+ }
+
+-// mac address
+-#if LINUX
+-// search first 4 interfaces returned by IFCONF
+-void get_mac(u8_t mac[]) {
+- struct ifconf ifc;
+- struct ifreq *ifr, *ifend;
+- struct ifreq ifreq;
+- struct ifreq ifs[4];
+-
+- mac[0] = mac[1] = mac[2] = mac[3] = mac[4] = mac[5] = 0;
+-
+- int s = socket(AF_INET, SOCK_DGRAM, 0);
+-
+- ifc.ifc_len = sizeof(ifs);
+- ifc.ifc_req = ifs;
+-
+- if (ioctl(s, SIOCGIFCONF, &ifc) == 0) {
+- ifend = ifs + (ifc.ifc_len / sizeof(struct ifreq));
+-
+- for (ifr = ifc.ifc_req; ifr < ifend; ifr++) {
+- if (ifr->ifr_addr.sa_family == AF_INET) {
+-
+- strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name));
+- if (ioctl (s, SIOCGIFHWADDR, &ifreq) == 0) {
+- memcpy(mac, ifreq.ifr_hwaddr.sa_data, 6);
+- if (mac[0]+mac[1]+mac[2] != 0) {
+- break;
+- }
++// Get broadcast address for interface (given or first available)
++// Return MAC address if none given
++#if LINUX || OSX || FREEBSD
++
++in_addr_t get_iface_info(log_level level, char *iface, u8_t *mac) {
++ struct ifaddrs *addrs, *ifa;
++ struct sockaddr *sdl;
++ char ifname[16];
++ unsigned char *ptr;
++ in_addr_t bcast_addr = 0;
++ int have_mac = 0, have_ifname = 0;
++
++ loglevel = level;
++
++ // Check for non-zero MAC
++ if ((mac[0] | mac[1] | mac[2]) != 0)
++ have_mac = 1;
++
++ // Copy interface name, if it was provided.
++ if (iface != NULL)
++ {
++ if( strlen(iface) > sizeof(ifname) )
++ return -1;
++
++ strncpy(ifname, iface, sizeof(ifname));
++ have_ifname = 1;
++ }
++
++ if (getifaddrs(&addrs) == 0) {
++ //iterate to find corresponding ethernet address
++ for (ifa = addrs; ifa; ifa = ifa->ifa_next) {
++ // Skip LOOPBACK interfaces, DOWN interfaces and interfaces that
++ // don't support BROADCAST.
++ if ((ifa->ifa_flags & IFF_LOOPBACK)
++ || !(ifa->ifa_flags & IFF_UP)
++ || !(ifa->ifa_flags & IFF_BROADCAST))
++ {
++ continue;
++ }
++
++ if (!have_ifname)
++ {
++ // We have found a valid interface name. Keep it.
++ strncpy(ifname, ifa->ifa_name, sizeof(ifname));
++ have_ifname = 1;
++ } else {
++ if (strncmp(ifname, ifa->ifa_name, sizeof(ifname)) != 0)
++ {
++ // This is not the interface we're looking for.
++ continue;
+ }
+ }
+- }
+- }
+
+- close(s);
+-}
+-#endif
+
+-#if OSX || FREEBSD
+-void get_mac(u8_t mac[]) {
+- struct ifaddrs *addrs, *ptr;
+- const struct sockaddr_dl *dlAddr;
+- const unsigned char *base;
+-
+- mac[0] = mac[1] = mac[2] = mac[3] = mac[4] = mac[5] = 0;
+-
+- if (getifaddrs(&addrs) == 0) {
+- ptr = addrs;
+- while (ptr) {
+- if (ptr->ifa_addr->sa_family == AF_LINK && ((const struct sockaddr_dl *) ptr->ifa_addr)->sdl_type == IFT_ETHER) {
+- dlAddr = (const struct sockaddr_dl *)ptr->ifa_addr;
+- base = (const unsigned char*) &dlAddr->sdl_data[dlAddr->sdl_nlen];
+- memcpy(mac, base, min(dlAddr->sdl_alen, 6));
++ // Check address family.
++ if ((ifa->ifa_addr->sa_family == AF_INET) &&
++ (((struct sockaddr_in *)ifa->ifa_broadaddr)->sin_addr.s_addr != 0))
++ {
++ // Get broadcast address and MAC address
++ bcast_addr = ((struct sockaddr_in *)ifa->ifa_broadaddr)->sin_addr.s_addr;
+ break;
+ }
+- ptr = ptr->ifa_next;
++ else
++ {
++ // Address is not IPv4
++ if (iface == NULL)
++ have_ifname = 0;
++ }
++
+ }
++
++ // Find MAC address matching interface
++ if (!have_mac && (bcast_addr != 0)) {
++ for (ifa = addrs; ifa; ifa = ifa->ifa_next) {
++ if ((ifa->ifa_addr->sa_family == PF_PACKET) &&
++ (strncmp(ifname, ifa->ifa_name, sizeof(ifname)) == 0)) {
++ sdl = (struct sockaddr *)(ifa->ifa_addr);
++ ptr = (unsigned char *)sdl->sa_data;
++ memcpy(mac, ptr + 10, 6);
++ have_mac = 1;
++ }
++ }
++ }
++
+ freeifaddrs(addrs);
+ }
++
++ LOG_INFO("Interface: %s, broadcast: %08X, macaddr = %02x:%02x:%02x:%02x:%02x:%02x",
++ ifname, bcast_addr, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
++
++ return bcast_addr;
+ }
+ #endif
+
++
+ #if WIN
+ #pragma comment(lib, "IPHLPAPI.lib")
+ void get_mac(u8_t mac[]) {
+++ /dev/null
---- a/main.c
-+++ b/main.c
-@@ -187,6 +187,17 @@ static void sighandler(int signum) {
- signal(signum, SIG_DFL);
- }
-
-+// Waits for nonzero MAC
-+static void get_nonzero_mac(u8_t mac[], u32_t timeout_ms) {
-+ u32_t wait_timeout = gettime_ms() + timeout_ms;
-+ do{
-+ get_mac(mac);
-+ if ((mac[0]+mac[1]+mac[2]+mac[3]+mac[4]+mac[5]) != 0) {
-+ break;
-+ }
-+ }while(wait_timeout > gettime_ms());
-+}
-+
- int main(int argc, char **argv) {
- char *server = NULL;
- char *output_device = "default";
-@@ -240,7 +251,8 @@ int main(int argc, char **argv) {
- #define MAXCMDLINE 512
- char cmdline[MAXCMDLINE] = "";
-
-- get_mac(mac);
-+ // Waits for nonzero MAC
-+ get_nonzero_mac(mac,10000);
-
- for (i = 0; i < argc && (strlen(argv[i]) + strlen(cmdline) + 2 < MAXCMDLINE); i++) {
- strcat(cmdline, argv[i]);
PKG_NAME:=cryptodev-linux
PKG_VERSION:=1.8
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://download.gna.org/cryptodev-linux/
URL:=http://cryptodev-linux.org/
MAINTAINER:=Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com>
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE)
- DEPENDS:=+kmod-crypto-core +kmod-crypto-authenc +kmod-crypto-hash
+ DEPENDS:=+kmod-crypto-authenc +kmod-crypto-hash
FILES:= \
$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX)
AUTOLOAD:=$(call AutoLoad,50,$(CRYPTODEV_AUTOLOAD))
include $(TOPDIR)/rules.mk
PKG_NAME:=cryptsetup
-PKG_VERSION:=1.7.0
-PKG_RELEASE:=1
+PKG_VERSION:=1.7.1
+PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0+ LGPL-2.1+
PKG_LICENSE_FILES:=COPYING COPYING.LGPL
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/utils/cryptsetup/v1.7
-PKG_MD5SUM:=56c385fe87fc2b6873df4b7f89202d0f
+PKG_MD5SUM:=e38da1c80088cbaaccf931ef61e726dc
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
#
-# Copyright (C) 2013-2015 OpenWrt.org
+# Copyright (C) 2013-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:=dump1090
-PKG_VERSION:=2015-11-22
+PKG_VERSION:=2016-02-25
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git://github.com/mutability/dump1090.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=497f88fe1c597652aca23c1035ddb55a9f6c274d
+PKG_SOURCE_VERSION:=214bc0e587fa70b7206c094e10e62c88bf387322
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
endef
MAKE_FLAGS += \
- CFLAGS="$(TARGET_CFLAGS)"
+ CFLAGS="$(TARGET_CFLAGS)" \
+ UNAME=Linux
define Package/dump1090/install
$(INSTALL_DIR) $(1)/etc/init.d
option raw '0'
option net '1'
option modeac '0'
- option net_beast '0'
option net_only '0'
option net_bind_address ''
option net_http_port '8080'
option net_sbs_port ''
option net_bi_port ''
option net_bo_port ''
- option net_fatsv_port ''
option net_ro_size ''
option net_ro_interval ''
option net_heartbeat ''
option no_fix '0'
option no_crc_check '0'
option phase_enhance '0'
- option aggressive '0'
option mlat '0'
option stats '0'
option stats_range '0'
option stats_every ''
option onlyaddr '0'
option metric '0'
+ option hae '0'
option snip ''
option debug ''
option ppm ''
append_bool "$cfg" raw "--raw"
append_bool "$cfg" net "--net"
append_bool "$cfg" modeac "--modeac"
- append_bool "$cfg" net_beast "--net-beast"
append_bool "$cfg" net_only "--net-only"
append_arg "$cfg" net_bind_address "--net-bind-address"
append_arg "$cfg" net_http_port "--net-http-port"
append_arg "$cfg" net_sbs_port "--net-sbs-port"
append_arg "$cfg" net_bi_port "--net-bi-port"
append_arg "$cfg" net_bo_port "--net-bo-port"
- append_arg "$cfg" net_fatsv_port "net-fatsv-port"
append_arg "$cfg" net_ro_size "--net-ro-size"
append_arg "$cfg" net_ro_interval "--net-ro-interval"
append_arg "$cfg" net_heartbeat "--net-heartbeat"
append_bool "$cfg" no_fix "--no-fix"
append_bool "$cfg" no_crc_check "--no-crc-check"
append_bool "$cfg" phase_enhance "--phase-enhance"
- append_bool "$cfg" aggressive "--aggressive"
append_bool "$cfg" mlat "--mlat"
append_bool "$cfg" stats "--stats"
append_bool "$cfg" stats_range "--stats-range"
append_arg "$cfg" stats_every "--stats-every"
append_bool "$cfg" onlyaddr "--onlyaddr"
append_bool "$cfg" metric "--metric"
+ append_bool "$cfg" hae "--hae"
append_arg "$cfg" snip "--snip"
append_arg "$cfg" debug "--debug"
append_arg "$cfg" ppm "--ppm"
include $(TOPDIR)/rules.mk
PKG_NAME:=LVM2
-PKG_VERSION:=2.02.141
+PKG_VERSION:=2.02.145
PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0 LGPL-2.1
PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
PKG_SOURCE_URL:=ftp://sources.redhat.com/pub/lvm2/releases
-PKG_MD5SUM:=0bb6261f7ecb9ef70fd773c6a952de67
+PKG_MD5SUM:=fd952ba7d640f0bedcec0085e358b318
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME).$(PKG_VERSION)
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
-@@ -1741,8 +1741,10 @@ struct cmd_context *create_toolcontext(u
+@@ -1747,8 +1747,10 @@ struct cmd_context *create_toolcontext(u
unsigned set_filters)
{
struct cmd_context *cmd;
#ifdef M_MMAP_MAX
mallopt(M_MMAP_MAX, 0);
-@@ -1778,7 +1780,7 @@ struct cmd_context *create_toolcontext(u
+@@ -1784,7 +1786,7 @@ struct cmd_context *create_toolcontext(u
/* FIXME Make this configurable? */
reset_lvm_errno(1);
/* Set in/out stream buffering before glibc */
if (set_buffering) {
/* Allocate 2 buffers */
-@@ -2161,7 +2163,7 @@ void destroy_toolcontext(struct cmd_cont
+@@ -2167,7 +2169,7 @@ void destroy_toolcontext(struct cmd_cont
if (cmd->libmem)
dm_pool_destroy(cmd->libmem);
if (is_valid_fd(STDIN_FILENO) &&
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
-@@ -1741,6 +1741,7 @@ int lvm_split(char *str, int *argc, char
+@@ -1744,6 +1744,7 @@ int lvm_split(char *str, int *argc, char
/* Make sure we have always valid filedescriptors 0,1,2 */
static int _check_standard_fds(void)
{
int err = is_valid_fd(STDERR_FILENO);
if (!is_valid_fd(STDIN_FILENO) &&
-@@ -1767,6 +1768,12 @@ static int _check_standard_fds(void)
+@@ -1770,6 +1771,12 @@ static int _check_standard_fds(void)
strerror(errno));
return 0;
}
#
-# Copyright (C) 2015 OpenWrt.org
+# Copyright (C) 2015-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:=mmc-utils
-PKG_VERSION=2015-05-01-$(PKG_SOURCE_VERSION)
+PKG_VERSION=2016-02-23-$(PKG_SOURCE_VERSION)
PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git
-PKG_SOURCE_VERSION:=d0b46442b50794217e53b2455c1344c548d9d088
+PKG_SOURCE_VERSION:=4af1749d23503c25f692a60f23d295d16ddcfb61
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
#
-# Copyright (C) 2007-2015 OpenWrt.org
+# Copyright (C) 2007-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:=nano
-PKG_VERSION:=2.5.0
+PKG_VERSION:=2.5.3
PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0+
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://www.nano-editor.org/dist/v2.5
-PKG_MD5SUM:=751ed96457017572bab15be18cb873ba
+PKG_SOURCE_URL:=@GNU/nano
+PKG_MD5SUM:=a04d77611422ab4b6a7b489650c7a793
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
#
-# Copyright (C) 2007-2015 OpenWrt.org
+# Copyright (C) 2007-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:=pciutils
-PKG_VERSION:=3.4.0
+PKG_VERSION:=3.4.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@KERNEL/software/utils/pciutils
-PKG_MD5SUM:=46674cdbf2f72e4cfef75fea1b1ec5c8
+PKG_MD5SUM:=e901d17fcc6850747f43efde4de3452b
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
PKG_LICENSE:=GPL-2.0
--- /dev/null
+#
+# Copyright (C) 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:=qemu
+PKG_VERSION:=2.4.1
+PKG_RELEASE:=1
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://wiki.qemu-project.org/download/
+PKG_SOURCE_MD5SUM:=a895e93ec1dafc34bc64ed676f0d55a6
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=LICENSE tcg/LICENSE
+PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/qemu-ga
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=QEMU Guest Agent
+ URL:=http://www.qemu.org
+ DEPENDS:=+glib2 +libpthread +libstdcpp +librt
+endef
+
+define Package/qemu-ga/description
+This package contains the QEMU Guest Agent daemon
+endef
+
+# QEMU configure script does not recognize these options
+CONFIGURE_ARGS:=$(filter-out \
+ --target=% \
+ --host=% \
+ --build=% \
+ --program-prefix=% \
+ --program-suffix=% \
+ --exec-prefix=% \
+ --disable-nls \
+ , $(CONFIGURE_ARGS))
+
+# Building qemu-ga alone does not require zlib
+CONFIGURE_ARGS+= \
+ --cross-prefix=$(TARGET_CROSS) \
+ --host-cc=$(HOSTCC) \
+ --target-list='' \
+ --disable-zlib-test \
+ --enable-guest-agent
+
+define Package/qemu-ga/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/qemu-ga $(1)/usr/bin
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/qemu-ga.init $(1)/etc/init.d/qemu-ga
+ $(INSTALL_DIR) $(1)/etc/hotplug.d/virtio-ports
+ $(INSTALL_BIN) ./files/virtio-ports.hotplug $(1)/etc/hotplug.d/virtio-ports/qemu-ga
+endef
+
+$(eval $(call BuildPackage,qemu-ga))
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2016 OpenWrt.org
+
+START=99
+USE_PROCD=1
+
+BIN=/usr/bin/qemu-ga
+
+start_service() {
+ procd_open_instance
+ procd_set_param command $BIN
+ procd_set_param respawn
+ procd_set_param stderr 1
+ procd_close_instance
+}
--- /dev/null
+#!/bin/sh
+# Copyright (C) 2016 OpenWrt.org
+
+[ "$SUBSYSTEM" = "virtio-ports" ] || exit 0
+
+syspath="/sys/$DEVPATH"
+name="$(cat "$syspath/name" 2>/dev/null)"
+[ -n "$name" ] || exit 0
+
+case "$ACTION" in
+ "add")
+ mkdir -p /dev/virtio-ports
+ ln -s "/dev/$DEVNAME" "/dev/virtio-ports/$name"
+ /etc/init.d/qemu-ga start
+ ;;
+ "del")
+ rm -f "/dev/virtio-ports/$name"
+ ;;
+esac
include $(TOPDIR)/rules.mk
PKG_NAME:=tracertools
-PKG_VERSION:=20160118
+PKG_VERSION:=20160308
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/dangowrt/tracertools.git
-PKG_SOURCE_VERSION:=253e73fd379714239b51d5b0fd719b7c2d65f379
+PKG_SOURCE_VERSION:=28d0bb9a10a0b56b4964e3256135cfd152075a59
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
#
-# 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.
include $(TOPDIR)/rules.mk
PKG_NAME:=unrar
-PKG_VERSION:=5.3.8
+PKG_VERSION:=5.3.11
PKG_RELEASE:=1
PKG_SOURCE:=unrarsrc-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.rarlab.com/rar
-PKG_MD5SUM:=9aa9643e817187519e358be292185f6f
+PKG_MD5SUM:=4a29cc1b47ced82db11e06090a95ed51
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
PKG_LICENSE:=UnRAR
#
-# Copyright (C) 2007-2014 OpenWrt.org
+# Copyright (C) 2007-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=zip
PKG_REV:=30
PKG_VERSION:=3.0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)$(PKG_REV).tar.gz
PKG_SOURCE_URL:=@SF/infozip
$(MAKE) -C $(PKG_BUILD_DIR) -f unix/Makefile generic \
prefix="$(PKG_INSTALL_DIR)/usr" \
CFLAGS="$(TARGET_CFLAGS)" \
- CC="$(TARGET_CC) $(TARGET_CFLAGS) -O $(TARGET_CPPFLAGS) -I. -DUNIX" \
- LD="$(TARGET_CC) $(TARGET_LDFLAGS)" \
+ CC="$(TARGET_CC) $(TARGET_CFLAGS) -O $(TARGET_CPPFLAGS) -I. -DUNIX $(TARGET_LDFLAGS)" \
IZ_BZIP2="no" \
install
endef