first commit

This commit is contained in:
Rodrigo Bertoldo de Sousa Martins committed 2026-09-13 20:49:33 -03:00
commit 01d7cb1a80
34 files changed
+5723

No files matched your search

+166
View File
@@ -0,0 +1,166 @@
#!/bin/bash
# ─────────────────────────────────────────────────────────
# setup.sh — Instala todas as dependências necessárias
#
# Execute: sudo bash scripts/setup.sh
# ─────────────────────────────────────────────────────────
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_ok() { echo -e "${GREEN}[OK]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERRO]${NC} $1"; }
echo ""
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
echo -e "${BLUE} Instalação de dependências - eBPF Sockmap${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
echo ""
# Verifica se é root
if [ "$(id -u)" -ne 0 ]; then
log_error "Execute como root: sudo bash scripts/setup.sh"
exit 1
fi
# Detecta distribuição
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO=$ID
else
DISTRO="unknown"
fi
log_info "Distribuição detectada: $DISTRO"
log_info "Kernel: $(uname -r)"
echo ""
# ─── Verifica versão do kernel ───
KERNEL_MAJOR=$(uname -r | cut -d. -f1)
KERNEL_MINOR=$(uname -r | cut -d. -f2)
if [ "$KERNEL_MAJOR" -lt 5 ] || ([ "$KERNEL_MAJOR" -eq 5 ] && [ "$KERNEL_MINOR" -lt 4 ]); then
log_error "Kernel $(uname -r) muito antigo! eBPF sockmap requer kernel >= 5.4"
log_error "Atualize o kernel antes de continuar."
exit 1
fi
log_ok "Kernel $(uname -r) compatível com eBPF sockmap"
# ─── Instala pacotes ───
case "$DISTRO" in
ubuntu|debian|linuxmint|pop)
log_info "Instalando pacotes (apt)..."
apt-get update -qq
apt-get install -y \
clang \
llvm \
libbpf-dev \
linux-tools-common \
"linux-tools-$(uname -r)" \
linux-headers-"$(uname -r)" \
build-essential \
pkg-config \
curl \
docker.io \
docker-compose-plugin
;;
fedora)
log_info "Instalando pacotes (dnf)..."
dnf install -y \
clang \
llvm \
libbpf-devel \
bpftool \
kernel-headers \
kernel-devel \
make \
gcc \
curl \
docker \
docker-compose-plugin
;;
arch|manjaro)
log_info "Instalando pacotes (pacman)..."
pacman -Sy --noconfirm \
clang \
llvm \
libbpf \
bpf \
linux-headers \
base-devel \
curl \
docker \
docker-compose
;;
*)
log_warn "Distribuição '$DISTRO' não reconhecida."
log_warn "Instale manualmente: clang, llvm, libbpf-dev, bpftool, linux-headers, docker"
;;
esac
# ─── Verifica ferramentas instaladas ───
echo ""
log_info "Verificando ferramentas..."
check_tool() {
if command -v "$1" &>/dev/null; then
log_ok "$1 → $($1 --version 2>&1 | head -1)"
else
log_error "$1 não encontrado!"
return 1
fi
}
check_tool clang
check_tool llc
check_tool bpftool || log_warn "bpftool pode estar em /usr/lib/linux-tools/$(uname -r)/bpftool"
check_tool docker
# ─── Verifica BTF (BPF Type Format) ───
echo ""
if [ -f /sys/kernel/btf/vmlinux ]; then
log_ok "BTF disponível em /sys/kernel/btf/vmlinux"
else
log_error "BTF não encontrado! O kernel precisa ser compilado com CONFIG_DEBUG_INFO_BTF=y"
log_error "A maioria das distros modernas já inclui BTF."
fi
# ─── Verifica cgroup v2 ───
if mount | grep -q "cgroup2"; then
log_ok "Cgroup v2 ativo"
else
log_warn "Cgroup v2 não detectado! Pode ser necessário para o sockmap."
log_warn "Adicione 'systemd.unified_cgroup_hierarchy=1' aos parâmetros de boot do kernel."
fi
# ─── Configura Docker ───
echo ""
log_info "Configurando Docker..."
systemctl enable docker 2>/dev/null || true
systemctl start docker 2>/dev/null || true
# Adiciona usuário atual ao grupo docker (se não é root direto)
ACTUAL_USER="${SUDO_USER:-$USER}"
if [ "$ACTUAL_USER" != "root" ]; then
usermod -aG docker "$ACTUAL_USER" 2>/dev/null || true
log_ok "Usuário '$ACTUAL_USER' adicionado ao grupo docker"
log_warn "Faça logout e login para o grupo docker funcionar sem sudo"
fi
echo ""
echo -e "${GREEN}═══════════════════════════════════════════════${NC}"
echo -e "${GREEN} Instalação concluída!${NC}"
echo -e "${GREEN}═══════════════════════════════════════════════${NC}"
echo ""
echo "Próximos passos:"
echo " 1. make → Compilar o programa eBPF"
echo " 2. make docker-up → Subir os containers"
echo " 3. make load → Ativar o sockmap"
echo " 4. make benchmark → Testar performance"
echo ""