-
Notifications
You must be signed in to change notification settings - Fork 66
/
Copy pathinstall.sh
executable file
·246 lines (220 loc) · 4.95 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
#!/bin/bash
#
# https://github.com/zero-proxy/zero-proxy
#
# Copyright (c) 2022. Released under the MIT License.
# constants
cert_dir="certificate"
config="config.json"
bin="zero-proxy_linux"
base_url="https://raw.githubusercontent.com/zero-proxy/zero-proxy/master"
# detect OS
if grep -qs "ubuntu" /etc/os-release; then
os="ubuntu"
elif [[ -e /etc/debian_version ]]; then
os="debian"
elif [[ -e /etc/almalinux-release || -e /etc/rocky-release || -e /etc/centos-release ]]; then
os="centos"
elif [[ -e /etc/fedora-release ]]; then
os="fedora"
else
echo "不支持当前系统,仅支持的操作系统为Ubuntu, Debian, AlmaLinux, Rocky Linux, CentOS, Fedora."
exit
fi
function ensure_env() {
echo "install required commands and ensure environments"
if [[ "$os" = "debian" || "$os" = "ubuntu" ]]; then
sudo apt-get update
sudo apt-get install -y curl
sudo apt-get install -y jq
# disable firewall
sudo ufw disable
elif [[ "$os" = "centos" ]]; then
sudo yum install -y curl
sudo yum install -y jq
# disable firewall
sudo systemctl stop firewalld
else
# else, OS must be Fedora
sudo dnf install -y curl
sudo dnf install -y jq
fi
}
function ensure_nvm() {
if [ -n "$NVM_DIR" ] and [ -f "$NVM_DIR/nvm.sh" ]; then
echo "nvm is installed, skipping"
else
# install nvm
echo "installing nvm"
if ! curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash; then
echo "failed to install nvm, please install node.js manually"
exit
fi
source ~/.nvm/nvm.sh
fi
}
function ensure_node() {
if which node >/dev/null; then
echo "node is installed, skipping"
else
# we use nvm to install node
ensure_nvm
# install node.js
echo "installing node.js"
nvm install 16
nvm alias default 16
nvm use default
fi
}
function ensure_pm2() {
if which pm2 >/dev/null; then
echo "pm2 is installed, skipping"
else
echo "installing pm2"
sudo chown -R $(whoami) ~/.npm
npm install pm2 -g
echo "initiate pm2-logrotate"
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 20M
pm2 set pm2-logrotate:compress false
pm2 set pm2-logrotate:retain 10
fi
}
function install_env() {
ensure_env
ensure_node
ensure_pm2
}
function install_zero_proxy() {
if [ ! -d "$cert_dir" ]; then
echo "downloading certificate"
mkdir $cert_dir
curl -o $cert_dir/server.crt $base_url/certificate/server.crt
curl -o $cert_dir/server.key $base_url/certificate/server.key
fi
if [ ! -f "$config" ]; then
echo "downloading config"
curl -o $config $base_url/config.json
fi
if [ ! -f "$bin" ]; then
echo "downloading $bin"
curl -o $bin $base_url/zero-proxy_linux
chmod u+x $bin
fi
}
function install() {
install_env
install_zero_proxy
}
function uninstall_zero_proxy() {
rm -rf $cert_dir
rm -rf logs
rm -rf db
rm $config
rm $bin
}
function uninstall_pm2() {
echo "uninstalling pm2"
pm2 delete zero-proxy
pm2 delete pm2-logrotate
pm2 uninstall pm2-logrotate
npm uninstall -g pm2
}
function uninstall_node() {
echo "uninstalling node.js"
# nvm uninstall 16
}
function uninstall_nvm() {
echo "uninstalling nvm"
rm -rf $NVM_DIR ~/.npm ~/.bower
}
function uninstall() {
uninstall_zero_proxy
uninstall_pm2
uninstall_node
uninstall_nvm
}
function start() {
echo "starting zero proxy"
pm2 start pm2-logrotate
pm2 start $bin --name zero-proxy -e logs/zero-proxy-error.log -o logs/zero-proxy-out.log
}
function stop() {
echo "stoping zero proxy"
pm2 stop zero-proxy
pm2 stop pm2-logrotate
pm2 delete zero-proxy
}
function restart() {
echo "restarting zero proxy"
pm2 restart pm2-logrotate
pm2 restart zero-proxy
}
function update() {
echo "updating zero proxy"
latest_bin_md5=$(curl -s $base_url/version.json | jq -r '.md5')
echo "md5 of lastest version is $latest_bin_md5"
current_bin_md5=($(md5sum $bin))
echo "md5 of current version is $current_bin_md5"
if [ "$latest_bin_md5" == "$current_bin_md5" ]; then
echo "Already up to date"
exit
fi
# else, remove current bin
tmp_bin="zero-proxy_tmp"
if ! curl -o $tmp_bin $base_url/zero-proxy_linux; then
echo "failed to download latest version, exit"
exit
fi
rm $bin
mv $tmp_bin $bin
chmod u+x $bin
# reset service
pm2 delete zero-proxy
start
}
clear
while :; do
echo
echo "欢迎使用 Zero Proxy"
echo "Welcome to Zero Proxy"
echo
echo "1. 安装 (Install)"
echo "2. 卸载 (Uninstall)"
echo "3. 启动 (Start)"
echo "4. 关闭 (Stop)"
echo "5. 重启 (Restart)"
echo "6. 更新 (Update Zero Proxy)"
read -p "$(echo -e "请选择 (Please choose) [1-6]:")" choose
case $choose in
1)
install
start
break
;;
2)
stop
uninstall
break
;;
3)
start
break
;;
4)
stop
break
;;
5)
restart
break
;;
6)
update
break
;;
*)
echo "输入错误,请重新选择命令"
;;
esac
done