#!/bin/bash set -e GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' echo -e "${YELLOW}=== Preparando Máquina Ubuntu 24.04 para Agentes de Build ===${NC}" # Atualiza e instala dependências vitais do SO if [ "$EUID" -ne 0 ]; then echo -e "${YELLOW}Elevação de privilégio necessária para instalar pacotes no Host...${NC}" SUDO="sudo" else SUDO="" fi $SUDO apt-get update $SUDO apt-get install -y ca-certificates curl gnupg lsb-release jq git unzip wget apt-transport-https # Instala o Docker Engine no HOST (máquina recém criada) if ! command -v docker &> /dev/null then echo -e "${YELLOW}Docker não encontrado no Host. Instalando Docker Engine...${NC}" $SUDO install -m 0755 -d /etc/apt/keyrings $SUDO curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc $SUDO chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ $SUDO tee /etc/apt/sources.list.d/docker.list > /dev/null $SUDO apt-get update $SUDO apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Habilita Docker para inicializar junto à maquina $SUDO systemctl enable docker $SUDO systemctl start docker else echo -e "${GREEN}Docker já instalado no Host.${NC}" fi # Otimiza o daemon do Docker echo "Configurando daemon do Docker..." $SUDO tee /etc/docker/daemon.json > /dev/null <<'DAEMON_EOF' { "log-driver": "local", "log-opts": { "max-size": "50m", "max-file": "3" }, "max-concurrent-downloads": 10, "max-concurrent-uploads": 5 } DAEMON_EOF $SUDO systemctl restart docker # Configura limites de GC do BuildKit para novos builders $SUDO mkdir -p /etc/buildkit $SUDO tee /etc/buildkit/buildkitd.toml > /dev/null <<'BUILDKIT_EOF' [worker.oci] gc = true # Mantém até 20GB de cache; remove entradas antigas quando ultrapassar gckeepstorage = 20480 BUILDKIT_EOF # Cron no host: limpa cache buildx a cada 6h (independente dos containers) echo "0 */6 * * * root docker buildx prune --reserved-space 15gb -f 2>/dev/null" | \ $SUDO tee /etc/cron.d/docker-buildx-prune > /dev/null $SUDO chmod 0644 /etc/cron.d/docker-buildx-prune # Prepara Diretório WORK_DIR="/opt/sittax/self-host-build" echo "Criando ambiente em $WORK_DIR..." $SUDO mkdir -p "$WORK_DIR" cd "$WORK_DIR" # Baixa Arquivos do CDN # Assumindo a base URL 'https://script.sittax.com.br/self-host-build' de acordo com sua hospedagem CDN_BASE="https://script.sittax.com.br/self-host-build" echo "Baixando arquivos do CDN..." $SUDO curl -fsSLO "$CDN_BASE/Dockerfile" $SUDO curl -fsSLO "$CDN_BASE/setup-agents.sh" $SUDO curl -fsSLO "$CDN_BASE/start.sh" $SUDO curl -fsSLO "$CDN_BASE/docker-prune.sh" # Garante que os scripts tenham quebra de linha Unix (LF) $SUDO sed -i 's/\r$//' setup-agents.sh start.sh docker-prune.sh $SUDO chmod +x setup-agents.sh start.sh docker-prune.sh echo -e "\n${GREEN}Servidor Ubuntu provisionado com sucesso!${NC}" echo -e "Para configurar seus agentes no Azure DevOps, a execução interativa será iniciada.\n" # Iniciar o script iterativo (Lidando com suporte a Pipes do /dev/tty caso baixem usando curl | bash) if [ -t 0 ]; then $SUDO ./setup-agents.sh else $SUDO bash -c "./setup-agents.sh < /dev/tty" fi