-
Notifications
You must be signed in to change notification settings - Fork 0
/
install.sh
executable file
·262 lines (219 loc) · 7.59 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
#!/bin/bash
# Izmir Science High School - Computer Lab Setup Script
# Install prerequisites, applications, tools; set up configs etc.
# 2022 - 2024 © Aliberk Sandıkçı
# run quickly:
# wget -qO- https://raw.githubusercontent.com/asandikci/iflbot-setup/main/install.sh | bash <(cat) </dev/tty
# Error Handling
set -e
trap _interrupt HUP INT TERM
trap _cleanup EXIT
# #
### VARIABLES ###
# #
VERSION="10.23-5"
AUTHOR="asandikci"
temp_file="$(mktemp -u)"
temp_dir="$(mktemp -d)"
git_provider_name="GitHub"
git_provider_url="https://github.com"
git_repo_name="iflbot-setup"
git_repo_dest="$git_provider_url/$AUTHOR/$git_repo_name"
git_repo_tag="main"
src_dir="$temp_dir/$git_repo_name-$git_repo_tag/src/"
# user=$([ -n "$SUDO_USER" ] && echo "$SUDO_USER" || echo "$USER")
# home="/home/${user}"
# #
### COLOR CODES ###
# #
RED='\033[0;31m'
GREEN='\033[0;32m'
ORANGE='\033[0;33m'
CYAN='\033[0;36m'
GRAY='\033[0;37m \e[3m'
NC='\033[0m \e[0m' # No Color, No Effect
# BOLD='\033[1;97m'
sleep 1
cat <<-EOF
/\$\$\$\$\$\$ /\$\$\$\$\$\$\$\$ /\$\$ /\$\$\$\$\$\$\$ /\$\$\$\$\$\$ /\$\$\$\$\$\$\$\$
|_ \$\$_/| \$\$_____/| \$\$ | \$\$__ \$\$ /\$\$__ \$\$|__ \$\$__/
| \$\$ | \$\$ | \$\$ | \$\$ \ \$\$| \$\$ \ \$\$ | \$\$
| \$\$ | \$\$\$\$\$ | \$\$ | \$\$\$\$\$\$\$ | \$\$ | \$\$ | \$\$
| \$\$ | \$\$__/ | \$\$ | \$\$__ \$\$| \$\$ | \$\$ | \$\$
| \$\$ | \$\$ | \$\$ | \$\$ \ \$\$| \$\$ | \$\$ | \$\$
/\$\$\$\$\$\$| \$\$ | \$\$\$\$\$\$\$\$| \$\$\$\$\$\$\$/| \$\$\$\$\$\$/ | \$\$
|______/|__/ |________/|_______/ \______/ |__/
LAB COMPUTER SETUP SCRIPT - VERSION $VERSION
EOF
sleep 1
# #
### FUNCTIONS ###
# #
#run with sudo if $2 is not executable
_sudo() {
if [ -x "$2" ]; then
"$@"
else
sudo "$@"
fi
}
#feature rich logs with color support
_log() {
case "$3" in
newline) echo " " ;;
esac
case "$2" in
fatal | panic)
echo -e "${RED}[ ⚠⚠⚠ ]${NC} $1 ${RED}ABORTING...${NC}"
exit
;;
error | err) echo -e "${RED}[ !!! ]${NC} $1" ;;
warning | warn) echo -e "${ORANGE}[ ⚠ ]${NC} $1" ;;
ok | okey | done | success) echo -e "${GREEN}[ ✔ ]${NC} $1" ;;
DONE | OK) echo -e "${GREEN}[ ✔ ] $1 ${NC}" ;;
info | inf | status) echo -e "${CYAN}[ i ]${NC} $1" ;;
verbose | v | verb) echo -e "${GRAY}$1${NC}" ;;
*) echo -e "$1" ;;
esac
}
#check input and return boolean value
_checkinput() {
case "$1" in
y | Y | e | E | [yY][eE][sS]) return 1 ;;
[eE][vV]][eE][tT]) return 1 ;;
[Yy]*) return 1 ;;
[Ee]*) return 1 ;;
"" | " ") return 1 ;;
n | N | H | h | *) return 0 ;;
esac
}
#auto ask question, check answer and return boolean value
_checkanswer() {
read -p "(E/H)? " -r choice
if _checkinput "$choice" -eq 1; then
return 1
else
return 0
fi
}
#check input and exit if user not confirm progress
_continue_confirmation() {
read -p "(E/H)? " -r choice
if _checkinput "$choice" -eq 0; then
_log "Betik İptal Edildi" info
exit
fi
}
#temporasy development playground
_TMP_DEV() {
_log "\n\n --- Geliştirici Fonksiyonu Başlatıldı ---\n" info
_log "\n --- Geliştirici Fonksiyonu Sonlandırıldı ---\n\n" info
}
#prechecks for starting script
_prechecks() {
if [ "$(awk -F'^ID=' '{print $2}' /etc/os-release | awk 'NF')" != "pardus" ]; then
_log "Bu betik sadece GNU/Linux Pardus Dağıtımında (23.0 sürümü) test edilmiştir, farklı bir sistem için devam etmek betiğin çalışmaması ile sonuçlanabilir!" err
echo "Devam Etmek İstiyor Musunuz"
_continue_confirmation
else
if [ "$(awk -F'^VERSION_ID=' '{print $2}' /etc/os-release | awk 'NF')" != '"23.0"' ]; then
_log "Bu betik Pardus Dağıtımının sadece 23.0 sürümü ile test edilmiştir. Kodun belirli kısımları çalışmayabilir" warn
echo "Devam Etmek İstiyor Musunuz"
_continue_confirmation
else
_log "Pardus 23.0 sürümü saptandı" info
sleep 0.1
_log "Kurulum için gereksinimler sağlanmakta" ok
fi
fi
sleep 0.2
_log "Eğer Fatih/MEB internetine ethernet ile bağlı iseniz Sertifika kurmanız gerekebilir. Sertifikayı kurmak istiyor musunuz?" warn
if _checkanswer -eq 1; then
_log "MEB sertifikası indiriliyor..." verbose
timeout 10 wget --no-check-certificate -qO "$temp_file" "https://sertifika.meb.gov.tr/MEB_SERTIFIKASI.cer" || (_log "Sertifikayı yüklemeye çalışırken bir hata oluştu" fatal)
_log ".cer uzantılı sertifika dosyası .crt uzantılı sertifika dosyasına dönüştürülüyor..." verbose
openssl x509 -inform DER -in "$temp_file" -out "$temp_file"
_log "Sertifika /usr/local/share/ca-certificates/ dizinine taşınıyor" verbose
sudo mv "$temp_file" "/usr/local/share/ca-certificates/MEB_SERTIFIKASI.crt"
_log "Sertifika dosyasına gerekli izinler veriliyor" verbose
sudo chmod 644 /usr/local/share/ca-certificates/MEB_SERTIFIKASI.crt
_log "Sertifikalar yenileniyor..." verbose
sudo update-ca-certificates
_log "MEB Sertifikası başarılı bir şekilde kuruldu, Tarayıcılara manuel olarak eklemeniz gerekebilir" "done"
fi
}
#download other configs from git provider
_download() {
wget -O "$temp_file" "${git_repo_dest}/archive/${git_repo_tag}.tar.gz"
_log "Yapılandırma dosyalarının son sürümleri $git_provider_name üzerinden indirildi" ok
tar -xzf "$temp_file" -C "$temp_dir"
_log "Arşiv, $temp_dir dizinine ayıklandı" verbose
}
#install packages
_install() {
if [ -f "$src_dir/prerequisites.sh" ]; then
_log "Öngereklilikler Yükleniyor..." verbose
_sudo bash "$src_dir/prerequisites.sh"
_log "Öngereklilikler Yüklendi" info
fi
if [ -f "$src_dir/applications.sh" ]; then
_log "Uygulamaları yüklemek istiyor musunuz?"
if _checkanswer -eq 1; then
_log "Uygulamalar Yükleniyor..." verbose
_sudo bash "$src_dir/applications.sh"
_log "Uygulamalar Yüklendi" info
fi
fi
if [ -f "$src_dir/user-config.sh" ]; then
_log "Sistemi ayarlamak için ilgili yapılandırmaları yapmak istiyor musunuz?"
if _checkanswer -eq 1; then
_log "Kullanıcı Yapılandırmaları (sudo gerektirmeyen) Uygulanıyor..." verbose
bash "$src_dir/user-config.sh" "$src_dir"
_log "Kullanıcı Yapılandırmaları (sudo gerektirmeyen) Uygulandı..." info
sleep 1
_log "Root Yapılandırmaları Uygulanıyor..." verbose
_sudo bash "$src_dir/root-config.sh" "$src_dir"
_log "Root Yapılandırmaları Uygulandı..." info
fi
fi
if [ -f "$src_dir/system-refresh.sh" ]; then
_log "Sistemi güncellemeyi, yenilemeyi ve yeniden başlatmayı istiyor musunuz musunuz?"
if _checkanswer -eq 1; then
_log "Sistem Güncellemeleri Yükleniyor..." verbose
_sudo bash "$src_dir/system-refresh.sh"
_log "Sistem Güncellemeleri Yüklendi ve Sistem Yenilendi" info
sleep 1
_log "Yükleme İşlemi Tamamlandı" "DONE"
sleep 1
_log "Sisteminiz 2 dakika içinde yeniden başlatılacaktır" err
sleep 60
rm -rf "$temp_file" "$temp_dir"
sleep 60
sudo reboot
fi
fi
sleep 1
_log "Yükleme İşlemi Tamamlandı" "DONE"
}
#clear cache, delete temporary files
_cleanup() {
_log "Geçici Dosyalar Temizleniyor ..." info
rm -rf "$temp_file" "$temp_dir"
_log "Dosyalar Temizlendi!" "done"
exit
}
#interrupted by user
_interrupt() {
_log "Betik kullanıcı tarafından erken sonlandırılıyor" err newline
_cleanup
}
# #
### MAIN ###
# #
if [[ "$1" == "dev" ]]; then
_TMP_DEV
exit
fi
_prechecks
_download
_install