commit 7f0710892aa7c465fb2c71c9f0e36bd952ca724b Author: Halbe Bruno Date: Mon Feb 10 12:36:33 2025 -0300 server.sh diff --git a/server.sh b/server.sh new file mode 100644 index 0000000..f397374 --- /dev/null +++ b/server.sh @@ -0,0 +1,326 @@ +#!/bin/bash +_green(){ /bin/echo -e "\033[0;32m$@\033[0m"; } +_green_n(){ /bin/echo -ne "\033[0;32m$@\033[0m"; } + +_yellow(){ /bin/echo -e "\033[0;33m$@\033[0m"; } +_yellow_n(){ /bin/echo -ne "\033[0;33m$@\033[0m"; } + +_cyan(){ /bin/echo -e "\033[0;36m$@\033[0m"; } +_lighcyan_n(){ /bin/echo -ne "\x1B[96m$@\033[0m"; } + +_red(){ /bin/echo -e "\033[0;31m$@\033[0m"; } +_red_n(){ /bin/echo -ne "\033[0;31m$@\033[0m"; } + +_blue(){ /bin/echo -e "\033[0;34m$@\033[0m"; } +_blue_n(){ /bin/echo -ne "\033[0;34m$@\033[0m"; } + +_gray(){ /bin/echo -e "\033[0;90m$@\033[0m"; } +_gray_n(){ /bin/echo -ne "\033[0;90m$@\033[0m"; } + +_lighpink(){ /bin/echo -e "\x1B[95m$@\033[0m"; } +_lighpink_n(){ /bin/echo -ne "\x1B[95m$@\033[0m"; } + +_lighwhite(){ /bin/echo -e "\x1B[97m$@\033[0m"; } +_lighwhite_n(){ /bin/echo -ne "\x1B[97m$@\033[0m"; } + +_success(){ /bin/echo -en "\x1B[97m[\033[1;32m OK \033[0m\x1B[97m]\033[0m "; /bin/echo -e "$1"; } +_failure(){ /bin/echo -en "\033[41m\e[5m\033[1;38m FAILED \033[0m "; /bin/echo -e "$1"; } +_fail() { /bin/echo -en "\033[41m\e[5m "; /bin/echo -e "\033[1;38m$1 \033[0m"; } + +_abort(){ echo; _red "ABORTED"; echo; _yellow "$1"; echo; exit "$2"; } + +## + +## funçòes do Script + +_apt() { + _cyan "Ajustando o APT e configurando os repositórios..." + + # Criando backup do sources.list antes de qualquer modificação + if [ -f /etc/apt/sources.list ]; then + _yellow "Criando backup do arquivo sources.list..." + cp /etc/apt/sources.list /etc/apt/sources.list_backup || _failure "Erro ao criar backup de sources.list" 1 + _success "Backup do arquivo sources.list criado com sucesso." + else + _red "Não foi possível realizar o backup do arquivo /etc/apt/sources.list." + return 1 + fi + + # Detectando a versão do Debian + if [ -f /etc/os-release ]; then + version=$(grep "VERSION_CODENAME=" /etc/os-release | cut -d '=' -f 2) + elif [ -f /etc/debian_version ]; then + version_number=$(cat /etc/debian_version | cut -d '.' -f 1) + case "$version_number" in + 12) version="bookworm" ;; + 11) version="bullseye" ;; + 10) version="buster" ;; + 9) version="stretch" ;; + 8) version="jessie" ;; + *) _failure "Versão do Debian não suportada." 1 ;; + esac + else + _failure "Erro ao detectar a versão do sistema. Não foi possível identificar o Debian." 1 + return 1 + fi + + if [ -z "$version" ]; then + _failure "Erro ao detectar a versão do Debian. Nenhuma alteração foi feita no arquivo sources.list." 1 + return 1 + else + _success "Versão do Debian detectada: $version" + fi + + # Limpando e recriando o arquivo sources.list + > /etc/apt/sources.list # Limpa o arquivo + cat << EOF > /etc/apt/sources.list +deb http://deb.debian.org/debian/ $version main non-free-firmware contrib non-free +deb-src http://deb.debian.org/debian/ $version main non-free-firmware contrib non-free + +deb http://security.debian.org/debian-security $version-security main non-free-firmware contrib non-free +deb-src http://security.debian.org/debian-security $version-security main non-free-firmware contrib non-free + +deb http://deb.debian.org/debian/ $version-updates main non-free-firmware contrib non-free +deb-src http://deb.debian.org/debian/ $version-updates main non-free-firmware contrib non-free + +deb http://deb.debian.org/debian $version-backports main contrib non-free +EOF + _success "sources.list atualizado para a versão $version do Debian." + + # Atualizando repositórios e exibindo a saída do comando apt update + _green "\nAtualizando repositórios..." + apt update && apt full-upgrade -y +} + +## + +_util() { + _cyan "Instalando pacotes básicos..." + + # Lista de pacotes + packages=( + firmware-linux + firmware-linux-free + firmware-linux-nonfree + bash-completion + net-tools + nftables + traceroute + tcptraceroute + htop + iotop + curl + wget + iptraf-ng + apt-transport-https + rsyslog + mtr-tiny + sudo + whois + ethtool + ) + + # Array para armazenar pacotes que falharam + pacotes_falhados=() + # Verificar e instalar pacotes + for pkg in "${packages[@]}"; do + if dpkg -l | grep -qw "$pkg"; then + _yellow "\nO pacote $pkg já está instalado." + else + _cyan "\nInstalando o pacote $pkg..." + if apt install -y "$pkg"; then + echo -e "" + _success "Pacote $pkg instalado com sucesso." + else + _red "Falha ao instalar o pacote $pkg. Ignorando este pacote." + pacotes_falhados+=("$pkg") # Adiciona o pacote falhado ao array + fi + fi + done + + # Verificar se houve falhas + if [ ${#pacotes_falhados[@]} -eq 0 ]; then + echo + _success "Todos os pacotes foram instalados com sucesso.\n" + return 0 # Retorna sucesso + else + _red "\nA instalação dos seguintes pacotes falharam:" + for failed_pkg in "${pacotes_falhados[@]}"; do + _red "- $failed_pkg" + done + echo + return 1 # Retorna 1, mas não sai do script + fi +} + +## + +_bashrc() { + _cyan "\nBaixando script de personalização do bash..." + + bash_script="https://git.ipv0.com.br/0/linux/raw/branch/master/mod/mod_bashrc" + + if curl -fsSL "$bash_script" | bash; then + echo + _success "Script de personalização do bash executado com sucesso." + echo + else + _red "\nFalha ao baixar ou executar o script bashrc.\n" + return 1 + fi +} + +## + +_motd() { + _cyan "\nBaixando script de personalização do motd..." + + motd_script="https://git.ipv0.com.br/0/linux/raw/branch/master/mod/mod_motd" + + if curl -fsSL "$motd_script" | bash; then + echo + _success "Script de personalização do motd executado com sucesso." + echo + else + _red "\nFalha ao baixar ou executar o script motd.\n" + return 1 + fi +} + +_teccnia() { + ## Variáveis + REPO_URL="https://git.ipv0.com.br/teccnia/servers.git" + CLONE_DIR="/opt/teccnia/tools" + BIN_DIR="/usr/bin" + + ## Clonar o repositório sem criar a pasta 'Servers' + if [ -d "$CLONE_DIR/.git" ]; then + _cyan "\nO sistema já possui as ferramentas TECCNIA. Atualizando..." + git -C "$CLONE_DIR" pull + else + _cyan "\nObtendo ferramentas TECCNIA..." + git clone "$REPO_URL" "$CLONE_DIR" + fi + + ## Verificar se o clone foi bem-sucedido + if [ $? -ne 0 ]; then + _red "\nFalha ao clonar o repositório.\n" + return 1 + fi + + ## Lista de arquivos/diretórios a serem removidos + remover_itens=( + "*.md" + "*.txt" + ) + + ## Remover arquivos ou diretórios indesejados + for item in "${remover_itens[@]}"; do + if [[ $item == *\** ]]; then + rm -rf "$CLONE_DIR"/$item + else + rm -rf "$CLONE_DIR/$item" + fi + done + + ## Dar permissão de execução a todos os arquivos restantes + _cyan "\nAjustando permissões de execução..." + find "$CLONE_DIR" -type f -exec chmod +x {} \; + + ## Criar links simbólicos para todos os arquivos no /usr/bin/ + _cyan "\nCriando links simbólicos para os scripts..." + for script in "$CLONE_DIR"/*; do + script_name=$(basename "$script") + ln -sf "$CLONE_DIR/$script_name" "$BIN_DIR/$script_name" + done + + echo + _success "Ferramentas TECCNIA instaladas!" + echo + +} + +## + +# Exibir mensagem inicial +_blue "\n + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + " +_blue " | |" +_blue " | Tweaks pós instalação servidor Debian |" +_blue " | |" +_blue " + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +\n" + +echo -e "\n Para mais informações, visite o link do projeto:" +echo -e " https://git.ipv0.com.br/0/linux" + +# Confirmar execução do script +read -p " Você deseja prosseguir? (S/n): " response < /dev/tty +if [[ "$response" =~ ^([Nn][Oo]?|)$ ]]; then + _red "\n Operação cancelada pelo usuário!\n" + exit 0 +fi + +## Verifica se o usuário é root +if [ "$EUID" -ne 0 ]; then + _red "\n Você deve ser root para executar este script!\n" + exit 1 +fi + +# Verificação do sistema operacional +if [ -f /etc/os-release ]; then + distro=$(grep ^ID= /etc/os-release | cut -d '=' -f 2 | tr -d '"') # Obtém o nome da distribuição (debian, ubuntu, etc.) +else + _red "\n Não foi possível determinar a distribuição. O arquivo /etc/os-release não existe.\n" + exit 1 +fi + +case "$distro" in + debian) + # Se for Debian, segue sem exibir mensagens + ;; + ubuntu) + _yellow "\n ATENÇÃO!!!" + _yellow " Distribuição Ubuntu detectada. Este script foi feito para distribuições" + _yellow " Debian. Erros poderão ocorrer durante a execução do script.\n" + read -p "Deseja continuar mesmo assim? (s/N): " choice + case "$choice" in + [Ss]*) + _yellow "\nContinuando com a execução...\n" + ;; + *) + _red "\nScript encerrado pelo usuário.\n" + exit 1 + ;; + esac + ;; + *) + _red "\n A distribuição $distro não é compatível com este script.\n" + exit 1 + ;; +esac + +# Executa funções + +_apt + +# Controle de fluxo função _util +# Se houver falha na instalação dos pacotes, encerra o script +if ! _util; then + _red "Falhas ocorreram na instalação dos pacotes. Verifique as mensagens acima." + exit 1 # Encerra o script aqui, se necessário +fi + +_bashrc +_motd +_teccnia + +# fim! + +_green "\n Todos os ajustes foram realizados!" +echo -e "\n Reinicie o sistema para aplicar todas as alterações realizadas." +read -p " Deseja reiniciar agora? (S/n): " response < /dev/tty +if [[ "$response" =~ ^([Ss][Ii]?)$ ]]; then + _cyan "\n Reiniciando o sistema..." + sudo reboot +else + echo -e "" +fi \ No newline at end of file