-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathseedbox.sh
executable file
·343 lines (308 loc) · 10.6 KB
/
seedbox.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
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
#!/bin/bash
# on change tout de suite le path pour la suite
export PATH="$HOME/.local/bin:$PATH"
export IFSORIGIN="${IFS}"
# Absolute path to this script.
CURRENT_SCRIPT=$(readlink -f "$0")
# Absolute path this script is in.
SETTINGS_SOURCE=$(dirname "$CURRENT_SCRIPT")
export SETTINGS_SOURCE
cd ${SETTINGS_SOURCE}
export TEXTDOMAINDIR="${SETTINGS_SOURCE}/i18n"
export TEXTDOMAIN=ks
source "${SETTINGS_SOURCE}/includes/functions.sh"
source "${SETTINGS_SOURCE}/includes/variables.sh"
source "${SETTINGS_SOURCE}/includes/menus.sh"
# récupération des parametres
# valeurs par défaut
FORCE_ROOT=0
INI_FILE=${SETTINGS_SOURCE}/autoinstall.ini
action=manuel
export mode_install=manuel
# lecture des parametres
OPTS=$(getopt -o vhns: --long \
help,action:,ini-file:,force-root,migrate \
-n 'parse-options' -- "$@")
if [ $? != 0 ]; then
echo "Failed parsing options." >&2
exit 1
fi
eval set -- "${OPTS}"
while true; do
case "$1" in
--action)
export action=$2
export mode_install=auto
shift 2
;;
--force-root)
FORCE_ROOT=1
shift
;;
--ini-file)
INI_FILE=$2
shift 2
;;
--migrate)
migrate
shift 1
exit 0
;;
--help)
usage
shift
;;
--)
shift
break
;;
*)
echo "Internal error! $2"
exit 1
;;
esac
done
#
# Maintenant, on a toutes les infos
#
check_docker_group
if [ ! -f "${SETTINGS_SOURCE}/ssddb" ]; then
premier_lancement
# on ajoute le PATH qui va bien, au cas où il ne soit pas pris en compte par le ~/.profile
fi
# on contre le bug de debian et du venv qui ne trouve pas les paquets installés par galaxy
source "${SETTINGS_SOURCE}/venv/bin/activate"
temppath=$(ls ${SETTINGS_SOURCE}/venv/lib)
pythonpath=${SETTINGS_SOURCE}/venv/lib/${temppath}/site-packages
export PYTHONPATH=${pythonpath}
case "$action" in
install_gui)
if [ ! -f ${INI_FILE} ]; then
echo "ERREUR, fichier d'autoinstall non trouvé !"
exit 1
fi
source <(grep = ${INI_FILE})
install_gui
exit 0
;;
manuel)
# pas d'action passée, on sort du case
;;
*)
echo "Action $action inconnue"
exit 1
;;
esac
# Si on est ici, c'est a priori qu'on n'a pas passé d'option
# ou en tout cas qu'on n'a pas redirigé vers une fonction
# spécifique
################################################
# TEST ROOT USER
if [ "$USER" == "root" ]; then
if [ "$FORCE_ROOT" == 0 ]; then
echo -e "${CCYAN}-----------------------${CEND}"
echo -e "${CCYAN}[ Lancement en root ]${CEND}"
echo -e "${CCYAN}-----------------------${CEND}"
echo -e "${CCYAN}"$(gettext "Pour des raisons de sécurité, il n'est pas conseillé de lancer ce script en root")"${CEND}"
echo -e "${CCYAN}-----------------------${CEND}"
echo -e "${CCYAN}"$(gettext "Vous pouvez continuer en root en passant l'option --force-root en parametre")"${CEND}"
exit 1
fi
fi
IS_INSTALLED=$(select_seedbox_param "installed")
if [ $mode_install = "manuel" ]; then
if [[ ${IS_INSTALLED} -eq 0 ]]; then
# Si on est là, c'est que le prérequis sont installés, mais c'est tout
# On propose donc l'install de la seedbox
echo -e "${CGREEN}" $(gettext "1) Installation zurg - rclone")"${CEND}"
echo -e "${CGREEN}" $(gettext "2) Installation Minimale sans zurg")"${CEND}"
echo -e "${CGREEN}" $(gettext "3) Restauration Seedbox")"${CEND}"
echo -e ""
echo >&2 -n -e "${BWHITE}"$(gettext "Votre choix :") "${CEND}"
read CHOICE
echo ""
case $CHOICE in
1) ## Installation de la seedbox Zurg et rclone
# on stocke les patchs pour ne pas les appliquer
for patch in $(ls ${SETTINGS_SOURCE}/patches); do
echo "${patch}" >>"${HOME}/.config/ssd/patches"
done
if [[ ${IS_INSTALLED} -eq 0 ]]; then
clear
# Installation et configuration de rclone
install_zurg
# Install de watchtower
install_watchtower
# Install fail2ban
install_fail2ban
# Choix des dossiers et création de l'arborescence
create_folders
# Installation de mergerfs
# Cette install a une incidence sur docker (dépendances dans systemd)
# unionfs_fuse # non utile pour install zurg mais fonction laissée
# mise en place de la sauvegarde
sauve
# Affichage du résumé
# on marque la seedbox comme installée
update_seedbox_param "installed" 1
# installation environnement
install_environnement
echo $(gettext "L'installation est maintenant terminée.")
echo $(gettext "Pour le configurer ou modifier les applis, vous pouvez le relancer")
echo "cd ${SETTINGS_SOURCE}"
echo "./seedbox.sh"
exit 0
else
affiche_menu_db
fi
;;
2) ## Installation personnalisée traefik - Cloudflare
echo "###################################################"
echo "# Installation minimale sans Zurg #"
echo "###################################################"
echo "Pour une installation at home sans zurg"
# on stocke les patchs pour ne pas les appliquer
touch "${SETTINGS_STORAGE}/status/rclone"
for patch in $(ls ${SETTINGS_SOURCE}/patches); do
echo "${patch}" >>"${HOME}/.config/ssd/patches"
done
if [[ ${IS_INSTALLED} -eq 0 ]]; then
# Install de watchtower
install_watchtower
# Install fail2ban
install_fail2ban
# Choix des dossiers et création de l'arborescence
create_folders
sauve
# on marque la seedbox comme installée
update_seedbox_param "installed" 1
# installation environnement
install_environnement
echo $(gettext "L'installation est maintenant terminée.")
echo $(gettext "Pour le configurer ou modifier les applis, vous pouvez le relancer")
echo "cd ${SETTINGS_SOURCE}"
echo "./seedbox.sh"
exit 0
else
affiche_menu_db
fi
;;
3) ## restauration de la seedbox
echo "###################################################"
echo "# ATTENTION !! #"
echo "###################################################"
echo "A l'heure actuelle, la restauration ne fonctionne "
echo "que si le script a été installé depuis le même "
echo "répertoire que celui qui a servi à faire la "
echo "sauvegarde, et a été installé sur la même destination "
echo "------------------------------------------------------"
echo "Si vous avez déjà installé le script depuis un mauvais répertoire "
echo "ou vers une mauvaise destination, il faudra supprimer le fichier "
echo "${HOME}/.config/ssd/env et refaire l'installation "
echo "-------------------------------------------------------"
echo "Les chemins par défaut avant la v2.2 étaient "
echo "- source : /opt/seedbox-compose"
echo "- destination : /opt/seedbox"
pause
#check_dir "$PWD"
if [[ ${IS_INSTALLED} -eq 0 ]]; then
clear
# Installation et configuration de rclone
install_zurg
# Install de watchtower
install_watchtower
# Install fail2ban
install_fail2ban
# Choix des dossiers et création de l'arborescence
create_folders
# Installation de mergerfs
# Cette install a une incidence sur docker (dépendances dans systemd)
# unionfs_fuse # non utile pour install zurg mais fonction laissée
pause
# mise en place de la sauvegarde
sauve
## On va garder ce qui a été saisi pour l'écraser plus tard
cp ${ANSIBLE_VARS} ${ANSIBLE_VARS}.temp
## on sauvegarde le mot de passe de chiffrement
cp ${HOME}/.vault_pass ${HOME}/.vault_pass.temp
sudo restore
# on remet le account.yml précédent qui a été écrasé par la restauration
cp ${ANSIBLE_VARS} ${ANSIBLE_VARS}.restore
mv ${ANSIBLE_VARS}.temp ${ANSIBLE_VARS}
# pareil pour le mot de passe de chiffrement
cp ${HOME}/.vault_pass ${HOME}/.vault_pass.restore
mv ${HOME}/.vault_pass.temp ${HOME}/.vault_pass
stocke_public_ip
## on remet les bonnes infos
userid=$(id -u)
grpid=$(id -g)
manage_account_yml user.userid "$userid"
manage_account_yml user.id "$userid"
manage_account_yml user.groupid "$grpid"
## reinitialisation de toutes les applis
relance_tous_services
# on marque la seedbox comme installée
update_seedbox_param "installed" 1
affiche_menu_db
else
affiche_menu_db
fi
;;
9)
exit 0
;;
esac
fi
chmod 755 ${SETTINGS_SOURCE}/logs
#update_logrotate
log_statusbar "$(echo $(gettext "Check de la dernière version sur git"))"
git_branch=$(git rev-parse --abbrev-ref HEAD)
if [ ${git_branch} == 'master' ]; then
cd ${SETTINGS_SOURCE}
git fetch >>/dev/null 2>&1
current_hash=$(git rev-parse HEAD)
distant_hash=$(git rev-parse master@{upstream})
if [ ${current_hash} != ${distant_hash} ]; then
clear
echo "==============================================="
echo $(gettext "= Il existe une mise à jour")
echo $(gettext "= Pour le faire, sortez du script, puis tapez")
echo "= git pull"
echo "==============================================="
pause
fi
else
clear
echo "==============================================="
echo $(gettext "= Attention, vous n'êtes pas sur la branche master !")
echo $(gettext "= Pour repasser sur master, sortez du script, puis tapez ")
echo "= git checkout master"
echo "==============================================="
pause
fi
#####################################################
# On finit de setter les variables
source ${SETTINGS_SOURCE}/venv/bin/activate
emplacement_stockage=$(get_from_account_yml settings.storage)
if [ "${emplacement_stockage}" == notfound ]; then
manage_account_yml settings.storage "${SETTINGS_STORAGE}"
fi
emplacement_source=$(get_from_account_yml settings.source)
if [ "${emplacement_source}" == notfound ]; then
manage_account_yml settings.source "${SETTINGS_SOURCE}"
fi
update_status
# Verif compatibilité v2/0 => V2.1
# On regarde que settings.storage existe
log_statusbar "$(echo $(gettext "Verification de l'emplacement du stockage"))"
emplacement_stockage=$(get_from_account_yml settings.storage)
if [ "${emplacement_stockage}" == notfound ]; then
manage_account_yml settings.storage "/opt/seedbox"
fi
# On ressource l'environnement
source "${SETTINGS_SOURCE}/profile.sh"
export TEXTDOMAIN=ks
export TEXTDOMAINDIR="${SETTINGS_SOURCE}/i18n"
apply_patches
affiche_menu_db
fi