luci: add basic depends check

This commit is contained in:
ShanStone 2023-07-16 16:05:33 +08:00 committed by sbwml
parent 45cdab67aa
commit 863195425f
2 changed files with 43 additions and 9 deletions

View File

@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall PKG_NAME:=luci-app-passwall
PKG_VERSION:=4.66-8 PKG_VERSION:=4.66-9
PKG_RELEASE:= PKG_RELEASE:=
PKG_CONFIG_DEPENDS:= \ PKG_CONFIG_DEPENDS:= \

View File

@ -59,6 +59,11 @@ config_t_get() {
echo "${ret:=${3}}" echo "${ret:=${3}}"
} }
config_t_set() {
local index=${4:-0}
local ret=$(uci -q set "${CONFIG}.@${1}[${index}].${2}=${3}" 2>/dev/null)
}
get_enabled_anonymous_secs() { get_enabled_anonymous_secs() {
uci -q show "${CONFIG}" | grep "${1}\[.*\.enabled='1'" | cut -d '.' -sf2 uci -q show "${CONFIG}" | grep "${1}\[.*\.enabled='1'" | cut -d '.' -sf2
} }
@ -197,6 +202,21 @@ check_port_exists() {
echo "${result}" echo "${result}"
} }
check_depends() {
local tables=${1}
local status=0
if [ tables == "iptables" ]; then
for depends in "iptables-mod-tproxy" "iptables-mod-socket" "iptables-mod-iprange" "iptables-mod-conntrack-extra" "kmod-ipt-nat"; do
[ -z "$(opkg status ${depends} 2>/dev/null | grep 'Status' | awk -F ': ' '{print $2}' 2>/dev/null)" ] && echolog "$tables透明代理基础依赖 $depends 未安装..." && status=1
done
else
for depends in "kmod-nft-socket" "kmod-nft-tproxy" "kmod-nft-nat"; do
[ -z "$(opkg status ${depends} 2>/dev/null | grep 'Status' | awk -F ': ' '{print $2}' 2>/dev/null)" ] && echolog "$tables透明代理基础依赖 $depends 未安装..." && status=1
done
fi
echo $status
}
get_new_port() { get_new_port() {
port=$1 port=$1
[ "$port" == "auto" ] && port=2082 [ "$port" == "auto" ] && port=2082
@ -1535,17 +1555,31 @@ start() {
nftflag=0 nftflag=0
local use_nft=$(config_t_get global_forwarding use_nft 0) local use_nft=$(config_t_get global_forwarding use_nft 0)
local USE_TABLES local USE_TABLES
if [ "$use_nft" == 1 ] && [ -z "$(dnsmasq --version | grep 'Compile time options:.* nftset')" ]; then if [ "$use_nft" == 0 ]; then
echolog "Dnsmasq软件包不满足nftables透明代理要求如需使用请确保dnsmasq版本在2.87以上并开启nftset支持。" if [ -z "$(command -v iptables-legacy || command -v iptables)" ] || [ -z "$(command -v ipset)" ] || [ -z "$(dnsmasq --version | grep 'Compile time options:.* ipset')" ]; then
elif [ "$use_nft" == 1 ] && [ -n "$(dnsmasq --version | grep 'Compile time options:.* nftset')" ]; then if [ -n "$(command -v nft)" ] && [ -n "$(dnsmasq --version | grep 'Compile time options:.* nftset')" ]; then
USE_TABLES="nftables" echolog "检测到fw4使用nftables进行透明代理。"
nftflag=1 USE_TABLES="nftables"
elif [ -z "$(command -v iptables-legacy || command -v iptables)" ] || [ -z "$(command -v ipset)" ] || [ -z "$(dnsmasq --version | grep 'Compile time options:.* ipset')" ]; then nftflag=1
echolog "系统未安装iptables或ipset或Dnsmasq没有开启ipset支持无法透明代理" config_t_set global_forwarding use_nft 1
uci commit
else
echolog "系统未安装iptables或ipset或Dnsmasq没有开启ipset支持无法透明代理"
fi
else
USE_TABLES="iptables"
fi
else else
USE_TABLES="iptables" if [ -z "$(dnsmasq --version | grep 'Compile time options:.* nftset')" ]; then
echolog "Dnsmasq软件包不满足nftables透明代理要求如需使用请确保dnsmasq版本在2.87以上并开启nftset支持。"
elif [ -n "$(dnsmasq --version | grep 'Compile time options:.* nftset')" ]; then
USE_TABLES="nftables"
nftflag=1
fi
fi fi
[ "$(check_depends $USE_TABLES)" == "0" ] || unset USE_TABLES
[ "$ENABLED_DEFAULT_ACL" == 1 ] && { [ "$ENABLED_DEFAULT_ACL" == 1 ] && {
start_redir TCP start_redir TCP
start_redir UDP start_redir UDP