2022-10-10 21:08:58 +03:00
#!/bin/bash
2023-10-21 04:07:24 +03:00
# Izmir Science High School - Computer Lab Setup Script
# Install prerequisites, applications, tools; set up configs etc.
# 2022 - 2023 © Aliberk Sandı kçı
# run quickly:
2023-10-21 23:00:57 +03:00
# wget -qO- https://raw.githubusercontent.com/asandikci/iflbot-setup/main/install.sh | bash <(cat) </dev/tty
2022-12-07 09:52:56 +03:00
# Error Handling
set -e
2023-10-21 04:07:24 +03:00
trap _interrupt HUP INT TERM
trap _cleanup EXIT
2022-12-07 09:52:56 +03:00
2023-10-21 04:07:24 +03:00
# #
### VARIABLES ###
# #
2023-10-23 18:02:43 +03:00
VERSION = "10.23-4"
2023-10-21 04:07:24 +03:00
AUTHOR = "asandikci"
2022-12-07 09:52:56 +03:00
temp_file = " $( mktemp -u) "
temp_dir = " $( mktemp -d) "
2023-10-21 04:07:24 +03:00
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
2023-10-22 00:53:55 +03:00
# BOLD='\033[1;97m'
2022-12-07 09:52:56 +03:00
2023-10-21 23:10:17 +03:00
sleep 1
2022-12-07 09:52:56 +03:00
cat <<-EOF
/\$ \$ \$ \$ \$ \$ /\$ \$ \$ \$ \$ \$ \$ \$ /\$ \$ /\$ \$ \$ \$ \$ \$ \$ /\$ \$ \$ \$ \$ \$ /\$ \$ \$ \$ \$ \$ \$ \$
| _ \$ \$ _/| \$ \$ _____/| \$ \$ | \$ \$ __ \$ \$ /\$ \$ __ \$ \$ | __ \$ \$ __/
| \$ \$ | \$ \$ | \$ \$ | \$ \$ \ \$ \$ | \$ \$ \ \$ \$ | \$ \$
| \$ \$ | \$ \$ \$ \$ \$ | \$ \$ | \$ \$ \$ \$ \$ \$ \$ | \$ \$ | \$ \$ | \$ \$
| \$ \$ | \$ \$ __/ | \$ \$ | \$ \$ __ \$ \$ | \$ \$ | \$ \$ | \$ \$
| \$ \$ | \$ \$ | \$ \$ | \$ \$ \ \$ \$ | \$ \$ | \$ \$ | \$ \$
/\$ \$ \$ \$ \$ \$ | \$ \$ | \$ \$ \$ \$ \$ \$ \$ \$ | \$ \$ \$ \$ \$ \$ \$ /| \$ \$ \$ \$ \$ \$ / | \$ \$
| ______/| __/ | ________/| _______/ \_ _____/ | __/
LAB COMPUTER SETUP SCRIPT - VERSION $VERSION
EOF
2023-10-21 23:10:17 +03:00
sleep 1
2022-12-07 09:52:56 +03:00
2023-10-21 04:07:24 +03:00
# #
### FUNCTIONS ###
# #
2022-12-07 09:52:56 +03:00
#run with sudo if $2 is not executable
_sudo( ) {
if [ -x " $2 " ] ; then
" $@ "
else
sudo " $@ "
fi
}
2023-10-21 04:07:24 +03:00
#feature rich logs with color support
_log( ) {
2023-10-21 23:00:57 +03:00
case " $3 " in
newline) echo " " ; ;
esac
2023-10-21 04:07:24 +03:00
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 " ; ;
2023-10-21 04:19:46 +03:00
DONE | OK) echo -e " ${ GREEN } [ ✔ ] $1 ${ NC } " ; ;
2023-10-21 04:07:24 +03:00
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 ; ;
2023-10-23 16:47:07 +03:00
"" | " " ) return 1 ; ;
2023-10-21 04:07:24 +03:00
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( ) {
2023-10-21 23:00:57 +03:00
_log "\n\n --- Geliştirici Fonksiyonu Başlatı ldı ---\n" info
2023-10-21 04:07:24 +03:00
2023-10-21 23:00:57 +03:00
_log "\n --- Geliştirici Fonksiyonu Sonlandı rı ldı ---\n\n" info
2023-10-21 04:07:24 +03:00
}
#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 -qO " $temp_file " "http://sertifika.meb.gov.tr/MEB_SERTIFIKASI.cer" || ( _log "Sertifikayı yüklemeye çalı şı rken bir hata oluştu" fatal)
echo ".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 "
2022-12-07 09:52:56 +03:00
2023-10-21 04:07:24 +03:00
echo "Sertifika /usr/local/share/ca-certificates/ dizinine taşı nı yor" verbose
sudo mv " $temp_file " "/usr/local/share/ca-certificates/MEB_SERTIFIKASI.crt"
2022-12-07 09:52:56 +03:00
2023-10-21 04:07:24 +03:00
echo "Sertifika dosyası na gerekli izinler veriliyor" verbose
sudo chmod 644 /usr/local/share/ca-certificates/MEB_SERTIFIKASI.crt
2022-12-07 09:52:56 +03:00
2023-10-21 04:07:24 +03:00
echo "Sertifikalar yenileniyor..." verbose
sudo update-ca-certificates
2022-12-07 09:52:56 +03:00
2023-10-21 04:07:24 +03:00
_log "MEB Sertifikası başarı lı bir şekilde kuruldu, Tarayı cı lara manuel olarak eklemeniz gerekebilir" "done"
fi
2022-12-07 09:52:56 +03:00
}
2023-10-21 04:07:24 +03:00
#download other configs from git provider
2022-12-07 09:52:56 +03:00
_download( ) {
2023-10-21 04:07:24 +03:00
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
2022-12-07 09:52:56 +03:00
tar -xzf " $temp_file " -C " $temp_dir "
2023-10-21 04:07:24 +03:00
_log " Arşiv, $temp_dir dizinine ayı klandı " verbose
2022-12-07 09:52:56 +03:00
}
#install packages
_install( ) {
if [ -f " $src_dir /prerequisites.sh " ] ; then
2023-10-21 23:00:57 +03:00
_log "Öngereklilikler Yükleniyor..." verbose
2022-12-07 09:52:56 +03:00
_sudo bash " $src_dir /prerequisites.sh "
2023-10-21 23:00:57 +03:00
_log "Öngereklilikler Yüklendi" info
2022-12-07 09:52:56 +03:00
fi
if [ -f " $src_dir /applications.sh " ] ; then
2023-10-21 23:00:57 +03:00
_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
2022-12-07 09:52:56 +03:00
fi
2023-10-23 17:16:04 +03:00
if [ -f " $src_dir /user-config.sh " ] ; then
2023-10-21 23:00:57 +03:00
_log "Sistemi ayarlamak için ilgili yapı landı rmaları yapmak istiyor musunuz?"
if _checkanswer -eq 1; then
2023-10-23 17:16:04 +03:00
_log "Kullanı cı Yapı landı rmaları (sudo gerektirmeyen) Uygulanı yor..." verbose
2023-10-23 17:18:23 +03:00
bash " $src_dir /user-config.sh "
2023-10-23 17:16:04 +03:00
_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 "
2023-10-23 17:18:23 +03:00
_log "Root Yapı landı rmaları Uygulandı ..." info
2023-10-23 17:16:04 +03:00
2023-10-21 23:00:57 +03:00
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
2023-10-23 17:22:14 +03:00
sudo reboot
2023-10-21 23:00:57 +03:00
fi
2022-12-07 09:52:56 +03:00
fi
2023-10-21 04:07:24 +03:00
sleep 1
_log "Yükleme İşlemi Tamamlandı " "DONE"
2022-12-07 09:52:56 +03:00
}
#clear cache, delete temporary files
_cleanup( ) {
2023-10-21 04:07:24 +03:00
_log "Geçici Dosyalar Temizleniyor ..." info
2022-12-07 09:52:56 +03:00
rm -rf " $temp_file " " $temp_dir "
2023-10-21 04:07:24 +03:00
_log "Dosyalar Temizlendi!" "done"
exit
2022-12-07 09:52:56 +03:00
}
2023-10-21 04:07:24 +03:00
#interrupted by user
_interrupt( ) {
2023-10-21 23:00:57 +03:00
_log "Betik kullanı cı tarafı ndan erken sonlandı rı lı yor" err newline
2023-10-21 04:07:24 +03:00
_cleanup
}
# #
### MAIN ###
# #
if [ [ " $1 " = = "dev" ] ] ; then
_TMP_DEV
exit
2022-10-27 08:31:55 +03:00
fi
2023-10-21 04:07:24 +03:00
_prechecks
2022-12-07 09:52:56 +03:00
_download
2023-10-21 23:00:57 +03:00
_install