nikki: sync upstream

last commit: ccf106d8fb
This commit is contained in:
gitea-action 2025-02-20 20:00:31 +08:00
parent d74fbc6b4d
commit aca0190993
6 changed files with 96 additions and 4 deletions

View File

@ -5,9 +5,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git
PKG_SOURCE_DATE:=2025-02-17 PKG_SOURCE_DATE:=2025-02-19
PKG_SOURCE_VERSION:=dc1145a48432fad80e5d640931464cef506c9d49 PKG_SOURCE_VERSION:=e2b75b35bbfd3be61b2b5a37142442bb259f99e4
PKG_MIRROR_HASH:=d72e616dd425c8d679425ad5986fac29de09b75e72dfb6352ae14fcf4acbe958 PKG_MIRROR_HASH:=1d377f3087e5109353c78d738424fa3e88e1dfe30a0c9eddcdafc12fabbcf839
PKG_LICENSE:=GPL3.0+ PKG_LICENSE:=GPL3.0+
PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com> PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com>
@ -16,7 +16,7 @@ PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_BUILD_FLAGS:=no-mips16 PKG_BUILD_FLAGS:=no-mips16
PKG_BUILD_VERSION:=alpha-dc1145a PKG_BUILD_VERSION:=alpha-e2b75b3
PKG_BUILD_TIME:=$(shell date -u -Iseconds) PKG_BUILD_TIME:=$(shell date -u -Iseconds)
GO_PKG:=github.com/metacubex/mihomo 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/profiles
$(INSTALL_DIR) $(1)/etc/nikki/subscriptions $(INSTALL_DIR) $(1)/etc/nikki/subscriptions
$(INSTALL_DIR) $(1)/etc/nikki/run $(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_DIR) $(1)/etc/nikki/run/ui
$(INSTALL_DATA) $(CURDIR)/files/mixin.yaml $(1)/etc/nikki/mixin.yaml $(INSTALL_DATA) $(CURDIR)/files/mixin.yaml $(1)/etc/nikki/mixin.yaml

View File

@ -104,6 +104,8 @@ config mixin 'mixin'
option 'sniffer_ignore_domain_name' '0' option 'sniffer_ignore_domain_name' '0'
option 'sniffer_ignore_domain_names' '' option 'sniffer_ignore_domain_names' ''
option 'sniffer_sniff' '0' option 'sniffer_sniff' '0'
option 'rule' '0'
option 'rule_provider' '0'
option 'geoip_format' 'dat' option 'geoip_format' 'dat'
option 'geodata_loader' 'memconservative' option 'geodata_loader' 'memconservative'
option 'geosite_url' 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat' option 'geosite_url' 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat'

View File

@ -119,6 +119,10 @@ start_service() {
config_get_bool sniffer_force_domain_name "mixin" sniffer_force_domain_name 0 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_ignore_domain_name "mixin" sniffer_ignore_domain_name 0
config_get_bool sniffer_sniff "mixin" sniffer_sniff 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 ### geox
local geoip_format geodata_loader geosite_url geoip_mmdb_url geoip_dat_url geoip_asn_url geox_auto_update geox_update_interval 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" config_get geoip_format "mixin" "geoip_format" "mmdb"
@ -265,8 +269,17 @@ start_service() {
config_foreach mixin_authentications "authentication" config_foreach mixin_authentications "authentication"
fi fi
if [ "$tun_dns_hijack" == 1 ]; then 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 config_list_foreach "mixin" "tun_dns_hijacks" mixin_tun_dns_hijacks
fi 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 [ "$mixin_file_content" == 1 ]; then
if [ -s "$MIXIN_FILE_PATH" ]; then if [ -s "$MIXIN_FILE_PATH" ]; then
yq -M -i ea '. as $item ireduce ({}; . * $item ) | ... comments=""' "$RUN_PROFILE_PATH" "$MIXIN_FILE_PATH" 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" 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() { add_bypass_user() {
local user; user="$1" local user; user="$1"
if [ "$user" != "root" ] && (cut -d ':' -f 1 < /etc/passwd | grep -q "$user"); then if [ "$user" != "root" ] && (cut -d ':' -f 1 < /etc/passwd | grep -q "$user"); then

View File

@ -1,5 +1,7 @@
/etc/nikki/profiles/ /etc/nikki/profiles/
/etc/nikki/subscriptions/ /etc/nikki/subscriptions/
/etc/nikki/mixin.yaml /etc/nikki/mixin.yaml
/etc/nikki/run/providers/rule/
/etc/nikki/run/providers/proxy/
/etc/nikki/nftables/reserved_ip.nft /etc/nikki/nftables/reserved_ip.nft
/etc/nikki/nftables/reserved_ip6.nft /etc/nikki/nftables/reserved_ip6.nft

View File

@ -21,6 +21,9 @@ SUBSCRIPTIONS_DIR="$HOME_DIR/subscriptions"
MIXIN_FILE_PATH="$HOME_DIR/mixin.yaml" MIXIN_FILE_PATH="$HOME_DIR/mixin.yaml"
RUN_DIR="$HOME_DIR/run" RUN_DIR="$HOME_DIR/run"
RUN_PROFILE_PATH="$RUN_DIR/config.yaml" 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" RUN_UI_DIR="$RUN_DIR/ui"
# log # log

View File

@ -2,6 +2,12 @@
. "$IPKG_INSTROOT/etc/nikki/scripts/include.sh" . "$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 # commit
uci commit nikki uci commit nikki