forked from wyx2685/V2bX-script
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall.sh
271 lines (248 loc) · 9.43 KB
/
install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#!/bin/bash
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
plain='\033[0m'
cur_dir=$(pwd)
# check root
[[ $EUID -ne 0 ]] && echo -e "${red}Incorrect:${plain} Use the root user to run this script!\n" && exit 1
# check os
if [[ -f /etc/redhat-release ]]; then
release="centos"
elif cat /etc/issue | grep -Eqi "alpine"; then
release="alpine"
elif cat /etc/issue | grep -Eqi "debian"; then
release="debian"
elif cat /etc/issue | grep -Eqi "ubuntu"; then
release="ubuntu"
elif cat /etc/issue | grep -Eqi "centos|red hat|redhat|rocky|alma|oracle linux"; then
release="centos"
elif cat /proc/version | grep -Eqi "debian"; then
release="debian"
elif cat /proc/version | grep -Eqi "ubuntu"; then
release="ubuntu"
elif cat /proc/version | grep -Eqi "centos|red hat|redhat|rocky|alma|oracle linux"; then
release="centos"
elif cat /proc/version | grep -Eqi "arch"; then
release="arch"
else
echo -e "${red}System version not detected, please contact script author!${plain}\n" && exit 1
fi
arch=$(uname -m)
if [[ $arch == "x86_64" || $arch == "x64" || $arch == "amd64" ]]; then
arch="64"
elif [[ $arch == "aarch64" || $arch == "arm64" ]]; then
arch="arm64-v8a"
elif [[ $arch == "s390x" ]]; then
arch="s390x"
else
arch="64"
echo -e "${red}Failure to detect architecture, use default architecture: ${arch}${plain}"
fi
echo "架构: ${arch}"
if [ "$(getconf WORD_BIT)" != '32' ] && [ "$(getconf LONG_BIT)" != '64' ] ; then
echo "This software does not support 32-bit system (x86), please use 64-bit system (x86_64), if the detection is wrong, please contact the author!"
exit 2
fi
# os version
if [[ -f /etc/os-release ]]; then
os_version=$(awk -F'[= ."]' '/VERSION_ID/{print $3}' /etc/os-release)
fi
if [[ -z "$os_version" && -f /etc/lsb-release ]]; then
os_version=$(awk -F'[= ."]+' '/DISTRIB_RELEASE/{print $2}' /etc/lsb-release)
fi
if [[ x"${release}" == x"centos" ]]; then
if [[ ${os_version} -le 6 ]]; then
echo -e "${red}Please use CentOS 7 or higher.!${plain}\n" && exit 1
fi
if [[ ${os_version} -eq 7 ]]; then
echo -e "${red}Note: CentOS 7 cannot use the hysteria1/2 protocol!${plain}\n"
fi
elif [[ x"${release}" == x"ubuntu" ]]; then
if [[ ${os_version} -lt 16 ]]; then
echo -e "${red}Please use Ubuntu 16 or later!${plain}\n" && exit 1
fi
elif [[ x"${release}" == x"debian" ]]; then
if [[ ${os_version} -lt 8 ]]; then
echo -e "${red}Please use Debian 8 or later!${plain}\n" && exit 1
fi
fi
install_base() {
if [[ x"${release}" == x"centos" ]]; then
yum install epel-release wget curl unzip tar crontabs socat ca-certificates -y
update-ca-trust force-enable
elif [[ x"${release}" == x"alpine" ]]; then
apk add wget curl unzip tar socat ca-certificates
update-ca-certificates
elif [[ x"${release}" == x"debian" ]]; then
apt-get update -y
apt install wget curl unzip tar cron socat ca-certificates -y
update-ca-certificates
elif [[ x"${release}" == x"ubuntu" ]]; then
apt-get update -y
apt install wget curl unzip tar cron socat -y
apt-get install ca-certificates wget -y
update-ca-certificates
elif [[ x"${release}" == x"arch" ]]; then
pacman -Sy
pacman -S --noconfirm --needed wget curl unzip tar cron socat
pacman -S --noconfirm --needed ca-certificates wget
fi
}
# 0: running, 1: not running, 2: not installed
check_status() {
if [[ ! -f /usr/local/V2bX/V2bX ]]; then
return 2
fi
if [[ x"${release}" == x"alpine" ]]; then
temp=$(service V2bX status | awk '{print $3}')
if [[ x"${temp}" == x"started" ]]; then
return 0
else
return 1
fi
else
temp=$(systemctl status V2bX | grep Active | awk '{print $3}' | cut -d "(" -f2 | cut -d ")" -f1)
if [[ x"${temp}" == x"running" ]]; then
return 0
else
return 1
fi
fi
}
install_V2bX() {
if [[ -e /usr/local/V2bX/ ]]; then
rm -rf /usr/local/V2bX/
fi
mkdir /usr/local/V2bX/ -p
cd /usr/local/V2bX/
if [ $# == 0 ] ;then
last_version=$(curl -Ls "https://api.github.com/repos/socksprox/V2bX/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
if [[ ! -n "$last_version" ]]; then
echo -e "${red}Failed to detect V2bX version, may be out of Github API limitations, please try again later, or manually specify the V2bX version to install${plain}"
exit 1
fi
echo -e "Latest version of V2bX detected:${last_version},Start Installation"
wget -q -N --no-check-certificate -O /usr/local/V2bX/V2bX-linux.zip https://github.com/wyx2685/V2bX/releases/download/${last_version}/V2bX-linux-${arch}.zip
if [[ $? -ne 0 ]]; then
echo -e "${red}Downloading V2bX failed, make sure your server can download Github files!${plain}"
exit 1
fi
else
last_version=$1
url="https://github.com/socksprox/V2bX/releases/download/${last_version}/V2bX-linux-${arch}.zip"
echo -e "Start Installation V2bX $1"
wget -q -N --no-check-certificate -O /usr/local/V2bX/V2bX-linux.zip ${url}
if [[ $? -ne 0 ]]; then
echo -e "${red}Download V2bX $1 Failed, make sure this version exists${plain}"
exit 1
fi
fi
unzip V2bX-linux.zip
rm V2bX-linux.zip -f
chmod +x V2bX
mkdir /etc/V2bX/ -p
cp geoip.dat /etc/V2bX/
cp geosite.dat /etc/V2bX/
if [[ x"${release}" == x"alpine" ]]; then
rm /etc/init.d/V2bX -f
cat <<EOF > /etc/init.d/V2bX
#!/sbin/openrc-run
name="V2bX"
description="V2bX"
command="/usr/local/V2bX/V2bX"
command_args="server"
command_user="root"
pidfile="/run/V2bX.pid"
command_background="yes"
depend() {
need net
}
EOF
chmod +x /etc/init.d/V2bX
rc-update add V2bX default
rc-service V2bX start
echo -e "${green}V2bX ${last_version}${plain} installation complete, autoboot has been set."
else
rm /etc/systemd/system/V2bX.service -f
file="https://github.com/socksprox/V2bX-script/raw/master/V2bX.service"
wget -q -N --no-check-certificate -O /etc/systemd/system/V2bX.service ${file}
systemctl daemon-reload
systemctl stop V2bX
systemctl enable V2bX
echo -e "${green}V2bX ${last_version}${plain} installation complete, autoboot has been set."
fi
if [[ ! -f /etc/V2bX/config.json ]]; then
cp config.json /etc/V2bX/
echo -e ""
echo -e "For a fresh installation, please refer to the tutorial at https://v2bx.v-50.me/ to configure the necessary content."
first_install=true
else
if [[ x"${release}" == x"alpine" ]]; then
service V2bX start
else
systemctl start V2bX
fi
sleep 2
check_status
echo -e ""
if [[ $? == 0 ]]; then
echo -e "${green}V2bX 重启成功${plain}"
else
echo -e "${red}V2bX may fail to start, please use V2bX log to check the log information later, if it fails to start, the configuration format may have been changed, please go to the wiki to check: https://github.com/V2bX-project/V2bX/wiki${plain}"
fi
first_install=false
fi
if [[ ! -f /etc/V2bX/dns.json ]]; then
cp dns.json /etc/V2bX/
fi
if [[ ! -f /etc/V2bX/route.json ]]; then
cp route.json /etc/V2bX/
fi
if [[ ! -f /etc/V2bX/custom_outbound.json ]]; then
cp custom_outbound.json /etc/V2bX/
fi
if [[ ! -f /etc/V2bX/custom_inbound.json ]]; then
cp custom_inbound.json /etc/V2bX/
fi
curl -o /usr/bin/V2bX -Ls https://raw.githubusercontent.com/socksprox/V2bX-script/master/V2bX.sh
chmod +x /usr/bin/V2bX
if [ ! -L /usr/bin/v2bx ]; then
ln -s /usr/bin/V2bX /usr/bin/v2bx
chmod +x /usr/bin/v2bx
fi
cd $cur_dir
rm -f install.sh
echo -e ""
echo "V2bX 管理脚本使用方法 (兼容使用V2bX执行,大小写不敏感): "
echo "------------------------------------------"
echo "V2bX - Show Admin Menu (more features)"
echo "V2bX start - Start V2bX"
echo "V2bX stop - Stop V2bX"
echo "V2bX restart - Restart V2bX"
echo "V2bX status - View V2bX status"
echo "V2bX enable - Setup V2bX autoboot"
echo "V2bX disable - Stop V2bX autoboot"
echo "V2bX log - View V2bX logs"
echo "V2bX x25519 - Generate x25519 key"
echo "V2bX generate - Generate V2bX config file"
echo "V2bX update - Update V2bX"
echo "V2bX update x.x.x - Update V2bX to a specified version"
echo "V2bX install - Install V2bX"
echo "V2bX uninstall - Uninstall V2bX"
echo "V2bX version - View V2bX version"
echo "------------------------------------------"
# 首次安装询问是否生成配置文件
if [[ $first_install == true ]]; then
read -rp "We detected that this is your first installation of V2bX. Do you want to automatically generate the configuration file? (y/n): " if_generate
if [[ $if_generate == [Yy] ]]; then
curl -o ./initconfig.sh -Ls https://raw.githubusercontent.com/wyx2685/V2bX-script/master/initconfig.sh
source initconfig.sh
rm initconfig.sh -f
generate_config_file
fi
fi
}
echo -e "${green}Start installation${plain}"
install_base
install_V2bX $1