mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-07-27 08:31:44 +08:00
update 2026-06-11 02:27:18
This commit is contained in:
parent
15d6d1ef44
commit
3e8ff8ad29
@ -1,6 +1,6 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=1.26.0
|
||||
PKG_VERSION:=1.26.1
|
||||
|
||||
LUCI_TITLE:=LuCI Support for nikki
|
||||
LUCI_DEPENDS:=+luci-base +nikki
|
||||
|
||||
@ -134,6 +134,12 @@ return view.extend({
|
||||
|
||||
s.tab('rlimit', _('RLIMIT Config'));
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_nproc_soft', _('Number of Processes Soft Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_nproc_hard', _('Number of Processes Hard Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_address_space_soft', _('Address Space Size Soft Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
@ -166,6 +172,14 @@ return view.extend({
|
||||
|
||||
s.tab('environment_variable', _('Environment Variable Config'));
|
||||
|
||||
o = s.taboption('environment_variable', form.Value, 'env_go_max_procs', 'GOMAXPROCS');
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('environment_variable', form.Value, 'env_go_mem_limit', 'GOMEMLIMIT');
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('environment_variable', form.DynamicList, 'env_safe_paths', _('Safe Paths'));
|
||||
o.load = function (section_id) {
|
||||
return this.super('load', section_id)?.split(':');
|
||||
|
||||
@ -25,10 +25,13 @@ return view.extend({
|
||||
s = m.section(form.NamedSection, 'log', 'log', _('Log'));
|
||||
|
||||
s.tab('log_config', _('Log Config'));
|
||||
|
||||
|
||||
o = s.taboption('log_config', form.Flag, 'clear_at_stop', _('Clear At Stop'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('log_config', form.Flag, 'scheduled_clear', _('Scheduled Clear'));
|
||||
o.rmempty = false;
|
||||
|
||||
|
||||
o = s.taboption('log_config', form.Value, 'scheduled_clear_cron', _('Scheduled Clear Cron'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
|
||||
@ -81,6 +81,7 @@ return view.extend({
|
||||
o = s.option(form.ListValue, 'prefer', _('Prefer'));
|
||||
o.default = 'remote';
|
||||
o.modalonly = true;
|
||||
o.rmempty = false;
|
||||
o.value('remote', _('Remote'));
|
||||
o.value('local', _('Local'));
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -7,25 +7,14 @@ PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL3.0+
|
||||
PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com>
|
||||
|
||||
PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_BUILD_FLAGS:=no-mips16
|
||||
|
||||
PKG_BUILD_TIME:=$(shell date -u -Iseconds)
|
||||
|
||||
GO_PKG:=github.com/metacubex/mihomo
|
||||
GO_PKG_LDFLAGS_X:=$(GO_PKG)/constant.Version=$(PKG_SOURCE_VERSION) $(GO_PKG)/constant.BuildTime=$(PKG_BUILD_TIME)
|
||||
GO_PKG_TAGS:=with_gvisor
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||
|
||||
define Package/nikki
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Transparent Proxy with Mihomo on OpenWrt.
|
||||
URL:=https://github.com/nikkinikki-org
|
||||
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle +curl +yq firewall4 +ip-full +kmod-inet-diag +kmod-nft-socket +kmod-nft-tproxy +kmod-tun +kmod-dummy +mihomo
|
||||
DEPENDS:=+ca-bundle +curl +yq firewall4 +ip-full +kmod-inet-diag +kmod-nft-socket +kmod-nft-tproxy +kmod-tun +kmod-dummy +mihomo
|
||||
endef
|
||||
|
||||
define Package/nikki/conffiles
|
||||
@ -87,5 +76,4 @@ define Build/Compile
|
||||
|
||||
endef
|
||||
|
||||
$(eval $(call GoBinPackage,nikki))
|
||||
$(eval $(call BuildPackage,nikki))
|
||||
|
||||
@ -234,6 +234,7 @@ config routing 'routing'
|
||||
config editor 'editor'
|
||||
|
||||
config log 'log'
|
||||
option 'clear_at_stop' '1'
|
||||
option 'scheduled_clear' '1'
|
||||
option 'scheduled_clear_cron' '*/5 * * * *'
|
||||
option 'scheduled_clear_size_limit' '1'
|
||||
|
||||
@ -67,7 +67,9 @@ start_service() {
|
||||
local fast_reload
|
||||
config_get_bool fast_reload "procd" "fast_reload" 0
|
||||
### rlimit
|
||||
local rlimit_address_space_soft rlimit_address_space_hard rlimit_data_soft rlimit_data_hard rlimit_stack_soft rlimit_stack_hard rlimit_nofile_soft rlimit_nofile_hard
|
||||
local rlimit_nproc_soft rlimit_nproc_hard rlimit_address_space_soft rlimit_address_space_hard rlimit_data_soft rlimit_data_hard rlimit_stack_soft rlimit_stack_hard rlimit_nofile_soft rlimit_nofile_hard
|
||||
config_get rlimit_nproc_soft "procd" "rlimit_nproc_soft" "$(ulimit -Su)"
|
||||
config_get rlimit_nproc_hard "procd" "rlimit_nproc_hard" "$(ulimit -Hu)"
|
||||
config_get rlimit_address_space_soft "procd" "rlimit_address_space_soft"
|
||||
config_get rlimit_address_space_hard "procd" "rlimit_address_space_hard"
|
||||
config_get rlimit_data_soft "procd" "rlimit_data_soft"
|
||||
@ -77,7 +79,9 @@ start_service() {
|
||||
config_get rlimit_nofile_soft "procd" "rlimit_nofile_soft" "$(ulimit -Sn)"
|
||||
config_get rlimit_nofile_hard "procd" "rlimit_nofile_hard" "$(ulimit -Hn)"
|
||||
### environment variable
|
||||
local env_safe_paths env_disable_loopback_detector env_disable_quic_go_gso env_disable_quic_go_ecn env_skip_system_ipv6_check
|
||||
local env_go_max_procs env_go_mem_limit env_safe_paths env_disable_loopback_detector env_disable_quic_go_gso env_disable_quic_go_ecn env_skip_system_ipv6_check
|
||||
config_get env_go_max_procs "procd" "env_go_max_procs"
|
||||
config_get env_go_mem_limit "procd" "env_go_mem_limit"
|
||||
config_get env_safe_paths "procd" "env_safe_paths"
|
||||
config_get_bool env_disable_loopback_detector "procd" "env_disable_loopback_detector" 0
|
||||
config_get_bool env_disable_quic_go_gso "procd" "env_disable_quic_go_gso" 0
|
||||
@ -179,9 +183,9 @@ start_service() {
|
||||
yq -M -i 'del(.sniffer.sniff)' "$RUN_PROFILE_PATH"
|
||||
fi
|
||||
if [ "$mixin_file_content" = 0 ]; then
|
||||
ucode -S "$MIXIN_UC" | yq -M -p json -o yaml | yq -M -i eval-all '... comments="" | . as $item ireduce ({}; . * $item ) | .proxies = .nikki-proxies + .proxies | del(.nikki-proxies) | .proxy-groups = .nikki-proxy-groups + .proxy-groups | del(.nikki-proxy-groups) | .rules = .nikki-rules + .rules | del(.nikki-rules)' "$RUN_PROFILE_PATH" -
|
||||
ucode -S "$MIXIN_UC" | yq -M -p json -o yaml | yq -M -i eval-all '... comments="" | . as $item ireduce ({}; . * $item ) | .proxies = .nikki-proxies + .proxies | del(.nikki-proxies) | .proxy-groups = .nikki-proxy-groups + .proxy-groups | del(.nikki-proxy-groups) | .rules = .nikki-rules + .rules | del(.nikki-rules) | explode(.)' "$RUN_PROFILE_PATH" -
|
||||
elif [ "$mixin_file_content" = 1 ]; then
|
||||
ucode -S "$MIXIN_UC" | yq -M -p json -o yaml | yq -M -i eval-all '... comments="" | . as $item ireduce ({}; . * $item ) | .proxies = .nikki-proxies + .proxies | del(.nikki-proxies) | .proxy-groups = .nikki-proxy-groups + .proxy-groups | del(.nikki-proxy-groups) | .rules = .nikki-rules + .rules | del(.nikki-rules)' "$RUN_PROFILE_PATH" "$MIXIN_FILE_PATH" -
|
||||
ucode -S "$MIXIN_UC" | yq -M -p json -o yaml | yq -M -i eval-all '... comments="" | . as $item ireduce ({}; . * $item ) | .proxies = .nikki-proxies + .proxies | del(.nikki-proxies) | .proxy-groups = .nikki-proxy-groups + .proxy-groups | del(.nikki-proxy-groups) | .rules = .nikki-rules + .rules | del(.nikki-rules) | explode(.)' "$RUN_PROFILE_PATH" "$MIXIN_FILE_PATH" -
|
||||
fi
|
||||
if [ "$proxy_enabled" = 1 ]; then
|
||||
if yq -M -e 'has("tun")' "$RUN_PROFILE_PATH" > /dev/null 2>&1; then
|
||||
@ -247,21 +251,27 @@ start_service() {
|
||||
|
||||
procd_set_param command /bin/sh -c "$PROG -d $RUN_DIR >> $CORE_LOG_PATH 2>&1"
|
||||
procd_set_param file "$RUN_PROFILE_PATH"
|
||||
procd_append_param env SAFE_PATHS="$env_safe_paths"
|
||||
procd_append_param env DISABLE_LOOPBACK_DETECTOR="$env_disable_loopback_detector"
|
||||
procd_append_param env QUIC_GO_DISABLE_GSO="$env_disable_quic_go_gso"
|
||||
procd_append_param env QUIC_GO_DISABLE_ECN="$env_disable_quic_go_ecn"
|
||||
procd_append_param env SKIP_SYSTEM_IPV6_CHECK="$env_skip_system_ipv6_check"
|
||||
if [ "$fast_reload" = 1 ]; then
|
||||
procd_set_param reload_signal HUP
|
||||
fi
|
||||
procd_set_param pidfile "$PID_FILE_PATH"
|
||||
procd_set_param respawn
|
||||
|
||||
procd_append_param limits nproc="${rlimit_nproc_soft} ${rlimit_nproc_hard}"
|
||||
procd_append_param limits as="${rlimit_address_space_soft:-unlimited} ${rlimit_address_space_hard:-unlimited}"
|
||||
procd_append_param limits data="${rlimit_data_soft:-unlimited} ${rlimit_data_hard:-unlimited}"
|
||||
procd_append_param limits stack="${rlimit_stack_soft:-unlimited} ${rlimit_stack_hard:-unlimited}"
|
||||
procd_append_param limits nofile="${rlimit_nofile_soft} ${rlimit_nofile_hard}"
|
||||
|
||||
procd_append_param env GOMAXPROCS="$env_go_max_procs"
|
||||
procd_append_param env GOMEMLIMIT="$env_go_mem_limit"
|
||||
|
||||
procd_append_param env SAFE_PATHS="$env_safe_paths"
|
||||
procd_append_param env DISABLE_LOOPBACK_DETECTOR="$env_disable_loopback_detector"
|
||||
procd_append_param env QUIC_GO_DISABLE_GSO="$env_disable_quic_go_gso"
|
||||
procd_append_param env QUIC_GO_DISABLE_ECN="$env_disable_quic_go_ecn"
|
||||
procd_append_param env SKIP_SYSTEM_IPV6_CHECK="$env_skip_system_ipv6_check"
|
||||
|
||||
procd_close_instance
|
||||
# cron
|
||||
local reload_cron; reload_cron=0
|
||||
@ -439,11 +449,20 @@ cleanup() {
|
||||
# load config
|
||||
config_load nikki
|
||||
# get config
|
||||
## log config
|
||||
local log_clear_at_stop
|
||||
config_get_bool log_clear_at_stop "log" "clear_at_stop" 0
|
||||
## routing config
|
||||
local tproxy_route_table tun_route_table dummy_device
|
||||
config_get tproxy_route_table "routing" "tproxy_route_table" "80"
|
||||
config_get tun_route_table "routing" "tun_route_table" "81"
|
||||
config_get dummy_device "routing" "dummy_device" "nikki-dummy"
|
||||
# clear logs if needed
|
||||
if [ "$log_clear_at_stop" = 1 ]; then
|
||||
echo -n > "$APP_LOG_PATH"
|
||||
echo -n > "$CORE_LOG_PATH"
|
||||
log "Log" "Logs are cleared due to clear at stop is enabled."
|
||||
fi
|
||||
# delete routing policy
|
||||
ip -4 rule del table "$tproxy_route_table" > /dev/null 2>&1
|
||||
ip -4 rule del table "$tun_route_table" > /dev/null 2>&1
|
||||
|
||||
@ -225,6 +225,10 @@ log_scheduled_clear_cron=$(uci -q get nikki.log.scheduled_clear_cron); [ -z "$lo
|
||||
log_scheduled_clear_size_limit=$(uci -q get nikki.log.scheduled_clear_size_limit); [ -z "$log_scheduled_clear_size_limit" ] && uci set nikki.log.scheduled_clear_size_limit=1
|
||||
log_scheduled_clear_size_limit_unit=$(uci -q get nikki.log.scheduled_clear_size_limit_unit); [ -z "$log_scheduled_clear_size_limit_unit" ] && uci set nikki.log.scheduled_clear_size_limit_unit=MB
|
||||
|
||||
# since v1.25.4
|
||||
|
||||
config_clear_at_stop=$(uci -q get nikki.log.clear_at_stop); [ -z "$config_clear_at_stop" ] && uci set nikki.log.clear_at_stop=1
|
||||
|
||||
# commit
|
||||
uci commit nikki
|
||||
|
||||
|
||||
@ -255,6 +255,7 @@ table inet nikki {
|
||||
}
|
||||
|
||||
{% if (router_proxy): %}
|
||||
{% if (length(dns_hijack_nfproto) > 0): %}
|
||||
chain router_dns_hijack {
|
||||
{% for (let access_control in router_access_control): %}
|
||||
{% if (length(access_control['user']) == 0 && length(access_control['group']) == 0 && length(access_control['cgroup']) == 0): %}
|
||||
@ -274,6 +275,7 @@ table inet nikki {
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
|
||||
{% if (tcp_mode == 'redirect'): %}
|
||||
chain router_redirect {
|
||||
@ -367,6 +369,7 @@ table inet nikki {
|
||||
{% endif %}
|
||||
|
||||
{% if (lan_proxy): %}
|
||||
{% if (length(dns_hijack_nfproto) > 0): %}
|
||||
chain lan_dns_hijack {
|
||||
{% for (let access_control in lan_access_control): %}
|
||||
{% if (length(access_control['ip']) == 0 && length(access_control['ip6']) == 0 && length(access_control['mac']) == 0): %}
|
||||
@ -388,6 +391,7 @@ table inet nikki {
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
|
||||
{% if (tcp_mode == 'redirect'): %}
|
||||
chain lan_redirect {
|
||||
@ -502,7 +506,9 @@ table inet nikki {
|
||||
{% elif (cgroups_version == 2): %}
|
||||
socket cgroupv2 level 2 "services/{{ cgroup_name }}" counter return
|
||||
{% endif %}
|
||||
{% if (length(dns_hijack_nfproto) > 0): %}
|
||||
jump router_dns_hijack
|
||||
{% endif %}
|
||||
{% if (tcp_mode == 'redirect'): %}
|
||||
fib daddr type { local, broadcast, anycast, multicast } counter return
|
||||
ct direction reply counter return
|
||||
@ -566,7 +572,9 @@ table inet nikki {
|
||||
{% if (lan_proxy): %}
|
||||
chain dstnat {
|
||||
type nat hook prerouting priority dstnat + 1; policy accept;
|
||||
{% if (length(dns_hijack_nfproto) > 0): %}
|
||||
iifname @lan_inbound_device jump lan_dns_hijack
|
||||
{% endif %}
|
||||
{% if (tcp_mode == 'redirect'): %}
|
||||
fib daddr type { local, broadcast, anycast, multicast } counter return
|
||||
ct direction reply counter return
|
||||
|
||||
@ -21,13 +21,13 @@ define Download/geoip
|
||||
HASH:=a322dfb6bfd8987c83453c39582a07771c9deddf9f8f7d2d19c7927ebd5e76c8
|
||||
endef
|
||||
|
||||
GEOSITE_VER:=20260610072848
|
||||
GEOSITE_VER:=20260610135238
|
||||
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
|
||||
define Download/geosite
|
||||
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
|
||||
URL_FILE:=dlc.dat
|
||||
FILE:=$(GEOSITE_FILE)
|
||||
HASH:=b091b91f20b493b46b30e09b7b6814753c07d64bf3b8c8d7fc58e45c253114ff
|
||||
HASH:=212a668172704826304534f6e71a1459a07bfdb1e9ff54bda79e172fc3fbf249
|
||||
endef
|
||||
|
||||
GEOSITE_IRAN_VER:=202606080206
|
||||
|
||||
Loading…
Reference in New Issue
Block a user