mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			117 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh /etc/rc.common
 | 
						|
# Copyright (C) 2016 chenhw2 <chenhw2@github.com>
 | 
						|
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
 | 
						|
 | 
						|
START=85
 | 
						|
 | 
						|
USE_PROCD=1
 | 
						|
PROG_NAME=haproxy
 | 
						|
PROG=/usr/sbin/${PROG_NAME}
 | 
						|
 | 
						|
PIDCOUNT=0
 | 
						|
 | 
						|
_log() {
 | 
						|
	logger -p daemon.info -t ${PROG_NAME} "$@"
 | 
						|
}
 | 
						|
 | 
						|
_err() {
 | 
						|
	logger -p daemon.err -t ${PROG_NAME} "$@"
 | 
						|
}
 | 
						|
 | 
						|
validate_section() {
 | 
						|
	uci_validate_section haproxy-tcp general "${1}" \
 | 
						|
		'enable:bool:0'            \
 | 
						|
		'retries:uinteger:3'       \
 | 
						|
		'timeout:uinteger:4000'    \
 | 
						|
		'startup_delay:uinteger:5' \
 | 
						|
		'admin_stats:port:7777'    \
 | 
						|
		'listen:string'            \
 | 
						|
		'upstreams:list(string)'
 | 
						|
}
 | 
						|
 | 
						|
genline_srv(){
 | 
						|
	line="$1"
 | 
						|
	hash="$(echo -n $line | md5sum | cut -c1-6)"
 | 
						|
	hash="$(echo -n $line | tr -d '\t ' | cut -c1-8)__$hash"
 | 
						|
	echo "    server $hash  $line" | tr -d "\'"
 | 
						|
}
 | 
						|
 | 
						|
boot() {
 | 
						|
	local delay=$(uci -q get $NAME.general.startup_delay)
 | 
						|
	(sleep ${delay:-0} && start >/dev/null 2>&1) &
 | 
						|
	return 0
 | 
						|
}
 | 
						|
 | 
						|
start_instance() {
 | 
						|
	local enable retries timeout admin_stats startup_delay listen upstreams
 | 
						|
 | 
						|
	validate_section "${1}" || {
 | 
						|
		_err "validation failed"
 | 
						|
		return 1
 | 
						|
	}
 | 
						|
 | 
						|
	[ "$enable" = 1 ] || return 1
 | 
						|
 | 
						|
	PIDCOUNT="$(( ${PIDCOUNT} + 1))"
 | 
						|
 | 
						|
	mkdir -p /var/etc
 | 
						|
	cat <<-EOF > /var/etc/$PROG_NAME.cfg
 | 
						|
	global
 | 
						|
	    nbproc $(grep -c '^processor' /proc/cpuinfo | tr -d "\n")
 | 
						|
 | 
						|
	defaults
 | 
						|
	    mode tcp
 | 
						|
	    retries ${retries}
 | 
						|
	    timeout connect ${timeout}
 | 
						|
	    timeout client ${timeout}
 | 
						|
	    timeout server ${timeout}
 | 
						|
 | 
						|
	listen admin_stats
 | 
						|
	    bind 0.0.0.0:${admin_stats}
 | 
						|
	    mode http
 | 
						|
	    stats uri /
 | 
						|
	    stats refresh 10s
 | 
						|
 | 
						|
	frontend tcp-in
 | 
						|
	    bind ${listen:-0.0.0.0:6666}
 | 
						|
	    default_backend tcp-out
 | 
						|
 | 
						|
	backend tcp-out
 | 
						|
		$(	if [ 0 -lt $(grep -c weight /etc/config/haproxy-tcp) ]; then
 | 
						|
				echo "    balance static-rr"
 | 
						|
				sed -n 's/.*upstreams[\t ]*//p' /etc/config/haproxy-tcp |
 | 
						|
				while read upstream; do
 | 
						|
					genline_srv "$upstream"
 | 
						|
				done
 | 
						|
			else
 | 
						|
				config_list_foreach "${1}" "upstreams" genline_srv
 | 
						|
			fi
 | 
						|
		)
 | 
						|
 | 
						|
EOF
 | 
						|
 | 
						|
	procd_open_instance
 | 
						|
	procd_set_param command ${PROG} \
 | 
						|
		-q -D -f /var/etc/$PROG_NAME.cfg \
 | 
						|
		-p /var/run/${PROG_NAME}.${PIDCOUNT}.pid
 | 
						|
	
 | 
						|
	procd_set_param respawn 0 30 0
 | 
						|
	procd_set_param stdout 1
 | 
						|
	procd_set_param stderr 1
 | 
						|
	
 | 
						|
	procd_close_instance
 | 
						|
}
 | 
						|
 | 
						|
start_service() {
 | 
						|
	config_load haproxy-tcp
 | 
						|
	config_foreach start_instance general
 | 
						|
}
 | 
						|
 | 
						|
stop_service() {
 | 
						|
	killall $PROG_NAME
 | 
						|
	rm -rf /var/etc/$PROG_NAME.cfg
 | 
						|
}
 | 
						|
 | 
						|
service_triggers() {
 | 
						|
	procd_add_reload_trigger haproxy-tcp
 | 
						|
}
 |