#!/bin/bash # Noovi Agent Installation Script # Usage: curl -fsSL https://install.nooviai.com | bash set -e # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Configuration AGENT_DOWNLOAD_URL="${NOOVI_AGENT_URL:-https://install.nooviai.com/bins}" INSTALL_DIR="${NOOVI_INSTALL_DIR:-/opt/noovi}" SYSTEMD_SERVICE_DIR="/etc/systemd/system" SERVICE_NAME="noovi-agent" # Logging functions log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[✓]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" exit 1 } # Detect OS and Architecture detect_arch() { local arch=$(uname -m) case "$arch" in x86_64|amd64) echo "linux-amd64" ;; aarch64|arm64) echo "linux-arm64" ;; *) log_error "Arquitetura não suportada: $arch" ;; esac } # Check if running as root check_root() { if [ "$EUID" -ne 0 ]; then log_error "Este script precisa ser executado como root. Use: sudo bash install.sh" fi } # Download Agent binary download_agent() { local ARCH=$(detect_arch) local AGENT_URL="${AGENT_DOWNLOAD_URL}/noovi-agent-${ARCH}" log_info "Detectada arquitetura: $ARCH" log_info "Baixando Noovi Agent de: $AGENT_URL" mkdir -p "$INSTALL_DIR" if command -v curl &> /dev/null; then curl -fsSL "$AGENT_URL" -o "$INSTALL_DIR/noovi-agent" elif command -v wget &> /dev/null; then wget -q "$AGENT_URL" -O "$INSTALL_DIR/noovi-agent" else log_error "curl ou wget não encontrado. Instale um deles e tente novamente." fi chmod +x "$INSTALL_DIR/noovi-agent" log_success "Agent baixado com sucesso" } # Verify checksum verify_checksum() { log_info "Verificando integridade do binário..." local ARCH=$(detect_arch) local CHECKSUM_URL="${AGENT_DOWNLOAD_URL}/../checksums/SHA256SUMS" if command -v sha256sum &> /dev/null; then local EXPECTED_SUM=$(curl -fsSL "$CHECKSUM_URL" | grep "noovi-agent-${ARCH}" | awk '{print $1}') local ACTUAL_SUM=$(sha256sum "$INSTALL_DIR/noovi-agent" | awk '{print $1}') if [ "$EXPECTED_SUM" = "$ACTUAL_SUM" ]; then log_success "Checksum verificado com sucesso" else log_warn "Checksum não corresponde. Prosseguindo mesmo assim..." fi else log_warn "sha256sum não disponível, pulando verificação de checksum" fi } # Create systemd service create_systemd_service() { log_info "Criando serviço systemd..." cat > "$SYSTEMD_SERVICE_DIR/$SERVICE_NAME.service" <