Pular para o conteúdo

Compilando uma primeira imagem OpenWrt

Compile uma imagem OpenWrt 24.10.7 pura para o TP-Link EAP225-Outdoor v3 antes de adicionar LibreMesh.

Compilando uma primeira imagem OpenWrt

Estado de validação: este tutorial foi reproduzido com sucesso para OpenWrt 24.10.7 e TP-Link EAP225-Outdoor v3, em uma VM Debian 12 com 16 vCPUs, 8 GB de RAM, 40 GB de disco e sem swap. A primeira compilação, executada sem paralelismo explícito, levou aproximadamente 4 h 08 min.

Objetivo

Nesta etapa você irá gerar uma imagem OpenWrt pura, sem os feeds e pacotes do LibreMesh.

O objetivo é separar dois problemas:

  1. validar que o ambiente consegue compilar OpenWrt para o hardware escolhido;
  2. só depois acrescentar LibreMesh e as configurações do projeto.

Ao final, devem existir binários específicos para o TP-Link EAP225-Outdoor v3 em:

bin/targets/ath79/generic/

Ponto de partida

Você deve estar como:

compila

no diretório:

/home/compila

Confira:

whoami
pwd

1. Obtenha o OpenWrt 24.10.7

Clone a versão utilizada nesta reprodução:

git clone -b v24.10.7 --single-branch https://github.com/openwrt/openwrt

Entre no repositório:

cd ~/openwrt

Confira a versão e o commit:

git describe --tags --always
git rev-parse HEAD

Na reprodução:

v24.10.7
b40dfac0a31695596f7c1f5f1519302ca8237f6e

2. Entenda os feeds padrão do OpenWrt

OpenWrt usa feeds para disponibilizar receitas de compilação de pacotes ao buildroot. Eles são diferentes dos feeds do LibreMesh, que só serão adicionados no próximo tutorial.

Veja:

cat feeds.conf.default

Na reprodução:

src-git packages https://git.openwrt.org/feed/packages.git^0c8f5f2ed91600b04ba639ef9c4c5ced3286cb3b
src-git luci https://git.openwrt.org/project/luci.git^3cf713a30bf456af74f9393096c2f7eb770b3ae2
src-git routing https://git.openwrt.org/feed/routing.git^cd05be684e670095d20663d1c41766cf8b54de61
src-git telephony https://git.openwrt.org/feed/telephony.git^92892fa285360b8981f62bf4e0a097e6449e7e33

Antes de atualizar os feeds, nesta reprodução:

ls -la feeds

mostrou apenas:

base -> /home/compila/openwrt/package

3. Atualize e instale os feeds padrão

Como compila:

./scripts/feeds update -a
./scripts/feeds install -a

Não use sudo.

Avisos observados

Foram observados avisos como:

WARNING: Makefile 'package/feeds/packages/onionshare-cli/Makefile' has a dependency on 'python3-pysocks', which does not exist
WARNING: Makefile 'package/feeds/packages/onionshare-cli/Makefile' has a dependency on 'python3-unidecode', which does not exist
WARNING: Makefile 'package/feeds/packages/python-pika/Makefile' has a build dependency on 'python-setuptools/host', which does not exist

Esses avisos não impediram a compilação do EAP225-Outdoor v3 nesta reprodução.

Não instale pacotes aleatoriamente no Debian apenas para eliminar esses warnings. Se um aviso vier acompanhado da interrupção do build, registre-o como erro e investigue a dependência correspondente.

4. Abra o menuconfig

Execute:

make menuconfig

menuconfig é a interface textual que define o que o OpenWrt vai construir.

Os três níveis principais são:

Target System
└── Subtarget
    └── Target Profile

Para este equipamento:

Atheros ATH79
└── Generic
    └── TP-Link EAP225-Outdoor v3

Internamente:

ath79
└── generic
    └── tplink_eap225-outdoor-v3

Como navegar

Em geral:

  • setas ↑/↓: navegar;
  • Enter: abrir submenu;
  • Space: alterar opção;
  • /: pesquisar;
  • Save: salvar;
  • Exit: voltar/sair.

Marcadores:

[ ]  não selecionada
[*]  selecionada
<M>  selecionada como módulo, quando aplicável

Terminal pequeno

A interface exige pelo menos:

19 linhas × 80 colunas

Se aparecer:

Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.

aumente a janela.

Confira com:

stty size

5. Selecione o EAP225-Outdoor v3

Escolha:

Target System
→ Atheros ATH79

Subtarget
→ Generic

Target Profile
→ TP-Link EAP225-Outdoor v3

Não adicione LibreMesh nem outros pacotes do projeto nesta etapa.

6. Salve .config

Use Save e mantenha:

.config

Saia do menu e confira:

grep '^CONFIG_TARGET' .config

Na reprodução:

CONFIG_TARGET_ath79=y
CONFIG_TARGET_ath79_generic=y
CONFIG_TARGET_ath79_generic_DEVICE_tplink_eap225-outdoor-v3=y
CONFIG_TARGET_BOARD="ath79"
CONFIG_TARGET_SUBTARGET="generic"
CONFIG_TARGET_PROFILE="DEVICE_tplink_eap225-outdoor-v3"
CONFIG_TARGET_ARCH_PACKAGES="mips_24kc"

Também foram registrados:

CONFIG_TARGET_ROOTFS_INITRAMFS=y
CONFIG_TARGET_ROOTFS_SQUASHFS=y

7. Baixe as fontes necessárias

Execute:

make download

Depois registre:

du -sh ~/openwrt/dl
du -sh ~/openwrt
df -h /
free -h

Antes da compilação:

~/openwrt/dl  828 MB
~/openwrt     1,5 GB
disco         4,3 GB usados / 34 GB disponíveis
RAM           7,6 GiB total / 7,0 GiB disponíveis
swap          0 B

8. Compile

Nesta primeira reprodução foi usado:

time make V=s 2>&1 | tee build-eap225-outdoor-v3.log

Significado:

  • make: executa o build;
  • V=s: usa saída detalhada;
  • tee: exibe e salva o log;
  • time: mede a duração.

Não foi informado -j nesta primeira execução.

Tempo observado

real    248m29.311s
user    232m41.040s
sys      39m28.557s

Tempo real aproximado:

4 h 08 min 29 s

O arquivo build-eap225-outdoor-v3.log é evidência da validação. Não precisa ser publicado no hotsite; revise-o antes de qualquer compartilhamento.

9. Localize os artefatos

Execute:

ls bin/targets/ath79/generic/

Resultado:

config.buildinfo
feeds.buildinfo
openwrt-ath79-generic-tplink_eap225-outdoor-v3-initramfs-kernel.bin
openwrt-ath79-generic-tplink_eap225-outdoor-v3-squashfs-factory.bin
openwrt-ath79-generic-tplink_eap225-outdoor-v3-squashfs-sysupgrade.bin
openwrt-ath79-generic-tplink_eap225-outdoor-v3.manifest
packages/
profiles.json
sha256sums
version.buildinfo

Tamanhos:

ls -lh bin/targets/ath79/generic/*eap225-outdoor-v3*.bin
6,2 MB  openwrt-ath79-generic-tplink_eap225-outdoor-v3-initramfs-kernel.bin
6,5 MB  openwrt-ath79-generic-tplink_eap225-outdoor-v3-squashfs-factory.bin
6,6 MB  openwrt-ath79-generic-tplink_eap225-outdoor-v3-squashfs-sysupgrade.bin

10. Entenda os tipos de imagem

squashfs-factory.bin

É a imagem usada no caminho de instalação inicial quando o procedimento daquele hardware prevê uma imagem factory.

No EAP225-Outdoor v3, a instalação física será tratada em guia próprio. Não grave a imagem apenas com base nesta descrição.

squashfs-sysupgrade.bin

É a imagem destinada à atualização de um equipamento que já executa OpenWrt, seguindo o procedimento de sysupgrade adequado ao dispositivo.

initramfs-kernel.bin

É uma imagem com rootfs em RAM, utilizada principalmente em desenvolvimento, boot temporário e alguns cenários de teste ou recuperação. Não é a imagem normal de operação persistente.

11. Valide os hashes

cd ~/openwrt/bin/targets/ath79/generic/
sha256sum -c sha256sums

Resultado:

config.buildinfo: OK
feeds.buildinfo: OK
openwrt-ath79-generic-tplink_eap225-outdoor-v3-initramfs-kernel.bin: OK
openwrt-ath79-generic-tplink_eap225-outdoor-v3-squashfs-factory.bin: OK
openwrt-ath79-generic-tplink_eap225-outdoor-v3-squashfs-sysupgrade.bin: OK
openwrt-ath79-generic-tplink_eap225-outdoor-v3.manifest: OK
profiles.json: OK
version.buildinfo: OK

12. Registre versão e feeds

cd ~/openwrt
git describe --tags --always
git rev-parse HEAD
v24.10.7
b40dfac0a31695596f7c1f5f1519302ca8237f6e

O build gerou também:

cat bin/targets/ath79/generic/version.buildinfo
r29197-ab4c7d6af7

E:

cat bin/targets/ath79/generic/feeds.buildinfo
src-git packages https://git.openwrt.org/feed/packages.git^0c8f5f2ed91600b04ba639ef9c4c5ced3286cb3b
src-git luci https://git.openwrt.org/project/luci.git^3cf713a30bf456af74f9393096c2f7eb770b3ae2
src-git routing https://git.openwrt.org/feed/routing.git^cd05be684e670095d20663d1c41766cf8b54de61
src-git telephony https://git.openwrt.org/feed/telephony.git^92892fa285360b8981f62bf4e0a097e6449e7e33

13. Meça o consumo após o build

du -sh ~/openwrt
du -sh ~/openwrt/dl
du -sh ~/openwrt/build_dir
du -sh ~/openwrt/staging_dir
df -h /
free -h

Resultado:

~/openwrt              12 GB
~/openwrt/dl           837 MB
~/openwrt/build_dir    9,4 GB
~/openwrt/staging_dir  674 MB

Disco:

40 GB total
15 GB usados
24 GB disponíveis
39% de utilização

Memória após o build:

7,6 GiB total
6,9 GiB disponíveis
0 B de swap

Essa medição de memória foi feita após o término e não representa o pico durante a compilação.

14. Preserve o checkpoint OpenWrt puro

Antes de adicionar LibreMesh ou outros pacotes, preserve a configuração desta etapa:

cd ~/openwrt
cp .config config-eap225-outdoor-v3-openwrt-puro

Se quiser preservar também o manifest gerado:

cp bin/targets/ath79/generic/openwrt-ath79-generic-tplink_eap225-outdoor-v3.manifest   manifest-eap225-outdoor-v3-openwrt-puro.txt

Esses arquivos facilitam a comparação com as etapas seguintes e ajudam a separar alterações introduzidas pelo LibreMesh das alterações introduzidas posteriormente pelo perfil operacional do projeto.

Checklist de validação

  • git describe retorna v24.10.7;
  • feeds padrão atualizados e instalados;
  • make menuconfig abre;
  • Target System é ath79;
  • Subtarget é generic;
  • Target Profile é EAP225-Outdoor v3;
  • .config registra DEVICE_tplink_eap225-outdoor-v3;
  • make download termina;
  • make termina sem erro fatal;
  • existe bin/targets/ath79/generic/;
  • imagens factory, sysupgrade e initramfs-kernel são geradas;
  • sha256sum -c sha256sums retorna OK;
  • versão, feeds e uso de recursos foram registrados.

Resultado

A base OpenWrt foi compilada com sucesso para:

TP-Link EAP225-Outdoor v3
ath79 / generic
OpenWrt v24.10.7

Neste ponto a imagem ainda não contém LibreMesh.

O que não foi validado nesta etapa

  • EAP235-Wall v1;
  • build completo com apenas 2 GB de RAM;
  • compilação paralela com -j;
  • instalação física da imagem;
  • recuperação do equipamento;
  • LibreMesh;
  • pacotes e configurações específicas do projeto.

Referências externas

Última atualização em