Pular para o conteúdo

Construindo uma primeira imagem com LibreMesh

Adicione o LibreMesh ao OpenWrt 24.10.7 e compile uma primeira imagem base para o TP-Link EAP225-Outdoor v3.

Construindo uma primeira imagem com LibreMesh

Objetivo

Nesta etapa você irá partir do ambiente OpenWrt já validado para o TP-Link EAP225-Outdoor v3 e adicionar uma camada básica do LibreMesh.

O objetivo ainda não é produzir a firmware completa utilizada pelo projeto. Primeiro validamos uma base mínima e reproduzível:

OpenWrt 24.10.7 + LibreMesh base para o TP-Link EAP225-Outdoor v3.

OpenWrt puro
OpenWrt + LibreMesh base     ← esta página
pacotes e serviços do projeto
configurações e ajustes
versão candidata a estável

Ao final desta reprodução, a imagem LibreMesh base foi compilada com sucesso e os artefatos gerados tiveram seus hashes validados.

Pré-requisitos

Antes de começar, conclua a preparação do ambiente e a compilação da primeira imagem OpenWrt.

Ambiente desta reprodução:

  • Debian 12;
  • usuário compila;
  • OpenWrt em /home/compila/openwrt;
  • OpenWrt 24.10.7;
  • TP-Link EAP225-Outdoor v3;
  • target ath79;
  • subtarget generic.
cd ~/openwrt
whoami
git describe --tags --always
git rev-parse HEAD

Resultado:

compila
v24.10.7
b40dfac0a31695596f7c1f5f1519302ca8237f6e

1. Adicione os feeds do LibreMesh

cp feeds.conf.default feeds.conf

cat << 'EOF' >> feeds.conf
src-git libremesh https://github.com/libremesh/lime-packages.git;master
src-git profiles https://github.com/libremesh/network-profiles.git
EOF

Confira:

grep -E 'libremesh|profiles' feeds.conf

Resultado:

src-git libremesh https://github.com/libremesh/lime-packages.git;master
src-git profiles https://github.com/libremesh/network-profiles.git

Como master pode mudar, registre posteriormente o SHA efetivamente utilizado.

2. Atualize e instale os feeds

Como compila:

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

Registre os commits:

git -C feeds/libremesh rev-parse HEAD
git -C feeds/profiles rev-parse HEAD

Nesta reprodução:

LibreMesh:
0b6b5c53c6ec1805bd74aaf27237ad2c31a63a7c

network-profiles:
0965de26aaa4703ce300093cc94f07edb6ef12db

3. Abra o menuconfig

make menuconfig

Mantenha:

Target System  → Atheros ATH79
Subtarget      → Generic
Target Profile → TP-Link EAP225-Outdoor v3

4. Selecione os pacotes LibreMesh da imagem base

Foram selecionados para esta etapa:

lime-docs-minimal
lime-hwd-ground-routing
lime-hwd-openwrt-wan
lime-proto-anygw
lime-proto-babeld
lime-proto-batadv
lime-app
shared-state
shared-state-babeld_hosts
shared-state-bat_hosts
shared-state-nodes_and_links
babeld-auto-gw-mode
check-date-http

Após a resolução das dependências, o .config efetivamente compilado também continha:

lime-debug
lime-proto-wan
lime-report
lime-system
shared-state-async
shared-state-dnsmasq_hosts
shared-state-dnsmasq_leases

Isso é importante: nem todo pacote com =y foi necessariamente selecionado manualmente.

Deixe para a etapa seguinte os componentes adicionais da firmware, como LuCI e complementos, tradução pt-BR, Statistics, Pirania, tmate, ubus-tmate, sshtunnel, OpenWISP, ZeroTier, WireGuard e configurações específicas do projeto.

5. Ajuste DHCP

A configuração final ficou:

# CONFIG_PACKAGE_dnsmasq is not set
CONFIG_PACKAGE_dnsmasq-dhcpv6=y
# CONFIG_PACKAGE_dnsmasq-full is not set
CONFIG_PACKAGE_odhcpd-ipv6only=m

Durante a reprodução, odhcpd-ipv6only não pôde ser simplesmente desmarcado no menuconfig. A consulta ao símbolo mostrou que DEFAULT_odhcpd-ipv6only era selecionado pelo profile TARGET_ath79_generic_DEVICE_tplink_eap225-outdoor-v3.

Após salvar .config, foi aplicado:

cat << 'EOF' >> .config
CONFIG_PACKAGE_odhcpd-ipv6only=m
EOF

make defconfig

Aqui =m mantém o pacote disponível como pacote separado, em vez de incorporá-lo à imagem como =y.

6. Não habilite os feeds como repositórios da imagem

Em:

Image configuration
→ Separate feed repositories

mantenha libremesh e profiles desabilitados.

O .config apresentou:

# CONFIG_FEED_libremesh is not set
# CONFIG_FEED_profiles is not set

Isso não remove os feeds do ambiente de compilação.

7. Configure o wpad para mesh

Este foi o principal problema encontrado durante a primeira tentativa.

O profile do EAP225-Outdoor v3 selecionava wpad-basic-mbedtls como default. Inicialmente foi testado:

CONFIG_PACKAGE_wpad-basic-mbedtls=m
CONFIG_PACKAGE_wpad-mesh-mbedtls=y

Essa configuração não funcionou.

A compilação chegou a package/install e falhou após aproximadamente 41 minutos:

Collected errors:
 * check_conflicts_for: The following packages conflict with wpad-basic-mbedtls:
 * check_conflicts_for:   wpad-mesh-mbedtls *
 * opkg_install_cmd: Cannot install package wpad-basic-mbedtls.

Antes da correção, preserve a configuração da tentativa:

cp .config config-eap225-outdoor-v3-libremesh-base-falha-wpad

A correção aplicada foi:

cat << 'EOF' >> .config
# CONFIG_PACKAGE_wpad-basic-mbedtls is not set
CONFIG_PACKAGE_wpad-mesh-mbedtls=y
EOF

make defconfig

O estado final usado no build bem-sucedido foi:

# CONFIG_PACKAGE_wpad-basic-mbedtls is not set
CONFIG_PACKAGE_wpad-mesh-mbedtls=y

A verificação completa mostrou que wpad-mesh-mbedtls era a única variante wpad selecionada com =y.

8. Mantenha os defaults ath10k

Foram encontrados:

CONFIG_PACKAGE_ath10k-firmware-qca9888-ct=y
CONFIG_PACKAGE_kmod-ath10k-ct=y

Eles foram mantidos nesta etapa. Não foi feita troca para variantes não-CT. Esse comportamento ainda deverá ser avaliado em testes reais da firmware e da rede mesh.

9. Avisos encontrados durante a configuração

make defconfig apresentou warnings envolvendo referências como:

deferrable-reboot
bird1-ipv4
bird1-ipv6
python3-pysocks
python3-unidecode
python-setuptools/host

Também foi observada dependência recursiva envolvendo o profile Freifunk profile-freifunk-80211s-sae-bmx7-batadv e wpad-mesh-wolfssl.

Como esse profile não fazia parte da seleção intencional e a imagem final foi compilada, esses avisos não impediram este build específico. Eles permanecem registrados para investigação.

10. Preserve a configuração

Depois dos ajustes:

cp .config config-eap225-outdoor-v3-libremesh-base

Isso cria um checkpoint entre a base LibreMesh e a futura firmware customizada.

11. Compile

Foi usado:

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

A primeira execução falhou pelo conflito de wpad.

Depois da correção, a compilação foi repetida e reaproveitou artefatos já construídos:

real    6m22.642s
user    4m44.066s
sys     2m10.984s

Esse tempo não representa uma compilação limpa desde o início.

12. Confira os binários

ls -lh bin/targets/ath79/generic/*eap225-outdoor-v3*.bin

Foram gerados:

8.1M  openwrt-ath79-generic-tplink_eap225-outdoor-v3-initramfs-kernel.bin
8.6M  openwrt-ath79-generic-tplink_eap225-outdoor-v3-squashfs-factory.bin
8.6M  openwrt-ath79-generic-tplink_eap225-outdoor-v3-squashfs-sysupgrade.bin

O diretório também contém config.buildinfo, feeds.buildinfo, manifest, profiles.json, sha256sums e version.buildinfo.

Comparação com a imagem OpenWrt pura

Imagem OpenWrt puro LibreMesh base
initramfs-kernel 6,2 MB 8,1 MB
factory 6,5 MB 8,6 MB
sysupgrade 6,6 MB 8,6 MB

Essa tabela registra apenas os tamanhos obtidos nas duas compilações; não representa uma avaliação de desempenho ou consumo de memória no roteador.

13. 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

14. Registre a procedência

OpenWrt:
v24.10.7
b40dfac0a31695596f7c1f5f1519302ca8237f6e

LibreMesh:
0b6b5c53c6ec1805bd74aaf27237ad2c31a63a7c

network-profiles:
0965de26aaa4703ce300093cc94f07edb6ef12db

Hardware:
TP-Link EAP225-Outdoor v3

Target:
ath79 / generic

15. Registre o uso do ambiente

Ao final:

/home/compila/openwrt       13 GB
dl/                         877 MB
build_dir/                   11 GB
staging_dir/                721 MB

Disco:

40 GB total
16 GB usados
23 GB disponíveis
41% utilizado

Memória:

7,6 GiB total
6,8 GiB disponíveis no momento da medição
sem swap

Esses números descrevem esta reprodução. Não estabelecem requisitos mínimos.

O teste inicialmente planejado com 2 GB de RAM não foi concluído; portanto, 2 GB não deve ser apresentado como requisito validado.

16. Resultado

A cadeia validada é:

Debian 12
OpenWrt 24.10.7
ath79 / generic
TP-Link EAP225-Outdoor v3
feeds LibreMesh
pacotes LibreMesh base
wpad-mesh-mbedtls
BUILD CONCLUÍDO
factory.bin
sysupgrade.bin
initramfs-kernel.bin
SHA256 OK

Portanto, a construção da primeira imagem LibreMesh base foi reproduzida com sucesso.

Isso valida a compilação, mas ainda não valida o comportamento da firmware instalada no equipamento.

Checklist

Validado

  • OpenWrt 24.10.7;
  • TP-Link EAP225-Outdoor v3;
  • target ath79/generic;
  • feeds LibreMesh e profiles;
  • commits registrados;
  • pacotes LibreMesh base;
  • dnsmasq-dhcpv6;
  • odhcpd-ipv6only=m;
  • conflito de wpad identificado;
  • wpad-basic-mbedtls retirado;
  • wpad-mesh-mbedtls=y;
  • defaults ath10k-*-ct preservados;
  • build concluído;
  • três imagens geradas;
  • checksums validados;
  • procedência registrada;
  • uso de disco registrado.

Ainda não validado

  • instalação no EAP225-Outdoor v3;
  • boot no equipamento;
  • acesso após instalação;
  • interfaces Ethernet;
  • rádios 2,4 GHz e 5 GHz;
  • mesh 802.11s;
  • Babel;
  • Batman-adv;
  • comportamento dos defaults ath10k-*-ct;
  • operação prolongada;
  • requisitos mínimos de RAM do ambiente de compilação.

Próxima etapa

A próxima etapa não deve simplesmente repetir a lista histórica de pacotes.

As versões mais recentes disponibilizadas pelo compilador do Nupef mostram uma evolução importante da arquitetura:

  • a interface local e o lime-app entram antes da camada de gerência central;
  • o OpenWISP passa a fornecer gerenciamento e monitoramento centralizados;
  • WireGuard passa a ser utilizado como rede de administração dessa implantação;
  • o monitoramento do OpenWISP não depende, por princípio, da VPN: o agente do roteador pode enviar dados ao controller;
  • a VPN utilizada na implantação precisa ter suporte correspondente na firmware;
  • as estatísticas locais baseadas em collectd foram posteriormente removidas por redundância com o monitoramento central;
  • ZeroTier aparece como capacidade adicional em uma variante específica, sem substituir o WireGuard;
  • o suporte remoto via tmate é uma capacidade relacionada ao lime-app, mas não está sendo utilizado operacionalmente no momento;
  • Pirania permanece uma capacidade independente de portal cativo, ativável em runtime.

Por isso, a próxima página compara o manifest da imagem LibreMesh base com o manifest publicado do perfil Nupef 0.6.1 antes de selecionar no menuconfig os pacotes que pertencem ao perfil reproduzido.

A trilha de versões informa ainda que a base OpenWrt foi atualizada para 24.10.8 a partir da v0.2.1. Portanto, uma reprodução exata da v0.6.1 exige confirmar também version.buildinfo, feeds.buildinfo e config.buildinfo da versão publicada; a imagem construída nesta página continua sendo a base validada em OpenWrt 24.10.7.

Nota de nomenclatura

Este tutorial documenta OpenWrt + LibreMesh.

LiRoOS/LibreRouterOS é uma referência histórica relacionada ao LibreRouter e não identifica a firmware construída neste procedimento.

Última atualização em