parent
d74fbc6b4d
commit
aca0190993
@ -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
|
||||||
|
@ -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'
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user