mirror of
https://gitlab.com/fscarmen/warp.git
synced 2026-06-15 03:25:42 +08:00
Optimise the code to improve speed.
Former-commit-id: 78171273bdd2c27cc085c3bf8b90f9bffd8d0264
This commit is contained in:
@@ -269,8 +269,8 @@ E[128]=""
|
||||
C[128]=""
|
||||
E[129]="The current Teams account is unavailable, automatically switch back to the free account"
|
||||
C[129]="当前 Teams 账户不可用,自动切换回免费账户"
|
||||
E[130]="Please confirm\\\n Private key\\\t: \$PRIVATEKEY \$MATCH1\\\n Public key\\\t: \$PUBLICKEY \$MATCH2\\\n Address IPv4\\\t: \$ADDRESS4/32 \$MATCH3\\\n Address IPv6\\\t: \$ADDRESS6/128 \$MATCH4"
|
||||
C[130]="请确认Teams 信息\\\n Private key\\\t: \$PRIVATEKEY \$MATCH1\\\n Public key\\\t: \$PUBLICKEY \$MATCH2\\\n Address IPv4\\\t: \$ADDRESS4/32 \$MATCH3\\\n Address IPv6\\\t: \$ADDRESS6/128 \$MATCH4"
|
||||
E[130]="Please confirm\\\n Private key\\\t: \$PRIVATEKEY \${MATCH[1]}\\\n Address IPv6\\\t: \$ADDRESS6/128 \${MATCH[2]}"
|
||||
C[130]="请确认Teams 信息\\\n Private key\\\t: \$PRIVATEKEY \${MATCH[1]}\\\n Address IPv6\\\t: \$ADDRESS6/128 \${MATCH[2]}"
|
||||
E[131]="comfirm please enter [y] , and other keys to use free account:"
|
||||
C[131]="确认请按 [y],其他按键则使用免费账户:"
|
||||
E[132]="Is there a WARP+ or Teams account?\n 1. Use free account (default)\n 2. WARP+\n 3. Teams"
|
||||
@@ -867,7 +867,8 @@ net() {
|
||||
if [[ "$i" = "$j" ]]; then
|
||||
if [ "$CHOOSE_TYPE" = 3 ]; then
|
||||
unset CHOOSE_TYPE && i=0 && info " $(text 129) "
|
||||
mv -f /etc/wireguard/wgcf.conf.bak /etc/wireguard/wgcf.conf
|
||||
[ -e /etc/wireguard/wgcf.conf.bak ] && mv -f /etc/wireguard/wgcf.conf.bak /etc/wireguard/wgcf.conf
|
||||
[ -e /etc/wireguard/proxy.conf.bak ] && mv -f /etc/wireguard/proxy.conf.bak /etc/wireguard/proxy.conf
|
||||
rm -f /etc/wireguard/info-temp.log
|
||||
else
|
||||
wg-quick down wgcf >/dev/null 2>&1
|
||||
@@ -978,8 +979,8 @@ stack_switch() {
|
||||
|
||||
[[ "$CLIENT" = [35] && "$SWITCHCHOOSE" = [4D] ]] && error " $(text 109) "
|
||||
check_stack
|
||||
if [[ "$CHOOSE1" = [12] ]]; then
|
||||
TO=$(eval echo "\${TO$CHOOSE1[m]}")
|
||||
if [[ "$MENU_CHOOSE" = [12] ]]; then
|
||||
TO=$(eval echo "\${TO$MENU_CHOOSE[m]}")
|
||||
elif [[ "$SWITCHCHOOSE" = [46D] ]]; then
|
||||
[[ "$T4@$T6@$SWITCHCHOOSE" =~ '1@0@4'|'0@1@6'|'1@1@D' ]] && error " $(text 146) " || TO="$T4$T6$SWITCHCHOOSE"
|
||||
fi
|
||||
@@ -1071,13 +1072,16 @@ rule_del() {
|
||||
|
||||
# 替换为 Teams 账户信息
|
||||
teams_change() {
|
||||
sed -i "s#PrivateKey.*#PrivateKey = $PRIVATEKEY#g;s#Address.*32#Address = ${ADDRESS4}/32#g;s#Address.*128#Address = ${ADDRESS6}/128#g;s#PublicKey.*#PublicKey = $PUBLICKEY#g" /etc/wireguard/wgcf.conf
|
||||
[ -e /etc/wireguard/proxy.conf ] && cp -f /etc/wireguard/proxy.conf{,.bak}
|
||||
[ -e /etc/wireguard/wgcf.conf ] && cp -f /etc/wireguard/wgcf.conf{,.bak}
|
||||
echo "$TEAMS" > /etc/wireguard/info-temp.log
|
||||
sed -i "s#PrivateKey.*#PrivateKey = $PRIVATEKEY#g; s#Address.*128#Address = ${ADDRESS6}/128#g" /etc/wireguard/wgcf.conf
|
||||
case $IPV4$IPV6 in
|
||||
01 ) sed -i "s#Endpoint.*#Endpoint = $(expr "$TEAMS" : '.*v6":"\(.*]\):.*'):2408#g" /etc/wireguard/wgcf.conf ;;
|
||||
10 ) sed -i "s#Endpoint.*#Endpoint = $(expr "$TEAMS" : '.*v4":"\(.*\):0",.*'):2408#g" /etc/wireguard/wgcf.conf ;;
|
||||
01 ) sed -i "s#Endpoint.*#Endpoint = $(expr "$TEAMS" : '.*v6":"\(.*]:[0-9]\+\).*')#g" /etc/wireguard/wgcf.conf ;;
|
||||
10 ) sed -i "s#Endpoint.*#Endpoint = $(expr "$TEAMS" : '.*v4":"\([0-9.]\+:[0-9]\+\).*')#g" /etc/wireguard/wgcf.conf ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# 输入 WARP+ 账户(如有),限制位数为空或者26位以防输入错误
|
||||
input_license() {
|
||||
[ -z "$LICENSE" ] && reading " $(text 28) " LICENSE
|
||||
@@ -1095,16 +1099,13 @@ input_license() {
|
||||
# 输入 Teams 账户 URL(如有)
|
||||
input_url() {
|
||||
[ -z "$URL" ] && reading " $(text 127) " URL
|
||||
URL=${URL:-'https://gist.githubusercontent.com/fscarmen/56aaf02d743551737c9973b8be7a3496/raw/61bf63e68e4e91152545679b8f11c72cac215128/2021.12.21'}
|
||||
URL=${URL:-'https://gist.githubusercontents.com/fscarmen/56aaf02d743551737c9973b8be7a3496/raw/61bf63e68e4e91152545679b8f11c72cac215128/2021.12.21'}
|
||||
TEAMS=$(curl -sSL "$URL" | sed "s/\"/\"/g")
|
||||
PRIVATEKEY=$(expr "$TEAMS" : '.*private_key">\([^<]*\).*')
|
||||
PUBLICKEY=$(expr "$TEAMS" : '.*public_key":"\([^&]*\).*')
|
||||
ADDRESS4=$(expr "$TEAMS" : '.*v4":"\(172[^&]*\).*')
|
||||
ADDRESS6=$(expr "$TEAMS" : '.*v6":"\([^[&]*\).*')
|
||||
[[ "$PRIVATEKEY" =~ ^[A-Z0-9a-z/+]{43}=$ ]] && MATCH1=$(text 135) || MATCH1=$(text 136)
|
||||
[[ "$PUBLICKEY" =~ ^[A-Z0-9a-z/+]{43}=$ ]] && MATCH2=$(text 135) || MATCH2=$(text 136)
|
||||
[[ "$ADDRESS4" =~ ^172.16.[01].[0-9]{1,3}$ ]] && MATCH3=$(text 135) || MATCH3=$(text 136)
|
||||
[[ "$ADDRESS6" =~ ^fd01(:[0-9a-f]{0,4}){7}$ ]] && MATCH4=$(text 135) || MATCH4=$(text 136)
|
||||
|
||||
[[ "$PRIVATEKEY" =~ ^[A-Z0-9a-z/+]{43}=$ ]] && MATCH[1]=$(text 135) || MATCH[1]=$(text 136)
|
||||
[[ "$ADDRESS6" =~ ^fd01(:[0-9a-f]{0,4}){7}$ ]] && MATCH[2]=$(text 135) || MATCH[2]=$(text 136)
|
||||
hint "\n $(text_eval 130) \n" && reading " $(text 131) " CONFIRM
|
||||
}
|
||||
|
||||
@@ -1405,71 +1406,72 @@ install() {
|
||||
# 根据系统选择需要安装的依赖
|
||||
info "\n $(text 32) \n"
|
||||
|
||||
Debian() {
|
||||
# 添加 backports 源,之后才能安装 wireguard-tools
|
||||
if [[ $(echo $SYS | sed "s/[^0-9.]//g" | cut -d. -f1) = 9 ]]; then
|
||||
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list
|
||||
echo -e "Package: *\nPin: release a=unstable\nPin-Priority: 150\n" > /etc/apt/preferences.d/limit-unstable
|
||||
else
|
||||
echo "deb http://deb.debian.org/debian $(cat /etc/os-release | grep -i VERSION_CODENAME | sed s/.*=//g)-backports main" > /etc/apt/sources.list.d/backports.list
|
||||
fi
|
||||
# 更新源
|
||||
${PACKAGE_UPDATE[int]}
|
||||
case "$SYSTEM" in
|
||||
Debian )
|
||||
# 添加 backports 源,之后才能安装 wireguard-tools
|
||||
if [[ $(echo $SYS | sed "s/[^0-9.]//g" | cut -d. -f1) = 9 ]]; then
|
||||
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list
|
||||
echo -e "Package: *\nPin: release a=unstable\nPin-Priority: 150\n" > /etc/apt/preferences.d/limit-unstable
|
||||
else
|
||||
echo "deb http://deb.debian.org/debian $(cat /etc/os-release | grep -i VERSION_CODENAME | sed s/.*=//g)-backports main" > /etc/apt/sources.list.d/backports.list
|
||||
fi
|
||||
# 更新源
|
||||
${PACKAGE_UPDATE[int]}
|
||||
|
||||
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
${PACKAGE_INSTALL[int]} --no-install-recommends net-tools openresolv dnsutils iptables
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} --no-install-recommends wireguard-tools
|
||||
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
${PACKAGE_INSTALL[int]} --no-install-recommends net-tools openresolv dnsutils iptables
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} --no-install-recommends wireguard-tools
|
||||
|
||||
# 如 Linux 版本低于5.6并且是 kvm,则安装 wireguard 内核模块
|
||||
[ "$WG" = 1 ] && ${PACKAGE_INSTALL[int]} --no-install-recommends linux-headers-"$(uname -r)" && ${PACKAGE_INSTALL[int]} --no-install-recommends wireguard-dkms
|
||||
}
|
||||
# 如 Linux 版本低于5.6并且是 kvm,则安装 wireguard 内核模块
|
||||
[ "$WG" = 1 ] && ${PACKAGE_INSTALL[int]} --no-install-recommends linux-headers-"$(uname -r)" && ${PACKAGE_INSTALL[int]} --no-install-recommends wireguard-dkms
|
||||
;;
|
||||
|
||||
Ubuntu() {
|
||||
# 更新源
|
||||
${PACKAGE_UPDATE[int]}
|
||||
Ubuntu )
|
||||
# 更新源
|
||||
${PACKAGE_UPDATE[int]}
|
||||
|
||||
# 安装一些必要的网络工具包和 wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
${PACKAGE_INSTALL[int]} --no-install-recommends net-tools openresolv dnsutils iptables
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} --no-install-recommends wireguard-tools
|
||||
}
|
||||
# 安装一些必要的网络工具包和 wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
${PACKAGE_INSTALL[int]} --no-install-recommends net-tools openresolv dnsutils iptables
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} --no-install-recommends wireguard-tools
|
||||
;;
|
||||
|
||||
CentOS() {
|
||||
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
[ "$COMPANY" = amazon ] && ${PACKAGE_UPDATE[int]} && amazon-linux-extras install -y epel
|
||||
${PACKAGE_INSTALL[int]} epel-release
|
||||
${PACKAGE_INSTALL[int]} net-tools iptables
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} wireguard-tools
|
||||
CentOS )
|
||||
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
[ "$COMPANY" = amazon ] && ${PACKAGE_UPDATE[int]} && amazon-linux-extras install -y epel
|
||||
${PACKAGE_INSTALL[int]} epel-release
|
||||
${PACKAGE_INSTALL[int]} net-tools iptables
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} wireguard-tools
|
||||
|
||||
# 如 Linux 版本低于5.6并且是 kvm,则安装 wireguard 内核模块
|
||||
VERSION_ID=$(expr "$SYS" : '.*\s\([0-9]\{1,\}\)\.*')
|
||||
[ "$ARCHITECTURE" != s390x ] && [ "$WG" = 1 ] && curl -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-"$VERSION_ID"/jdoss-wireguard-epel-"$VERSION_ID".repo &&
|
||||
# 如 Linux 版本低于5.6并且是 kvm,则安装 wireguard 内核模块
|
||||
VERSION_ID=$(expr "$SYS" : '.*\s\([0-9]\{1,\}\)\.*')
|
||||
[ "$ARCHITECTURE" != s390x ] && [ "$WG" = 1 ] && curl -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-"$VERSION_ID"/jdoss-wireguard-epel-"$VERSION_ID".repo &&
|
||||
|
||||
${PACKAGE_INSTALL[int]} wireguard-dkms
|
||||
${PACKAGE_INSTALL[int]} wireguard-dkms
|
||||
|
||||
# 升级所有包同时也升级软件和系统内核
|
||||
${PACKAGE_UPDATE[int]}
|
||||
# 升级所有包同时也升级软件和系统内核
|
||||
${PACKAGE_UPDATE[int]}
|
||||
|
||||
# s390x wireguard-tools 安装
|
||||
[ "$ARCHITECTURE" = s390x ] && [ ! $(type -p wg) ] && rpm -i https://mirrors.cloud.tencent.com/epel/8/Everything/s390x/Packages/w/wireguard-tools-1.0.20210914-1.el8.s390x.rpm
|
||||
# s390x wireguard-tools 安装
|
||||
[ "$ARCHITECTURE" = s390x ] && [ ! $(type -p wg) ] && rpm -i https://mirrors.cloud.tencent.com/epel/8/Everything/s390x/Packages/w/wireguard-tools-1.0.20210914-1.el8.s390x.rpm
|
||||
|
||||
# CentOS Stream 9 需要安装 resolvconf
|
||||
[[ "$SYSTEM" = CentOS && "$(expr "$SYS" : '.*\s\([0-9]\{1,\}\)\.*')" = 9 ]] && [ ! $(type -p resolvconf) ] &&
|
||||
wget $CDN -P /usr/sbin https://github.com/fscarmen/warp/releases/download/resolvconf/resolvconf && chmod +x /usr/sbin/resolvconf
|
||||
}
|
||||
# CentOS Stream 9 需要安装 resolvconf
|
||||
[[ "$SYSTEM" = CentOS && "$(expr "$SYS" : '.*\s\([0-9]\{1,\}\)\.*')" = 9 ]] && [ ! $(type -p resolvconf) ] &&
|
||||
wget $CDN -P /usr/sbin https://github.com/fscarmen/warp/releases/download/resolvconf/resolvconf && chmod +x /usr/sbin/resolvconf
|
||||
;;
|
||||
|
||||
Alpine() {
|
||||
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
${PACKAGE_INSTALL[int]} net-tools iproute2 openresolv openrc iptables ip6tables
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} wireguard-tools
|
||||
}
|
||||
Alpine )
|
||||
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
${PACKAGE_INSTALL[int]} net-tools iproute2 openresolv openrc iptables ip6tables
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} wireguard-tools
|
||||
;;
|
||||
|
||||
Arch() {
|
||||
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
${PACKAGE_INSTALL[int]} openresolv
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} wireguard-tools
|
||||
}
|
||||
Arch )
|
||||
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具:wg、wg-quick)
|
||||
${PACKAGE_INSTALL[int]} openresolv
|
||||
[ "$OCTEEP" != 1 ] && ${PACKAGE_INSTALL[int]} wireguard-tools
|
||||
;;
|
||||
|
||||
$SYSTEM
|
||||
esac
|
||||
|
||||
wait
|
||||
|
||||
@@ -1566,7 +1568,7 @@ EOF
|
||||
|
||||
# 保存好配置文件, 如有 Teams,改为 Teams 账户信息
|
||||
mv -f menu.sh /etc/wireguard >/dev/null 2>&1
|
||||
[[ "$CONFIRM" = [Yy] ]] && teams_change && echo "$TEAMS" > /etc/wireguard/info-temp.log 2>&1
|
||||
[[ "$CONFIRM" = [Yy] ]] && teams_change
|
||||
|
||||
# 创建再次执行的软链接快捷方式,再次运行可以用 warp 指令,设置默认语言
|
||||
chmod +x /etc/wireguard/menu.sh >/dev/null 2>&1
|
||||
@@ -1582,14 +1584,10 @@ EOF
|
||||
hint " $(text 43) \n" && help
|
||||
|
||||
else
|
||||
[ "$ANEMONE" = 1 ] && iptables_solution
|
||||
[ "$ANEMONE" = 1 ] && ( iptables_solution; systemctl restart dnsmasq >/dev/null 2>&1 )
|
||||
|
||||
# 如有 Teams,改为 Teams 账户信息
|
||||
grep -qiw "y" <<< "$CONFIRM" && teams_change && echo "$TEAMS" > /etc/wireguard/info-temp.log 2>&1
|
||||
|
||||
# 设置开机启动
|
||||
${SYSTEMCTL_ENABLE[int]} >/dev/null 2>&1
|
||||
[ $(type -p dnsmasq) ] && systemctl restart dnsmasq >/dev/null 2>&1
|
||||
[[ "$CONFIRM" = [Yy] ]] && teams_change
|
||||
|
||||
# Linux 内核低于5.6的,安装 Wireguard-GO。部分较低内核版本的KVM,即使安装了wireguard-dkms, 仍不能正常工作,兜底使用 wireguard-go
|
||||
if [ "$WG" = 1 ] || [[ $(systemctl is-active wg-quick@wgcf) != active ]] || [[ $(systemctl is-enabled wg-quick@wgcf) != enabled ]]; then
|
||||
@@ -1599,7 +1597,7 @@ EOF
|
||||
tar xzf wireguard-go_linux_$ARCHITECTURE.tar.gz -C /usr/bin/ && rm -f wireguard-go_linux_* && chmod +x /usr/bin/wireguard-go
|
||||
${SYSTEMCTL_ENABLE[int]} >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
|
||||
# 创建再次执行的软链接快捷方式,再次运行可以用 warp 指令,设置默认语言
|
||||
mv -f menu.sh /etc/wireguard >/dev/null 2>&1
|
||||
chmod +x /etc/wireguard/menu.sh >/dev/null 2>&1
|
||||
@@ -1611,7 +1609,10 @@ EOF
|
||||
unset IP4 IP6 WAN4 WAN6 COUNTRY4 COUNTRY6 ASNORG4 ASNORG6 TRACE4 TRACE6 PLUS4 PLUS6 WARPSTATUS4 WARPSTATUS6
|
||||
[ "$COMPANY" = amazon ] && warning " $(text_eval 40) " && reboot || net
|
||||
result_priority
|
||||
|
||||
|
||||
# 设置开机启动
|
||||
${SYSTEMCTL_ENABLE[int]} >/dev/null 2>&1
|
||||
|
||||
# /etc/wireguard/info-temp.log 存在,说明升级 Teams 成功,移动文件到 /etc/wireguard/info.log
|
||||
grep -qiw "y" <<< "$CONFIRM" && [ -e /etc/wireguard/info-temp.log ] && mv -f /etc/wireguard/info-temp.log /etc/wireguard/info.log
|
||||
|
||||
@@ -1980,8 +1981,6 @@ change_to_teams() {
|
||||
input_url
|
||||
grep -q "$PRIVATEKEY" /etc/wireguard/wgcf.conf && KEY_LICENSE='Private key' && error " $(text_eval 31) "
|
||||
if grep -qiw "y" <<< "$CONFIRM"; then
|
||||
cp -f /etc/wireguard/wgcf.conf{,.bak}
|
||||
echo "$TEAMS" > /etc/wireguard/info-temp.log 2>&1
|
||||
if [ "$UPDATE_ACCOUNT" = wgcf ]; then
|
||||
wg-quick down wgcf >/dev/null 2>&1
|
||||
teams_change
|
||||
@@ -1991,7 +1990,6 @@ change_to_teams() {
|
||||
else
|
||||
systemctl stop wireproxy; sleep 2
|
||||
teams_change
|
||||
|
||||
sed -i "s#PrivateKey.*#PrivateKey = $PRIVATEKEY#g" /etc/wireguard/proxy.conf
|
||||
[ -e /etc/wireguard/info-temp.log ] && mv -f /etc/wireguard/info-temp.log /etc/wireguard/info.log
|
||||
wireproxy_onoff
|
||||
@@ -2006,10 +2004,10 @@ update() {
|
||||
[ ! -e /etc/wireguard/wgcf-account.toml ] && error " $(text 59) "
|
||||
[ ! -e /etc/wireguard/wgcf.conf ] && error " $(text 60) "
|
||||
|
||||
CHANGE_DO0() { [ "$OPTION" != a ] && unset CHOOSE_TYPE && menu || exit; }
|
||||
CHANGE_DO1() { change_to_free; }
|
||||
CHANGE_DO2() { change_to_plus; }
|
||||
CHANGE_DO3() { change_to_teams; }
|
||||
CHANGE_DO[0]() { [ "$OPTION" != a ] && unset CHOOSE_TYPE && menu || exit; }
|
||||
CHANGE_DO[1]() { change_to_free; }
|
||||
CHANGE_DO[2]() { change_to_plus; }
|
||||
CHANGE_DO[3]() { change_to_teams; }
|
||||
|
||||
# 判断现 WGCF 账户类型: free, plus, teams,如果是 plus,查 WARP+ 余额流量
|
||||
[ -z "$ACCOUNT_TYPE" ] && ACCOUNT_TYPE=free && CHANGE_TYPE=$(text 174) &&
|
||||
@@ -2024,7 +2022,7 @@ update() {
|
||||
|
||||
# 输入必须是数字且少于等于3
|
||||
if [[ "$CHOOSE_TYPE" = [0-3] ]]; then
|
||||
CHANGE_DO$CHOOSE_TYPE
|
||||
CHANGE_DO[$CHOOSE_TYPE]
|
||||
else
|
||||
warning " $(text 51) [0-3] " && unset CHOOSE_TYPE && sleep 1 && update
|
||||
fi
|
||||
@@ -2045,9 +2043,9 @@ update() {
|
||||
[ "$ARCHITECTURE" = arm64 ] && error " $(text 101) "
|
||||
[ -n "$URL" ] && unset CHOOSE_TYPE && warning "\n $(text 9) "
|
||||
|
||||
CHANGE_DO0() { menu; }
|
||||
CHANGE_DO1() { change_to_free; }
|
||||
CHANGE_DO2() { change_to_plus; }
|
||||
CHANGE_DO[0]() { menu; }
|
||||
CHANGE_DO[1]() { change_to_free; }
|
||||
CHANGE_DO[2]() { change_to_plus; }
|
||||
|
||||
# 判断现 WGCF 账户类型: free, plus,如果是 plus,查 WARP+ 余额流量
|
||||
ACCOUNT_TYPE=free && CHANGE_TYPE=$(text 177)
|
||||
@@ -2062,7 +2060,7 @@ update() {
|
||||
|
||||
# 输入必须是数字且少于等于2
|
||||
if [[ "$CHOOSE_TYPE" = [0-2] ]]; then
|
||||
CHANGE_DO$CHOOSE_TYPE
|
||||
CHANGE_DO[$CHOOSE_TYPE]
|
||||
else
|
||||
warning " $(text 51) [0-2] " && unset CHOOSE_TYPE && sleep 1 && update
|
||||
fi
|
||||
@@ -2098,36 +2096,59 @@ update() {
|
||||
# 判断当前 WARP 网络接口及 Client 的运行状态,并对应的给菜单和动作赋值
|
||||
menu_setting() {
|
||||
if [[ "$CLIENT" -gt 1 || "$WIREPROXY" -gt 0 ]]; then
|
||||
[ "$CLIENT" -lt 3 ] && OPTION1="$(text 88)" || OPTION1="$(text 89)"
|
||||
[ "$WIREPROXY" -lt 2 ] && OPTION2="$(text 163)" || OPTION2="$(text 164)"
|
||||
OPTION3="$(text 143)"; OPTION4="$(text 78)"
|
||||
[ "$CLIENT" -lt 3 ] && MENU_OPTION[1]="1. $(text 88)" || MENU_OPTION[1]="1. $(text 89)"
|
||||
[ "$WIREPROXY" -lt 2 ] && MENU_OPTION[2]="2. $(text 163)" || MENU_OPTION[2]="2. $(text 164)"
|
||||
MENU_OPTION[3]="3. $(text 143)"
|
||||
MENU_OPTION[4]="4. $(text 78)"
|
||||
|
||||
ACTION1() { proxy_onoff; }; ACTION2() { wireproxy_onoff; }; ACTION3() { change_port; }; ACTION4() { update; };
|
||||
ACTION[1]() { proxy_onoff; }
|
||||
ACTION[2]() { wireproxy_onoff; }
|
||||
ACTION[3]() { change_port; }
|
||||
ACTION[4]() { update; }
|
||||
|
||||
else
|
||||
check_stack
|
||||
case "$m" in
|
||||
[0-2] ) OPTION1="$(text_eval 66)"; OPTION2="$(text_eval 67)"; OPTION3="$(text_eval 68)"
|
||||
ACTION1() { CONF=${CONF1[n]}; install; }; ACTION2() { CONF=${CONF2[n]}; install; }; ACTION3() { CONF=${CONF3[n]}; install; } ;;
|
||||
|
||||
* ) OPTION1="$(text_eval 141)"; OPTION2="$(text_eval 142)"; OPTION3="$(text 78)"
|
||||
ACTION1() { stack_switch; }; ACTION2() { stack_switch; }; ACTION3() { update; } ;;
|
||||
[0-2] ) MENU_OPTION[1]="1. $(text_eval 66)"
|
||||
MENU_OPTION[2]="2. $(text_eval 67)"
|
||||
MENU_OPTION[3]="3. $(text_eval 68)"
|
||||
ACTION[1]() { CONF=${CONF1[n]}; install; }
|
||||
ACTION[2]() { CONF=${CONF2[n]}; install; }
|
||||
ACTION[3]() { CONF=${CONF3[n]}; install; }
|
||||
;;
|
||||
|
||||
* ) MENU_OPTION[1]="1. $(text_eval 141)"
|
||||
MENU_OPTION[2]="2. $(text_eval 142)"
|
||||
MENU_OPTION[3]="3. $(text 78)"
|
||||
ACTION[1]() { stack_switch; }
|
||||
ACTION[2]() { stack_switch; }
|
||||
ACTION[3]() { update; }
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
[ -e /etc/dnsmasq.d/warp.conf ] && IPTABLE_INSTALLED="$(text 92)"
|
||||
[ -n "$(wg 2>/dev/null)" ] && OPTION4="$(text 77)" || OPTION4="$(text 71)"
|
||||
[ -n "$(wg 2>/dev/null)" ] && MENU_OPTION[4]="4. $(text 77)" || MENU_OPTION[4]="4. $(text 71)"
|
||||
|
||||
OPTION5="$CLIENT_INSTALLED$AMD64_ONLY$(text 82)"; OPTION6="$(text 123)"; OPTION7="$(text 72)"; OPTION8="$(text 74)"; OPTION9="$(text 73)"; OPTION10="$(text 75)";
|
||||
OPTION11="$(text 80)"; OPTION12="$IPTABLE_INSTALLED$(text 138)"; OPTION13="$WIREPROXY_INSTALLED$(text 148)"; OPTION14="$CLIENT_INSTALLED$AMD64_ONLY$(text 168)"; OPTION0="$(text 76)"
|
||||
MENU_OPTION[5]="5. $CLIENT_INSTALLED$AMD64_ONLY$(text 82)"
|
||||
MENU_OPTION[6]="6. $(text 123)"
|
||||
MENU_OPTION[7]="7. $(text 72)"
|
||||
MENU_OPTION[8]="8. $(text 74)"
|
||||
MENU_OPTION[9]="9. $(text 73)"
|
||||
MENU_OPTION[10]="10. $(text 75)"
|
||||
MENU_OPTION[11]="11. $(text 80)"
|
||||
MENU_OPTION[12]="12. $IPTABLE_INSTALLED$(text 138)"
|
||||
MENU_OPTION[13]="13. $WIREPROXY_INSTALLED$(text 148)"
|
||||
MENU_OPTION[14]="14. $CLIENT_INSTALLED$AMD64_ONLY$(text 168)"
|
||||
MENU_OPTION[0]="0. $(text 76)"
|
||||
|
||||
ACTION4() { OPTION=o; onoff; }
|
||||
ACTION5() { proxy; }; ACTION6() { change_ip; }; ACTION7() { uninstall; }; ACTION8() { plus; }; ACTION9() { bbrInstall; }; ACTION10() { ver; };
|
||||
ACTION11() { bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/warp_unlock/main/unlock.sh) -$L; };
|
||||
ACTION12() { ANEMONE=1 ;install; };
|
||||
ACTION13() { OCTEEP=1; install; };
|
||||
ACTION14() { LUBAN=1; proxy; };
|
||||
ACTION0() { exit; }
|
||||
ACTION[4]() { OPTION=o; onoff; }
|
||||
ACTION[5]() { proxy; }; ACTION[6]() { change_ip; }; ACTION[7]() { uninstall; }; ACTION[8]() { plus; }; ACTION[9]() { bbrInstall; }; ACTION[10]() { ver; };
|
||||
ACTION[11]() { bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/warp_unlock/main/unlock.sh) -$L; };
|
||||
ACTION[12]() { ANEMONE=1 ;install; };
|
||||
ACTION[13]() { OCTEEP=1; install; };
|
||||
ACTION[14]() { LUBAN=1; proxy; };
|
||||
ACTION[0]() { exit; }
|
||||
|
||||
[ -e /etc/wireguard/info.log ] && TYPE=' Teams' && grep -sq 'Device name' /etc/wireguard/info.log 2>/dev/null && check_quota && TYPE='+' && PLUSINFO="$(text 25): $(grep 'Device name' /etc/wireguard/info.log 2>/dev/null | awk '{ print $NF }')\t $(text 63): $QUOTA"
|
||||
}
|
||||
@@ -2137,7 +2158,7 @@ menu() {
|
||||
clear
|
||||
hint " $(text 16) "
|
||||
echo -e "======================================================================================================================\n"
|
||||
info " $(text 17):$VERSION\t $(text 18):$(text 1)\n $(text 19):\n\t $(text 20):$SYS\n\t $(text 21):$(uname -r)\n\t $(text 22):$ARCHITECTURE\n\t $(text 23):$VIRT "
|
||||
info " $(text 17):$VERSION\n $(text 18):$(text 1)\n $(text 19):\n\t $(text 20):$SYS\n\t $(text 21):$(uname -r)\n\t $(text 22):$ARCHITECTURE\n\t $(text 23):$VIRT "
|
||||
info "\t IPv4: $WAN4 $WARPSTATUS4 $COUNTRY4 $ASNORG4 "
|
||||
info "\t IPv6: $WAN6 $WARPSTATUS6 $COUNTRY6 $ASNORG6 "
|
||||
case "$TRACE4$TRACE6" in
|
||||
@@ -2158,15 +2179,15 @@ menu() {
|
||||
esac
|
||||
grep -q '+' <<< $AC$AC2 && info "\t $(text 63): $QUOTA "
|
||||
echo -e "\n======================================================================================================================\n"
|
||||
hint " 1. $OPTION1\n 2. $OPTION2\n 3. $OPTION3\n 4. $OPTION4\n 5. $OPTION5\n 6. $OPTION6\n 7. $OPTION7\n 8. $OPTION8\n 9. $OPTION9 \n 10. $OPTION10\n 11. $OPTION11\n 12. $OPTION12\n 13. $OPTION13\n 14. $OPTION14\n 0. $OPTION0\n "
|
||||
reading " $(text 50) " CHOOSE1
|
||||
|
||||
for ((h=1; h<${#MENU_OPTION[*]}; h++)); do hint " ${MENU_OPTION[h]} "; done
|
||||
hint " ${MENU_OPTION[0]} "
|
||||
reading "\n $(text 50) " MENU_CHOOSE
|
||||
|
||||
# 输入必须是数字且少于等于最大可选项
|
||||
MAX_CHOOSE=14
|
||||
if grep -qE "^[0-9]{1,2}$" <<< $CHOOSE1 && [ "$CHOOSE1" -le "$MAX_CHOOSE" ]; then
|
||||
ACTION$CHOOSE1
|
||||
if [[ $MENU_CHOOSE =~ ^[0-9]{1,2}$ ]] && (( $MENU_CHOOSE >= 0 && $MENU_CHOOSE < ${#MENU_OPTION[*]} )); then
|
||||
ACTION[$MENU_CHOOSE]
|
||||
else
|
||||
warning " $(text 51) [0-$MAX_CHOOSE] " && sleep 1 && menu
|
||||
warning " $(text 51) [0-$((${#MENU_OPTION[*]}-1))] " && sleep 1 && menu
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
+93
-89
@@ -12,6 +12,8 @@ IP_API=https://api.ip.sb/geoip; ISP=isp
|
||||
# 判断 Teams token 最少字符数
|
||||
TOKEN_LENGTH=800
|
||||
|
||||
trap "rm -f /tmp/warp-go*; exit 1" INT
|
||||
|
||||
E[0]="Language:\n 1.English (default) \n 2.简体中文"
|
||||
C[0]="${E[0]}"
|
||||
E[1]="Support OpenWrt sysgtem."
|
||||
@@ -78,8 +80,8 @@ E[31]="Switch \${WARP_BEFORE[m]} to \${WARP_AFTER1[m]}"
|
||||
C[31]="\${WARP_BEFORE[m]} 转为 \${WARP_AFTER1[m]}"
|
||||
E[32]="Switch \${WARP_BEFORE[m]} to \${WARP_AFTER2[m]}"
|
||||
C[32]="\${WARP_BEFORE[m]} 转为 \${WARP_AFTER2[m]}"
|
||||
E[33]="WARP network interface can be switched as follows:\\\n 1. \$OPTION1\\\n 2. \$OPTION2\\\n 0. Exit script"
|
||||
C[33]="WARP 网络接口可以切换为以下方式:\\\n 1. \$OPTION1\\\n 2. \$OPTION2\\\n 0. 退出脚本"
|
||||
E[33]="WARP network interface can be switched as follows:\\\n 1. \${OPTION[1]}\\\n 2. \${OPTION[2]}\\\n 0. Exit script"
|
||||
C[33]="WARP 网络接口可以切换为以下方式:\\\n 1. \${OPTION[1]}\\\n 2. \${OPTION[2]}\\\n 0. 退出脚本"
|
||||
E[34]="Please enter the correct number"
|
||||
C[34]="请输入正确数字"
|
||||
E[35]="Checking VPS infomation..."
|
||||
@@ -127,7 +129,7 @@ C[55]="请选择优先级别:\n 1. IPv4\n 2. IPv6\n 3. 使用 VPS 初始设
|
||||
E[56]="Download warp-go zip file unsuccessful. Script exits. Feedback: [https://github.com/fscarmen/warp/issues]"
|
||||
C[56]="下载 warp-go 压缩文件不成功,脚本退出,问题反馈: [https://github.com/fscarmen/warp/issues]"
|
||||
E[57]="Warp-go file does not exist, script exits. Feedback: [https://github.com/fscarmen/warp/issues]"
|
||||
C[57]="warp-go 文件不存在,脚本退出,问题反馈: [https://github.com/fscarmen/warp/issues]"
|
||||
C[57]="Warp-go 文件不存在,脚本退出,问题反馈: [https://github.com/fscarmen/warp/issues]"
|
||||
E[58]="Maximum \${j} attempts to registe WARP\${k} account..."
|
||||
C[58]="注册 WARP\${k} 账户中, 最大尝试\${j}次……"
|
||||
E[59]="Try \${i}"
|
||||
@@ -221,7 +223,7 @@ C[102]="OpenWrt 系统的 WAN 接口的网络传输协议必须为 [静态地址
|
||||
|
||||
# 自定义字体彩色,read 函数,友道翻译函数
|
||||
warning() { echo -e "\033[31m\033[01m$*\033[0m"; }
|
||||
error() { echo -e "\033[31m\033[01m$*\033[0m" && exit 1; }
|
||||
error() { echo -e "\033[31m\033[01m$*\033[0m"; rm -f /tmp/warp-go*; exit 1; }
|
||||
info() { echo -e "\033[32m\033[01m$*\033[0m"; }
|
||||
hint() { echo -e "\033[33m\033[01m$*\033[0m"; }
|
||||
reading() { read -rp "$(info "$1")" "$2"; }
|
||||
@@ -255,15 +257,6 @@ check_root_virt() {
|
||||
[ -z "$VIRT" ] && VIRT=$(hostnamectl 2>/dev/null | tr 'A-Z' 'a-z' | grep virtualization | sed "s/.*://g")
|
||||
}
|
||||
|
||||
# 检测 warp-go 的安装状态。 0-未安装; 1-已安装未启动; 2-已安装启动中; 3-脚本安装中
|
||||
check_install() {
|
||||
if [ -e /opt/warp-go/warp.conf ]; then
|
||||
[[ "$(ip a)" =~ ": WARP:" ]] && STATUS=2 || STATUS=1
|
||||
else
|
||||
STATUS=0
|
||||
fi
|
||||
}
|
||||
|
||||
# 多方式判断操作系统,试到有值为止。只支持 Debian 9/10/11、Ubuntu 18.04/20.04/22.04 或 CentOS 7/8 ,如非上述操作系统,退出脚本
|
||||
check_operating_system() {
|
||||
CMD=( "$(grep -i pretty_name /etc/os-release 2>/dev/null | cut -d \" -f2)"
|
||||
@@ -306,11 +299,28 @@ check_operating_system() {
|
||||
[[ "$(echo "$SYS" | sed "s/[^0-9.]//g" | cut -d. -f1)" -lt "${MAJOR[int]}" ]] && error " $(text_eval 7) "
|
||||
}
|
||||
|
||||
check_arch() {
|
||||
# 判断处理器架构
|
||||
case $(uname -m) in
|
||||
aarch64 ) ARCHITECTURE=arm64 ;;
|
||||
x86) ARCHITECTURE=386 ;;
|
||||
x86_64 ) CPU_FLAGS=$(cat /proc/cpuinfo | grep flags | head -n 1 | cut -d: -f2)
|
||||
case "$CPU_FLAGS" in
|
||||
*avx512* ) ARCHITECTURE=amd64v4 ;;
|
||||
*avx2* ) ARCHITECTURE=amd64v3 ;;
|
||||
*sse3* ) ARCHITECTURE=amd64v2 ;;
|
||||
* ) ARCHITECTURE=amd64 ;;
|
||||
esac ;;
|
||||
s390x ) ARCHITECTURE=s390x ;;
|
||||
* ) error " $(text_eval 37) " ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 安装系统依赖及定义 ping 指令
|
||||
check_dependencies() {
|
||||
# 对于 Alpine 和 OpenWrt 系统,升级库并重新安装依赖
|
||||
if echo "$SYSTEM" | grep -qE "Alpine|OpenWrt"; then
|
||||
[ ! -e /opt/warp-go/warp-go ] && ( ${PACKAGE_UPDATE[int]}; ${PACKAGE_INSTALL[int]} curl wget grep bash )
|
||||
[ ! -e /opt/warp-go/warp-go ] && ( ${PACKAGE_UPDATE[int]}; ${PACKAGE_INSTALL[int]} curl wget grep bash tar )
|
||||
else
|
||||
DEPS_CHECK=("ping" "wget" "curl" "systemctl" "ip")
|
||||
DEPS_INSTALL=(" iputils-ping" " wget" " curl" " systemctl" " iproute2")
|
||||
@@ -326,6 +336,24 @@ check_dependencies() {
|
||||
PING6='ping -6' && [ $(type -p ping6) ] && PING6='ping6'
|
||||
}
|
||||
|
||||
# 检测 warp-go 的安装状态。 0-未安装; 1-已安装未启动; 2-已安装启动中; 3-脚本安装中
|
||||
check_install() {
|
||||
if [ -e /opt/warp-go/warp.conf ]; then
|
||||
[[ "$(ip a)" =~ ": WARP:" ]] && STATUS=2 || STATUS=1
|
||||
else
|
||||
STATUS=0
|
||||
{
|
||||
# 预下载 warp-go,使用 githubusercontents 的 CDN,以更好的支持双栈。并添加执行权限,如因 gitlab 接口问题未能获取,默认 v1.0.6
|
||||
latest=$(wget -qO- -T1 -t1 https://gitlab.com/api/v4/projects/ProjectWARP%2Fwarp-go/releases | awk -F '"' '{for (i=0; i<NF; i++) if ($i=="tag_name") {print $(i+2); exit}}' | sed "s/v//")
|
||||
latest=${latest:-'1.0.6'}
|
||||
wget --no-check-certificate -qO /tmp/warp-go.tar.gz https://raw.githubusercontents.com/fscarmen/warp/main/warp-go/warp-go_"$latest"_linux_"$ARCHITECTURE".tar.gz
|
||||
tar xzf /tmp/warp-go.tar.gz -C /tmp/ warp-go
|
||||
chmod +x /tmp/warp-go
|
||||
rm -f /tmp/warp-go.tar.gz
|
||||
}&
|
||||
fi
|
||||
}
|
||||
|
||||
# 检测 IPv4 IPv6 信息,WARP Ineterface 开启,普通还是 Plus账户 和 IP 信息
|
||||
ip4_info() {
|
||||
unset IP4 COUNTRY4 ASNORG4 TRACE4 PLUS4 WARPSTATUS4
|
||||
@@ -490,7 +518,7 @@ uninstall() {
|
||||
systemctl disable --now warp-go >/dev/null 2>&1
|
||||
kill -15 $(pgrep warp-go) >/dev/null 2>&1
|
||||
/opt/warp-go/warp-go --config=/opt/warp-go/warp.conf --remove >/dev/null 2>&1
|
||||
rm -rf /opt/warp-go /lib/systemd/system/warp-go.service /usr/bin/warp-go
|
||||
rm -rf /opt/warp-go /lib/systemd/system/warp-go.service /usr/bin/warp-go /tmp/warp-go*
|
||||
[ -e /opt/warp-go/tun.sh ] && rm -f /opt/warp-go/tun.sh && sed -i '/tun.sh/d' /etc/crontab
|
||||
|
||||
# 显示卸载结果
|
||||
@@ -631,7 +659,7 @@ stack_switch() {
|
||||
[[ "$T4@$T6@$SWITCHCHOOSE" =~ '1@0@4'|'0@1@6'|'1@1@D' ]] && error " $(text 30) " || TO="$T4$T6$SWITCHCHOOSE"
|
||||
fi
|
||||
else
|
||||
OPTION1="$(text_eval 31)"; OPTION2="$(text_eval 32)"
|
||||
STACK_OPTION[1]="$(text_eval 31)"; STACK_OPTION[2]="$(text_eval 32)"
|
||||
hint "\n $(text_eval 33) \n" && reading " $(text 4) " SWITCHTO
|
||||
case "$SWITCHTO" in
|
||||
1 ) TO=${TO1[m]};;
|
||||
@@ -721,21 +749,6 @@ EOF
|
||||
[[ "$L" = C && -n "$COUNTRY4" ]] && COUNTRY4=$(translate "$COUNTRY4")
|
||||
[[ "$L" = C && -n "$COUNTRY6" ]] && COUNTRY6=$(translate "$COUNTRY6")
|
||||
|
||||
# 判断处理器架构
|
||||
case $(uname -m) in
|
||||
aarch64 ) ARCHITECTURE=arm64 ;;
|
||||
x86) ARCHITECTURE=386 ;;
|
||||
x86_64 ) CPU_FLAGS=$(cat /proc/cpuinfo | grep flags | head -n 1 | cut -d: -f2)
|
||||
case "$CPU_FLAGS" in
|
||||
*avx512* ) ARCHITECTURE=amd64v4 ;;
|
||||
*avx2* ) ARCHITECTURE=amd64v3 ;;
|
||||
*sse3* ) ARCHITECTURE=amd64v2 ;;
|
||||
* ) ARCHITECTURE=amd64 ;;
|
||||
esac ;;
|
||||
s390x ) ARCHITECTURE=s390x ;;
|
||||
* ) error " $(text_eval 37) " ;;
|
||||
esac
|
||||
|
||||
# 判断当前 IPv4 与 IPv6 ,IP归属
|
||||
[ "$STATUS" = 2 ] && grep -qE "^AllowedIPs[ ]+=.*0\.\0\/0|#AllowedIPs" /opt/warp-go/warp.conf && INTERFACE='--interface WARP'
|
||||
[ "$IPV4" = 1 ] && ip4_info
|
||||
@@ -899,20 +912,11 @@ install() {
|
||||
start=$(date +%s)
|
||||
|
||||
# 注册 WARP 账户 (将生成 warp 文件保存账户信息)
|
||||
# 判断 warp-go 的最新版本,如因 gitlab 接口问题未能获取,默认 v1.0.6
|
||||
{
|
||||
latest=$(wget -qO- -T1 -t1 https://gitlab.com/api/v4/projects/ProjectWARP%2Fwarp-go/releases | awk -F '"' '{for (i=0; i<NF; i++) if ($i=="tag_name") {print $(i+2); exit}}' | sed "s/v//")
|
||||
latest=${latest:-'1.0.6'}
|
||||
|
||||
# 安装 warp-go,尽量下载官方的最新版本,如官方 warp-go 下载不成功,将使用 githubusercontents 的 CDN,以更好的支持双栈。并添加执行权限
|
||||
{
|
||||
mkdir -p /opt/warp-go/ >/dev/null 2>&1
|
||||
wget -T20 -t1 --no-check-certificate $CDN -O /opt/warp-go/warp-go_"$latest"_linux_"$ARCHITECTURE".tar.gz https://gitlab.com/ProjectWARP/warp-go/-/releases/v"$latest"/downloads/warp-go_"$latest"_linux_"$ARCHITECTURE".tar.gz ||
|
||||
wget -T20 -t2 --no-check-certificate $CDN -O /opt/warp-go/warp-go_"$latest"_linux_"$ARCHITECTURE".tar.gz https://raw.githubusercontents.com/fscarmen/warp/main/warp-go/warp-go_"$latest"_linux_"$ARCHITECTURE".tar.gz
|
||||
[ ! -e /opt/warp-go/warp-go_"$latest"_linux_"$ARCHITECTURE".tar.gz ] && error "$(text 56)"
|
||||
[ $(type -p tar) ] || ${PACKAGE_INSTALL[int]} tar 2>/dev/null || ( ${PACKAGE_UPDATE[int]}; ${PACKAGE_INSTALL[int]} tar 2>/dev/null )
|
||||
tar xzf /opt/warp-go/warp-go_"$latest"_linux_"$ARCHITECTURE".tar.gz -C /opt/warp-go/ warp-go
|
||||
[ ! -e /opt/warp-go/warp-go ] && error "$(text 57)" || chmod +x /opt/warp-go/warp-go
|
||||
rm -f /opt/warp-go/warp-go_"$latest"_linux_"$ARCHITECTURE".tar.gz
|
||||
wait
|
||||
[ ! -e /tmp/warp-go ] && error "$(text 56)" || mv -f /tmp/warp-go /opt/warp-go/
|
||||
[ ! -e /opt/warp-go/warp-go ] && error "$(text 57)"
|
||||
|
||||
# 注册用户自定义 token 的 Teams 账户
|
||||
if [ "$LICENSETYPE" = 2 ]; then
|
||||
@@ -1102,48 +1106,48 @@ check_quota() {
|
||||
# 判断当前 WARP 网络接口及 Client 的运行状态,并对应的给菜单和动作赋值
|
||||
menu_setting() {
|
||||
if [ "$STATUS" = 0 ]; then
|
||||
OPTION1="$(text_eval 64)"
|
||||
OPTION2="$(text_eval 65)"
|
||||
OPTION3="$(text_eval 66)"
|
||||
OPTION4="$(text_eval 67)"
|
||||
OPTION5="$(text_eval 68)"
|
||||
OPTION6="$(text_eval 69)"
|
||||
OPTION7="$(text_eval 70)"
|
||||
OPTION8="$(text_eval 71)"
|
||||
ACTION1() { CONF=${CONF1[n]}; PRIORITY=1; install; }
|
||||
ACTION2() { CONF=${CONF1[n]}; PRIORITY=2; install; }
|
||||
ACTION3() { CONF=${CONF2[n]}; PRIORITY=1; install; }
|
||||
ACTION4() { CONF=${CONF2[n]}; PRIORITY=2; install; }
|
||||
ACTION5() { CONF=${CONF3[n]}; PRIORITY=1; install; }
|
||||
ACTION6() { CONF=${CONF3[n]}; PRIORITY=2; install; }
|
||||
ACTION7() { CONF=${CONF3[n]}; PRIORITY=1; WARP_STACK=4; install; }
|
||||
ACTION8() { CONF=${CONF3[n]}; PRIORITY=2; WARP_STACK=4; install; }
|
||||
MENU_OPTION[1]="$(text_eval 64)"
|
||||
MENU_OPTION[2]="$(text_eval 65)"
|
||||
MENU_OPTION[3]="$(text_eval 66)"
|
||||
MENU_OPTION[4]="$(text_eval 67)"
|
||||
MENU_OPTION[5]="$(text_eval 68)"
|
||||
MENU_OPTION[6]="$(text_eval 69)"
|
||||
MENU_OPTION[7]="$(text_eval 70)"
|
||||
MENU_OPTION[8]="$(text_eval 71)"
|
||||
ACTION[1]() { CONF=${CONF1[n]}; PRIORITY=1; install; }
|
||||
ACTION[2]() { CONF=${CONF1[n]}; PRIORITY=2; install; }
|
||||
ACTION[3]() { CONF=${CONF2[n]}; PRIORITY=1; install; }
|
||||
ACTION[4]() { CONF=${CONF2[n]}; PRIORITY=2; install; }
|
||||
ACTION[5]() { CONF=${CONF3[n]}; PRIORITY=1; install; }
|
||||
ACTION[6]() { CONF=${CONF3[n]}; PRIORITY=2; install; }
|
||||
ACTION[7]() { CONF=${CONF3[n]}; PRIORITY=1; WARP_STACK=4; install; }
|
||||
ACTION[8]() { CONF=${CONF3[n]}; PRIORITY=2; WARP_STACK=4; install; }
|
||||
else
|
||||
[ "$NON_GLOBAL" = 1 ] || GLOBAL_AFTER="$(text 24)"
|
||||
[ "$STATUS" = 2 ] && ON_OFF="$(text 72)" || ON_OFF="$(text 73)"
|
||||
OPTION1="$(text_eval 74)"
|
||||
OPTION2="$(text_eval 75)"
|
||||
OPTION3="$(text_eval 76)"
|
||||
OPTION4="$ON_OFF"
|
||||
OPTION5="$(text_eval 77)"
|
||||
MENU_OPTION[1]="$(text_eval 74)"
|
||||
MENU_OPTION[2]="$(text_eval 75)"
|
||||
MENU_OPTION[3]="$(text_eval 76)"
|
||||
MENU_OPTION[4]="$ON_OFF"
|
||||
MENU_OPTION[5]="$(text_eval 77)"
|
||||
|
||||
OPTION6="$(text 78)"
|
||||
OPTION7="$(text 79)"
|
||||
OPTION8="$(text 80)"
|
||||
ACTION1() { stack_switch; }
|
||||
ACTION2() { stack_switch; }
|
||||
ACTION3() { global_switch; }
|
||||
ACTION4() { OPTION=o; onoff; }
|
||||
ACTION5() { update; }
|
||||
ACTION6() { change_ip; }
|
||||
ACTION7() { export_file; }
|
||||
ACTION8() { uninstall; }
|
||||
MENU_OPTION[6]="$(text 78)"
|
||||
MENU_OPTION[7]="$(text 79)"
|
||||
MENU_OPTION[8]="$(text 80)"
|
||||
ACTION[1]() { stack_switch; }
|
||||
ACTION[2]() { stack_switch; }
|
||||
ACTION[3]() { global_switch; }
|
||||
ACTION[4]() { OPTION=o; onoff; }
|
||||
ACTION[5]() { update; }
|
||||
ACTION[6]() { change_ip; }
|
||||
ACTION[7]() { export_file; }
|
||||
ACTION[8]() { uninstall; }
|
||||
fi
|
||||
|
||||
OPTION0="$(text 81)"
|
||||
OPTION9="$(text 82) (warp-go v)"
|
||||
ACTION0() { exit; }
|
||||
ACTION9() { ver; }
|
||||
MENU_OPTION[0]="$(text 81)"
|
||||
MENU_OPTION[9]="$(text 82) (warp-go v)"
|
||||
ACTION[0]() { rm -f /tmp/warp-go*; exit; }
|
||||
ACTION[9]() { ver; }
|
||||
|
||||
[ -e /opt/warp-go/warp.conf ] && TYPE=$(grep "Type" /opt/warp-go/warp.conf | cut -d= -f2 | sed "s# ##g") &&
|
||||
[ "$TYPE" = plus ] && check_quota && PLUSINFO="$(text 83): $(cat /opt/warp-go/Device_Name)\t $(text 26): $QUOTA"
|
||||
@@ -1154,7 +1158,7 @@ menu() {
|
||||
clear
|
||||
hint " $(text 3) "
|
||||
echo -e "======================================================================================================================\n"
|
||||
info " $(text 84): $VERSION\t $(text 85): $(text 1)\n $(text 86):\n\t $(text 87): $SYS\n\t $(text 88): $(uname -r)\n\t $(text 89): $ARCHITECTURE\n\t $(text 90): $VIRT "
|
||||
info " $(text 84): $VERSION\n $(text 85): $(text 1)\n $(text 86):\n\t $(text 87): $SYS\n\t $(text 88): $(uname -r)\n\t $(text 89): $ARCHITECTURE\n\t $(text 90): $VIRT "
|
||||
info "\t IPv4: $WAN4 $WARPSTATUS4 $COUNTRY4 $ASNORG4 "
|
||||
info "\t IPv6: $WAN6 $WARPSTATUS6 $COUNTRY6 $ASNORG6 "
|
||||
if [ "$STATUS" = 2 ]; then
|
||||
@@ -1166,15 +1170,14 @@ menu() {
|
||||
fi
|
||||
[ -n "$PLUSINFO" ] && info "\t $PLUSINFO "
|
||||
echo -e "\n======================================================================================================================\n"
|
||||
info " 1. $OPTION1\n 2. $OPTION2\n 3. $OPTION3\n 4. $OPTION4\n 5. $OPTION5\n 6. $OPTION6\n 7. $OPTION7\n 8. $OPTION8\n 9. $OPTION9 \n 0. $OPTION0\n "
|
||||
reading " $(text 4) " CHOOSE
|
||||
for ((d=1; d<=${#MENU_OPTION[*]}; d++)); do [ "$d" = "${#MENU_OPTION[*]}" ] && d=0 && hint " $d. ${MENU_OPTION[d]} " && break || hint " $d. ${MENU_OPTION[d]} "; done
|
||||
reading "\n $(text 4) " CHOOSE
|
||||
|
||||
# 输入必须是数字且少于等于最大可选项
|
||||
MAX_CHOOSE=9
|
||||
if grep -qE "^[0-9]$" <<< "$CHOOSE" && [ "$CHOOSE" -le "$MAX_CHOOSE" ]; then
|
||||
ACTION$CHOOSE
|
||||
if [[ "$CHOOSE" =~ ^[0-9]+$ ]] && (( $CHOOSE >= 0 && $CHOOSE < ${#MENU_OPTION[*]} )); then
|
||||
ACTION[$CHOOSE]
|
||||
else
|
||||
warning " $(text 34) [0-$MAX_CHOOSE] " && sleep 1 && menu
|
||||
warning " $(text 34) [0-$((${#MENU_OPTION[*]}-1))] " && sleep 1 && menu
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -1197,8 +1200,10 @@ NAME="$3"
|
||||
# 主程序运行 1/3
|
||||
statistics_of_run-times
|
||||
select_language
|
||||
check_install
|
||||
check_operating_system
|
||||
check_arch
|
||||
check_dependencies
|
||||
check_install
|
||||
|
||||
# 设置部分后缀 1/3
|
||||
case "$OPTION" in
|
||||
@@ -1220,7 +1225,6 @@ case "$OPTION" in
|
||||
esac
|
||||
|
||||
# 主程序运行 3/3
|
||||
check_dependencies
|
||||
check_system_info
|
||||
check_global
|
||||
check_stack
|
||||
|
||||
Reference in New Issue
Block a user