iflbot-setup/install.sh

263 lines
7.6 KiB
Bash
Raw Normal View History

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ıı
# 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 ###
# #
VERSION="23.10.21-0"
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
_sudo bash "$src_dir/user-config.sh"
_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"
_log "Root Yapılandırmaları Uygulandı..." verbose
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
reboot
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