mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-11-15 20:52:53 +08:00
update 2026-10-25 16:53:21
This commit is contained in:
1 parent
91f217be10
commit
7fca8e9a3a
74 files changed
+1429
-918
No files matched your search
+4
-4
@@ -1,8 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=clashoo
|
||||
PKG_SHORT_SHA:=91e85ee
|
||||
PKG_COMMIT_DATE:=2026.10.24
|
||||
PKG_SHORT_SHA:=6780eee
|
||||
PKG_COMMIT_DATE:=2026.10.25
|
||||
|
||||
PKG_VERSION:=$(PKG_COMMIT_DATE)~$(PKG_SHORT_SHA)
|
||||
PKG_RELEASE:=1
|
||||
@@ -11,8 +11,8 @@ PKG_SOURCE:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA).tar.gz
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA)
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-alpha-$(PKG_SHORT_SHA)
|
||||
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-clashoo/releases/download/mihomo-src
|
||||
PKG_SOURCE_VERSION:=91e85eebf0b654c73424f0a215b3c56f6b39614f
|
||||
PKG_HASH:=efa0d9d66a589f06f402f50e0dea349ab9923d36d181303769f0575c0779e562
|
||||
PKG_SOURCE_VERSION:=6780eeeb27c7eda5e79a6310a4f7f91ba7cb725d
|
||||
PKG_HASH:=affb9e916e750c6bd4385c6718660a02cc213936063141fd1c2422011e408b47
|
||||
PKG_BUILD_VERSION:=alpha-$(PKG_SHORT_SHA)
|
||||
|
||||
PKG_LICENSE:=GPL3.0+
|
||||
|
||||
@@ -1049,7 +1049,7 @@ _user_dns_fields() {
|
||||
command -v yq >/dev/null 2>&1 || return 0
|
||||
[ -s "$CONFIG_YAML" ] || return 0
|
||||
for field in nameserver proxy-server-nameserver fallback direct-nameserver \
|
||||
default-nameserver nameserver-policy respect-rules; do
|
||||
default-nameserver nameserver-policy proxy-server-nameserver-policy respect-rules; do
|
||||
case ",$force," in *,"$field",*) continue ;; esac
|
||||
[ "$(yq -M e "(.dns // {}) | has(\"${field}\")" "$CONFIG_YAML" 2>/dev/null)" = "true" ] &&
|
||||
out="${out}${out:+,}${field}"
|
||||
@@ -1091,7 +1091,7 @@ _clashoo_dns_force_fields() {
|
||||
command -v yq >/dev/null 2>&1 || return 0
|
||||
[ -s "$CONFIG_YAML" ] || return 0
|
||||
local managed legacy fields
|
||||
fields="nameserver,proxy-server-nameserver,direct-nameserver,default-nameserver,nameserver-policy,respect-rules"
|
||||
fields="nameserver,proxy-server-nameserver,direct-nameserver,default-nameserver,nameserver-policy,proxy-server-nameserver-policy,respect-rules"
|
||||
managed="$(yq -M e '(.dns."x-clashoo-managed-dns" // false) == true' "$CONFIG_YAML" 2>/dev/null)"
|
||||
if [ "$managed" = "true" ]; then
|
||||
printf '%s' "$fields"
|
||||
@@ -2156,6 +2156,17 @@ _core_only_ui_args() {
|
||||
printf ' -ext-ui %s' "$(shell_quote /etc/clashoo/dashboard)"
|
||||
}
|
||||
|
||||
_mihomo_proxy_dns_valid() {
|
||||
local config="$1" proxy_count policy_count respect_rules
|
||||
command -v yq >/dev/null 2>&1 || return 0
|
||||
[ -s "$config" ] || return 0
|
||||
proxy_count="$(yq -M e -r '(.dns."proxy-server-nameserver" // []) | length' "$config" 2>/dev/null)"
|
||||
[ "$proxy_count" = "0" ] || return 0
|
||||
policy_count="$(yq -M e -r '(.dns."proxy-server-nameserver-policy" // {}) | length' "$config" 2>/dev/null)"
|
||||
respect_rules="$(yq -M e -r '.dns."respect-rules" // false' "$config" 2>/dev/null)"
|
||||
[ "$policy_count" = "0" ] && [ "$respect_rules" != "true" ]
|
||||
}
|
||||
|
||||
_start_launch_core() {
|
||||
local _cmd _core_only
|
||||
disable_quic_gso=$(uci get clashoo.config.disable_quic_gso 2>/dev/null)
|
||||
@@ -2169,6 +2180,13 @@ _start_launch_core() {
|
||||
# in core-only the user is explicitly trusting their own config.
|
||||
[ "$_core_only" = "1" ] && export SAFE_PATHS="/"
|
||||
|
||||
if ! _mihomo_proxy_dns_valid "${CLASH_CONFIG}/config.yaml"; then
|
||||
log_msg "Proxy node DNS is required by node DNS policy or respect-rules; set a Proxy Node Domain Resolver in LuCI" "节点域名 DNS 策略或 DNS 遵循规则需要代理节点域名解析,请在 LuCI 中配置"
|
||||
runtime_state_record_health "fail" "preflight:proxy_dns_missing"
|
||||
echo "Clashoo" > "$REAL_LOG"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# preflight dry-run with watchdog: bail on bad config without touching
|
||||
# firewall/dnsmasq, and never let a geo auto-download (mihomo blocks ~90s on
|
||||
# a missing GeoIP/GeoSite when GitHub is unreachable) freeze startup/UI.
|
||||
@@ -2557,6 +2575,11 @@ reload_service()
|
||||
rm -f "$_candidate" "$_previous" "$_response" "$_dns_backup"
|
||||
return 1
|
||||
fi
|
||||
if ! _mihomo_proxy_dns_valid "$_candidate"; then
|
||||
_log_runtime_error "Mihomo reload failed: node DNS policy or respect-rules requires a Proxy Node Domain Resolver; current config preserved"
|
||||
rm -f "$_candidate" "$_previous" "$_response" "$_dns_backup"
|
||||
return 1
|
||||
fi
|
||||
if [ "$(uci -q get clashoo.config.core_only 2>/dev/null)" = "1" ]; then
|
||||
SAFE_PATHS=/ _run_with_timeout 15 "$CLASH" -d "$CLASH_CONFIG" -f "$_candidate" -t >> "$CORE_LOG_PATH" 2>&1
|
||||
else
|
||||
|
||||
@@ -145,7 +145,7 @@ if (type(inherited_nameserver) != 'array') {
|
||||
inherited_nameserver = [];
|
||||
}
|
||||
let dns_role_fields = ['nameserver', 'proxy-server-nameserver', 'direct-nameserver',
|
||||
'default-nameserver', 'nameserver-policy', 'respect-rules'];
|
||||
'default-nameserver', 'nameserver-policy', 'proxy-server-nameserver-policy', 'respect-rules'];
|
||||
let had_user_dns_roles = false;
|
||||
for (let f in dns_role_fields)
|
||||
if (dns_present[f]) had_user_dns_roles = true;
|
||||
@@ -200,18 +200,23 @@ if (length(bootstrap) && (!dns_present['default-nameserver'] || dns_force['defau
|
||||
cfg['dns']['default-nameserver'] = bootstrap;
|
||||
|
||||
let policies = {};
|
||||
let proxy_policies = {};
|
||||
uci.foreach('clashoo', 'dns_policy', function(sec) {
|
||||
if (b(sec.enabled) == false) return;
|
||||
if (s(sec.policy_type, 'nameserver-policy') != 'nameserver-policy') return;
|
||||
let role = s(sec.policy_type, 'nameserver-policy');
|
||||
if (role != 'nameserver-policy' && role != 'proxy-server-nameserver-policy') return;
|
||||
let matcher = trim(sec.matcher || '');
|
||||
let servers = sec.nameserver;
|
||||
if (type(servers) != 'array') servers = servers != null ? [servers] : [];
|
||||
if (!length(matcher) || !length(servers)) return;
|
||||
if (matcher == 'geosite:cn') { matcher = 'rule-set:cn_domain'; need_cn_rs = true; }
|
||||
policies[matcher] = servers;
|
||||
if (role == 'nameserver-policy') policies[matcher] = servers;
|
||||
else proxy_policies[matcher] = servers;
|
||||
});
|
||||
if (length(keys(policies)) && (!dns_present['nameserver-policy'] || dns_force['nameserver-policy']))
|
||||
cfg['dns']['nameserver-policy'] = policies;
|
||||
if (length(keys(proxy_policies)) && (!dns_present['proxy-server-nameserver-policy'] || dns_force['proxy-server-nameserver-policy']))
|
||||
cfg['dns']['proxy-server-nameserver-policy'] = proxy_policies;
|
||||
|
||||
let respect_rules = a('dns_respect_rules') == null ? true : ab('dns_respect_rules');
|
||||
if (dns_force['respect-rules'])
|
||||
|
||||
Reference in new issue
Block a user