mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-28 20:11:53 +08:00
139 lines
4.2 KiB
Bash
Executable File
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"
|
|
}
|