server.sh

This commit is contained in:
Halbe Bruno 2025-02-10 13:27:48 -03:00
parent 91b22ac4d7
commit e22e443894

327
server.sh Normal file
View File

@ -0,0 +1,327 @@
#!/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/halbebruno/linux/src/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/halbebruno/linux/src/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