op-packages/luci-app-jederproxy/root/etc/init.d/jederproxy
github-actions[bot] 32600acc60 🌴 Sync 2026-03-05 23:51:42
2026-03-05 23:51:42 +08:00

139 lines
4.2 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
START=90
STOP=15
USE_PROCD=1
NAME=jederproxy
. $IPKG_INSTROOT/lib/functions/jederproxy.sh
uci_get_global_config() {
local key="$1"
local default_value="$2"
local value=$(uci -q get ${NAME}.@general[0].$key)
echo ${value:=$default_value}
}
start_jederproxy_process() {
process=$1
cwd=$2
cmd=$3
shift 3
log "Starting $process from $cmd inside $cwd"
procd_open_instance
procd_set_param respawn 1 1 0
procd_set_param env JP_TARGET_WD="$cwd"
procd_set_param command "/usr/libexec/jederproxy/jederproxy_jail"
procd_append_param command "$cmd"
for arg in "$@"; do
procd_append_param command "$arg"
done
local rlimit_nofile
local rlimit_data
rlimit_nofile="$(uci_get_global_config rlimit_nofile)"
rlimit_data="$(uci_get_global_config rlimit_data)"
if [ ! -z "${rlimit_nofile}" ] ; then
log "set limit nofile=${rlimit_nofile}"
procd_set_param limits "nofile=${rlimit_nofile}"
fi
if [ ! -z "${rlimit_data}" ] ; then
log "set limit data=${rlimit_data}"
procd_set_param limits "data=${rlimit_data}"
fi
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param file /etc/config/jederproxy
procd_set_param pidfile /var/run/jederproxy.pid
procd_close_instance
}
setup_dnsmasq() {
local dns_port=$(uci_get_global_config dns_port)
local dns_count=$(uci_get_global_config dns_count 0)
echo "# Generated dnsmasq configurations by luci-app-jederproxy" > /tmp/dnsmasq.d/jederproxy.conf
echo "strict-order" >> /tmp/dnsmasq.d/jederproxy.conf
echo "server=/#/127.0.0.1#${dns_port}" >> /tmp/dnsmasq.d/jederproxy.conf
local cur_port
for cur_port in $(seq ${dns_port} $(expr ${dns_port} + ${dns_count})); do
echo "server=127.0.0.1#${cur_port}" >> /tmp/dnsmasq.d/jederproxy.conf
done
log $(cat /tmp/dnsmasq.d/jederproxy.conf)
/etc/init.d/dnsmasq restart > /dev/null 2>&1
}
flush_dnsmasq() {
[ -f "/tmp/dnsmasq.d/jederproxy.conf" ] && rm /tmp/dnsmasq.d/jederproxy.conf
/etc/init.d/dnsmasq restart > /dev/null 2>&1
}
system_configure() {
[ "$(uci_get_global_config transparent_proxy_enable)" == "1" ] || return 0
log "Setting dnsmasq and firewall for transparent proxy..."
[ "$(uci_get_global_config dnsmasq_takeover_enable)" == "1" ] && setup_dnsmasq
setup_firewall
}
system_deconfigure() {
log "Resetting dnsmasq and firewall configurations..."
[ "$(uci_get_global_config dnsmasq_takeover_enable)" == "1" ] && flush_dnsmasq
flush_firewall
}
start_service() {
local active_server server_type executable_path config_type config_directory config_file
config_load $NAME
mkdir -p /var/etc/jederproxy
active_server=$(uci_get_global_config server)
config_get server_type "$active_server" server_type
config_get executable_path "$active_server" executable_path
config_get config_type "$active_server" config_type
config_get config_directory "$active_server" config_directory
config_get config_file "$active_server" config_file
local working_directory=""
if [ "$config_type" = "directory" ]; then
working_directory="$config_directory"
elif [ "$config_type" = "file" ]; then
working_directory=$(dirname "$config_file")
fi
if [ "$server_type" = "mihomo" ]; then
if [ "$config_type" = "directory" ]; then
start_jederproxy_process mihomo "$working_directory" "$executable_path" -d "$config_directory"
elif [ "$config_type" = "file" ]; then
start_jederproxy_process mihomo "$working_directory" "$executable_path" -f "$config_file"
fi
elif [ "$server_type" = "xray" ]; then
if [ "$config_type" = "directory" ]; then
start_jederproxy_process xray "$working_directory" "$executable_path" -confdir "$config_directory"
elif [ "$config_type" = "file" ]; then
start_jederproxy_process xray "$working_directory" "$executable_path" run -c "$config_file"
fi
fi
system_configure || system_deconfigure
}
stop_service() {
system_deconfigure
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger "jederproxy"
}