123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- #!/usr/bin/env bash
- #
- # System Required: CentOS, Debian, Ubuntu
- #
- # Description: Install haproxy for Shadowsocks server
- #
- # Author: Teddysun <i@teddysun.com>
- #
- # Intro: https://shadowsocks.be/10.html
- #
- cur_dir=`pwd`
- [[ $EUID -ne 0 ]] && echo "Error: This script must be run as root!" && exit 1
- clear
- echo
- echo "#############################################################"
- echo "# Install haproxy for Shadowsocks server #"
- echo "# Intro: https://shadowsocks.be/10.html #"
- echo "# Author: Teddysun <i@teddysun.com> #"
- echo "#############################################################"
- echo
- check_sys() {
- local checkType=$1
- local value=$2
- local release=''
- local systemPackage=''
- if [ -f /etc/redhat-release ]; then
- release="centos"
- systemPackage="yum"
- elif cat /etc/issue | grep -Eqi "debian"; then
- release="debian"
- systemPackage="apt"
- elif cat /etc/issue | grep -Eqi "ubuntu"; then
- release="ubuntu"
- systemPackage="apt"
- elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then
- release="centos"
- systemPackage="yum"
- elif cat /proc/version | grep -Eqi "debian"; then
- release="debian"
- systemPackage="apt"
- elif cat /proc/version | grep -Eqi "ubuntu"; then
- release="ubuntu"
- systemPackage="apt"
- elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then
- release="centos"
- systemPackage="yum"
- fi
- if [ ${checkType} == "sysRelease" ]; then
- if [ "$value" == "$release" ]; then
- return 0
- else
- return 1
- fi
- elif [ ${checkType} == "packageManager" ]; then
- if [ "$value" == "$systemPackage" ]; then
- return 0
- else
- return 1
- fi
- fi
- }
- install_check() {
- if check_sys packageManager yum || check_sys packageManager apt; then
- return 0
- else
- return 1
- fi
- }
- disable_selinux(){
- if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then
- sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- setenforce 0
- fi
- }
- valid_ip(){
- local ip=$1
- local stat=1
- if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
- OIFS=$IFS
- IFS='.'
- ip=($ip)
- IFS=$OIFS
- [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
- stat=$?
- fi
- return ${stat}
- }
- get_ip(){
- local IP=$( ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1 )
- [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com )
- [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip )
- [ ! -z ${IP} ] && echo ${IP} || echo
- }
- get_char(){
- SAVEDSTTY=`stty -g`
- stty -echo
- stty cbreak
- dd if=/dev/tty bs=1 count=1 2> /dev/null
- stty -raw
- stty echo
- stty $SAVEDSTTY
- }
- # Pre-installation settings
- pre_install(){
- if ! install_check; then
- echo "Your OS is not supported to run it."
- echo "Please change to CentOS 6+/Debian 7+/Ubuntu 12+ and try again."
- exit 1
- fi
- # Set haproxy config port
- while true
- do
- echo -e "Please enter a port for haproxy and Shadowsocks server [1-65535]"
- read -p "(Default port: 8989):" haproxyport
- [ -z "${haproxyport}" ] && haproxyport="8989"
- expr ${haproxyport} + 0 &>/dev/null
- if [ $? -eq 0 ]; then
- if [ ${haproxyport} -ge 1 ] && [ ${haproxyport} -le 65535 ]; then
- echo
- echo "---------------------------"
- echo "port = ${haproxyport}"
- echo "---------------------------"
- echo
- break
- else
- echo "Enter error! Please enter a correct number."
- fi
- else
- echo "Enter error! Please enter a correct number."
- fi
- done
- # Set haproxy config IPv4 address
- while :
- do
- echo -e "Please enter your Shadowsocks server's IPv4 address for haproxy"
- read -p "(IPv4 is):" haproxyip
- valid_ip ${haproxyip}
- if [ $? -eq 0 ]; then
- echo
- echo "---------------------------"
- echo "IP = ${haproxyip}"
- echo "---------------------------"
- echo
- break
- else
- echo "Enter error! Please enter correct IPv4 address."
- fi
- done
- echo
- echo "Press any key to start...or Press Ctrl+C to cancel"
- char=`get_char`
- }
- # Config haproxy
- config_haproxy(){
- # Config DNS nameserver
- if ! grep -q "8.8.8.8" /etc/resolv.conf; then
- cp -p /etc/resolv.conf /etc/resolv.conf.bak
- echo "nameserver 8.8.8.8" > /etc/resolv.conf
- echo "nameserver 8.8.4.4" >> /etc/resolv.conf
- fi
- if [ -f /etc/haproxy/haproxy.cfg ]; then
- cp -p /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
- fi
- cat > /etc/haproxy/haproxy.cfg<<-EOF
- global
- ulimit-n 51200
- log 127.0.0.1 local2
- chroot /var/lib/haproxy
- pidfile /var/run/haproxy.pid
- user haproxy
- group haproxy
- daemon
- defaults
- mode tcp
- log global
- option dontlognull
- timeout connect 5s
- timeout client 1m
- timeout server 1m
- frontend ss-${haproxyport}
- bind *:${haproxyport}
- default_backend ss-${haproxyport}
- backend ss-${haproxyport}
- server server1 ${haproxyip}:${haproxyport} maxconn 20480
- EOF
- }
- install(){
- # Install haproxy
- if check_sys packageManager yum; then
- yum install -y haproxy
- elif check_sys packageManager apt; then
- apt-get -y update
- apt-get install -y haproxy
- fi
- if [ -d /etc/haproxy ]; then
- echo "haproxy install success."
- echo "Config haproxy start..."
- config_haproxy
- echo "Config haproxy completed..."
- if check_sys packageManager yum; then
- chkconfig --add haproxy
- chkconfig haproxy on
- elif check_sys packageManager apt; then
- update-rc.d haproxy defaults
- fi
- # Start haproxy
- service haproxy start
- if [ $? -eq 0 ]; then
- echo "haproxy start success..."
- else
- echo "haproxy start failure..."
- fi
- else
- echo
- echo "haproxy install failed."
- exit 1
- fi
- sleep 3
- # restart haproxy
- service haproxy restart
- # Active Internet connections confirm
- netstat -nxtlp
- echo
- echo "Congratulations, haproxy install completed."
- echo -e "Your haproxy Server IP: \033[41;37m $(get_ip) \033[0m"
- echo -e "Your haproxy Server port: \033[41;37m ${haproxyport} \033[0m"
- echo -e "Your Input Shadowsocks IP: \033[41;37m ${haproxyip} \033[0m"
- echo
- echo "Welcome to visit: https://shadowsocks.be/10.html"
- echo "Enjoy it."
- echo
- }
- # Install haproxy
- install_haproxy(){
- disable_selinux
- pre_install
- install
- }
- # Initialization step
- install_haproxy 2>&1 | tee ${cur_dir}/haproxy_for_shadowsocks.log
|