mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-27 10:31:38 +08:00
139 lines
4.6 KiB
Bash
139 lines
4.6 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
|
|
START=90
|
|
STOP=15
|
|
USE_PROCD=1
|
|
NAME=xjay
|
|
|
|
GENERATE_CONF="/usr/share/xjay/utils/gen_config.lua"
|
|
GENERAL_FIRST_SECTION=""
|
|
GENERAL_FIRST_SECTION=""
|
|
DEFAULT_INBOUND_CFG=""
|
|
DEFAULT_OUTBOUND_CFG=""
|
|
|
|
# call back funtion to invoked when config_load parse each config
|
|
# here we parse the first general section
|
|
config_cb(){
|
|
local type="$1"
|
|
local name="$2"
|
|
if [ "$type" == "general" ] && [ "$GENERAL_FIRST_SECTION" == "" ]; then
|
|
GENERAL_FIRST_SECTION="$name"
|
|
elif [ "$type" == "inbound" ] && [ "$INBOUND_FIRST_SECTION" == "" ]; then
|
|
INBOUND_FIRST_SECTION="$name"
|
|
elif [ "$type" == "outbound" ] && [ "$OUTBOUND_FIRST_SECTION" == "" ]; then
|
|
OUTBOUND_FIRST_SECTION="$name"
|
|
elif [ "$type" == "misc" ] && [ "$MISC_FIRST_SECTION" == "" ]; then
|
|
MISC_FIRST_SECTION="$name"
|
|
fi
|
|
}
|
|
|
|
log_procd_set_param() {
|
|
local type="$1"
|
|
shift
|
|
logger -st xjay[$$] -p4 "Using procd_set_param $type" "$@"
|
|
}
|
|
|
|
start_xjay() {
|
|
logger -st xjay[$$] -p4 "Starting Xray from $1"
|
|
procd_open_instance
|
|
procd_set_param respawn 1 1 0
|
|
procd_set_param command $1
|
|
procd_append_param command run
|
|
procd_append_param command -confdir
|
|
procd_append_param command /var/etc/xjay
|
|
procd_set_param limits nofile="163840 327680"
|
|
procd_set_param env XRAY_LOCATION_ASSET=/usr/share/xray
|
|
procd_set_param stdout 1
|
|
procd_set_param stderr 1
|
|
procd_set_param file /etc/config/xjay
|
|
procd_set_param pidfile /var/run/xjay.pid
|
|
procd_close_instance
|
|
}
|
|
|
|
gen_config_file() {
|
|
mkdir -p /var/etc/xjay
|
|
rm -f /var/etc/xjay/*
|
|
logger -st xjay[$$] -p4 "Generating Xray configuration files..."
|
|
/usr/bin/lua ${GENERATE_CONF} > /var/etc/xjay/config.json
|
|
}
|
|
|
|
start_service() {
|
|
config_load $NAME
|
|
|
|
# if not enabled exit without doing anything
|
|
local enabled=""
|
|
local xray_path=""
|
|
config_get enabled $GENERAL_FIRST_SECTION enabled
|
|
[ "$enabled" != "true" ] && logger -st xjay[$$] -p4 "Diabled, exiting..." && return
|
|
|
|
# if default inbound is not set or deleted, then exit
|
|
local default_inbound=""
|
|
config_get default_inbound $INBOUND_FIRST_SECTION default_inbound
|
|
[ "$default_inbound" == "" ] && logger -st xjay[$$] -p4 "No default inbound set, exiting..." && return
|
|
|
|
# if default outbound is not set or deleted, then exit
|
|
local default_outbound=""
|
|
config_get default_outbound $OUTBOUND_FIRST_SECTION default_outbound
|
|
[ "$default_outbound" == "" ] && logger -st xjay[$$] -p4 "No default outbound set, exiting..." && return
|
|
|
|
# find default inbound by matching tag
|
|
# we do not use config id because when delete an inbound
|
|
# the config id of default inbound may be changed
|
|
find_default_inbound_cfg() {
|
|
local cfg_id="$1"
|
|
local tag=$(config_get $cfg_id tag)
|
|
if [ "$tag" = "$default_inbound" ]; then
|
|
DEFAULT_INBOUND_CFG="$cfg_id"
|
|
logger -st xjay[$$] -p4 "Using default inbound: [$tag]..."
|
|
fi
|
|
}
|
|
config_foreach find_default_inbound_cfg inbound_service
|
|
[ "$DEFAULT_INBOUND_CFG" == "" ] && logger -st xjay[$$] -p4 "Default inbound not found, exiting..." && return
|
|
|
|
# find default outbound by matching tag
|
|
# we do not use config id because when delete an outbound
|
|
# the config id of default outbound may be changed
|
|
find_default_outbound_cfg() {
|
|
local cfg_id="$1"
|
|
local tag=$(config_get $cfg_id tag)
|
|
if [ "$tag" = "$default_outbound" ]; then
|
|
DEFAULT_OUTBOUND_CFG="$cfg_id"
|
|
fi
|
|
}
|
|
config_foreach find_default_outbound_cfg outbound_server
|
|
[ "$DEFAULT_OUTBOUND_CFG" == "" ] && \
|
|
[ "$default_outbound" != "direct" ] && \
|
|
[ "$default_outbound" != "blackhole" ] && \
|
|
logger -st xjay[$$] -p4 "Default outbound not found, exiting..." && return
|
|
logger -st xjay[$$] -p4 "Using default outbound: [$default_outbound]..."
|
|
|
|
|
|
# check xray bin and start it
|
|
mkdir -p /var/run /var/etc
|
|
config_get xray_path $MISC_FIRST_SECTION xray_path
|
|
command -v ${xray_path} > /dev/null 2>&1 || return 1
|
|
gen_config_file
|
|
start_xjay ${xray_path}
|
|
|
|
# set up firewall rules for routing
|
|
/usr/share/xjay/firewall/firewall_xjay.sh "$DEFAULT_INBOUND_CFG"
|
|
|
|
# restart xjay when wan IP changed
|
|
# to ensure new WAN IP will be added to rule
|
|
ln -s /usr/share/xjay/firewall/xjay-iface-wan-ip.hotplug /etc/hotplug.d/iface/90-xjay-iface-wan-ip
|
|
}
|
|
|
|
stop_service() {
|
|
rm -rf /etc/hotplug.d/iface/90-xjay-iface-wan-ip
|
|
/usr/share/xjay/firewall/firewall_reset.sh
|
|
}
|
|
|
|
reload_service() {
|
|
stop
|
|
start
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger "xjay"
|
|
}
|