#!/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/servidores.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" "server.sh" ) ## 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