#!/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