Merge pull request #12333 from stangri/master-simple-adblock
simple-adblock: bugfix: proper error reporting on failed downloads; lists update script
This commit is contained in:
commit
ac9c5baabd
5 changed files with 66 additions and 36 deletions
|
@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=simple-adblock
|
PKG_NAME:=simple-adblock
|
||||||
PKG_VERSION:=1.8.3
|
PKG_VERSION:=1.8.3
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=9
|
||||||
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
|
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
|
||||||
PKG_LICENSE:=GPL-3.0-or-later
|
PKG_LICENSE:=GPL-3.0-or-later
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ endef
|
||||||
|
|
||||||
define Package/simple-adblock/description
|
define Package/simple-adblock/description
|
||||||
This service provides DNSMASQ or Unbound based ad blocking.
|
This service provides DNSMASQ or Unbound based ad blocking.
|
||||||
Please see the project's README at github for further information.
|
Please see the project's README on GitHub for further information.
|
||||||
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -46,6 +46,8 @@ define Package/simple-adblock/install
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/simple-adblock.init $(1)/etc/init.d/simple-adblock
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/simple-adblock.init $(1)/etc/init.d/simple-adblock
|
||||||
$(INSTALL_DIR) $(1)/etc/config
|
$(INSTALL_DIR) $(1)/etc/config
|
||||||
$(INSTALL_CONF) ./files/simple-adblock.conf $(1)/etc/config/simple-adblock
|
$(INSTALL_CONF) ./files/simple-adblock.conf $(1)/etc/config/simple-adblock
|
||||||
|
$(INSTALL_DIR) $(1)/tmp
|
||||||
|
$(INSTALL_CONF) ./files/simple-adblock.conf.update $(1)/tmp/simple-adblock.conf.update
|
||||||
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
||||||
$(INSTALL_BIN) ./files/simple-adblock.hotplug $(1)/etc/hotplug.d/iface/80-simple-adblock
|
$(INSTALL_BIN) ./files/simple-adblock.hotplug $(1)/etc/hotplug.d/iface/80-simple-adblock
|
||||||
endef
|
endef
|
||||||
|
@ -54,6 +56,7 @@ define Package/simple-adblock/postinst
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# check if we are on real system
|
# check if we are on real system
|
||||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||||
|
sed -f /tmp/simple-adblock.conf.update -i /etc/config/simple-adblock || true
|
||||||
/etc/init.d/simple-adblock enable
|
/etc/init.d/simple-adblock enable
|
||||||
fi
|
fi
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
@ -19,63 +19,70 @@ A simple DNSMASQ/Unbound-based AdBlocking service for OpenWrt/LEDE Project.
|
||||||
- Blocks ads inside browsers with [DNS-over-HTTPS proxy](https://en.wikipedia.org/wiki/DNS_over_HTTPS) built-in, like [Mozilla Firefox](https://support.mozilla.org/en-US/kb/firefox-dns-over-https#w_about-dns-over-https) or [Google Chrome/Chromium](https://blog.chromium.org/2019/09/experimenting-with-same-provider-dns.html) -- with the ```dnsmasq.ipset``` option.
|
- Blocks ads inside browsers with [DNS-over-HTTPS proxy](https://en.wikipedia.org/wiki/DNS_over_HTTPS) built-in, like [Mozilla Firefox](https://support.mozilla.org/en-US/kb/firefox-dns-over-https#w_about-dns-over-https) or [Google Chrome/Chromium](https://blog.chromium.org/2019/09/experimenting-with-same-provider-dns.html) -- with the ```dnsmasq.ipset``` option.
|
||||||
- Proudly made in Canada, using locally-sourced electrons.
|
- Proudly made in Canada, using locally-sourced electrons.
|
||||||
|
|
||||||
If you want a more robust AdBlocking, supporting free memory detection and complex block lists, supporting IDN, check out [net/adblock](https://github.com/openwrt/packages/tree/master/net/adblock/files).
|
If you want a more robust AdBlocking, supporting free memory detection and complex block lists, supporting IDN, check out ```net/adblock``` on [GitHub](https://github.com/openwrt/packages/tree/master/net/adblock/files)/[jsDelivr](https://cdn.jsdelivr.net/gh/openwrt/packages@master/net/adblock/files/README.md).
|
||||||
|
|
||||||
## Screenshots (luci-app-simple-adblock)
|
## Screenshots (luci-app-simple-adblock)
|
||||||
|
|
||||||
Service Status
|
Service Status
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Configuration - Basic Configuration
|
Configuration - Basic Configuration
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Configuration - Advanced Configuration
|
Configuration - Advanced Configuration
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Whitelist and Blocklist Management
|
Whitelist and Blocklist Management
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
This service requires the following packages to be installed on your router: ```dnsmasq``` or ```dnsmasq-full``` or ```unbound``` and either ```ca-certificates```, ```wget``` and ```libopenssl``` (for OpenWrt 15.05.1) or ```uclient-fetch``` and ```libustream-mbedtls``` (for LEDE Project and OpenWrt 18.06.xx or newer). Additionally installation of ```coreutils-sort``` is highly recommended as it speeds up blocklist processing.
|
To download the hosts/domains files this service requires one of the following packages to be installed on your device: ```wget``` or ```uclient-fetch``` or ```curl```. If you want to download lists over HTTPS (recommended), you also need to install support for HTTPS/SSL downloads on your device. For most devices starting with OpenWrt 15.05.1 and up the following commands will install the minimal requirements:
|
||||||
|
|
||||||
To satisfy the requirements for connect to your router via ssh and run the following commands:
|
|
||||||
|
|
||||||
### How to use DNSMASQ ipset
|
|
||||||
|
|
||||||
The ```dnsmasq.ipset``` option requires you to install ```ipset``` and ```dnsmasq-full``` instead of the ```dnsmasq```. To do that, connect to your router via ssh and run the following command:
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
opkg update; opkg remove dnsmasq; opkg install dnsmasq-full ipset;
|
opkg update; if ubus -S call system board | grep -q '15.05'; then
|
||||||
|
opkg install ca-certificates wget libopenssl; else
|
||||||
|
opkg install uclient-fetch libustream-mbedtls ca-bundle ca-certificates; fi
|
||||||
```
|
```
|
||||||
|
|
||||||
### OpenWrt 15.05.1 Requirements
|
### Requirements for file:// Scheme
|
||||||
|
|
||||||
|
If you want to include some local files as the blocklists or whitelists, you need to install ```curl```:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
opkg update; opkg install ca-certificates wget libopenssl coreutils-sort dnsmasq
|
opkg update; opkg install curl;
|
||||||
```
|
```
|
||||||
|
|
||||||
### LEDE Project 17.01.x and OpenWrt 18.xx (or newer) Requirements
|
### Requirements for DNS Resolver
|
||||||
|
|
||||||
|
In order to actually block the ads, this service requires one of the following DNS resolvers to be installed on your router: ```dnsmasq``` or ```dnsmasq-full``` or ```unbound```. The ```dnsmasq``` package is usually included in the default OpenWrt installation.
|
||||||
|
|
||||||
|
If you want to use the [```dnsmasq.ipset``` option](#dns-resolution-option) you need to install ```ipset``` and ```dnsmasq-full``` instead of the ```dnsmasq```. To do that, connect to your router via ssh and run the following command:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
opkg update; opkg install uclient-fetch libustream-mbedtls coreutils-sort dnsmasq
|
opkg update; cd /tmp/; opkg download dnsmasq-full; opkg install ipset;
|
||||||
|
opkg remove dnsmasq; opkg install /tmp/dnsmasq-full*; rm -f /tmp/dnsmasq-full*;
|
||||||
```
|
```
|
||||||
|
|
||||||
### IPv6 Support
|
### Requirements for IPv6 Support
|
||||||
|
|
||||||
For IPv6 support additionally install ```ip6tables-mod-nat``` and ```kmod-ipt-nat6``` packages from Web UI or run the following in the command line:
|
For IPv6 support additionally install ```ip6tables-mod-nat``` and ```kmod-ipt-nat6``` packages from Web UI or run the following in the command line:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
opkg update; opkg install ip6tables-mod-nat kmod-ipt-nat6
|
opkg update; opkg install ip6tables-mod-nat kmod-ipt-nat6;
|
||||||
```
|
```
|
||||||
|
|
||||||
### Speed Up Blocklist Processing
|
### Requirements for Faster Blocklist Processing
|
||||||
|
|
||||||
The ```coreutils-sort``` is an optional, but recommended package as it speeds up sorting and removing duplicates from the merged list dramatically. If opkg complains that it can't install ```coreutils-sort``` because /usr/bin/sort is already provided by busybox, you can run ```opkg --force-overwrite install coreutils-sort```.
|
The ```coreutils-sort``` is an optional, but recommended package as it speeds up sorting and removing duplicates from the merged list dramatically. If opkg complains that it can't install ```coreutils-sort``` because /usr/bin/sort is already provided by busybox, you can run the following command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
opkg --force-overwrite install coreutils-sort
|
||||||
|
```
|
||||||
|
|
||||||
## Unmet Dependencies
|
## Unmet Dependencies
|
||||||
|
|
||||||
|
@ -89,11 +96,11 @@ Install ```simple-adblock``` and ```luci-app-simple-adblock``` packages from Web
|
||||||
opkg update; opkg install simple-adblock luci-app-simple-adblock
|
opkg update; opkg install simple-adblock luci-app-simple-adblock
|
||||||
```
|
```
|
||||||
|
|
||||||
If ```simple-adblock``` and ```luci-app-simple-adblock``` packages are not found in the official feed/repo for your version of OpenWrt/LEDE Project, you will need to [add a custom repo to your router](https://github.com/stangri/openwrt_packages/blob/master/README.md#on-your-router) first.
|
If ```simple-adblock``` and ```luci-app-simple-adblock``` packages are not found in the official feed/repo for your version of OpenWrt/LEDE Project, you will need to add a custom repo to your router following instructions on [GitHub](https://github.com/stangri/openwrt_packages/blob/master/README.md#on-your-router)/[jsDelivr](https://cdn.jsdelivr.net/gh/stangri/openwrt_packages@master/README.md#on-your-router) first.
|
||||||
|
|
||||||
## Default Settings
|
## Default Settings
|
||||||
|
|
||||||
Default configuration has service disabled (use Web UI to enable/start service or run ```uci set simple-adblock.config.enabled=1; uci commit simple-adblock;```) and selected ad/malware lists suitable for routers with 64Mb RAM.
|
Default configuration has the service disabled (use Web UI to enable/start service or run ```uci set simple-adblock.config.enabled=1; uci commit simple-adblock;```) and selected ad/malware lists suitable for routers with 64Mb RAM.
|
||||||
|
|
||||||
If your router has less then 64Mb RAM, edit the configuration file, located at ```/etc/config/simple-adblock```. The configuration file has lists in ascending order starting with smallest ones and each list has a preceding comment indicating its size, comment out or delete the lists you don't want or your router can't handle.
|
If your router has less then 64Mb RAM, edit the configuration file, located at ```/etc/config/simple-adblock```. The configuration file has lists in ascending order starting with smallest ones and each list has a preceding comment indicating its size, comment out or delete the lists you don't want or your router can't handle.
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ config simple-adblock 'config'
|
||||||
option parallel_downloads '1'
|
option parallel_downloads '1'
|
||||||
option debug '0'
|
option debug '0'
|
||||||
option compressed_cache '0'
|
option compressed_cache '0'
|
||||||
list whitelist_domain 'raw.githubusercontent.com'
|
list whitelist_domain 'cdn.jsdelivr.net'
|
||||||
|
|
||||||
# Thu Oct 3 17:54:04 PDT 2019
|
# Thu Oct 3 17:54:04 PDT 2019
|
||||||
# File size: 4.0K
|
# File size: 4.0K
|
||||||
|
@ -45,7 +45,7 @@ config simple-adblock 'config'
|
||||||
list blacklist_hosts_url 'https://adaway.org/hosts.txt'
|
list blacklist_hosts_url 'https://adaway.org/hosts.txt'
|
||||||
|
|
||||||
# File size: 20.0K
|
# File size: 20.0K
|
||||||
list blacklist_hosts_url 'https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt'
|
list blacklist_hosts_url 'https://cdn.jsdelivr.net/gh/hoshsadiq/adblock-nocoin-list@master/hosts.txt'
|
||||||
|
|
||||||
# File size: 36.0K
|
# File size: 36.0K
|
||||||
list blacklist_hosts_url 'https://www.malwaredomainlist.com/hostslist/hosts.txt'
|
list blacklist_hosts_url 'https://www.malwaredomainlist.com/hostslist/hosts.txt'
|
||||||
|
@ -56,7 +56,7 @@ config simple-adblock 'config'
|
||||||
# File size: 388.0K
|
# File size: 388.0K
|
||||||
# blocklist may be too big for some routers
|
# blocklist may be too big for some routers
|
||||||
# blocklist may block some video-streaming content
|
# blocklist may block some video-streaming content
|
||||||
# list blacklist_hosts_url 'https://raw.githubusercontent.com/jawz101/MobileAdTrackers/master/hosts'
|
# list blacklist_hosts_url 'https://cdn.jsdelivr.net/gh/jawz101/MobileAdTrackers@master/hosts'
|
||||||
|
|
||||||
# File size: 424.0K
|
# File size: 424.0K
|
||||||
# blocklist may be too big for some routers
|
# blocklist may be too big for some routers
|
||||||
|
@ -72,7 +72,7 @@ config simple-adblock 'config'
|
||||||
|
|
||||||
# File size: 1.6M
|
# File size: 1.6M
|
||||||
# blocklist too big for most routers
|
# blocklist too big for most routers
|
||||||
# list blacklist_hosts_url 'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts'
|
# list blacklist_hosts_url 'https://cdn.jsdelivr.net/gh/StevenBlack/hosts@master/hosts'
|
||||||
|
|
||||||
# File size: 3.1M
|
# File size: 3.1M
|
||||||
# blocklist too big for most routers
|
# blocklist too big for most routers
|
||||||
|
@ -80,7 +80,7 @@ config simple-adblock 'config'
|
||||||
|
|
||||||
# File size: 23.0M
|
# File size: 23.0M
|
||||||
# blocklist too big for most routers
|
# blocklist too big for most routers
|
||||||
# list blacklist_hosts_url 'https://dbl.oisd.nl/'
|
# list blacklist_hosts_url 'https://hosts.oisd.nl/'
|
||||||
|
|
||||||
# site was down on last check
|
# site was down on last check
|
||||||
# list blacklist_domains_url 'http://support.it-mate.co.uk/downloads/hosts.txt'
|
# list blacklist_domains_url 'http://support.it-mate.co.uk/downloads/hosts.txt'
|
||||||
|
|
4
net/simple-adblock/files/simple-adblock.conf.update
Normal file
4
net/simple-adblock/files/simple-adblock.conf.update
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
s|dbl.oisd.nl|hosts.oisd.nl|g
|
||||||
|
s|raw.githubusercontent.com/StevenBlack/hosts/|cdn.jsdelivr.net/gh/StevenBlack/hosts@|g
|
||||||
|
s|raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/|cdn.jsdelivr.net/gh/hoshsadiq/adblock-nocoin-list@|g
|
||||||
|
s|raw.githubusercontent.com/jawz101/MobileAdTrackers/|cdn.jsdelivr.net/gh/jawz101/MobileAdTrackers@|g
|
|
@ -145,6 +145,7 @@ export whitelist_domains blacklist_domains
|
||||||
export whitelist_domains_urls blacklist_domains_urls blacklist_hosts_urls
|
export whitelist_domains_urls blacklist_domains_urls blacklist_hosts_urls
|
||||||
export wan_if wan_gw wanphysdev dl_command serviceStatus dl_flag
|
export wan_if wan_gw wanphysdev dl_command serviceStatus dl_flag
|
||||||
export outputFilter outputFilterIPv6 outputFile outputGzip outputCache ipv6Enabled
|
export outputFilter outputFilterIPv6 outputFile outputGzip outputCache ipv6Enabled
|
||||||
|
export is_ssl_supported
|
||||||
|
|
||||||
load_package_config() {
|
load_package_config() {
|
||||||
config_load "$packageName"
|
config_load "$packageName"
|
||||||
|
@ -231,11 +232,11 @@ load_package_config() {
|
||||||
fi
|
fi
|
||||||
. /lib/functions/network.sh
|
. /lib/functions/network.sh
|
||||||
. /usr/share/libubox/jshn.sh
|
. /usr/share/libubox/jshn.sh
|
||||||
# Prefer curl because it supports the file: scheme.
|
# Prefer curl because it supports the file:// scheme.
|
||||||
if [ -x /usr/bin/curl ]; then
|
if [ -x /usr/bin/curl ]; then
|
||||||
dl_command="curl --insecure --retry $curlRetry --connect-timeout $dlTimeout --silent"
|
dl_command="curl --insecure --retry $curlRetry --connect-timeout $dlTimeout --silent"
|
||||||
dl_flag="-o"
|
dl_flag="-o"
|
||||||
elif wget -V 2>/dev/null | grep -q "+ssl"; then
|
elif wget --version 2>/dev/null | grep -q "+https"; then
|
||||||
dl_command="wget --no-check-certificate --timeout $dlTimeout -q"
|
dl_command="wget --no-check-certificate --timeout $dlTimeout -q"
|
||||||
dl_flag="-O"
|
dl_flag="-O"
|
||||||
else
|
else
|
||||||
|
@ -243,6 +244,15 @@ load_package_config() {
|
||||||
dl_flag="-O"
|
dl_flag="-O"
|
||||||
fi
|
fi
|
||||||
led="${led:+/sys/class/leds/$led}"
|
led="${led:+/sys/class/leds/$led}"
|
||||||
|
if curl --version 2>/dev/null | grep -q "https" \
|
||||||
|
|| wget --version 2>/dev/null | grep -q "+https" \
|
||||||
|
|| grep -q "libustream-mbedtls" /usr/lib/opkg/status \
|
||||||
|
|| grep -q "libustream-openssl" /usr/lib/opkg/status \
|
||||||
|
|| grep -q "libustream-wolfssl" /usr/lib/opkg/status; then
|
||||||
|
is_ssl_supported=1
|
||||||
|
else
|
||||||
|
unset is_ssl_supported
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
is_enabled() {
|
is_enabled() {
|
||||||
|
@ -668,19 +678,25 @@ process_url() {
|
||||||
else
|
else
|
||||||
type='Allowed'; D_TMP="$A_TMP";
|
type='Allowed'; D_TMP="$A_TMP";
|
||||||
fi
|
fi
|
||||||
|
if [ "${1:0:5}" == "https" ] && [ -z "$is_ssl_supported" ]; then
|
||||||
|
output 1 "$_FAIL_"
|
||||||
|
output 2 "[DL] $type $label $__FAIL__\\n"
|
||||||
|
echo "errorNoSSLSupport|${1}" >> "$sharedMemoryError"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
while [ -z "$R_TMP" ] || [ -e "$R_TMP" ]; do
|
while [ -z "$R_TMP" ] || [ -e "$R_TMP" ]; do
|
||||||
R_TMP="$(mktemp -u -q -t ${packageName}_tmp.XXXXXXXX)"
|
R_TMP="$(mktemp -u -q -t ${packageName}_tmp.XXXXXXXX)"
|
||||||
done
|
done
|
||||||
if ! $dl_command "$1" $dl_flag "$R_TMP" 2>/dev/null || [ ! -s "$R_TMP" ]; then
|
if ! $dl_command "$1" $dl_flag "$R_TMP" 2>/dev/null || [ ! -s "$R_TMP" ]; then
|
||||||
output 1 "$_FAIL_"
|
output 1 "$_FAIL_"
|
||||||
output 2 "[DL] $type $label $__FAIL__\\n"
|
output 2 "[DL] $type $label $__FAIL__\\n"
|
||||||
echo "errorDownloadingList=${1}" >> "$sharedMemoryError"
|
echo "errorDownloadingList|${1}" >> "$sharedMemoryError"
|
||||||
else
|
else
|
||||||
sed -i "$filter" "$R_TMP"
|
sed -i "$filter" "$R_TMP"
|
||||||
if [ ! -s "$R_TMP" ]; then
|
if [ ! -s "$R_TMP" ]; then
|
||||||
output 1 "$_FAIL_"
|
output 1 "$_FAIL_"
|
||||||
output 2 "[DL] $type $label $__FAIL__\\n"
|
output 2 "[DL] $type $label $__FAIL__\\n"
|
||||||
echo "errorParsingList=${1}" >> "$sharedMemoryError"
|
echo "errorParsingList|${1}" >> "$sharedMemoryError"
|
||||||
else
|
else
|
||||||
cat "${R_TMP}" >> "$D_TMP"
|
cat "${R_TMP}" >> "$D_TMP"
|
||||||
output 1 "$_OK_"
|
output 1 "$_OK_"
|
||||||
|
@ -1115,8 +1131,8 @@ showstatus() {
|
||||||
fi
|
fi
|
||||||
if [ -n "$error" ]; then
|
if [ -n "$error" ]; then
|
||||||
for c in $error; do
|
for c in $error; do
|
||||||
url="${c##*=}"
|
url="${c##*|}"
|
||||||
c="${c%=*}"
|
c="${c%|*}"
|
||||||
case "$c" in
|
case "$c" in
|
||||||
errorDownloadingList|errorParsingList)
|
errorDownloadingList|errorParsingList)
|
||||||
output "$_ERROR_: $(getErrorText "$c") $url!\\n";;
|
output "$_ERROR_: $(getErrorText "$c") $url!\\n";;
|
||||||
|
|
Loading…
Reference in a new issue