| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- #!/bin/bash
- # Author: Jrohy
- # github: https://github.com/Jrohy/multi-v2ray
- #定时任务北京执行时间(0~23)
- BEIJING_UPDATE_TIME=3
- #记录最开始运行脚本的路径
- BEGIN_PATH=$(pwd)
- #安装方式, 0为全新安装, 1为保留v2ray配置更新
- INSTALL_WAY=0
- #定义操作变量, 0为否, 1为是
- HELP=0
- REMOVE=0
- CHINESE=0
- BASE_SOURCE_PATH="https://multi.netlify.app"
- UTIL_PATH="/etc/v2ray_util/util.cfg"
- UTIL_CFG="$BASE_SOURCE_PATH/v2ray_util/util_core/util.cfg"
- BASH_COMPLETION_SHELL="$BASE_SOURCE_PATH/v2ray"
- CLEAN_IPTABLES_SHELL="$BASE_SOURCE_PATH/v2ray_util/global_setting/clean_iptables.sh"
- #Centos 临时取消别名
- [[ -f /etc/redhat-release && -z $(echo $SHELL|grep zsh) ]] && unalias -a
- [[ -z $(echo $SHELL|grep zsh) ]] && ENV_FILE=".bashrc" || ENV_FILE=".zshrc"
- #######color code########
- RED="31m"
- GREEN="32m"
- YELLOW="33m"
- BLUE="36m"
- FUCHSIA="35m"
- colorEcho(){
- COLOR=$1
- echo -e "\033[${COLOR}${@:2}\033[0m"
- }
- msg () {
- local colors="${ADM_tmp}/ADM-color"
- if [[ ! -e $colors ]]; then
- COLOR[0]='\033[1;37m' #BRAN='\033[1;37m'
- COLOR[1]='\e[31m' #VERMELHO='\e[31m'
- COLOR[2]='\e[32m' #VERDE='\e[32m'
- COLOR[3]='\e[33m' #AMARELO='\e[33m'
- COLOR[4]='\e[34m' #AZUL='\e[34m'
- COLOR[5]='\e[91m' #MAGENTA='\e[35m'
- COLOR[6]='\033[1;97m' #MAG='\033[1;36m'
- else
- local COL=0
- for number in $(cat $colors); do
- case $number in
- 1)COLOR[$COL]='\033[1;37m';;
- 2)COLOR[$COL]='\e[31m';;
- 3)COLOR[$COL]='\e[32m';;
- 4)COLOR[$COL]='\e[33m';;
- 5)COLOR[$COL]='\e[34m';;
- 6)COLOR[$COL]='\e[35m';;
- 7)COLOR[$COL]='\033[1;36m';;
- esac
- let COL++
- done
- fi
- NEGRITO='\e[1m'
- SEMCOR='\e[0m'
- case $1 in
- -ne)cor="${COLOR[1]}${NEGRITO}" && echo -ne "${cor}${2}${SEMCOR}";;
- -ama)cor="${COLOR[3]}${NEGRITO}" && echo -e "${cor}${2}${SEMCOR}";;
- -verm)cor="${COLOR[3]}${NEGRITO}[!] ${COLOR[1]}" && echo -e "${cor}${2}${SEMCOR}";;
- -verm2)cor="${COLOR[1]}${NEGRITO}" && echo -e "${cor}${2}${SEMCOR}";;
- -azu)cor="${COLOR[6]}${NEGRITO}" && echo -e "${cor}${2}${SEMCOR}";;
- -verd)cor="${COLOR[2]}${NEGRITO}" && echo -e "${cor}${2}${SEMCOR}";;
- -bra)cor="${COLOR[0]}${NEGRITO}" && echo -e "${cor}${2}${SEMCOR}";;
- "-bar2"|"-bar")cor="${COLOR[1]}=====================================================" && echo -e "${SEMCOR}${cor}${SEMCOR}";;
- -bar3)cor="${COLOR[1]}-----------------------------------------------------" && echo -e "${SEMCOR}${cor}${SEMCOR}";;
- esac
- }
- print_center(){
- local x
- local y
- #text="$*"
- text="$2"
- #x=$(( ($(tput cols) - ${#text}) / 2))
- x=$(( ( 54 - ${#text}) / 2))
- echo -ne "\E[6n";read -sdR y; y=$(echo -ne "${y#*[}" | cut -d';' -f1)
- #echo -e "\033[${y};${x}f$*"
- msg "$1" "\033[${y};${x}f$2"
- }
- fun_bar(){
- comando="$1"
- txt="$2"
- _=$(
- $comando > /dev/null 2>&1
- ) & > /dev/null
- pid=$!
- while [[ -d /proc/$pid ]]; do
- echo -ne " \033[1;33m$txt["
- for((i=0; i<10; i++)); do
- echo -ne "\033[1;31m##"
- sleep 0.2
- done
- echo -ne "\033[1;33m]"
- sleep 1s
- echo
- tput cuu1 && tput dl1
- done
- echo -e " \033[1;33m$txt[\033[1;31m####################\033[1;33m] - \033[1;32m100%\033[0m"
- sleep 1s
- }
- #######get params#########
- while [[ $# > 0 ]];do
- key="$1"
- case $key in
- --remove)
- REMOVE=1
- ;;
- -h|--help)
- HELP=1
- ;;
- -k|--keep)
- INSTALL_WAY=1
- colorEcho ${BLUE} "keep config to update\n"
- ;;
- --zh)
- CHINESE=1
- colorEcho ${BLUE} "安装中文版..\n"
- ;;
- *)
- # unknown option
- ;;
- esac
- shift # past argument or value
- done
- #############################
- help(){
- echo "bash v2ray.sh [-h|--help] [-k|--keep] [--remove]"
- echo " -h, --help Show help"
- echo " -k, --keep keep the config.json to update"
- echo " --remove remove v2ray,xray && multi-v2ray"
- echo " no params to new install"
- return 0
- }
- removeV2Ray() {
- #卸载V2ray脚本
- bash <(curl -L -s https://multi.netlify.app/go.sh) --remove >/dev/null 2>&1
- rm -rf /etc/v2ray >/dev/null 2>&1
- rm -rf /var/log/v2ray >/dev/null 2>&1
- #卸载Xray脚本
- bash <(curl -L -s https://multi.netlify.app/go.sh) --remove -x >/dev/null 2>&1
- rm -rf /etc/xray >/dev/null 2>&1
- rm -rf /var/log/xray >/dev/null 2>&1
- #清理v2ray相关iptable规则
- bash <(curl -L -s $CLEAN_IPTABLES_SHELL)
- #卸载multi-v2ray
- pip uninstall v2ray_util -y
- rm -rf /usr/share/bash-completion/completions/v2ray.bash >/dev/null 2>&1
- rm -rf /usr/share/bash-completion/completions/v2ray >/dev/null 2>&1
- rm -rf /usr/share/bash-completion/completions/xray >/dev/null 2>&1
- rm -rf /etc/bash_completion.d/v2ray.bash >/dev/null 2>&1
- rm -rf /usr/local/bin/v2ray >/dev/null 2>&1
- rm -rf /etc/v2ray_util >/dev/null 2>&1
- #删除v2ray定时更新任务
- crontab -l|sed '/SHELL=/d;/v2ray/d'|sed '/SHELL=/d;/xray/d' > crontab.txt
- crontab crontab.txt >/dev/null 2>&1
- rm -f crontab.txt >/dev/null 2>&1
- if [[ ${PACKAGE_MANAGER} == 'dnf' || ${PACKAGE_MANAGER} == 'yum' ]];then
- systemctl restart crond >/dev/null 2>&1
- else
- systemctl restart cron >/dev/null 2>&1
- fi
- #删除multi-v2ray环境变量
- sed -i '/v2ray/d' ~/$ENV_FILE
- sed -i '/xray/d' ~/$ENV_FILE
- source ~/$ENV_FILE
- colorEcho ${GREEN} "uninstall success!"
- }
- closeSELinux() {
- #禁用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
- }
- checkSys() {
- #检查是否为Root
- [ $(id -u) != "0" ] && { colorEcho ${RED} "Error: You must be root to run this script"; exit 1; }
- if [[ `command -v apt-get` ]];then
- PACKAGE_MANAGER='apt-get'
- elif [[ `command -v dnf` ]];then
- PACKAGE_MANAGER='dnf'
- elif [[ `command -v yum` ]];then
- PACKAGE_MANAGER='yum'
- else
- colorEcho $RED "Not support OS!"
- exit 1
- fi
- }
- #安装依赖
- installDependent(){
- if [[ ${PACKAGE_MANAGER} == 'dnf' || ${PACKAGE_MANAGER} == 'yum' ]];then
- ${PACKAGE_MANAGER} install socat crontabs bash-completion which -y
- else
- fun_bar "${PACKAGE_MANAGER} update" 'APT UPDATE '
- fun_bar "${PACKAGE_MANAGER} install socat cron bash-completion ntpdate gawk jq uuid-runtime -y" 'INSTALL DEPENDENCIAS '
- msg -bar
- fi
- #install python3 & pip
- source <(curl -sL https://python3.netlify.app/install.sh)
- }
- updateProject() {
- [[ ! $(type pip 2>/dev/null) ]] && colorEcho $RED "pip no install!" && exit 1
- pip install -U v2ray_util
- if [[ -e $UTIL_PATH ]];then
- [[ -z $(cat $UTIL_PATH|grep lang) ]] && echo "lang=en" >> $UTIL_PATH
- else
- mkdir -p /etc/v2ray_util
- curl $UTIL_CFG > $UTIL_PATH
- fi
- [[ $CHINESE == 1 ]] && sed -i "s/lang=en/lang=zh/g" $UTIL_PATH
- rm -f /usr/local/bin/v2ray >/dev/null 2>&1
- ln -s $(which v2ray-util) /usr/local/bin/v2ray
- rm -f /usr/local/bin/xray >/dev/null 2>&1
- ln -s $(which v2ray-util) /usr/local/bin/xray
- #移除旧的v2ray bash_completion脚本
- [[ -e /etc/bash_completion.d/v2ray.bash ]] && rm -f /etc/bash_completion.d/v2ray.bash
- [[ -e /usr/share/bash-completion/completions/v2ray.bash ]] && rm -f /usr/share/bash-completion/completions/v2ray.bash
- #更新v2ray bash_completion脚本
- curl $BASH_COMPLETION_SHELL > /usr/share/bash-completion/completions/v2ray
- curl $BASH_COMPLETION_SHELL > /usr/share/bash-completion/completions/xray
- if [[ -z $(echo $SHELL|grep zsh) ]];then
- source /usr/share/bash-completion/completions/v2ray
- source /usr/share/bash-completion/completions/xray
- fi
-
- #安装V2ray主程序
- [[ ${INSTALL_WAY} == 0 ]] && bash <(curl -L -s https://multi.netlify.app/go.sh)
- }
- #时间同步
- timeSync() {
- if [[ ${INSTALL_WAY} == 0 ]];then
- echo -e "${Info} Time Synchronizing.. ${Font}"
- if [[ `command -v ntpdate` ]];then
- ntpdate pool.ntp.org
- elif [[ `command -v chronyc` ]];then
- chronyc -a makestep
- fi
- if [[ $? -eq 0 ]];then
- echo -e "${OK} Time Sync Success ${Font}"
- echo -e "${OK} now: `date -R`${Font}"
- fi
- fi
- }
- profileInit() {
- #清理v2ray模块环境变量
- [[ $(grep v2ray ~/$ENV_FILE) ]] && sed -i '/v2ray/d' ~/$ENV_FILE && source ~/$ENV_FILE
- #解决Python3中文显示问题
- [[ -z $(grep PYTHONIOENCODING=utf-8 ~/$ENV_FILE) ]] && echo "export PYTHONIOENCODING=utf-8" >> ~/$ENV_FILE && source ~/$ENV_FILE
- #全新安装的新配置
- [[ ${INSTALL_WAY} == 0 ]] && v2ray new
- echo ""
- }
- installFinish() {
- #回到原点
- cd ${BEGIN_PATH}
- [[ ${INSTALL_WAY} == 0 ]] && WAY="install" || WAY="update"
- colorEcho ${GREEN} "multi-v2ray ${WAY} success!\n"
- config='/etc/v2ray/config.json'
- tmp='/etc/v2ray/temp.json'
- jq 'del(.inbounds[].streamSettings.kcpSettings[])' < /etc/v2ray/config.json >> /etc/v2ray/tmp.json
- rm -rf /etc/v2ray/config.json
- jq '.inbounds[].streamSettings += {"network":"ws","wsSettings":{"path": "/ADMRufu/","headers": {"Host": "ejemplo.com"}}}' < /etc/v2ray/tmp.json >> /etc/v2ray/config.json
- chmod 777 /etc/v2ray/config.json
- if [[ ${INSTALL_WAY} == 0 ]]; then
- #clear
- v2ray info
- msg -bar
- print_center -verd "INSTALACION FINALIZADA"
- print_center -ama "Por favor verifique el log"
- msg -bar
- msg -ama "►► Presione enter para continuar ◄◄"
- read foo
- fi
- }
- main() {
- [[ ${HELP} == 1 ]] && help && return
- [[ ${REMOVE} == 1 ]] && removeV2Ray && return
- [[ ${INSTALL_WAY} == 0 ]] && clear && msg -bar && print_center -verd "INSTALADO v2ray" && msg -bar
- checkSys
- installDependent
- closeSELinux
- timeSync
- updateProject
- profileInit
- installFinish
- }
- main
|