v2ray-agent/install_old.sh

503 lines
18 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env bash
export PATH="/usr/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.nvm/versions/node/v10.17.0/bin:$PATH"
purple="\033[35m"
skyBlue="\033[36m"
red="\033[31m"
green="\033[32m"
yellow="\e[93m"
magenta="\e[95m"
cyan="\e[96m"
none="\e[0m"
installType='yum'
removeType='yum -y remove'
echoType='echo'
#检查Linux版本
check_version(){
if [[ -s /etc/redhat-release ]]; then
version=`grep -oE "[0-9.]+" /etc/redhat-release | cut -d . -f 1`
else
version=`grep -oE "[0-9.]+" /etc/issue | cut -d . -f 1`
fi
bit=`uname -m`
if [[ ${bit} = "x86_64" ]]; then
bit="x64"
else
bit="x32"
fi
}
installNginx(){
## todo 兼容debian
${echoType} "${skyBlue}检查Nginx中...${none} "
existProcessNginx=`ps -ef|grep nginx|grep -v grep`
existNginx=`command -v nginx`
if [ -z "$existProcessNginx" ] && [ -z "$existNginx" ]
then
${echoType} "${skyBlue}安装Nginx中如遇到是否安装输入y${none}"
${installType} -y install nginx
rm -rf /etc/nginx/nginx.conf
wget -P /etc/nginx/ https://raw.githubusercontent.com/mack-a/v2ray-agent/master/config/nginx.conf
${echoType} "${green}步骤二Nginx安装成功执行下一步 ${none}"
else
${echoType} "${purple}===============================${none}"
${echoType} "${purple}检测到已安装Nginx是否卸载${none}"
${echoType} "${red} 1.卸载并重新安装【会把默认的安装目录的内容删除】${none}"
${echoType} "${red} 2.跳过并使用已经安装的Nginx以及配置文件【请确认是否是此脚本的配置文件】${none}"
${echoType} "${purple}===============================${none}"
${echoType} "${skyBlue}请选择【数字编号】:${none}"
read nginxStatus
if [ "${nginxStatus}" = 1 ]
then
if [ -n "$existProcessNginx" ]
then
${echoType} "${purple}Nginx已启动关闭中...${none}"
nginx -s stop
fi
${echoType} "${skyBlue}卸载Nginx中... ${none}"
${removeType} nginx
${echoType} "${skyBlue}卸载Nginx完毕重装中... ${none}"
installNginx;
else
echo "不卸载,返回主目录"
echo
manageFun
fi
fi
}
installHttps(){
${echoType} "${skyBlue}安装https中,请输入你要生成tls证书的域名${none}"
read domain
# grep "domain" * -R|awk -F: "{print $1}"|sort|uniq|xargs sed -i "s/domain/$domain/g"
# cat /etc/nginx/nginx.conf |grep "domain" * -R|awk -F: "{print $1}"|sort|uniq|xargs sed -i "s/domain/$domain/g"
existProcessNginx=`ps -ef|grep nginx|grep -v grep`
if [ ! -z "${existProcessNginx}" ]
then
echo '检测到Nginx正在运行关闭中...'
nginx -s stop
fi
if [ -f "/etc/nginx/nginx.conf" ]
then
noExistNginxConfigDomain=`cat /etc/nginx/nginx.conf|grep $domain|grep -v grep`
if [ ! -z "${noExistNginxConfigDomain}" ]
then
sed -i "s/$domain/domain/g" `grep $domain -rl /etc/nginx/nginx.conf`
fi
sed -i "s/domain/$domain/g" `grep domain -rl /etc/nginx/nginx.conf`
fi
uninstallAcmeStatus="false"
if [ ! -d "/root/.acme.sh" ]
then
${echoType} "${skyBlue}安装acme.sh中...${none}"
curl https://get.acme.sh | sh
sudo ~/.acme.sh/acme.sh --issue -d $domain --standalone -k ec-256
else
${echoType} "${purple}===============================${none}"
${echoType} "${purple}检测到已安装acme.sh是否卸载${none}"
${echoType} "${red} 1.卸载并重新安装【以前生成的TLS证书会被删除需要重新输入域名】${none}"
${echoType} "${red} 2.跳过并使用已经安装的acme.sh${none}"
${echoType} "${purple}===============================${none}"
${echoType} "${skyBlue}请选择【数字编号】:${none}"
read acmeStatus
if [ "${acmeStatus}" = 1 ]
then
rm -rf ~/.acme.sh
uninstallAcmeStatus="true"
else
${echoType} "${skyBlue}生成证书中...${none}"
fi
fi
if [ "${uninstallAcmeStatus}" = "true" ]
then
installHttps
else
~/.acme.sh/acme.sh --installcert -d $domain --fullchainpath /etc/nginx/$domain.crt --keypath /etc/nginx/$domain.key --ecc
sed -i "s/# ssl_certificate/ssl_certificate/g" `grep "# ssl_certificate" -rl /etc/nginx/nginx.conf`
sed -i "s/listen 443/listen 443 ssl/g" `grep "listen 443" -rl /etc/nginx/nginx.conf`
${echoType} "${green}步骤三HTTPS执行完毕请手动确认上方是否有错误执行下一步${none}"
fi
}
installV2Ray(){
${echoType} "${skyBlue}检查V2Ray中...${none} "
existProcessV2Ray=`ps -ef|grep v2ray|grep -v grep`
existV2Ray=`command -v v2ray`
if [ -z "$existProcessV2Ray" ] && [ -z "$existV2Ray" ] && [ ! -x "/usr/bin/v2ray" ]
then
${echoType} "${skyBlue}安装V2Ray中... ${none}"
wget -P /tmp/V2Ray https://github.com/V2Ray/V2Ray-core/releases/download/v4.21.3/V2Ray-linux-64.zip
cd /tmp/V2Ray
unzip /tmp/V2Ray/V2Ray-linux-64.zip
mv /tmp/V2Ray/v2ray /usr/bin/
mv /tmp/V2Ray/v2ctl /usr/bin/
mkdir /usr/bin/V2RayConfig
wget -P /usr/bin/V2RayConfig https://raw.githubusercontent.com/mack-a/V2Ray-agent/master/config/config_ws_tls.json
touch /usr/bin/V2RayConfig/V2Ray_access.log
touch /usr/bin/V2RayConfig/V2Ray_error.log
${echoType} "${green} 步骤三V2Ray安装成功执行下一步"
else
${echoType} "${purple}===============================${none}"
${echoType} "${purple}检测到已安装V2Ray是否卸载${none}"
${echoType} "${red} 1.卸载并重新安装【配置文件会重新生成】${none}"
${echoType} "${red} 2.跳过并使用已经安装的V2Ray【请确认Nginx的配置与V2Ray配置相同【端口号、Path】】${none}"
${echoType} "${purple}===============================${none}"
${echoType} "${skyBlue}请选择【数字编号】:${none}"
read acmeStatus
if [ "${acmeStatus}" -eq 1 ]
then
rm -rf /tmp/V2Ray
rm -rf /usr/bin/v2ray
rm -rf /usr/bin/v2ctl
rm -rf /usr/bin/V2RayConfig
if [ -z `ps -ef|grep v2ray|grep -v grep|awk '{print $2}'` ]
then
ps -ef|grep v2ray|grep -v grep|awk '{print $2}'|xargs kill -9
fi
installV2Ray
else
${echoType} "${green} 忽略V2Ray并继续执行"
fi
fi
}
checkOS(){
systemVersion=`cat /etc/redhat-release|grep CentOS|awk '{print $1}'`
if [ -n "$systemVersion" ] && [ "$systemVersion" -eq "CentOS" ]
then
${echoType} "${green}步骤一系统为CentOS脚本可执行 ${none} "
else
${echoType} "${red}目前仅支持Centos${none}"
${echoType} "${red}退出脚本${none}"
exit
fi
}
# 生成vmess链接
generatorVmess(){
${echoType} "${purple}===============================${none}"
${echoType} "${purple}选择要生成vmess的V2Ray配置文件${none}"
${echoType} "${green} 1.默认【/usr/bin/V2RayConfig/config_ws_tls.json】${none}"
${echoType} "${green} 2.官方默认【/etc/v2ray/config.json】${none}"
${echoType} "${green} 3.手动输入${none}"
${echoType} "${purple}===============================${none}"
${echoType} "${skyBlue}请选择【数字编号】:${none}"
read V2RayPathSelect
V2RayPath="";
if [ "$V2RayPathSelect" -eq "3" ]
then
${echoType} "${skyBlue}请输入配置文件路径:${none}"
read V2RayPath
fi
case $V2RayPathSelect in
1)
V2RayPath="/usr/bin/V2RayConfig/config_ws_tls.json"
;;
2)
V2RayPath="/etc/v2ray/config.json"
;;
esac
if [ -z "${V2RayPath}" ]
then
${echoType} ${red}"V2Ray配置文件读取失败请检查路径"${none}
init
else
# 读取nginx配置文件
${echoType} "${purple}===============================${none}"
${echoType} "${purple}选择要生成vmess的Nginx配置文件路径${none}"
${echoType} "${green} 1.CDN【默认读取/etc/nginx/nginx.conf】${none}"
${echoType} "${green} 2.手动输入Nginx配置文件路径${none}"
${echoType} "${green} 3.非CDN${none}"
${echoType} "${purple}===============================${none}"
${echoType} "${skyBlue}请选择【数字编号】:${none}"
read NginxPathSelect
if [ "$NginxPathSelect" -eq "2" ]
then
${echoType} "${skyBlue}请输入Nginx配置文件路径${none}"
read NginxPath
fi
case $NginxPathSelect in
1)
NginxPath="/etc/nginx/nginx.conf"
;;
esac
if [ -z "${NginxPath}" ]
then
${echoType} ${red}"Nginx配置文件读取失败请检查路径"${none}
init
fi
# 执行node生成vmess链接
nodePath='/root/.nvm/versions/node/v10.17.0/bin/node'
if [ ! -x "/root/.nvm/versions/node/v10.17.0/bin/node" ]
then
${echoType} ${red}"安装工具包中..."${none}
installTools
fi
echo
${echoType} "${purple}===============================${none}"
${echoType} "${purple}V2Ray配置文件路径:${none}"
${echoType} "${green} ${V2RayPath}${none}"
${echoType} "${purple}Nginx配置文件路径:${none}"
${echoType} "${green} ${NginxPath}${none}"
${echoType} "${purple}===============================${none}"
echo
vmessResult=`curl -L -s https://raw.githubusercontent.com/mack-a/v2ray-agent/master/generator_client_links.js | ${nodePath} - "${V2RayPath}" "${NginxPath}"`
${echoType} "${green}===============================${none}"
echo
eval $(echo "$vmessResult" |awk '{split($0,vmess," ");for(i in vmess) print "lenArr["i"]="vmess[i]}')
for value in ${lenArr[*]}
do
${echoType} "${purple}客户端链接:${none}"
${echoType} "${skyBlue} $value${none}"
echo
${echoType} "${purple}二维码:${none}"
echo $value | qrencode -s 10 -m 1 -t UTF8
echo
done
${echoType} "${green}===============================${none}"
echo
# curl -L -s https://raw.githubusercontent.com/mack-a/v2ray-agent/master/generator_client_links.js | /root/.nvm/versions/node/v10.17.0/bin/node - "/usr/bin/V2RayConfig/config_ws_tls.json" "/etc/nginx/nginx.conf"
fi
}
startServer(){
${echoType} "${green}启动服务${none}"
nginx
/usr/bin/v2ray -config /usr/bin/V2RayConfig/config_ws_tls.json &
echo "启动完毕"
}
installTools(){
existProcessWget=`ps -ef|grep wget|grep -v grep`
existWget=`command -v wget`
${installType} -y update
if [ -z "$existProcessWget" ] && [ -z "$existWget" ]
then
${echoType} "${skyBlue}安装wget中...${none}"
${installType} -y install wget
else
echo
fi
existUnzip=`command -v unzip`
if [ -z "$existUnzip" ]
then
${echoType} "${skyBlue}安装zip中...${none}"
${installType} -y install unzip
fi
existSocat=`command -v socat`
if [ -z "$existSocat" ]
then
${echoType} "${skyBlue}安装socat中...${none}"
${installType} -y install socat
fi
existJq=`command -v jq`
if [ -z "$existJq" ]
then
${echoType} ${skyBlue}安装jq中...${none}
${installType} -y install jq
fi
# existNode=`/root/.nvm/versions/node/v10.17.0/bin`
if [ ! -x "/root/.nvm/versions/node/v10.17.0/bin/node" ]
then
${echoType} ${skyBlue}安装nvm中...${none}
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash
${echoType} ${skyBlue}安装Node.js中...${none}
. /root/.nvm/nvm.sh
nvm install v10.17.0
fi
existQrencode=`command -v qrencode`
if [ -z "$existQrencode" ]
then
${echoType} ${skyBlue}安装qrencode中...${none}
${installType} -y install qrencode
fi
}
unInstall(){
nginx -s stop
rm -rf ~/.acme.sh
${removeType} nginx
rm -rf /tmp/V2Ray
rm -rf /usr/bin/v2ray
rm -rf /usr/bin/v2ctl
rm -rf /usr/bin/V2RayConfig
rm -rf /etc/nginx
rm -rf /root/.nvm
ps -ef|grep v2ray|grep -v grep|awk '{print $2}'|xargs kill -9
if [[ "${release}" -eq "ubuntu" || "${release}" -eq "debian" ]]
then
sed -i 's/. "\/root\/.acme.sh\/acme.sh.env"//g' `grep '. "/root/.acme.sh/acme.sh.env"' -rl /root/.bashrc`
fi
. /root/.bashrc
}
configPath(){
${echoType} "${purple}===============================${none}"
${echoType} "${red}路径如下${none}"
${echoType} "${green} 1.v2ray${none}"
${echoType} "${skyBlue} 1./usr/bin/v2ray 【V2Ray 程序】${none}"
${echoType} "${skyBlue} 2./usr/bin/v2ctl 【V2Ray 工具】${none}"
${echoType} "${skyBlue} 3./usr/bin/V2RayConfig 【V2Ray配置文件配置文件、log文件】${none}"
${echoType} "${green} 2.Nginx${none}"
${echoType} "${skyBlue} 1./usr/sbin/nginx 【Nginx 程序】${none}"
${echoType} "${skyBlue} 2./etc/nginx/nginx.conf 【Nginx 配置文件】${none}"
${echoType} "${purple}===============================${none}"
echo
}
manageFun(){
${echoType} "${purple}===============================${none}"
${echoType} "${purple}手动模式功能点目录:${none}"
${echoType} "${skyBlue} 1.检查系统版本是否为CentOS${none}"
${echoType} "${skyBlue} 2.安装工具包${none}"
${echoType} "${skyBlue} 3.检测nginx是否安装并配置${none}"
${echoType} "${skyBlue} 4.检测https是否安装并配置${none}"
${echoType} "${skyBlue} 5.检测V2Ray是否安装并配置${none}"
${echoType} "${skyBlue} 6.启动服务并退出脚本${none}"
${echoType} "${skyBlue} 7.卸载安装的所有内容${none}"
${echoType} "${skyBlue} 8.查看配置文件路径${none}"
${echoType} "${skyBlue} 9.生成Vmess、二维码链接${none}"
${echoType} "${skyBlue} 10.返回主目录${none}"
${echoType} "${red} 11.退出脚本${none}"
${echoType} "${purple}===============================${none}"
${echoType} "${skyBlue}请输入要执行的功能【数字编号】:${none}"
read funType
echo
case $funType in
1)
# checkOS
;;
2)
installTools
;;
3)
installNginx
;;
4)
${echoType} "${red}此步骤依赖【3.检测nginx是否安装并配置】${none}"
installHttps
;;
5)
installV2Ray
;;
6)
startServer
;;
7)
unInstall
;;
8)
configPath
;;
9)
generatorVmess
;;
10)
init
;;
11)
exit
;;
esac
manageFun
}
automationFun(){
case $1 in
1)
# checkOS
installTools
automationFun 2
;;
2)
installNginx
automationFun 3
;;
3)
installHttps
automationFun 4
;;
4)
installV2Ray
automationFun 5
;;
5)
generatorVmess
automationFun 6
;;
6)
startServer
exit
;;
esac
}
init(){
${echoType} "${purple}目前此脚本支持Ubuntu、Centos、Debian${none}"
${echoType} "${purple}===============================${none}"
${echoType} "${purple}支持两种模式:${none}"
${echoType} "${red} 1.自动模式${none}"
${echoType} "${red} 2.手动模式${none}"
${echoType} "${purple}===============================${none}"
${echoType} "${skyBlue}请选择【数字编号】:${none}"
read automatic
if [ "${automatic}" = 1 ]
then
${echoType} "${purple}===============================${none}"
${echoType} "${purple}自动模式会执行以下内容:${none}"
${echoType} "${skyBlue} 1.检查系统版本是否为Ubuntu、Centos、Debian${none}"
${echoType} "${skyBlue} 2.安装工具包${none}"
${echoType} "${skyBlue} 3.检测nginx是否安装并配置${none}"
${echoType} "${skyBlue} 4.检测https是否安装并配置${none}"
${echoType} "${skyBlue} 5.检测V2Ray是否安装并配置${none}"
${echoType} "${skyBlue} 6.生成vmess、二维码链接${none}"
${echoType} "${skyBlue} 7.启动服务并退出脚本${none}"
${echoType} "${purple}===============================${none}"
automationFun 1
elif [ "${automatic}" = 2 ]
then
manageFun
fi
}
# 检查系统
checkSystem(){
if [ -f /etc/redhat-release ]; then
release="centos"
installType='yum'
echoType='echo -e'
removeType='yum -y remove'
elif cat /etc/issue | grep -q -E -i "debian"; then
release="debian"
installType='apt'
echoType='echo -e'
removeType='apt -y autoremove'
elif cat /etc/issue | grep -q -E -i "ubuntu"; then
release="ubuntu"
installType='apt'
echoType='echo -e'
removeType='apt -y autoremove'
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
installType='yum'
echoType='echo -e'
removeType='yum -y remove'
elif cat /proc/version | grep -q -E -i "debian"; then
release="debian"
installType='apt'
removeType='apt -y autoremove'
echoType='echo -e'
elif cat /proc/version | grep -q -E -i "ubuntu"; then
release="ubuntu"
installType='apt'
removeType='apt -y autoremove'
echoType='echo -e'
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
installType='yum'
removeType='yum -y remove'
echoType='echo -e'
fi
}
checkSystem
[ ${release} != "debian" ] && [ ${release} != "ubuntu" ] && [ ${release} != "centos" ] && ${echoType} "${Error} 本脚本不支持当前系统 ${release} !" && exit 1
init