-
Notifications
You must be signed in to change notification settings - Fork 0
/
ptero_install.sh
309 lines (248 loc) · 7.85 KB
/
ptero_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
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
#!/bin/bash
# PterodactylManager installer by DevSky.one [email protected]
# Vars
MACHINE=$(uname -m)
Instversion="1.0"
USE_SYSTEMD=true
# Functions
function greenMessage() {
echo -e "\\033[32;1m${*}\\033[0m"
}
function magentaMessage() {
echo -e "\\033[35;1m${*}\\033[0m"
}
function cyanMessage() {
echo -e "\\033[36;1m${*}\\033[0m"
}
function redMessage() {
echo -e "\\033[31;1m${*}\\033[0m"
}
function yellowMessage() {
echo -e "\\033[33;1m${*}\\033[0m"
}
function errorQuit() {
errorExit 'Exit now!'
}
function errorExit() {
redMessage "${@}"
exit 1
}
function errorContinue() {
redMessage "Invalid option."
return
}
function makeDir() {
if [ -n "$1" ] && [ ! -d "$1" ]; then
mkdir -p "$1"
fi
}
# Check if the script was run as root user. Otherwise exit the script
if [ "$(id -u)" != "0" ]; then
errorExit "Change to root account required!"
fi
# Update notify
cyanMessage "Checking for the latest installer version"
if [[ -f /etc/centos-release ]]; then
yum -y -q install wget
else
apt-get -qq install wget -y
fi
# Detect if systemctl is available then use systemd as start script. Otherwise use init.d
if [[ $(command -v systemctl) == "" ]]; then
USE_SYSTEMD=false
fi
# If kernel to old, quit
if [ $(uname -r | cut -c1-1) < 3 ]; then
errorExit "Linux kernel unsupportet. Update kernel before. Or change hardware."
fi
# If the linux distribution is not debian and centos, then exit
if [ ! -f /etc/debian_version ] && [ ! -f /etc/centos-release ]; then
errorExit "Not supported linux distribution. Only Debian and CentOS are currently supported"!
fi
greenMessage "This is the automatic installer for latest Pterodactyl with PterodactylManager. USE AT YOUR OWN RISK"!
sleep 1
cyanMessage "You can choose between installing, upgrading and removing the PterodactylManager."
sleep 1
redMessage "Installer by DevSky.one - Coding Support"
sleep 1
yellowMessage "You're using installer $Instversion"
# selection menu if the installer should install, update or remove the PterodactylManager
redMessage "What should the installer do?"
OPTIONS=("Install" "Update" "Remove" "Quit")
select OPTION in "${OPTIONS[@]}"; do
case "$REPLY" in
1 | 2 | 3) break ;;
4) errorQuit ;;
*) errorContinue ;;
esac
done
if [ "$OPTION" == "Install" ]; then
INSTALL="Inst"
elif [ "$OPTION" == "Update" ]; then
errorExit "Update not supported yet!"
elif [ "$OPTION" == "Remove" ]; then
errorExit "Remove not supported yet!"
fi
# Check which OS
if [ "$INSTALL" != "Rem" ]; then
if [[ -f /etc/centos-release ]]; then
greenMessage "Installing redhat-lsb! Please wait."
yum -y -q install redhat-lsb
greenMessage "Done"!
yellowMessage "You're running CentOS. Which firewallsystem are you using?"
OPTIONS=("IPtables" "Firewalld")
select OPTION in "${OPTIONS[@]}"; do
case "$REPLY" in
1 | 2) break ;;
*) errorContinue ;;
esac
done
if [ "$OPTION" == "IPtables" ]; then
FIREWALL="ip"
elif [ "$OPTION" == "Firewalld" ]; then
FIREWALL="fd"
fi
fi
if [[ -f /etc/debian_version ]]; then
greenMessage "Check if lsb-release and debconf-utils is installed..."
apt-get -qq update
apt-get -qq install debconf-utils -y
apt-get -qq install lsb-release -y
greenMessage "Done"!
fi
# Functions from lsb_release
OS=$(lsb_release -i 2>/dev/null | grep 'Distributor' | awk '{print tolower($3)}')
OSBRANCH=$(lsb_release -c 2>/dev/null | grep 'Codename' | awk '{print $2}')
OSRELEASE=$(lsb_release -r 2>/dev/null | grep 'Release' | awk '{print $2}')
VIRTUALIZATION_TYPE=""
# Extracted from the virt-what sourcecode: http://git.annexia.org/?p=virt-what.git;a=blob_plain;f=virt-what.in;hb=HEAD
if [[ -f "/.dockerinit" ]]; then
VIRTUALIZATION_TYPE="docker"
fi
if [ -d "/proc/vz" -a ! -d "/proc/bc" ]; then
VIRTUALIZATION_TYPE="openvz"
fi
if [[ $VIRTUALIZATION_TYPE == "openvz" ]]; then
redMessage "Warning, your server is running OpenVZ! This very old container system isn't well supported by newer packages."
elif [[ $VIRTUALIZATION_TYPE == "docker" ]]; then
redMessage "Warning, your server is running in Docker! Maybe there are failures while installing."
fi
fi
# Go on
if [ "$INSTALL" != "Rem" ]; then
if [ -z "$OS" ]; then
errorExit "Error: Could not detect OS. Currently only Debian, Ubuntu and CentOS are supported. Aborting"!
elif [ -z "$OS" ] && ([ "$(cat /etc/debian_version | awk '{print $1}')" == "7" ] || [ $(cat /etc/debian_version | grep "7.") ]); then
errorExit "Debian 7 isn't supported anymore"!
fi
if [ -z "$OSBRANCH" ] && [ -f /etc/centos-release ]; then
errorExit "Error: Could not detect branch of OS. Aborting"
fi
if [ "$MACHINE" == "x86_64" ]; then
ARCH="amd64"
else
errorExit "$MACHINE is not supported"!
fi
fi
if [[ "$INSTALL" != "Rem" ]]; then
if [[ "$USE_SYSTEMD" == true ]]; then
yellowMessage "Automatically chosen system.d for your startscript"!
else
yellowMessage "Automatically chosen init.d for your startscript"!
fi
fi
# Set path or continue with normal
yellowMessage "Automatic usage or own directories?"
OPTIONS=("Automatic" "Own path" "Quit")
select OPTION in "${OPTIONS[@]}"; do
case "$REPLY" in
1 | 2) break ;;
3) errorQuit ;;
*) errorContinue ;;
esac
done
if [ "$OPTION" == "Automatic" ]; then
LOCATION=/var/www/pterodactyl
elif [ "$OPTION" == "Own path" ]; then
yellowMessage "Enter location where the bot should be installed/updated/removed, e.g. /var/www/pterodactyl. Include the / at first position and none at the end"!
LOCATION=""
while [[ ! -d $LOCATION ]]; do
read -rp "Location [/var/www/pterodactyl]: " LOCATION
if [[ $INSTALL != "Inst" && ! -d $LOCATION ]]; then
redMessage "Directory not found, try again"!
fi
if [ "$INSTALL" == "Inst" ]; then
if [ "$LOCATION" == "" ]; then
LOCATION=/var/www/pterodactyl
fi
makeDir $LOCATION
fi
done
greenMessage "Your directory is $LOCATION."
OPTIONS=("Yes" "No, change it" "Quit")
select OPTION in "${OPTIONS[@]}"; do
case "$REPLY" in
1 | 2) break ;;
3) errorQuit ;;
*) errorContinue ;;
esac
done
if [ "$OPTION" == "No, change it" ]; then
LOCATION=""
while [[ ! -d $LOCATION ]]; do
read -rp "Location [/var/www/pterodactyl]: " LOCATION
if [[ $INSTALL != "Inst" && ! -d $LOCATION ]]; then
redMessage "Directory not found, try again"!
fi
if [ "$INSTALL" == "Inst" ]; then
makeDir $LOCATION
fi
done
greenMessage "Your directory is $LOCATION."
fi
fi
makeDir $LOCATION
if [[ $INSTALL == "Inst" ]]; then
if [[ -f $LOCATION ]]; then
redMessage "Pterodactyl already installed"!
read -rp "Would you like to update the bot instead? [Y / N]: " OPTION
if [ "$OPTION" == "Y" ] || [ "$OPTION" == "y" ] || [ "$OPTION" == "" ]; then
INSTALL="Updt"
elif [ "$OPTION" == "N" ] || [ "$OPTION" == "n" ]; then
errorExit "Installer stops now"!
fi
else
greenMessage "Pterodactyl isn't installed yet. Installer goes on."
fi
elif [ "$INSTALL" == "Rem" ] || [ "$INSTALL" == "Updt" ]; then
if [ ! -d $LOCATION ]; then
errorExit "Pterodactyl isn't installed"!
else
greenMessage "Pterodactyl is installed. Installer goes on."
fi
fi
# Update packages or not
redMessage 'Update the system packages to the latest version? (Recommended)'
OPTIONS=("Yes" "No")
select OPTION in "${OPTIONS[@]}"; do
case "$REPLY" in
1 | 2) break ;;
*) errorContinue ;;
esac
done
greenMessage "Starting the installer now"!
sleep 2
if [ "$OPTION" == "Yes" ]; then
greenMessage "Updating the system in a few seconds"!
sleep 1
redMessage "This could take a while. Please wait up to 10 minutes"!
sleep 3
if [[ -f /etc/centos-release ]]; then
yum -y -q update
yum -y -q upgrade
else
apt-get -qq update
apt-get -qq upgrade
fi
fi
errorExit "Error: PterodactylManager is not public yet."!