From aca01909931f3f4f7caf58b12f0420dd67f3b1f7 Mon Sep 17 00:00:00 2001 From: gitea-action Date: Thu, 20 Feb 2025 20:00:31 +0800 Subject: [PATCH] nikki: sync upstream last commit: https://github.com/nikkinikki-org/OpenWrt-nikki/commit/ccf106d8fb832600e004713b49f11ef0e3fbe814 --- nikki/Makefile | 11 +++-- nikki/files/nikki.conf | 2 + nikki/files/nikki.init | 76 +++++++++++++++++++++++++++++ nikki/files/nikki.upgrade | 2 + nikki/files/scripts/include.sh | 3 ++ nikki/files/uci-defaults/migrate.sh | 6 +++ 6 files changed, 96 insertions(+), 4 deletions(-) diff --git a/nikki/Makefile b/nikki/Makefile index ba9d0e0b3..5c4680dfe 100644 --- a/nikki/Makefile +++ b/nikki/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git -PKG_SOURCE_DATE:=2025-02-17 -PKG_SOURCE_VERSION:=dc1145a48432fad80e5d640931464cef506c9d49 -PKG_MIRROR_HASH:=d72e616dd425c8d679425ad5986fac29de09b75e72dfb6352ae14fcf4acbe958 +PKG_SOURCE_DATE:=2025-02-19 +PKG_SOURCE_VERSION:=e2b75b35bbfd3be61b2b5a37142442bb259f99e4 +PKG_MIRROR_HASH:=1d377f3087e5109353c78d738424fa3e88e1dfe30a0c9eddcdafc12fabbcf839 PKG_LICENSE:=GPL3.0+ PKG_MAINTAINER:=Joseph Mory @@ -16,7 +16,7 @@ PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_PARALLEL:=1 PKG_BUILD_FLAGS:=no-mips16 -PKG_BUILD_VERSION:=alpha-dc1145a +PKG_BUILD_VERSION:=alpha-e2b75b3 PKG_BUILD_TIME:=$(shell date -u -Iseconds) GO_PKG:=github.com/metacubex/mihomo @@ -56,6 +56,9 @@ define Package/nikki/install $(INSTALL_DIR) $(1)/etc/nikki/profiles $(INSTALL_DIR) $(1)/etc/nikki/subscriptions $(INSTALL_DIR) $(1)/etc/nikki/run + $(INSTALL_DIR) $(1)/etc/nikki/run/providers + $(INSTALL_DIR) $(1)/etc/nikki/run/providers/rule + $(INSTALL_DIR) $(1)/etc/nikki/run/providers/proxy $(INSTALL_DIR) $(1)/etc/nikki/run/ui $(INSTALL_DATA) $(CURDIR)/files/mixin.yaml $(1)/etc/nikki/mixin.yaml diff --git a/nikki/files/nikki.conf b/nikki/files/nikki.conf index 5b352976a..5dabe3e5a 100644 --- a/nikki/files/nikki.conf +++ b/nikki/files/nikki.conf @@ -104,6 +104,8 @@ config mixin 'mixin' option 'sniffer_ignore_domain_name' '0' option 'sniffer_ignore_domain_names' '' option 'sniffer_sniff' '0' + option 'rule' '0' + option 'rule_provider' '0' option 'geoip_format' 'dat' option 'geodata_loader' 'memconservative' option 'geosite_url' 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat' diff --git a/nikki/files/nikki.init b/nikki/files/nikki.init index 1615a8e3d..d8b9db9cb 100644 --- a/nikki/files/nikki.init +++ b/nikki/files/nikki.init @@ -119,6 +119,10 @@ start_service() { config_get_bool sniffer_force_domain_name "mixin" sniffer_force_domain_name 0 config_get_bool sniffer_ignore_domain_name "mixin" sniffer_ignore_domain_name 0 config_get_bool sniffer_sniff "mixin" sniffer_sniff 0 + ### rule + local rule rule_provider + config_get_bool rule "mixin" "rule" 0 + config_get_bool rule_provider "mixin" "rule_provider" 0 ### geox local geoip_format geodata_loader geosite_url geoip_mmdb_url geoip_dat_url geoip_asn_url geox_auto_update geox_update_interval config_get geoip_format "mixin" "geoip_format" "mmdb" @@ -265,8 +269,17 @@ start_service() { config_foreach mixin_authentications "authentication" fi if [ "$tun_dns_hijack" == 1 ]; then + yq -M -i 'del(.tun.dns-hijack)' "$RUN_PROFILE_PATH" config_list_foreach "mixin" "tun_dns_hijacks" mixin_tun_dns_hijacks fi + if [ "$rule_provider" == 1 ]; then + config_foreach mixin_rule_providers "rule_provider" + fi + if [ "$rule" == 1 ]; then + yq -M -i 'del(.nikki-rules)' "$RUN_PROFILE_PATH" + config_foreach mixin_rules "rule" + yq -M -i '.rules = .nikki-rules + .rules | del(.nikki-rules)' "$RUN_PROFILE_PATH" + fi if [ "$mixin_file_content" == 1 ]; then if [ -s "$MIXIN_FILE_PATH" ]; then yq -M -i ea '. as $item ireduce ({}; . * $item ) | ... comments=""' "$RUN_PROFILE_PATH" "$MIXIN_FILE_PATH" @@ -699,6 +712,69 @@ mixin_sniff() { port="$1" protocol="$2" yq -M -i '.sniffer.sniff.[strenv(protocol)].ports += [env(port)]' "$RUN_PROFILE_PATH" } +mixin_rule_providers() { + local section="$1" + local enabled + config_get_bool enabled "$section" "enabled" 0 + if [ "$enabled" == 0 ]; then + return + fi + local name type url node file_size_limit file_path file_format behavior update_interval + config_get name "$section" "name" + config_get type "$section" "type" + config_get url "$section" "url" + config_get node "$section" "node" + config_get file_size_limit "$section" "file_size_limit" 0 + config_get file_path "$section" "file_path" + config_get file_format "$section" "file_format" + config_get behavior "$section" "behavior" + config_get update_interval "$section" "update_interval" 0 + if [ "$type" == "http" ]; then + name="$name" type="$type" url="$url" node="$node" file_size_limit="$file_size_limit" file_format="$file_format" behavior="$behavior" update_interval="$update_interval" \ + yq -M -i ' + .rule-providers.[strenv(name)].type = strenv(type) | + .rule-providers.[strenv(name)].url = strenv(url) | + .rule-providers.[strenv(name)].proxy = strenv(node) | + .rule-providers.[strenv(name)].size_limit = env(file_size_limit) | + .rule-providers.[strenv(name)].format = strenv(file_format) | + .rule-providers.[strenv(name)].behavior = strenv(behavior) | + .rule-providers.[strenv(name)].interval = env(update_interval) + ' "$RUN_PROFILE_PATH" + elif [ "$type" == "file" ]; then + name="$name" type="$type" file_path="$file_path" file_format="$file_format" behavior="$behavior" \ + yq -M -i ' + .rule-providers.[strenv(name)].type = strenv(type) | + .rule-providers.[strenv(name)].path = strenv(file_path) | + .rule-providers.[strenv(name)].format = strenv(file_format) | + .rule-providers.[strenv(name)].behavior = strenv(behavior) + ' "$RUN_PROFILE_PATH" + fi +} + +mixin_rules() { + local section="$1" + local enabled + config_get_bool enabled "$section" "enabled" 0 + if [ "$enabled" == 0 ]; then + return + fi + local type match node no_resolve + config_get type "$section" "type" + config_get match "$section" "match" + config_get node "$section" "node" + config_get_bool no_resolve "$section" "no_resolve" 0 + local rule + if [ -z "$type" ]; then + rule="$match,$node" + else + rule="$type,$match,$node" + fi + if [ "$no_resolve" == 1 ]; then + rule="$rule,no-resolve" + fi + rule="$rule" yq -M -i '.nikki-rules += [strenv(rule)]' "$RUN_PROFILE_PATH" +} + add_bypass_user() { local user; user="$1" if [ "$user" != "root" ] && (cut -d ':' -f 1 < /etc/passwd | grep -q "$user"); then diff --git a/nikki/files/nikki.upgrade b/nikki/files/nikki.upgrade index a7a9f7aa4..1d2a89fb4 100644 --- a/nikki/files/nikki.upgrade +++ b/nikki/files/nikki.upgrade @@ -1,5 +1,7 @@ /etc/nikki/profiles/ /etc/nikki/subscriptions/ /etc/nikki/mixin.yaml +/etc/nikki/run/providers/rule/ +/etc/nikki/run/providers/proxy/ /etc/nikki/nftables/reserved_ip.nft /etc/nikki/nftables/reserved_ip6.nft diff --git a/nikki/files/scripts/include.sh b/nikki/files/scripts/include.sh index 97040def0..b1cc607fa 100644 --- a/nikki/files/scripts/include.sh +++ b/nikki/files/scripts/include.sh @@ -21,6 +21,9 @@ SUBSCRIPTIONS_DIR="$HOME_DIR/subscriptions" MIXIN_FILE_PATH="$HOME_DIR/mixin.yaml" RUN_DIR="$HOME_DIR/run" RUN_PROFILE_PATH="$RUN_DIR/config.yaml" +PROVIDERS_DIR="$RUN_DIR/providers" +RULE_PROVIDERS_DIR="$PROVIDERS_DIR/rule" +PROXY_PROVIDERS_DIR="$PROVIDERS_DIR/proxy" RUN_UI_DIR="$RUN_DIR/ui" # log diff --git a/nikki/files/uci-defaults/migrate.sh b/nikki/files/uci-defaults/migrate.sh index 294f5eecf..04fed06da 100644 --- a/nikki/files/uci-defaults/migrate.sh +++ b/nikki/files/uci-defaults/migrate.sh @@ -2,6 +2,12 @@ . "$IPKG_INSTROOT/etc/nikki/scripts/include.sh" +# since v1.18.0 + +mixin_rule=$(uci -q get nikki.mixin.rule); [ -z "$mixin_rule" ] && uci set nikki.mixin.rule=0 + +mixin_rule_provider=$(uci -q get nikki.mixin.rule_provider); [ -z "$mixin_rule_provider" ] && uci set nikki.mixin.rule_provider=0 + # commit uci commit nikki