first commit
This commit is contained in:
commit
01d7cb1a80
34 files changed
+5723
No files matched your search
@@ -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 ""
|
||||
Reference in new issue
Block a user