Files

4.4 KiB
Raw Permalink Blame History

Aplicando o conjunto de patches PF-on-Linux / guia de compilação

Este documento é a versão em português de docs/en/install.md.

Alvo: árvore de fontes do Linux 7.3.4 + módulos out-of-tree pf.ko (engine PF, família divert(4), filas ifq). O port é entregue como árvore de código-fonte + zero patches de core (ver patches/kernel/README.md): o módulo linka apenas símbolos que o kernel 7.3.4 puro já exporta.

1. Pré-requisitos

Requisito Por quê
gcc >= 15, GNU make, flex, bison, bc build do kernel + pfctl
glibc-static (ou musl-static) pfctl estático para as VMs guest
Fontes Linux 7.3.4 alvo da compilação
sys.tar.gz + src.tar.gz do OpenBSD 8.0 fontes portados (baixados e verificados por sha256; mirror primário openbsd.c3sl.ufpr.br, fallback cdn.openbsd.org)
root no host de build insmod como root

2. Passos

cd pf_port

# 2.1 busca e verifica as fontes OpenBSD 8.0 (sha256 fixados em VERSIONS)
./scripts/fetch-sources.sh
./scripts/vendorize.sh          # staging em _vendor/upstream + IDS.txt

# 2.2 prepara o kernel (config + build + preparação p/ módulos externos)
KERNELDIR=/path/to/linux-7.3.4 ./scripts/build-kernel.sh
#   - defconfig + virtio/EXT4 embutidos (boot direto do kernel na VM)
#   - make bzImage modules_prepare
#   - copia vmlinux.symvers -> Module.symvers (necessário para builds M=)

# 2.3 aplica os patches de core (atualmente NENHUM é necessário)
./scripts/apply-patches.sh /path/to/linux-7.3.4
#   patches/kernel/series está vazio por projeto; se futuros milestones
#   precisarem de exports, cada um entra como 000N-*.patch documentado em
#   docs/pt-BR/patches.md.

# 2.4 compila módulo e userland
./scripts/build-module.sh        # -> module/pf.ko
make -C tools                    # -> tools/out/pfctl (estático)

# 2.5 instala num sistema 7.3.4 rodando
sudo insmod module/pf.ko         # cria /dev/pf (0600 root)
sudo cp tools/out/pfctl /usr/local/sbin/
sudo pfctl -e                    # habilita
sudo pfctl -f /etc/pf.conf       # sintaxe real do OpenBSD 8.0

3. Verificação

pfctl -s info            # "Status: Enabled", contadores ao vivo
pfctl -nf /etc/pf.conf   # checagem de parse apenas
dmesg | grep pfk         # hooks registrados (data path via workqueue netisr)

Bancada de VMs (Alpine em libvirt): ./scripts/vm-create.sh, ./scripts/vm-deploy.sh, ./scripts/vm-run-tests.sh — ver docs/pt-BR/vm-lab.md.

4. Remoção / reversão

sudo pfctl -d; sudo rmmod pf
./scripts/unpatch.sh /path/to/linux-7.3.4   # desfaz patches futuros, se houver

5. O que "aplicar o patch" significa aqui

Como a entrega é um módulo out-of-tree, "aplicar o conjunto" = passos 2.1–2.4; a árvore Linux intacta é apenas configurada e compilada (virtio/EXT4 =y). Nenhum arquivo do kernel é modificado, salvo se um futuro milestone acrescentar patches/kernel/000N-*.patch documentado (cada patch: uma seção em docs/pt-BR/patches.md com o quê/por quê/impacto/reversão).

6. Notas sobre os passos acima (2026-11-11)

  • O passo 2.3 é um no-op documentado hoje: o conjunto de patches está vazio e os scripts scripts/apply-patches.sh / scripts/unpatch.sh e o arquivo patches/kernel/series ainda não existem na árvore (entram junto com o primeiro patch real de core — ver patches.md). Pode pular 2.3 com segurança.
  • O passo 2.4 compila apenas o pfctl e o verificador de ABI (alvos de make -C tools: pfctl abitest abi test clean). pdivert existe como arquivo-fonte sem alvo no Makefile por enquanto; pflogd ainda não foi portado.
  • Depois do 2.5, o que dá para usar de verdade é o núcleo de filtragem M2 (pass/block/quick/keep state/tabelas/anchors); NAT/scrub/queues/divert/ pflog dependem dos próximos milestones — consulte a matriz de features e leia pf-guide.md antes de habilitar PF num caminho que você precisa manter vivo.

7. Para onde ir agora

Arquitetura em uma página guide.md
Etapas de build em detalhe build.md
Bancada de VMs de validação vm-lab.md
Regras do dia a dia e avisos pf-guide.md
Divergências conhecidas caveats.md
Mecanismo de patches de core patches.md
Índice da documentação README.md