From 33e70b1c3c648af3a3ce2b9e390c3d31ee4eda21 Mon Sep 17 00:00:00 2001 From: Evandro Date: Mon, 13 Oct 2025 11:10:55 -0300 Subject: [PATCH 1/4] melhoria checagem de pacotes iniciais --- install.sh | 274 +++++++++++++++++++++++++++-------------------------- 1 file changed, 140 insertions(+), 134 deletions(-) diff --git a/install.sh b/install.sh index d335c58..9687a0d 100755 --- a/install.sh +++ b/install.sh @@ -11,24 +11,7 @@ cat << "EOF" ╚═════╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ EOF -# Perguntar idioma antes de qualquer saída relevante -read -p "Escolha o idioma / Elija el idioma (pt/es) [pt]: " CLI_LANG -CLI_LANG=${CLI_LANG:-pt} -mkdir -p "$HOME/.girus" -echo "language: $CLI_LANG" > "$HOME/.girus/config.yaml" - -# Função simples para traduzir mensagens -t() { - local pt="$1" - local es="$2" - if [ "$CLI_LANG" = "es" ]; then - eval echo "\"$es\"" - else - eval echo "\"$pt\"" - fi -} - -echo -e "\n$(t 'Script de Instalação - Versão 0.3.0 - Codename: Maracatu' 'Script de Instalación - Versión 0.3.0 - Codename: Maracatu')\n" +echo -e "\nScript de Instalação - Versão 0.1.0 - Codename: Maracatu\n" # Verificar se o terminal é interativo IS_INTERACTIVE=0 @@ -58,8 +41,8 @@ ask_user() { # Verificar se o script está sendo executado como root (sudo) if [ "$(id -u)" -eq 0 ]; then - echo "$(t '❌ ERRO: Este script não deve ser executado como root ou com sudo.' '❌ ERROR: Este script no debe ejecutarse como root o con sudo.')" - echo "$(t ' Por favor, execute sem sudo. O script solicitará elevação quando necessário.' ' Por favor, ejecútelo sin sudo. El script solicitará elevación cuando sea necesario.')" + echo "❌ ERRO: Este script não deve ser executado como root ou com sudo." + echo " Por favor, execute sem sudo. O script solicitará elevação quando necessário." exit 1 fi @@ -79,7 +62,7 @@ if [ "$OS" == "linux" ]; then DISTRO="" if [ -r /etc/os-release ]; then DISTRO="$(. /etc/os-release && echo "$ID")" - fi + fi fi # Detectar a arquitetura @@ -92,32 +75,32 @@ case "$ARCH_RAW" in *) ARCH="unknown" ;; esac -echo "$(t 'Sistema operacional detectado: $OS' 'Sistema operativo detectado: $OS')" -echo "$(t 'Arquitetura detectada: $ARCH' 'Arquitectura detectada: $ARCH')" +echo "Sistema operacional detectado: $OS" +echo "Arquitetura detectada: $ARCH" # Verificar se o sistema operacional é suportado if [ "$OS" == "unknown" ]; then - echo "$(t '❌ Sistema operacional não suportado: $(uname -s)' '❌ Sistema operativo no soportado: $(uname -s)')" + echo "❌ Sistema operacional não suportado: $(uname -s)" exit 1 fi # Verificar se a arquitetura é suportada if [ "$ARCH" == "unknown" ]; then - echo "$(t '❌ Arquitetura não suportada: $ARCH_RAW' '❌ Arquitectura no soportada: $ARCH_RAW')" + echo "❌ Arquitetura não suportada: $ARCH_RAW" exit 1 fi # Configurações e variáveis -GIRUS_VERSION="v0.3.0" +GIRUS_VERSION="v0.1.0" # Definir URL com base no sistema operacional e arquitetura if [ "$OS" == "windows" ]; then - BINARY_URL="https://github.com/badtuxx/girus-cli/releases/download/$GIRUS_VERSION/girus-cli-$OS-$ARCH.exe" + BINARY_URL="https://github.com/badtuxx/girus-cli/releases/download/$GIRUS_VERSION/girus-$OS-$ARCH.exe" else - BINARY_URL="https://github.com/badtuxx/girus-cli/releases/download/$GIRUS_VERSION/girus-cli-$OS-$ARCH" + BINARY_URL="https://github.com/badtuxx/girus-cli/releases/download/$GIRUS_VERSION/girus-$OS-$ARCH" fi -echo "$(t 'URL de download: $BINARY_URL' 'URL de descarga: $BINARY_URL')" +echo "URL de download: $BINARY_URL" ORIGINAL_DIR=$(pwd) TEMP_DIR=$(mktemp -d) trap 'rm -rf "$TEMP_DIR"' EXIT @@ -140,21 +123,20 @@ check_download_tool() { # Função para instalar Docker install_docker() { - echo "$(t 'Instalando Docker...' 'Instalando Docker...')" - + echo "Instalando Docker..." if [[ "$OS" == "linux" && "$DISTRO" != "rocky" ]]; then # Linux (script de conveniência do Docker) - echo "$(t 'Baixando o script de instalação do Docker...' 'Descargando el script de instalación de Docker...')" + echo "Baixando o script de instalação do Docker..." curl -fsSL https://get.docker.com -o get-docker.sh - echo "$(t 'Executando o script de instalação (será solicitada senha de administrador)...' 'Ejecutando el script de instalación (se solicitará contraseña de administrador)...')" + echo "Executando o script de instalação (será solicitada senha de administrador)..." sudo sh get-docker.sh # Adicionar usuário atual ao grupo docker - echo "$(t 'Adicionando usuário atual ao grupo docker...' 'Añadiendo el usuario actual al grupo docker...')" + echo "Adicionando usuário atual ao grupo docker..." sudo usermod -aG docker $USER # Iniciar o serviço - echo "$(t 'Iniciando o serviço Docker...' 'Iniciando el servicio Docker...')" + echo "Iniciando o serviço Docker..." sudo systemctl enable --now docker # Limpar arquivo de instalação @@ -162,45 +144,45 @@ install_docker() { elif [[ "$OS" == "linux" && "$DISTRO" == "rocky" ]]; then # instalando docker no rocky linux (padrão podman) - echo "$(t 'Instalando o docker (será solicitada senha de administrador)...' 'Instalando Docker (se solicitará contraseña de administrador)...')" - echo "$(t 'Adicionando repositório do docker...' 'Añadiendo repositorio de docker...')" + echo "Instalando o docker (será solicitada senha de administrador)..." + echo "Adicionando repositório do docker..." sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo sudo dnf -yq install docker-ce docker-ce-cli containerd.io docker-compose-plugin # Adicionar usuário atual ao grupo docker - echo "$(t 'Adicionando usuário atual ao grupo docker...' 'Añadiendo el usuario actual al grupo docker...')" + echo "Adicionando usuário atual ao grupo docker..." sudo usermod -aG docker $USER # Iniciar o serviço - echo "$(t 'Iniciando o serviço Docker...' 'Iniciando el servicio Docker...')" + echo "Iniciando o serviço Docker..." sudo systemctl enable --now docker elif [ "$OS" == "darwin" ]; then # MacOS - echo "$(t 'No macOS, o Docker Desktop precisa ser instalado manualmente.' 'En macOS, Docker Desktop debe instalarse manualmente.')" - echo "$(t 'Por favor, baixe e instale o Docker Desktop para Mac:' 'Por favor, descarga e instala Docker Desktop para Mac:')" + echo "No macOS, o Docker Desktop precisa ser instalado manualmente." + echo "Por favor, baixe e instale o Docker Desktop para Mac:" echo "https://docs.docker.com/desktop/mac/install/" - echo "$(t 'Após a instalação, reinicie seu terminal e execute este script novamente.' 'Después de la instalación, reinicia tu terminal y ejecuta este script nuevamente.')" + echo "Após a instalação, reinicie seu terminal e execute este script novamente." exit 1 elif [ "$OS" == "windows" ]; then # Windows - echo "$(t 'No Windows, o Docker Desktop precisa ser instalado manualmente.' 'En Windows, Docker Desktop debe instalarse manualmente.')" - echo "$(t 'Por favor, baixe e instale o Docker Desktop para Windows:' 'Por favor, descarga e instala Docker Desktop para Windows:')" + echo "No Windows, o Docker Desktop precisa ser instalado manualmente." + echo "Por favor, baixe e instale o Docker Desktop para Windows:" echo "https://docs.docker.com/desktop/windows/install/" - echo "$(t 'Após a instalação, reabra o terminal e execute este script novamente.' 'Después de la instalación, vuelve a abrir la terminal y ejecuta este script nuevamente.')" + echo "Após a instalação, reabra o terminal e execute este script novamente." exit 1 fi # Verificar a instalação if ! command -v docker &> /dev/null; then - echo "$(t '❌ Falha ao instalar o Docker.' '❌ Error al instalar Docker.')" - echo "$(t 'Por favor, instale manualmente seguindo as instruções em https://docs.docker.com/engine/install/' 'Por favor, instálalo manualmente siguiendo las instrucciones en https://docs.docker.com/engine/install/')" + echo "❌ Falha ao instalar o Docker." + echo "Por favor, instale manualmente seguindo as instruções em https://docs.docker.com/engine/install/" exit 1 fi - echo "$(t 'Docker instalado com sucesso!' 'Docker instalado con éxito!')" - echo "$(t 'NOTA: Pode ser necessário reiniciar seu sistema ou fazer logout/login para que as permissões de grupo sejam aplicadas.' 'NOTA: Puede ser necesario reiniciar tu sistema o cerrar sesión/iniciar sesión para aplicar los permisos del grupo.')" + echo "Docker instalado com sucesso!" + echo "NOTA: Pode ser necessário reiniciar seu sistema ou fazer logout/login para que as permissões de grupo sejam aplicadas." } # Função para instalar Kind @@ -209,35 +191,35 @@ install_kind() { if [ "$OS" == "linux" ] || [ "$OS" == "darwin" ]; then # Linux/Mac - curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname)-${ARCH} + curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname)-amd64 chmod +x ./kind sudo mv ./kind /usr/local/bin/kind elif [ "$OS" == "windows" ]; then # Windows - echo "$(t 'Instalação automática do Kind não suportada no Windows.' 'La instalación automática de Kind no es compatible en Windows.')" - echo "$(t 'Por favor, baixe e instale Kind manualmente:' 'Por favor, descarga e instala Kind manualmente:')" + echo "Instalação automática do Kind não suportada no Windows." + echo "Por favor, baixe e instale Kind manualmente:" echo "https://kind.sigs.k8s.io/docs/user/quick-start/#installation" - echo "$(t 'Após a instalação, reabra o terminal e execute este script novamente.' 'Después de la instalación, vuelve a abrir la terminal y ejecuta este script nuevamente.')" + echo "Após a instalação, reabra o terminal e execute este script novamente." exit 1 fi # Verificar a instalação if ! command -v kind &> /dev/null; then - echo "$(t 'Falha ao instalar o Kind. Por favor, instale manualmente.' 'Error al instalar Kind. Por favor, instálalo manualmente.')" + echo "Falha ao instalar o Kind. Por favor, instale manualmente." exit 1 fi - echo "$(t 'Kind instalado com sucesso!' 'Kind instalado con éxito!')" + echo "Kind instalado com sucesso!" } # Função para instalar Kubectl install_kubectl() { - echo "$(t 'Instalando Kubectl...' 'Instalando Kubectl...')" + echo "Instalando Kubectl..." if [ "$OS" == "linux" ]; then # Linux - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl" + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ @@ -246,27 +228,27 @@ install_kubectl() { if command -v brew &> /dev/null; then brew install kubectl else - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/${ARCH}/kubectl" + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ fi elif [ "$OS" == "windows" ]; then # Windows - echo "$(t 'Instalação automática do Kubectl não suportada no Windows.' 'La instalación automática de Kubectl no es compatible en Windows.')" - echo "$(t 'Por favor, baixe e instale Kubectl manualmente:' 'Por favor, descarga e instala Kubectl manualmente:')" + echo "Instalação automática do Kubectl não suportada no Windows." + echo "Por favor, baixe e instale Kubectl manualmente:" echo "https://kubernetes.io/docs/tasks/tools/install-kubectl/" - echo "$(t 'Após a instalação, reabra o terminal e execute este script novamente.' 'Después de la instalación, vuelve a abrir la terminal y ejecuta este script nuevamente.')" + echo "Após a instalação, reabra o terminal e execute este script novamente." exit 1 fi # Verificar a instalação if ! command -v kubectl &> /dev/null; then - echo "$(t 'Falha ao instalar o Kubectl. Por favor, instale manualmente.' 'Error al instalar Kubectl. Por favor, instálalo manualmente.')" + echo "Falha ao instalar o Kubectl. Por favor, instale manualmente." exit 1 fi - echo "$(t 'Kubectl instalado com sucesso!' 'Kubectl instalado con éxito!')" + echo "Kubectl instalado com sucesso!" } # Função para verificar se o Docker está em execução @@ -288,7 +270,7 @@ check_glibc_version() { if command -v ldd &> /dev/null; then GLIBC_VERSION=$(ldd --version | head -n 1 | grep -oP '\d+\.\d+' | head -n 1) if [ -z "$GLIBC_VERSION" ]; then - echo "$(t '❌ Não foi possível detectar a versão do GLIBC.' '❌ No fue posible detectar la versión de GLIBC.')" + echo "❌ Não foi possível detectar a versão do GLIBC." return 1 fi @@ -297,15 +279,15 @@ check_glibc_version() { MIN_GLIBC_VERSION_NUM=2.17 if (( $(echo "$GLIBC_VERSION_NUM >= $MIN_GLIBC_VERSION_NUM" | bc -l) )); then - echo "$(t '✅ GLIBC versão $GLIBC_VERSION detectada (mínimo requerido: 2.17)' '✅ GLIBC versión $GLIBC_VERSION detectada (mínimo requerido: 2.17)')" + echo "✅ GLIBC versão $GLIBC_VERSION detectada (mínimo requerido: 2.17)" return 0 else - echo "$(t '❌ GLIBC versão $GLIBC_VERSION detectada (mínimo requerido: 2.17)' '❌ GLIBC versión $GLIBC_VERSION detectada (mínimo requerido: 2.17)')" - echo "$(t 'Por favor, atualize o GLIBC para uma versão mais recente.' 'Por favor, actualiza GLIBC a una versión más reciente.')" + echo "❌ GLIBC versão $GLIBC_VERSION detectada (mínimo requerido: 2.17)" + echo "Por favor, atualize o GLIBC para uma versão mais recente." return 1 fi else - echo "$(t '❌ Comando ldd não encontrado. Não foi possível verificar a versão do GLIBC.' '❌ Comando ldd no encontrado. No fue posible verificar la versión de GLIBC.')" + echo "❌ Comando ldd não encontrado. Não foi possível verificar a versão do GLIBC." return 1 fi } @@ -338,21 +320,21 @@ check_previous_install() { # Verificar instalações anteriores for location in "${install_locations[@]}"; do if [ -f "$location" ]; then - echo "$(t '⚠️ Instalação anterior encontrada em: $location' '⚠️ Instalación anterior encontrada en: $location')" + echo "⚠️ Instalação anterior encontrada em: $location" previous_install_found=true fi done # Se uma instalação anterior foi encontrada, perguntar sobre limpeza if [ "$previous_install_found" = true ]; then - ask_user "$(t 'Deseja remover a(s) instalação(ões) anterior(es)? (S/n): ' '¿Desea remover la(s) instalación(es) anterior(es)? (S/n): ')" "S" "CLEAN_INSTALL" + ask_user "Deseja remover a(s) instalação(ões) anterior(es)? (S/n): " "S" "CLEAN_INSTALL" if [[ "$CLEAN_INSTALL" =~ ^[Ss]$ ]]; then - echo "$(t '🧹 Removendo instalações anteriores...' '🧹 Eliminando instalaciones anteriores...')" + echo "🧹 Removendo instalações anteriores..." for location in "${install_locations[@]}"; do if [ -f "$location" ]; then - echo "$(t 'Removendo $location' 'Eliminando $location')" + echo "Removendo $location" if [[ "$location" == "/usr/local/bin/girus" || "$location" == "/usr/bin/girus" ]]; then sudo rm -f "$location" else @@ -361,47 +343,44 @@ check_previous_install() { fi done - echo "$(t '✅ Limpeza concluída.' '✅ Limpieza completada.')" + echo "✅ Limpeza concluída." else - echo "$(t 'Continuando com a instalação sem remover versões anteriores.' 'Continuando la instalación sin eliminar versiones anteriores.')" + echo "Continuando com a instalação sem remover versões anteriores." fi else - echo "$(t '✅ Nenhuma instalação anterior do Girus CLI encontrada.' '✅ No se encontró una instalación previa de Girus CLI.')" + echo "✅ Nenhuma instalação anterior do Girus CLI encontrada." fi } # Função para baixar e instalar o binário download_and_install() { - echo "$(t '📥 Baixando o Girus CLI versão $GIRUS_VERSION para $OS-$ARCH...' '📥 Descargando Girus CLI versión $GIRUS_VERSION para $OS-$ARCH...')" + echo "📥 Baixando o Girus CLI versão $GIRUS_VERSION para $OS-$ARCH..." cd "$TEMP_DIR" # Verificar qual ferramenta de download está disponível DOWNLOAD_TOOL=$(check_download_tool) if [ "$DOWNLOAD_TOOL" == "curl" ]; then - echo "$(t 'Usando curl para download de: $BINARY_URL' 'Usando curl para descargar de: $BINARY_URL')" - echo "$(t 'Executando: curl -L --progress-bar \"$BINARY_URL\" -o girus' 'Ejecutando: curl -L --progress-bar \"$BINARY_URL\" -o girus')" + echo "Usando curl para download de: $BINARY_URL" + echo "Executando: curl -L --progress-bar \"$BINARY_URL\" -o girus" if ! curl -L --progress-bar "$BINARY_URL" -o girus; then - echo "$(t '❌ Erro no curl. Tentando com opções de debug...' '❌ Error en curl. Probando con opciones de depuración...')" + echo "❌ Erro no curl. Tentando com opções de debug..." curl -L -v "$BINARY_URL" -o girus fi - elif [ "$DOWNLOAD_TOOL" == "wget" ]; then - echo "$(t 'Usando wget para download de: $BINARY_URL' 'Usando wget para descargar de: $BINARY_URL')" - echo "$(t 'Executando: wget --show-progress -q \"$BINARY_URL\" -O girus' 'Ejecutando: wget --show-progress -q \"$BINARY_URL\" -O girus')" + else + echo "Usando wget para download de: $BINARY_URL" + echo "Executando: wget --show-progress -q \"$BINARY_URL\" -O girus" if ! wget --show-progress -q "$BINARY_URL" -O girus; then - echo "$(t '❌ Erro no wget. Tentando com opções de debug...' '❌ Error en wget. Probando con opciones de depuración...')" + echo "❌ Erro no wget. Tentando com opções de debug..." wget -v "$BINARY_URL" -O girus fi - else - echo "$(t '❌ Erro: curl ou wget não encontrados. Por favor, instale um deles e tente novamente.' '❌ Error: curl o wget no encontrados. Por favor, instala uno de ellos e inténtalo de nuevo.')" - exit 1 fi # Verificar se o download foi bem-sucedido if [ ! -f girus ] || [ ! -s girus ]; then - echo "$(t '❌ Erro: Falha ao baixar o Girus CLI.' '❌ Error: Fallo al descargar Girus CLI.')" - echo "$(t 'URL: $BINARY_URL' 'URL: $BINARY_URL')" - echo "$(t 'Verifique sua conexão com a internet e se a versão $GIRUS_VERSION está disponível.' 'Verifica tu conexión a internet y si la versión $GIRUS_VERSION está disponible.')" + echo "❌ Erro: Falha ao baixar o Girus CLI." + echo "URL: $BINARY_URL" + echo "Verifique sua conexão com a internet e se a versão $GIRUS_VERSION está disponível." exit 1 fi @@ -409,19 +388,19 @@ download_and_install() { chmod +x girus # Perguntar se o usuário deseja instalar no PATH - echo "$(t '🔧 Girus CLI baixado com sucesso.' '🔧 Girus CLI descargado con éxito.')" - ask_user "$(t 'Deseja instalar o Girus CLI em /usr/local/bin? (S/n): ' '¿Desea instalar el Girus CLI en /usr/local/bin? (S/n): ')" "S" "INSTALL_GLOBALLY" + echo "🔧 Girus CLI baixado com sucesso." + ask_user "Deseja instalar o Girus CLI em /usr/local/bin? (S/n): " "S" "INSTALL_GLOBALLY" if [[ "$INSTALL_GLOBALLY" =~ ^[Ss]$ ]]; then - echo "$(t '📋 Instalando o Girus CLI em /usr/local/bin/girus...' '📋 Instalando Girus CLI en /usr/local/bin/girus...')" + echo "📋 Instalando o Girus CLI em /usr/local/bin/girus..." sudo mv girus /usr/local/bin/ - echo "$(t '✅ Girus CLI instalado com sucesso em /usr/local/bin/girus' '✅ Girus CLI instalado con éxito en /usr/local/bin/girus')" - echo "$(t ' Você pode executá-lo de qualquer lugar com o comando '\''girus'\''' ' Puede ejecutarlo desde cualquier lugar con el comando '\''girus'\''')" + echo "✅ Girus CLI instalado com sucesso em /usr/local/bin/girus" + echo " Você pode executá-lo de qualquer lugar com o comando 'girus'" else # Copiar para o diretório original cp girus "$ORIGINAL_DIR/" - echo "$(t '✅ Girus CLI copiado para o diretório atual: $(realpath "$ORIGINAL_DIR/girus")' '✅ Girus CLI copiado al directorio actual: $(realpath "$ORIGINAL_DIR/girus")')" - echo "$(t ' Você pode executá-lo com: '\''./girus'\''' ' Puede ejecutarlo con: '\''./girus'\''')" + echo "✅ Girus CLI copiado para o diretório atual: $(realpath "$ORIGINAL_DIR/girus")" + echo " Você pode executá-lo com: './girus'" fi } @@ -431,33 +410,33 @@ verify_all_dependencies() { # Verificar Docker if command -v docker &> /dev/null && check_docker_running; then - echo "$(t '✅ Docker está instalado e em execução.' '✅ Docker está instalado y en ejecución.')" + echo "✅ Docker está instalado e em execução." else - echo "$(t '❌ Docker não está instalado, não está em execução ou logout/login pendente.' '❌ Docker no está instalado, no está en ejecución o requiere cerrar sesión/iniciar sesión.')" + echo "❌ Docker não está instalado, não está em execução ou logout/login pendente." all_deps_ok=false fi # Verificar Kind if command -v kind &> /dev/null; then - echo "$(t '✅ Kind está instalado.' '✅ Kind está instalado.')" + echo "✅ Kind está instalado." else - echo "$(t '❌ Kind não está instalado.' '❌ Kind no está instalado.')" + echo "❌ Kind não está instalado." all_deps_ok=false fi # Verificar Kubectl if command -v kubectl &> /dev/null; then - echo "$(t '✅ Kubectl está instalado.' '✅ Kubectl está instalado.')" + echo "✅ Kubectl está instalado." else - echo "$(t '❌ Kubectl não está instalado.' '❌ Kubectl no está instalado.')" + echo "❌ Kubectl não está instalado." all_deps_ok=false fi # Verificar Girus CLI e GLIBC if check_girus_in_path; then - echo "$(t '✅ Girus CLI está instalado e disponível no PATH.' '✅ Girus CLI está instalado y disponible en el PATH.')" + echo "✅ Girus CLI está instalado e disponível no PATH." else - echo "$(t '⚠️ Girus CLI não está disponível no PATH.' '⚠️ Girus CLI no está disponible en el PATH.')" + echo "⚠️ Girus CLI não está disponível no PATH." all_deps_ok=false fi @@ -465,22 +444,49 @@ verify_all_dependencies() { } # Iniciar mensagem principal -echo "$(t '=== Iniciando instalação do Girus CLI ===' '=== Iniciando instalación del Girus CLI ===')" +echo "=== Iniciando instalação do Girus CLI ===" # Verificar e limpar instalações anteriores check_previous_install +# Verificando pacotes necessarios para instalação +echo "=== Verificando pacotes necessários ===" + +CHECK=$(check_download_tool) +if [ "$CHECK" == "none" ]; then + echo "❌ Erro: curl ou wget não encontrados. Por favor, instale um deles e tente novamente." + exit 1 +else + echo "✅ $CHECK encontrado." +fi + +# Checa se bc está instalado para comparação numérica + +if command -v bc &> /dev/null; then + echo "Pacote bc encontrado." + return 0 +else + echo "Comando bc não encontrado. Instalando:" + case "$DISTRO" in + "debian") sudo apt install bc -y;; + "rhel" | "fedora" | "rocky") sudo yum install bc -y;; + "cachyos") sudo pacman -S --noconfirm bc ;; + *) echo "❌ Não foi possível instalar o pacote bc. Instale e execute novamente." && exit 1 ;; + esac +fi + + # ETAPA 1: Verificar pré-requisitos - Docker -echo "$(t '=== ETAPA 1: Verificando Docker ===' '=== ETAPA 1: Verificando Docker ===')" +echo "=== ETAPA 1: Verificando Docker ===" if ! command -v docker &> /dev/null; then - echo "$(t 'Docker não está instalado.' 'Docker no está instalado.')" - ask_user "$(t 'Deseja instalar Docker automaticamente? (Linux apenas) (S/n): ' '¿Desea instalar Docker automáticamente? (solo Linux) (S/n): ')" "S" "INSTALL_DOCKER" + echo "Docker não está instalado." + ask_user "Deseja instalar Docker automaticamente? (Linux apenas) (S/n): " "S" "INSTALL_DOCKER" if [[ "$INSTALL_DOCKER" =~ ^[Ss]$ ]]; then install_docker else - echo "$(t '⚠️ Aviso: Docker é necessário para criar clusters Kind e executar o Girus.' '⚠️ Aviso: Docker es necesario para crear clústeres Kind y ejecutar Girus.')" - echo "$(t 'Por favor, instale o Docker adequado para seu sistema operacional:' 'Por favor, instala Docker adecuado para tu sistema operativo:')" + echo "⚠️ Aviso: Docker é necessário para criar clusters Kind e executar o Girus." + echo "Por favor, instale o Docker adequado para seu sistema operacional:" echo " - Linux: https://docs.docker.com/engine/install/" echo " - macOS: https://docs.docker.com/desktop/install/mac-install/" echo " - Windows: https://docs.docker.com/desktop/install/windows-install/" @@ -489,24 +495,24 @@ if ! command -v docker &> /dev/null; then else # Verificar se o Docker está em execução if ! docker info &> /dev/null; then - echo "$(t '⚠️ Aviso: Docker está instalado, mas não está em execução.' '⚠️ Aviso: Docker está instalado, pero no se está ejecutando.')" - ask_user "$(t 'Deseja tentar iniciar o Docker? (S/n): ' '¿Desea intentar iniciar Docker? (S/n): ')" "S" "START_DOCKER" + echo "⚠️ Aviso: Docker está instalado, mas não está em execução." + ask_user "Deseja tentar iniciar o Docker? (S/n): " "S" "START_DOCKER" if [[ "$START_DOCKER" =~ ^[Ss]$ ]]; then - echo "$(t 'Tentando iniciar o Docker...' 'Intentando iniciar Docker...')" + echo "Tentando iniciar o Docker..." if [ "$OS" == "linux" ]; then sudo systemctl start docker # Verificar novamente if ! docker info &> /dev/null; then - echo "$(t '❌ Falha ao iniciar o Docker. Por favor, inicie manualmente com '\''sudo systemctl start docker'\''' '❌ Error al iniciar Docker. Por favor, inícialo manualmente con '\''sudo systemctl start docker'\''')" + echo "❌ Falha ao iniciar o Docker. Por favor, inicie manualmente com 'sudo systemctl start docker'" exit 1 fi else - echo "$(t 'No macOS/Windows, inicie o Docker Desktop manualmente e execute este script novamente.' 'En macOS/Windows, inicia Docker Desktop manualmente y ejecuta este script nuevamente.')" + echo "No macOS/Windows, inicie o Docker Desktop manualmente e execute este script novamente." exit 1 fi else - echo "$(t '❌ Erro: Docker precisa estar em execução para usar o Girus. Por favor, inicie-o e tente novamente.' '❌ Error: Docker debe estar en ejecución para usar Girus. Por favor, inícialo e inténtalo nuevamente.')" + echo "❌ Erro: Docker precisa estar em execução para usar o Girus. Por favor, inicie-o e tente novamente." exit 1 fi fi @@ -516,39 +522,39 @@ fi # ETAPA 2: Verificar pré-requisitos - Kind echo "=== ETAPA 2: Verificando Kind ===" if ! command -v kind &> /dev/null; then - echo "$(t 'Kind não está instalado.' 'Kind no está instalado.')" - ask_user "$(t 'Deseja instalar Kind automaticamente? (S/n): ' '¿Desea instalar Kind automáticamente? (S/n): ')" "S" "INSTALL_KIND" + echo "Kind não está instalado." + ask_user "Deseja instalar Kind automaticamente? (S/n): " "S" "INSTALL_KIND" if [[ "$INSTALL_KIND" =~ ^[Ss]$ ]]; then install_kind else - echo "$(t '⚠️ Aviso: Kind é necessário para criar clusters Kubernetes e executar o Girus.' '⚠️ Aviso: Kind es necesario para crear clústeres Kubernetes y ejecutar Girus.')" - echo "$(t 'Você pode instalá-lo manualmente seguindo as instruções em: https://kind.sigs.k8s.io/docs/user/quick-start/#installation' 'Puedes instalarlo manualmente siguiendo las instrucciones en: https://kind.sigs.k8s.io/docs/user/quick-start/#installation')" + echo "⚠️ Aviso: Kind é necessário para criar clusters Kubernetes e executar o Girus." + echo "Você pode instalá-lo manualmente seguindo as instruções em: https://kind.sigs.k8s.io/docs/user/quick-start/#installation" exit 1 fi else - echo "$(t '✅ Kind já está instalado.' '✅ Kind ya está instalado.')" + echo "✅ Kind já está instalado." fi # ETAPA 3: Verificar pré-requisitos - Kubectl echo "=== ETAPA 3: Verificando Kubectl ===" if ! command -v kubectl &> /dev/null; then - echo "$(t 'Kubectl não está instalado.' 'Kubectl no está instalado.')" - ask_user "$(t 'Deseja instalar Kubectl automaticamente? (S/n): ' '¿Desea instalar Kubectl automáticamente? (S/n): ')" "S" "INSTALL_KUBECTL" + echo "Kubectl não está instalado." + ask_user "Deseja instalar Kubectl automaticamente? (S/n): " "S" "INSTALL_KUBECTL" if [[ "$INSTALL_KUBECTL" =~ ^[Ss]$ ]]; then install_kubectl else - echo "$(t '⚠️ Aviso: Kubectl é necessário para interagir com o cluster Kubernetes.' '⚠️ Aviso: Kubectl es necesario para interactuar con el clúster de Kubernetes.')" - echo "$(t 'Você pode instalá-lo manualmente seguindo as instruções em: https://kubernetes.io/docs/tasks/tools/install-kubectl/' 'Puedes instalarlo manualmente siguiendo las instrucciones en: https://kubernetes.io/docs/tasks/tools/install-kubectl/')" + echo "⚠️ Aviso: Kubectl é necessário para interagir com o cluster Kubernetes." + echo "Você pode instalá-lo manualmente seguindo as instruções em: https://kubernetes.io/docs/tasks/tools/install-kubectl/" exit 1 fi else - echo "$(t '✅ Kubectl já está instalado.' '✅ Kubectl ya está instalado.')" + echo "✅ Kubectl já está instalado." fi # ETAPA 4: Baixar e instalar o Girus CLI -echo "$(t '=== ETAPA 4: Instalando Girus CLI ===' '=== ETAPA 4: Instalando Girus CLI ===')" +echo "=== ETAPA 4: Instalando Girus CLI ===" download_and_install # Voltar para o diretório original @@ -556,7 +562,7 @@ cd "$ORIGINAL_DIR" # Mensagem final de conclusão echo "" -echo "$(t '===== INSTALAÇÃO CONCLUÍDA =====' '===== INSTALACIÓN COMPLETADA =====')" +echo "===== INSTALAÇÃO CONCLUÍDA =====" echo "" # Verificar todas as dependências @@ -565,18 +571,18 @@ echo "" # Exibir instruções para próximos passos cat << EOF -$(t '📝 PRÓXIMOS PASSOS:' '📝 PRÓXIMOS PASOS:') +📝 PRÓXIMOS PASSOS: -1. $(t 'Para criar um novo cluster Kubernetes e instalar o Girus:' 'Para crear un nuevo clúster de Kubernetes e instalar Girus:') +1. Para criar um novo cluster Kubernetes e instalar o Girus: $ girus create cluster -2. $(t 'Após a criação do cluster, acesse o Girus no navegador:' 'Después de crear el clúster, accede a Girus en el navegador:') +2. Após a criação do cluster, acesse o Girus no navegador: http://localhost:8000 -3. $(t 'No navegador, inicie o laboratório Linux de boas-vindas para conhecer' 'En el navegador, inicia el laboratorio de bienvenida de Linux para conocer') - $(t ' a plataforma e começar sua experiência com o Girus!' ' la plataforma y comenzar tu experiencia con Girus!') +3. No navegador, inicie o laboratório Linux de boas-vindas para conhecer + a plataforma e começar sua experiência com o Girus! -$(t 'Obrigado por instalar o Girus CLI!' '¡Gracias por instalar Girus CLI!') +Obrigado por instalar o Girus CLI! EOF exit 0 \ No newline at end of file From 8b85c0f264c06395043b6644c31cf43c5391a968 Mon Sep 17 00:00:00 2001 From: Evandro Date: Mon, 13 Oct 2025 11:24:41 -0300 Subject: [PATCH 2/4] melhoria checagem de pacotes iniciais --- install.sh | 243 ++++++++++++++++++++++++++++------------------------- 1 file changed, 130 insertions(+), 113 deletions(-) diff --git a/install.sh b/install.sh index 9687a0d..5d9d190 100755 --- a/install.sh +++ b/install.sh @@ -11,7 +11,24 @@ cat << "EOF" ╚═════╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ EOF -echo -e "\nScript de Instalação - Versão 0.1.0 - Codename: Maracatu\n" +# Perguntar idioma antes de qualquer saída relevante +read -p "Escolha o idioma / Elija el idioma (pt/es) [pt]: " CLI_LANG +CLI_LANG=${CLI_LANG:-pt} +mkdir -p "$HOME/.girus" +echo "language: $CLI_LANG" > "$HOME/.girus/config.yaml" + +# Função simples para traduzir mensagens +t() { + local pt="$1" + local es="$2" + if [ "$CLI_LANG" = "es" ]; then + eval echo "\"$es\"" + else + eval echo "\"$pt\"" + fi +} + +echo -e "\n$(t 'Script de Instalação - Versão 0.3.0 - Codename: Maracatu' 'Script de Instalación - Versión 0.3.0 - Codename: Maracatu')\n" # Verificar se o terminal é interativo IS_INTERACTIVE=0 @@ -41,8 +58,8 @@ ask_user() { # Verificar se o script está sendo executado como root (sudo) if [ "$(id -u)" -eq 0 ]; then - echo "❌ ERRO: Este script não deve ser executado como root ou com sudo." - echo " Por favor, execute sem sudo. O script solicitará elevação quando necessário." + echo "$(t '❌ ERRO: Este script não deve ser executado como root ou com sudo.' '❌ ERROR: Este script no debe ejecutarse como root o con sudo.')" + echo "$(t ' Por favor, execute sem sudo. O script solicitará elevação quando necessário.' ' Por favor, ejecútelo sin sudo. El script solicitará elevación cuando sea necesario.')" exit 1 fi @@ -62,7 +79,7 @@ if [ "$OS" == "linux" ]; then DISTRO="" if [ -r /etc/os-release ]; then DISTRO="$(. /etc/os-release && echo "$ID")" - fi + fi fi # Detectar a arquitetura @@ -75,32 +92,32 @@ case "$ARCH_RAW" in *) ARCH="unknown" ;; esac -echo "Sistema operacional detectado: $OS" -echo "Arquitetura detectada: $ARCH" +echo "$(t 'Sistema operacional detectado: $OS' 'Sistema operativo detectado: $OS')" +echo "$(t 'Arquitetura detectada: $ARCH' 'Arquitectura detectada: $ARCH')" # Verificar se o sistema operacional é suportado if [ "$OS" == "unknown" ]; then - echo "❌ Sistema operacional não suportado: $(uname -s)" + echo "$(t '❌ Sistema operacional não suportado: $(uname -s)' '❌ Sistema operativo no soportado: $(uname -s)')" exit 1 fi # Verificar se a arquitetura é suportada if [ "$ARCH" == "unknown" ]; then - echo "❌ Arquitetura não suportada: $ARCH_RAW" + echo "$(t '❌ Arquitetura não suportada: $ARCH_RAW' '❌ Arquitectura no soportada: $ARCH_RAW')" exit 1 fi # Configurações e variáveis -GIRUS_VERSION="v0.1.0" +GIRUS_VERSION="v0.3.0" # Definir URL com base no sistema operacional e arquitetura if [ "$OS" == "windows" ]; then - BINARY_URL="https://github.com/badtuxx/girus-cli/releases/download/$GIRUS_VERSION/girus-$OS-$ARCH.exe" + BINARY_URL="https://github.com/badtuxx/girus-cli/releases/download/$GIRUS_VERSION/girus-cli-$OS-$ARCH.exe" else - BINARY_URL="https://github.com/badtuxx/girus-cli/releases/download/$GIRUS_VERSION/girus-$OS-$ARCH" + BINARY_URL="https://github.com/badtuxx/girus-cli/releases/download/$GIRUS_VERSION/girus-cli-$OS-$ARCH" fi -echo "URL de download: $BINARY_URL" +echo "$(t 'URL de download: $BINARY_URL' 'URL de descarga: $BINARY_URL')" ORIGINAL_DIR=$(pwd) TEMP_DIR=$(mktemp -d) trap 'rm -rf "$TEMP_DIR"' EXIT @@ -123,20 +140,21 @@ check_download_tool() { # Função para instalar Docker install_docker() { - echo "Instalando Docker..." + echo "$(t 'Instalando Docker...' 'Instalando Docker...')" + if [[ "$OS" == "linux" && "$DISTRO" != "rocky" ]]; then # Linux (script de conveniência do Docker) - echo "Baixando o script de instalação do Docker..." + echo "$(t 'Baixando o script de instalação do Docker...' 'Descargando el script de instalación de Docker...')" curl -fsSL https://get.docker.com -o get-docker.sh - echo "Executando o script de instalação (será solicitada senha de administrador)..." + echo "$(t 'Executando o script de instalação (será solicitada senha de administrador)...' 'Ejecutando el script de instalación (se solicitará contraseña de administrador)...')" sudo sh get-docker.sh # Adicionar usuário atual ao grupo docker - echo "Adicionando usuário atual ao grupo docker..." + echo "$(t 'Adicionando usuário atual ao grupo docker...' 'Añadiendo el usuario actual al grupo docker...')" sudo usermod -aG docker $USER # Iniciar o serviço - echo "Iniciando o serviço Docker..." + echo "$(t 'Iniciando o serviço Docker...' 'Iniciando el servicio Docker...')" sudo systemctl enable --now docker # Limpar arquivo de instalação @@ -144,45 +162,45 @@ install_docker() { elif [[ "$OS" == "linux" && "$DISTRO" == "rocky" ]]; then # instalando docker no rocky linux (padrão podman) - echo "Instalando o docker (será solicitada senha de administrador)..." - echo "Adicionando repositório do docker..." + echo "$(t 'Instalando o docker (será solicitada senha de administrador)...' 'Instalando Docker (se solicitará contraseña de administrador)...')" + echo "$(t 'Adicionando repositório do docker...' 'Añadiendo repositorio de docker...')" sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo sudo dnf -yq install docker-ce docker-ce-cli containerd.io docker-compose-plugin # Adicionar usuário atual ao grupo docker - echo "Adicionando usuário atual ao grupo docker..." + echo "$(t 'Adicionando usuário atual ao grupo docker...' 'Añadiendo el usuario actual al grupo docker...')" sudo usermod -aG docker $USER # Iniciar o serviço - echo "Iniciando o serviço Docker..." + echo "$(t 'Iniciando o serviço Docker...' 'Iniciando el servicio Docker...')" sudo systemctl enable --now docker elif [ "$OS" == "darwin" ]; then # MacOS - echo "No macOS, o Docker Desktop precisa ser instalado manualmente." - echo "Por favor, baixe e instale o Docker Desktop para Mac:" + echo "$(t 'No macOS, o Docker Desktop precisa ser instalado manualmente.' 'En macOS, Docker Desktop debe instalarse manualmente.')" + echo "$(t 'Por favor, baixe e instale o Docker Desktop para Mac:' 'Por favor, descarga e instala Docker Desktop para Mac:')" echo "https://docs.docker.com/desktop/mac/install/" - echo "Após a instalação, reinicie seu terminal e execute este script novamente." + echo "$(t 'Após a instalação, reinicie seu terminal e execute este script novamente.' 'Después de la instalación, reinicia tu terminal y ejecuta este script nuevamente.')" exit 1 elif [ "$OS" == "windows" ]; then # Windows - echo "No Windows, o Docker Desktop precisa ser instalado manualmente." - echo "Por favor, baixe e instale o Docker Desktop para Windows:" + echo "$(t 'No Windows, o Docker Desktop precisa ser instalado manualmente.' 'En Windows, Docker Desktop debe instalarse manualmente.')" + echo "$(t 'Por favor, baixe e instale o Docker Desktop para Windows:' 'Por favor, descarga e instala Docker Desktop para Windows:')" echo "https://docs.docker.com/desktop/windows/install/" - echo "Após a instalação, reabra o terminal e execute este script novamente." + echo "$(t 'Após a instalação, reabra o terminal e execute este script novamente.' 'Después de la instalación, vuelve a abrir la terminal y ejecuta este script nuevamente.')" exit 1 fi # Verificar a instalação if ! command -v docker &> /dev/null; then - echo "❌ Falha ao instalar o Docker." - echo "Por favor, instale manualmente seguindo as instruções em https://docs.docker.com/engine/install/" + echo "$(t '❌ Falha ao instalar o Docker.' '❌ Error al instalar Docker.')" + echo "$(t 'Por favor, instale manualmente seguindo as instruções em https://docs.docker.com/engine/install/' 'Por favor, instálalo manualmente siguiendo las instrucciones en https://docs.docker.com/engine/install/')" exit 1 fi - echo "Docker instalado com sucesso!" - echo "NOTA: Pode ser necessário reiniciar seu sistema ou fazer logout/login para que as permissões de grupo sejam aplicadas." + echo "$(t 'Docker instalado com sucesso!' 'Docker instalado con éxito!')" + echo "$(t 'NOTA: Pode ser necessário reiniciar seu sistema ou fazer logout/login para que as permissões de grupo sejam aplicadas.' 'NOTA: Puede ser necesario reiniciar tu sistema o cerrar sesión/iniciar sesión para aplicar los permisos del grupo.')" } # Função para instalar Kind @@ -191,35 +209,35 @@ install_kind() { if [ "$OS" == "linux" ] || [ "$OS" == "darwin" ]; then # Linux/Mac - curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname)-amd64 + curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname)-${ARCH} chmod +x ./kind sudo mv ./kind /usr/local/bin/kind elif [ "$OS" == "windows" ]; then # Windows - echo "Instalação automática do Kind não suportada no Windows." - echo "Por favor, baixe e instale Kind manualmente:" + echo "$(t 'Instalação automática do Kind não suportada no Windows.' 'La instalación automática de Kind no es compatible en Windows.')" + echo "$(t 'Por favor, baixe e instale Kind manualmente:' 'Por favor, descarga e instala Kind manualmente:')" echo "https://kind.sigs.k8s.io/docs/user/quick-start/#installation" - echo "Após a instalação, reabra o terminal e execute este script novamente." + echo "$(t 'Após a instalação, reabra o terminal e execute este script novamente.' 'Después de la instalación, vuelve a abrir la terminal y ejecuta este script nuevamente.')" exit 1 fi # Verificar a instalação if ! command -v kind &> /dev/null; then - echo "Falha ao instalar o Kind. Por favor, instale manualmente." + echo "$(t 'Falha ao instalar o Kind. Por favor, instale manualmente.' 'Error al instalar Kind. Por favor, instálalo manualmente.')" exit 1 fi - echo "Kind instalado com sucesso!" + echo "$(t 'Kind instalado com sucesso!' 'Kind instalado con éxito!')" } # Função para instalar Kubectl install_kubectl() { - echo "Instalando Kubectl..." + echo "$(t 'Instalando Kubectl...' 'Instalando Kubectl...')" if [ "$OS" == "linux" ]; then # Linux - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ @@ -228,27 +246,27 @@ install_kubectl() { if command -v brew &> /dev/null; then brew install kubectl else - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl" + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/${ARCH}/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ fi elif [ "$OS" == "windows" ]; then # Windows - echo "Instalação automática do Kubectl não suportada no Windows." - echo "Por favor, baixe e instale Kubectl manualmente:" + echo "$(t 'Instalação automática do Kubectl não suportada no Windows.' 'La instalación automática de Kubectl no es compatible en Windows.')" + echo "$(t 'Por favor, baixe e instale Kubectl manualmente:' 'Por favor, descarga e instala Kubectl manualmente:')" echo "https://kubernetes.io/docs/tasks/tools/install-kubectl/" - echo "Após a instalação, reabra o terminal e execute este script novamente." + echo "$(t 'Após a instalação, reabra o terminal e execute este script novamente.' 'Después de la instalación, vuelve a abrir la terminal y ejecuta este script nuevamente.')" exit 1 fi # Verificar a instalação if ! command -v kubectl &> /dev/null; then - echo "Falha ao instalar o Kubectl. Por favor, instale manualmente." + echo "$(t 'Falha ao instalar o Kubectl. Por favor, instale manualmente.' 'Error al instalar Kubectl. Por favor, instálalo manualmente.')" exit 1 fi - echo "Kubectl instalado com sucesso!" + echo "$(t 'Kubectl instalado com sucesso!' 'Kubectl instalado con éxito!')" } # Função para verificar se o Docker está em execução @@ -270,7 +288,7 @@ check_glibc_version() { if command -v ldd &> /dev/null; then GLIBC_VERSION=$(ldd --version | head -n 1 | grep -oP '\d+\.\d+' | head -n 1) if [ -z "$GLIBC_VERSION" ]; then - echo "❌ Não foi possível detectar a versão do GLIBC." + echo "$(t '❌ Não foi possível detectar a versão do GLIBC.' '❌ No fue posible detectar la versión de GLIBC.')" return 1 fi @@ -279,15 +297,15 @@ check_glibc_version() { MIN_GLIBC_VERSION_NUM=2.17 if (( $(echo "$GLIBC_VERSION_NUM >= $MIN_GLIBC_VERSION_NUM" | bc -l) )); then - echo "✅ GLIBC versão $GLIBC_VERSION detectada (mínimo requerido: 2.17)" + echo "$(t '✅ GLIBC versão $GLIBC_VERSION detectada (mínimo requerido: 2.17)' '✅ GLIBC versión $GLIBC_VERSION detectada (mínimo requerido: 2.17)')" return 0 else - echo "❌ GLIBC versão $GLIBC_VERSION detectada (mínimo requerido: 2.17)" - echo "Por favor, atualize o GLIBC para uma versão mais recente." + echo "$(t '❌ GLIBC versão $GLIBC_VERSION detectada (mínimo requerido: 2.17)' '❌ GLIBC versión $GLIBC_VERSION detectada (mínimo requerido: 2.17)')" + echo "$(t 'Por favor, atualize o GLIBC para uma versão mais recente.' 'Por favor, actualiza GLIBC a una versión más reciente.')" return 1 fi else - echo "❌ Comando ldd não encontrado. Não foi possível verificar a versão do GLIBC." + echo "$(t '❌ Comando ldd não encontrado. Não foi possível verificar a versão do GLIBC.' '❌ Comando ldd no encontrado. No fue posible verificar la versión de GLIBC.')" return 1 fi } @@ -320,21 +338,21 @@ check_previous_install() { # Verificar instalações anteriores for location in "${install_locations[@]}"; do if [ -f "$location" ]; then - echo "⚠️ Instalação anterior encontrada em: $location" + echo "$(t '⚠️ Instalação anterior encontrada em: $location' '⚠️ Instalación anterior encontrada en: $location')" previous_install_found=true fi done # Se uma instalação anterior foi encontrada, perguntar sobre limpeza if [ "$previous_install_found" = true ]; then - ask_user "Deseja remover a(s) instalação(ões) anterior(es)? (S/n): " "S" "CLEAN_INSTALL" + ask_user "$(t 'Deseja remover a(s) instalação(ões) anterior(es)? (S/n): ' '¿Desea remover la(s) instalación(es) anterior(es)? (S/n): ')" "S" "CLEAN_INSTALL" if [[ "$CLEAN_INSTALL" =~ ^[Ss]$ ]]; then - echo "🧹 Removendo instalações anteriores..." + echo "$(t '🧹 Removendo instalações anteriores...' '🧹 Eliminando instalaciones anteriores...')" for location in "${install_locations[@]}"; do if [ -f "$location" ]; then - echo "Removendo $location" + echo "$(t 'Removendo $location' 'Eliminando $location')" if [[ "$location" == "/usr/local/bin/girus" || "$location" == "/usr/bin/girus" ]]; then sudo rm -f "$location" else @@ -343,44 +361,44 @@ check_previous_install() { fi done - echo "✅ Limpeza concluída." + echo "$(t '✅ Limpeza concluída.' '✅ Limpieza completada.')" else - echo "Continuando com a instalação sem remover versões anteriores." + echo "$(t 'Continuando com a instalação sem remover versões anteriores.' 'Continuando la instalación sin eliminar versiones anteriores.')" fi else - echo "✅ Nenhuma instalação anterior do Girus CLI encontrada." + echo "$(t '✅ Nenhuma instalação anterior do Girus CLI encontrada.' '✅ No se encontró una instalación previa de Girus CLI.')" fi } # Função para baixar e instalar o binário download_and_install() { - echo "📥 Baixando o Girus CLI versão $GIRUS_VERSION para $OS-$ARCH..." + echo "$(t '📥 Baixando o Girus CLI versão $GIRUS_VERSION para $OS-$ARCH...' '📥 Descargando Girus CLI versión $GIRUS_VERSION para $OS-$ARCH...')" cd "$TEMP_DIR" # Verificar qual ferramenta de download está disponível DOWNLOAD_TOOL=$(check_download_tool) if [ "$DOWNLOAD_TOOL" == "curl" ]; then - echo "Usando curl para download de: $BINARY_URL" - echo "Executando: curl -L --progress-bar \"$BINARY_URL\" -o girus" + echo "$(t 'Usando curl para download de: $BINARY_URL' 'Usando curl para descargar de: $BINARY_URL')" + echo "$(t 'Executando: curl -L --progress-bar \"$BINARY_URL\" -o girus' 'Ejecutando: curl -L --progress-bar \"$BINARY_URL\" -o girus')" if ! curl -L --progress-bar "$BINARY_URL" -o girus; then - echo "❌ Erro no curl. Tentando com opções de debug..." + echo "$(t '❌ Erro no curl. Tentando com opções de debug...' '❌ Error en curl. Probando con opciones de depuración...')" curl -L -v "$BINARY_URL" -o girus fi else - echo "Usando wget para download de: $BINARY_URL" - echo "Executando: wget --show-progress -q \"$BINARY_URL\" -O girus" + echo "$(t 'Usando wget para download de: $BINARY_URL' 'Usando wget para descargar de: $BINARY_URL')" + echo "$(t 'Executando: wget --show-progress -q \"$BINARY_URL\" -O girus' 'Ejecutando: wget --show-progress -q \"$BINARY_URL\" -O girus')" if ! wget --show-progress -q "$BINARY_URL" -O girus; then - echo "❌ Erro no wget. Tentando com opções de debug..." + echo "$(t '❌ Erro no wget. Tentando com opções de debug...' '❌ Error en wget. Probando con opciones de depuración...')" wget -v "$BINARY_URL" -O girus fi fi # Verificar se o download foi bem-sucedido if [ ! -f girus ] || [ ! -s girus ]; then - echo "❌ Erro: Falha ao baixar o Girus CLI." - echo "URL: $BINARY_URL" - echo "Verifique sua conexão com a internet e se a versão $GIRUS_VERSION está disponível." + echo "$(t '❌ Erro: Falha ao baixar o Girus CLI.' '❌ Error: Fallo al descargar Girus CLI.')" + echo "$(t 'URL: $BINARY_URL' 'URL: $BINARY_URL')" + echo "$(t 'Verifique sua conexão com a internet e se a versão $GIRUS_VERSION está disponível.' 'Verifica tu conexión a internet y si la versión $GIRUS_VERSION está disponible.')" exit 1 fi @@ -388,19 +406,19 @@ download_and_install() { chmod +x girus # Perguntar se o usuário deseja instalar no PATH - echo "🔧 Girus CLI baixado com sucesso." - ask_user "Deseja instalar o Girus CLI em /usr/local/bin? (S/n): " "S" "INSTALL_GLOBALLY" + echo "$(t '🔧 Girus CLI baixado com sucesso.' '🔧 Girus CLI descargado con éxito.')" + ask_user "$(t 'Deseja instalar o Girus CLI em /usr/local/bin? (S/n): ' '¿Desea instalar el Girus CLI en /usr/local/bin? (S/n): ')" "S" "INSTALL_GLOBALLY" if [[ "$INSTALL_GLOBALLY" =~ ^[Ss]$ ]]; then - echo "📋 Instalando o Girus CLI em /usr/local/bin/girus..." + echo "$(t '📋 Instalando o Girus CLI em /usr/local/bin/girus...' '📋 Instalando Girus CLI en /usr/local/bin/girus...')" sudo mv girus /usr/local/bin/ - echo "✅ Girus CLI instalado com sucesso em /usr/local/bin/girus" - echo " Você pode executá-lo de qualquer lugar com o comando 'girus'" + echo "$(t '✅ Girus CLI instalado com sucesso em /usr/local/bin/girus' '✅ Girus CLI instalado con éxito en /usr/local/bin/girus')" + echo "$(t ' Você pode executá-lo de qualquer lugar com o comando '\''girus'\''' ' Puede ejecutarlo desde cualquier lugar con el comando '\''girus'\''')" else # Copiar para o diretório original cp girus "$ORIGINAL_DIR/" - echo "✅ Girus CLI copiado para o diretório atual: $(realpath "$ORIGINAL_DIR/girus")" - echo " Você pode executá-lo com: './girus'" + echo "$(t '✅ Girus CLI copiado para o diretório atual: $(realpath "$ORIGINAL_DIR/girus")' '✅ Girus CLI copiado al directorio actual: $(realpath "$ORIGINAL_DIR/girus")')" + echo "$(t ' Você pode executá-lo com: '\''./girus'\''' ' Puede ejecutarlo con: '\''./girus'\''')" fi } @@ -410,33 +428,33 @@ verify_all_dependencies() { # Verificar Docker if command -v docker &> /dev/null && check_docker_running; then - echo "✅ Docker está instalado e em execução." + echo "$(t '✅ Docker está instalado e em execução.' '✅ Docker está instalado y en ejecución.')" else - echo "❌ Docker não está instalado, não está em execução ou logout/login pendente." + echo "$(t '❌ Docker não está instalado, não está em execução ou logout/login pendente.' '❌ Docker no está instalado, no está en ejecución o requiere cerrar sesión/iniciar sesión.')" all_deps_ok=false fi # Verificar Kind if command -v kind &> /dev/null; then - echo "✅ Kind está instalado." + echo "$(t '✅ Kind está instalado.' '✅ Kind está instalado.')" else - echo "❌ Kind não está instalado." + echo "$(t '❌ Kind não está instalado.' '❌ Kind no está instalado.')" all_deps_ok=false fi # Verificar Kubectl if command -v kubectl &> /dev/null; then - echo "✅ Kubectl está instalado." + echo "$(t '✅ Kubectl está instalado.' '✅ Kubectl está instalado.')" else - echo "❌ Kubectl não está instalado." + echo "$(t '❌ Kubectl não está instalado.' '❌ Kubectl no está instalado.')" all_deps_ok=false fi # Verificar Girus CLI e GLIBC if check_girus_in_path; then - echo "✅ Girus CLI está instalado e disponível no PATH." + echo "$(t '✅ Girus CLI está instalado e disponível no PATH.' '✅ Girus CLI está instalado y disponible en el PATH.')" else - echo "⚠️ Girus CLI não está disponível no PATH." + echo "$(t '⚠️ Girus CLI não está disponível no PATH.' '⚠️ Girus CLI no está disponible en el PATH.')" all_deps_ok=false fi @@ -444,7 +462,7 @@ verify_all_dependencies() { } # Iniciar mensagem principal -echo "=== Iniciando instalação do Girus CLI ===" +echo "$(t '=== Iniciando instalação do Girus CLI ===' '=== Iniciando instalación del Girus CLI ===')" # Verificar e limpar instalações anteriores check_previous_install @@ -475,18 +493,17 @@ else esac fi - # ETAPA 1: Verificar pré-requisitos - Docker -echo "=== ETAPA 1: Verificando Docker ===" +echo "$(t '=== ETAPA 1: Verificando Docker ===' '=== ETAPA 1: Verificando Docker ===')" if ! command -v docker &> /dev/null; then - echo "Docker não está instalado." - ask_user "Deseja instalar Docker automaticamente? (Linux apenas) (S/n): " "S" "INSTALL_DOCKER" + echo "$(t 'Docker não está instalado.' 'Docker no está instalado.')" + ask_user "$(t 'Deseja instalar Docker automaticamente? (Linux apenas) (S/n): ' '¿Desea instalar Docker automáticamente? (solo Linux) (S/n): ')" "S" "INSTALL_DOCKER" if [[ "$INSTALL_DOCKER" =~ ^[Ss]$ ]]; then install_docker else - echo "⚠️ Aviso: Docker é necessário para criar clusters Kind e executar o Girus." - echo "Por favor, instale o Docker adequado para seu sistema operacional:" + echo "$(t '⚠️ Aviso: Docker é necessário para criar clusters Kind e executar o Girus.' '⚠️ Aviso: Docker es necesario para crear clústeres Kind y ejecutar Girus.')" + echo "$(t 'Por favor, instale o Docker adequado para seu sistema operacional:' 'Por favor, instala Docker adecuado para tu sistema operativo:')" echo " - Linux: https://docs.docker.com/engine/install/" echo " - macOS: https://docs.docker.com/desktop/install/mac-install/" echo " - Windows: https://docs.docker.com/desktop/install/windows-install/" @@ -495,24 +512,24 @@ if ! command -v docker &> /dev/null; then else # Verificar se o Docker está em execução if ! docker info &> /dev/null; then - echo "⚠️ Aviso: Docker está instalado, mas não está em execução." - ask_user "Deseja tentar iniciar o Docker? (S/n): " "S" "START_DOCKER" + echo "$(t '⚠️ Aviso: Docker está instalado, mas não está em execução.' '⚠️ Aviso: Docker está instalado, pero no se está ejecutando.')" + ask_user "$(t 'Deseja tentar iniciar o Docker? (S/n): ' '¿Desea intentar iniciar Docker? (S/n): ')" "S" "START_DOCKER" if [[ "$START_DOCKER" =~ ^[Ss]$ ]]; then - echo "Tentando iniciar o Docker..." + echo "$(t 'Tentando iniciar o Docker...' 'Intentando iniciar Docker...')" if [ "$OS" == "linux" ]; then sudo systemctl start docker # Verificar novamente if ! docker info &> /dev/null; then - echo "❌ Falha ao iniciar o Docker. Por favor, inicie manualmente com 'sudo systemctl start docker'" + echo "$(t '❌ Falha ao iniciar o Docker. Por favor, inicie manualmente com '\''sudo systemctl start docker'\''' '❌ Error al iniciar Docker. Por favor, inícialo manualmente con '\''sudo systemctl start docker'\''')" exit 1 fi else - echo "No macOS/Windows, inicie o Docker Desktop manualmente e execute este script novamente." + echo "$(t 'No macOS/Windows, inicie o Docker Desktop manualmente e execute este script novamente.' 'En macOS/Windows, inicia Docker Desktop manualmente y ejecuta este script nuevamente.')" exit 1 fi else - echo "❌ Erro: Docker precisa estar em execução para usar o Girus. Por favor, inicie-o e tente novamente." + echo "$(t '❌ Erro: Docker precisa estar em execução para usar o Girus. Por favor, inicie-o e tente novamente.' '❌ Error: Docker debe estar en ejecución para usar Girus. Por favor, inícialo e inténtalo nuevamente.')" exit 1 fi fi @@ -522,39 +539,39 @@ fi # ETAPA 2: Verificar pré-requisitos - Kind echo "=== ETAPA 2: Verificando Kind ===" if ! command -v kind &> /dev/null; then - echo "Kind não está instalado." - ask_user "Deseja instalar Kind automaticamente? (S/n): " "S" "INSTALL_KIND" + echo "$(t 'Kind não está instalado.' 'Kind no está instalado.')" + ask_user "$(t 'Deseja instalar Kind automaticamente? (S/n): ' '¿Desea instalar Kind automáticamente? (S/n): ')" "S" "INSTALL_KIND" if [[ "$INSTALL_KIND" =~ ^[Ss]$ ]]; then install_kind else - echo "⚠️ Aviso: Kind é necessário para criar clusters Kubernetes e executar o Girus." - echo "Você pode instalá-lo manualmente seguindo as instruções em: https://kind.sigs.k8s.io/docs/user/quick-start/#installation" + echo "$(t '⚠️ Aviso: Kind é necessário para criar clusters Kubernetes e executar o Girus.' '⚠️ Aviso: Kind es necesario para crear clústeres Kubernetes y ejecutar Girus.')" + echo "$(t 'Você pode instalá-lo manualmente seguindo as instruções em: https://kind.sigs.k8s.io/docs/user/quick-start/#installation' 'Puedes instalarlo manualmente siguiendo las instrucciones en: https://kind.sigs.k8s.io/docs/user/quick-start/#installation')" exit 1 fi else - echo "✅ Kind já está instalado." + echo "$(t '✅ Kind já está instalado.' '✅ Kind ya está instalado.')" fi # ETAPA 3: Verificar pré-requisitos - Kubectl echo "=== ETAPA 3: Verificando Kubectl ===" if ! command -v kubectl &> /dev/null; then - echo "Kubectl não está instalado." - ask_user "Deseja instalar Kubectl automaticamente? (S/n): " "S" "INSTALL_KUBECTL" + echo "$(t 'Kubectl não está instalado.' 'Kubectl no está instalado.')" + ask_user "$(t 'Deseja instalar Kubectl automaticamente? (S/n): ' '¿Desea instalar Kubectl automáticamente? (S/n): ')" "S" "INSTALL_KUBECTL" if [[ "$INSTALL_KUBECTL" =~ ^[Ss]$ ]]; then install_kubectl else - echo "⚠️ Aviso: Kubectl é necessário para interagir com o cluster Kubernetes." - echo "Você pode instalá-lo manualmente seguindo as instruções em: https://kubernetes.io/docs/tasks/tools/install-kubectl/" + echo "$(t '⚠️ Aviso: Kubectl é necessário para interagir com o cluster Kubernetes.' '⚠️ Aviso: Kubectl es necesario para interactuar con el clúster de Kubernetes.')" + echo "$(t 'Você pode instalá-lo manualmente seguindo as instruções em: https://kubernetes.io/docs/tasks/tools/install-kubectl/' 'Puedes instalarlo manualmente siguiendo las instrucciones en: https://kubernetes.io/docs/tasks/tools/install-kubectl/')" exit 1 fi else - echo "✅ Kubectl já está instalado." + echo "$(t '✅ Kubectl já está instalado.' '✅ Kubectl ya está instalado.')" fi # ETAPA 4: Baixar e instalar o Girus CLI -echo "=== ETAPA 4: Instalando Girus CLI ===" +echo "$(t '=== ETAPA 4: Instalando Girus CLI ===' '=== ETAPA 4: Instalando Girus CLI ===')" download_and_install # Voltar para o diretório original @@ -562,7 +579,7 @@ cd "$ORIGINAL_DIR" # Mensagem final de conclusão echo "" -echo "===== INSTALAÇÃO CONCLUÍDA =====" +echo "$(t '===== INSTALAÇÃO CONCLUÍDA =====' '===== INSTALACIÓN COMPLETADA =====')" echo "" # Verificar todas as dependências @@ -571,18 +588,18 @@ echo "" # Exibir instruções para próximos passos cat << EOF -📝 PRÓXIMOS PASSOS: +$(t '📝 PRÓXIMOS PASSOS:' '📝 PRÓXIMOS PASOS:') -1. Para criar um novo cluster Kubernetes e instalar o Girus: +1. $(t 'Para criar um novo cluster Kubernetes e instalar o Girus:' 'Para crear un nuevo clúster de Kubernetes e instalar Girus:') $ girus create cluster -2. Após a criação do cluster, acesse o Girus no navegador: +2. $(t 'Após a criação do cluster, acesse o Girus no navegador:' 'Después de crear el clúster, accede a Girus en el navegador:') http://localhost:8000 -3. No navegador, inicie o laboratório Linux de boas-vindas para conhecer - a plataforma e começar sua experiência com o Girus! +3. $(t 'No navegador, inicie o laboratório Linux de boas-vindas para conhecer' 'En el navegador, inicia el laboratorio de bienvenida de Linux para conocer') + $(t ' a plataforma e começar sua experiência com o Girus!' ' la plataforma y comenzar tu experiencia con Girus!') -Obrigado por instalar o Girus CLI! +$(t 'Obrigado por instalar o Girus CLI!' '¡Gracias por instalar Girus CLI!') EOF exit 0 \ No newline at end of file From 4b62615d1610b1bdd12ae0758c27a9a8d4829ce8 Mon Sep 17 00:00:00 2001 From: Evandro Date: Mon, 13 Oct 2025 11:44:05 -0300 Subject: [PATCH 3/4] melhoria checagem de pacotes iniciais --- install.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/install.sh b/install.sh index 5d9d190..d5e159c 100755 --- a/install.sh +++ b/install.sh @@ -468,28 +468,28 @@ echo "$(t '=== Iniciando instalação do Girus CLI ===' '=== Iniciando instalaci check_previous_install # Verificando pacotes necessarios para instalação -echo "=== Verificando pacotes necessários ===" +echo "$(t '=== Verificando pacotes necessários ===' '=== Verificando paquetes requeridos ===')" + CHECK=$(check_download_tool) if [ "$CHECK" == "none" ]; then - echo "❌ Erro: curl ou wget não encontrados. Por favor, instale um deles e tente novamente." + echo "$(t '❌ Erro: curl ou wget não encontrados. Por favor, instale um deles e tente novamente.' '❌ Error: curl o wget no encontrados. Instala uno de ellos y ejecuta este script nuevamente.')" exit 1 else - echo "✅ $CHECK encontrado." + echo "$(t '✅ $CHECK encontrado.' '✅ $CHECK encontrado.')" fi # Checa se bc está instalado para comparação numérica if command -v bc &> /dev/null; then - echo "Pacote bc encontrado." - return 0 + echo "$(t 'Pacote bc encontrado.' 'Paquete bc encontrado')" else - echo "Comando bc não encontrado. Instalando:" + echo "$(t 'Comando bc não encontrado. Instalando:' 'Comando bc no encontrado. Instalando')" case "$DISTRO" in "debian") sudo apt install bc -y;; "rhel" | "fedora" | "rocky") sudo yum install bc -y;; "cachyos") sudo pacman -S --noconfirm bc ;; - *) echo "❌ Não foi possível instalar o pacote bc. Instale e execute novamente." && exit 1 ;; + *) echo "$(t '❌ Não foi possível instalar o pacote bc. Instale e execute novamente.' '❌ No se pudo instalar el paquete bc. Instálelo ejecuta este script nuevamente.')" && exit 1 ;; esac fi From fb88a8506aa82cc46648b9e7d52de16b049bb5e0 Mon Sep 17 00:00:00 2001 From: Evandro Date: Mon, 24 Nov 2025 18:09:44 -0300 Subject: [PATCH 4/4] add MACOS --- install.sh | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/install.sh b/install.sh index d5e159c..79a80fa 100755 --- a/install.sh +++ b/install.sh @@ -482,15 +482,24 @@ fi # Checa se bc está instalado para comparação numérica if command -v bc &> /dev/null; then - echo "$(t 'Pacote bc encontrado.' 'Paquete bc encontrado')" + echo "$(t '✅ Pacote bc encontrado.' '✅ Paquete bc encontrado')" else echo "$(t 'Comando bc não encontrado. Instalando:' 'Comando bc no encontrado. Instalando')" - case "$DISTRO" in - "debian") sudo apt install bc -y;; - "rhel" | "fedora" | "rocky") sudo yum install bc -y;; - "cachyos") sudo pacman -S --noconfirm bc ;; - *) echo "$(t '❌ Não foi possível instalar o pacote bc. Instale e execute novamente.' '❌ No se pudo instalar el paquete bc. Instálelo ejecuta este script nuevamente.')" && exit 1 ;; - esac + if [ "$OS" == "darwin" ]; then + if command -v brew &> /dev/null; then + brew install bc + else + echo "$(t '❌ Não foi possível instalar o pacote bc. Instale e execute novamente.' '❌ No se pudo instalar el paquete bc. Instálelo ejecuta este script nuevamente.')" + exit 1 + fi + elif [ "$OS" == "linux" ]; then + case "$DISTRO" in + "debian" | "ubuntu") sudo apt-get install -qq bc >/dev/null;; + "rhel" | "fedora" | "rocky") sudo yum install bc -yq;; + "cachyos") sudo pacman -S --noconfirm bc ;; + *) echo "$(t '❌ Não foi possível instalar o pacote bc. Instale e execute novamente.' '❌ No se pudo instalar el paquete bc. Instálelo ejecuta este script nuevamente.')" && exit 1 ;; + esac + fi fi # ETAPA 1: Verificar pré-requisitos - Docker