1
+ #! /bin/bash
2
+ # ##
3
+ # @Author: LinkLeong [email protected]
4
+ # @Date: 2022-06-30 10:08:33
5
+
6
+ # @LastEditTime: 2022-06-30 10:11:45
7
+ # @FilePath: /get/upload.sh
8
+ # @Description:
9
+ # ##
10
+
11
+ (( EUID)) && sudo_cmd=" sudo"
12
+
13
+ # SYSTEM INFO
14
+ readonly UNAME_M=" $( uname -m) "
15
+
16
+ # CasaOS PATHS
17
+ readonly CASA_REPO=LinkLeong/casaos-alpha
18
+ readonly CASA_UNZIP_TEMP_FOLDER=/tmp/casaos
19
+ readonly CASA_BIN=casaos
20
+ readonly CASA_BIN_PATH=/usr/bin/casaos
21
+ readonly CASA_CONF_PATH=/etc/casaos.conf
22
+ readonly CASA_SERVICE_PATH=/etc/systemd/system/casaos.service
23
+ readonly CASA_HELPER_PATH=/usr/share/casaos/shell/
24
+ readonly CASA_USER_CONF_PATH=/var/lib/casaos/conf/
25
+ readonly CASA_DB_PATH=/var/lib/casaos/db/
26
+ readonly CASA_TEMP_PATH=/var/lib/casaos/temp/
27
+ readonly CASA_LOGS_PATH=/var/log/casaos/
28
+ readonly CASA_PACKAGE_EXT=" .tar.gz"
29
+ readonly CASA_RELEASE_API=" https://api.github.com/repos/${CASA_REPO} /releases"
30
+ readonly CASA_OPENWRT_DOCS=" https://github.com/IceWhaleTech/CasaOS-OpenWrt"
31
+
32
+ readonly COLOUR_RESET=' \e[0m'
33
+ readonly aCOLOUR=(
34
+ ' \e[38;5;154m' # green | Lines, bullets and separators
35
+ ' \e[1m' # Bold white | Main descriptions
36
+ ' \e[90m' # Grey | Credits
37
+ ' \e[91m' # Red | Update notifications Alert
38
+ ' \e[33m' # Yellow | Emphasis
39
+ )
40
+
41
+ Target_Arch=" "
42
+ Target_Distro=" debian"
43
+ Target_OS=" linux"
44
+ Casa_Tag=" "
45
+
46
+
47
+ # ######################################
48
+ # Custom printing function
49
+ # Globals:
50
+ # None
51
+ # Arguments:
52
+ # $1 0:OK 1:FAILED 2:INFO 3:NOTICE
53
+ # message
54
+ # Returns:
55
+ # None
56
+ # ######################################
57
+
58
+ Show () {
59
+ # OK
60
+ if (( $1 == 0 )) ; then
61
+ echo -e " ${aCOLOUR[2]} [$COLOUR_RESET ${aCOLOUR[0]} OK $COLOUR_RESET ${aCOLOUR[2]} ]$COLOUR_RESET $2 "
62
+ # FAILED
63
+ elif (( $1 == 1 )) ; then
64
+ echo -e " ${aCOLOUR[2]} [$COLOUR_RESET ${aCOLOUR[3]} FAILED$COLOUR_RESET ${aCOLOUR[2]} ]$COLOUR_RESET $2 "
65
+ # INFO
66
+ elif (( $1 == 2 )) ; then
67
+ echo -e " ${aCOLOUR[2]} [$COLOUR_RESET ${aCOLOUR[0]} INFO $COLOUR_RESET ${aCOLOUR[2]} ]$COLOUR_RESET $2 "
68
+ # NOTICE
69
+ elif (( $1 == 3 )) ; then
70
+ echo -e " ${aCOLOUR[2]} [$COLOUR_RESET ${aCOLOUR[4]} NOTICE$COLOUR_RESET ${aCOLOUR[2]} ]$COLOUR_RESET $2 "
71
+ fi
72
+ }
73
+
74
+ Warn () {
75
+ echo -e " ${aCOLOUR[3]} $1 $COLOUR_RESET "
76
+ }
77
+
78
+ # 0 Check_exist
79
+ Check_Exist () {
80
+ # Create Dir
81
+ Show 2 " Create Folders."
82
+ ${sudo_cmd} mkdir -p ${CASA_HELPER_PATH}
83
+ ${sudo_cmd} mkdir -p ${CASA_LOGS_PATH}
84
+ ${sudo_cmd} mkdir -p ${CASA_USER_CONF_PATH}
85
+ ${sudo_cmd} mkdir -p ${CASA_DB_PATH}
86
+ ${sudo_cmd} mkdir -p ${CASA_TEMP_PATH}
87
+
88
+ if [[ $( systemctl is-active ${CASA_BIN} ) == " active" ]]; then
89
+ ${sudo_cmd} systemctl stop ${CASA_BIN}
90
+ ${sudo_cmd} systemctl disable ${CASA_BIN}
91
+ fi
92
+ Show 2 " Start cleaning up the old version."
93
+ if [[ -f " /usr/lib/systemd/system/casaos.service" ]]; then
94
+ ${sudo_cmd} rm -rf /usr/lib/systemd/system/casaos.service
95
+ fi
96
+
97
+ if [[ -f " /lib/systemd/system/casaos.service" ]]; then
98
+ ${sudo_cmd} rm -rf /lib/systemd/system/casaos.service
99
+ fi
100
+
101
+ if [[ -f " /usr/local/bin/${CASA_BIN} " ]]; then
102
+ ${sudo_cmd} rm -rf /usr/local/bin/${CASA_BIN}
103
+ fi
104
+
105
+ if [[ -f " /casaOS/server/conf/conf.ini" ]]; then
106
+ ${sudo_cmd} cp -rf /casaOS/server/conf/conf.ini ${CASA_CONF_PATH}
107
+ ${sudo_cmd} cp -rf /casaOS/server/conf/* .json ${CASA_USER_CONF_PATH}
108
+ fi
109
+
110
+ if [[ -d " /casaOS/server/db" ]]; then
111
+ ${sudo_cmd} cp -rf /casaOS/server/db/* ${CASA_DB_PATH}
112
+ fi
113
+
114
+ # Clean
115
+ if [[ -d " /casaOS" ]]; then
116
+ ${sudo_cmd} rm -rf /casaOS
117
+ fi
118
+ Show 0 " Clearance completed."
119
+
120
+ }
121
+
122
+ # 1 Check Arch
123
+ Check_Arch () {
124
+ case $UNAME_M in
125
+ * aarch64* )
126
+ Target_Arch=" arm64"
127
+ ;;
128
+ * 64* )
129
+ Target_Arch=" amd64"
130
+ ;;
131
+ * armv7* )
132
+ Target_Arch=" arm-7"
133
+ ;;
134
+ * )
135
+ Show 1 " Aborted, unsupported or unknown architecture: $UNAME_M "
136
+ exit 1
137
+ ;;
138
+ esac
139
+ Show 0 " Your hardware architecture is : $UNAME_M "
140
+ }
141
+
142
+ # Check Docker running
143
+ Check_Docker_Running () {
144
+ for (( i = 1 ; i <= 3 ; i++ )) ; do
145
+ sleep 3
146
+ if [[ ! $( systemctl is-active docker & > /dev/null) ]]; then
147
+ Show 1 " Docker is not running, try to start"
148
+ ${sudo_cmd} systemctl start docker
149
+ else
150
+ break
151
+ fi
152
+ done
153
+ }
154
+
155
+ # Install Docker
156
+ Install_Docker () {
157
+ Show 0 " Docker will be installed automatically."
158
+ echo -e " ${aCOLOUR[2]} \c"
159
+ curl -fsSL https://get.docker.com | bash
160
+ echo -e " ${COLOUR_RESET} \c"
161
+ if [[ $? -ne 0 ]]; then
162
+ Show 1 " Installation failed, please try again."
163
+ exit 1
164
+ else
165
+ Show 0 " Docker Successfully installed."
166
+ Check_Docker_Running
167
+ fi
168
+ }
169
+
170
+ # Download CasaOS Package
171
+ Download_CasaOS () {
172
+ Show 2 " Downloading CasaOS for ${Target_OS} /${Target_Arch} ..."
173
+ Net_Getter=" curl -fsSLk"
174
+ Casa_Package=" ${Target_OS} -${Target_Arch} -casaos${CASA_PACKAGE_EXT} "
175
+ if [[ ! -n " $version " ]]; then
176
+ Casa_Tag=" $( ${Net_Getter} ${CASA_RELEASE_API} /latest | grep -o ' "tag_name": ".*"' | sed ' s/"//g' | sed ' s/tag_name: //g' ) "
177
+ elif [[ $version == " pre" ]]; then
178
+ Casa_Tag=" $( ${net_getter} ${CASA_RELEASE_API} | grep -o ' "tag_name": ".*"' | sed ' s/"//g' | sed ' s/tag_name: //g' | sed -n ' 1p' ) "
179
+ else
180
+ Casa_Tag=" $version "
181
+ fi
182
+ Casa_Package_URL=" https://github.com/${CASA_REPO} /releases/download/${Casa_Tag} /${Casa_Package} "
183
+ echo
184
+ # Remove Temp File
185
+ ${sudo_cmd} rm -rf " $PREFIX /tmp/${Casa_Package} "
186
+ # Download Package
187
+ ${Net_Getter} " ${Casa_Package_URL} " > " $PREFIX /tmp/${Casa_Package} "
188
+ if [[ $? -ne 0 ]]; then
189
+ Show 1 " Download failed, Please check if your internet connection is working and retry."
190
+ exit 1
191
+ else
192
+ Show 0 " Download successful!"
193
+ fi
194
+ # Extract CasaOS Package
195
+ Show 2 " Extracting..."
196
+ case " ${Casa_Package} " in
197
+ * .zip) ${sudo_cmd} unzip -o " $PREFIX /tmp/${Casa_Package} " -d " $PREFIX /tmp/" ;;
198
+ * .tar.gz) ${sudo_cmd} tar -xzf " $PREFIX /tmp/${Casa_Package} " -C " $PREFIX /tmp/" ;;
199
+ esac
200
+ # Setting Executable Permissions
201
+ ${sudo_cmd} chmod +x " $PREFIX ${CASA_UNZIP_TEMP_FOLDER} /${CASA_BIN} "
202
+
203
+ }
204
+
205
+ # Install Addons
206
+ Install_Addons () {
207
+ Show 2 " Installing CasaOS Addons"
208
+ ${sudo_cmd} cp -rf " $PREFIX ${CASA_UNZIP_TEMP_FOLDER} /shell/11-usb-mount.rules" " /etc/udev/rules.d/"
209
+ ${sudo_cmd} cp -rf
" $PREFIX ${CASA_UNZIP_TEMP_FOLDER} /shell/[email protected] " " /etc/systemd/system/"
210
+ sync
211
+ }
212
+
213
+ # Clean Temp Files
214
+ Clean_Temp_Files () {
215
+ Show 0 " Clean..."
216
+ ${sudo_cmd} rm -rf " $PREFIX ${CASA_UNZIP_TEMP_FOLDER} "
217
+ sync
218
+ }
219
+
220
+ # Install CasaOS
221
+ Install_CasaOS () {
222
+ Show 2 " Installing..."
223
+
224
+ # Install Bin
225
+ ${sudo_cmd} mv -f $PREFIX ${CASA_UNZIP_TEMP_FOLDER} /${CASA_BIN} ${CASA_BIN_PATH}
226
+
227
+ # Install Helper
228
+ if [[ -d ${CASA_HELPER_PATH} ]]; then
229
+ ${sudo_cmd} rm -rf ${CASA_HELPER_PATH} *
230
+ fi
231
+ ${sudo_cmd} cp -rf $PREFIX ${CASA_UNZIP_TEMP_FOLDER} /shell/* ${CASA_HELPER_PATH}
232
+ # Setting Executable Permissions
233
+ ${sudo_cmd} chmod +x $PREFIX ${CASA_HELPER_PATH} *
234
+
235
+ # Install Conf
236
+ if [[ ! -f ${CASA_CONF_PATH} ]]; then
237
+ if [[ -f $PREFIX ${CASA_UNZIP_TEMP_FOLDER} /conf/conf.ini.sample ]]; then
238
+ ${sudo_cmd} mv -f $PREFIX ${CASA_UNZIP_TEMP_FOLDER} /conf/conf.ini.sample ${CASA_CONF_PATH}
239
+ else
240
+ ${sudo_cmd} mv -f $PREFIX ${CASA_UNZIP_TEMP_FOLDER} /conf/conf.conf.sample ${CASA_CONF_PATH}
241
+ fi
242
+
243
+ fi
244
+ sync
245
+
246
+ if [[ ! -x " $( command -v ${CASA_BIN} ) " ]]; then
247
+ Show 1 " Installation failed, please try again."
248
+ exit 1
249
+ else
250
+ Show 0 " CasaOS Successfully installed."
251
+ fi
252
+ }
253
+
254
+ # Generate Service File
255
+ Generate_Service () {
256
+ if [ -f ${CASA_SERVICE_PATH} ]; then
257
+ Show 2 " Try stop CasaOS system service."
258
+ # Stop before generation
259
+ if [[ $( systemctl is-active ${CASA_BIN} & > /dev/null) ]]; then
260
+ ${sudo_cmd} systemctl stop ${CASA_BIN}
261
+ fi
262
+ fi
263
+ Show 2 " Create system service for CasaOS."
264
+
265
+ ${sudo_cmd} tee ${CASA_SERVICE_PATH} > /dev/null << EOF
266
+ [Unit]
267
+ Description=CasaOS Service
268
+ StartLimitIntervalSec=0
269
+
270
+ [Service]
271
+ Type=simple
272
+ LimitNOFILE=15210
273
+ Restart=always
274
+ RestartSec=1
275
+ User=root
276
+ ExecStart=${CASA_BIN_PATH} -c ${CASA_CONF_PATH}
277
+
278
+ [Install]
279
+ WantedBy=multi-user.target
280
+ EOF
281
+ Show 0 " CasaOS service Successfully created."
282
+ }
283
+
284
+ # Start CasaOS
285
+ Start_CasaOS () {
286
+ Show 2 " Create a system startup service for CasaOS."
287
+ $sudo_cmd systemctl daemon-reload
288
+ $sudo_cmd systemctl enable ${CASA_BIN}
289
+
290
+ Show 2 " Start CasaOS service."
291
+ $sudo_cmd systemctl start ${CASA_BIN}
292
+
293
+ if [[ ! $( systemctl is-active ${CASA_BIN} ) == " active" ]]; then
294
+ Show 1 " Failed to start, please try again."
295
+ exit 1
296
+ else
297
+ Show 0 " Service started successfully."
298
+ fi
299
+ }
300
+
301
+ Check_Arch
302
+
303
+ # Step 7: Download CasaOS
304
+ Check_Exist
305
+ Download_CasaOS
306
+
307
+ # Step 8: Install Addon
308
+ Install_Addons
309
+
310
+ # Step 9: Install CasaOS
311
+ Install_CasaOS
312
+
313
+ # Step 10: Generate_Service
314
+ Generate_Service
315
+
316
+ # Step 11: Start CasaOS
317
+ Start_CasaOS
318
+ Clean_Temp_Files
0 commit comments