Pular para o conteúdo

Preparando o ambiente de compilação

Prepare uma máquina Debian para compilar OpenWrt e, nas etapas seguintes, adicionar LibreMesh.

Preparando o ambiente de compilação

Estado de validação: esta etapa foi reproduzida em Debian GNU/Linux 12 (Bookworm). A VM começou com 16 vCPUs, 2 GB de RAM e 40 GB de disco; antes da compilação completa a memória foi ampliada para 8 GB. Portanto, 2 GB de RAM não foram validados como suficientes para o build completo. O disco permaneceu com 40 GB.

Objetivo

Ao final desta etapa você terá uma máquina Debian preparada para iniciar a compilação do OpenWrt.

A separação de privilégios usada nesta documentação é:

  • root ou outro usuário administrativo: atualização do sistema, instalação de dependências e criação do usuário;
  • compila: download do código, configuração e compilação do OpenWrt.

A compilação será executada pelo usuário não privilegiado compila, dentro de /home/compila.

Importante: não é necessário adicionar compila ao grupo sudo. Se alguma etapa posterior exigir privilégio administrativo, isso deve ser indicado explicitamente.

Ambiente reproduzido

Item Ambiente validado nesta reprodução
Sistema operacional Debian GNU/Linux 12 (Bookworm)
Arquitetura do host x86_64
vCPU 16
RAM no build completo 8 GB
Disco 40 GB
Swap nenhuma
Usuário de compilação compila
Diretório de trabalho /home/compila

A preparação chegou a ser iniciada com 2 GB de RAM, mas a VM foi ampliada para 8 GB antes da compilação completa. Por isso, não use esta experiência para afirmar que 2 GB são suficientes ou insuficientes.

Identifique o Debian

Para descobrir a versão do sistema:

cat /etc/os-release

Na reprodução:

PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm

Debian é a distribuição GNU/Linux utilizada como sistema operacional do ambiente de compilação. Esta documentação registra Debian 12 porque foi a versão efetivamente testada, e não porque outras versões já tenham sido homologadas.

Por que CPU, memória e disco importam?

A compilação de uma firmware não usa apenas o espaço ocupado pelo arquivo final.

Durante o build, o OpenWrt mantém código-fonte, feeds, downloads, toolchain, bibliotecas, objetos intermediários, pacotes e imagens finais.

Na compilação da imagem OpenWrt pura para o EAP225-Outdoor v3 foram medidos:

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

Depois, ao compilar a primeira imagem OpenWrt + LibreMesh base, foram observados:

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

Após acrescentar o perfil Nupef e concluir o build personalizado, a medição foi:

/home/compila/openwrt             13 GB
/home/compila/openwrt/dl          885 MB
/home/compila/openwrt/build_dir   11 GB
/home/compila/openwrt/staging_dir 741 MB
/home/compila/openwrt/bin          40 MB

No sistema de arquivos de 40 GB, ao final da compilação personalizada:

16 GB usados
23 GB disponíveis
41% de utilização

Esses valores são medições desta reprodução, não requisitos mínimos universais.

Antes de iniciar, registre os recursos:

nproc
free -h
df -h /

Atualize o Debian

Como root:

apt update
apt upgrade

Ou com um usuário administrativo que possua sudo:

sudo apt update
sudo apt upgrade

Instale as dependências

Como root:

apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
rsync swig unzip zlib1g-dev file wget bzip2 byobu python3-distutils

Ou com sudo:

sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
rsync swig unzip zlib1g-dev file wget bzip2 byobu python3-distutils

Dependência descoberta durante a validação

python3-distutils não aparecia na lista inicial. Na primeira execução de make menuconfig, o OpenWrt interrompeu a verificação com:

Checking 'python3-distutils'... failed.
Build dependency: Please install the Python3 distutils module
Prerequisite check failed.

Depois de:

apt install python3-distutils

a verificação passou a retornar:

Checking 'python3-distutils'... ok.

Pode-se conferir o módulo com:

python3 -c "import distutils; print(distutils.__file__)"

No Debian 12 testado, Python 3.11 exibiu:

DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12

Esse aviso não impediu o build. O módulo foi carregado e aceito pela verificação do OpenWrt 24.10.7.

Não use FORCE=1 para ignorar a verificação de pré-requisitos neste tutorial. O objetivo é identificar e corrigir as dependências do ambiente.

Crie o usuário de compilação

Como root:

adduser compila

Ou:

sudo adduser compila

No Debian 12 testado, adduser criou automaticamente:

/home/compila

Não foi necessário executar mkdir /home/compila.

Confira:

getent passwd compila
ls -ld /home/compila

Na reprodução:

drwx------ ... compila compila ... /home/compila/

Entre como compila

Se estiver como root:

su - compila

Confirme:

whoami
pwd

Esperado:

compila
/home/compila

Opcional: mantenha a sessão com Byobu

Byobu é opcional. Ele não é necessário para gerar a firmware.

Ele é útil quando a máquina é acessada remotamente, porque mantém sessões de terminal persistentes. Assim, uma desconexão SSH não precisa encerrar uma compilação longa.

Entre primeiro como compila:

byobu

Dentro do Byobu:

whoami
pwd

Esperado:

compila
/home/compila

Atalhos básicos

Atalho Função
F2 criar uma nova janela
F3 ir para a janela anterior
F4 ir para a próxima janela
F6 desconectar da sessão sem encerrá-la
F8 renomear a janela atual
Ctrl+D ou exit encerrar o shell/janela atual

Depois de F6, conecte-se novamente, entre como compila e execute byobu.

Verifique o ambiente

Usuário

whoami

Resultado:

compila

Diretório

pwd

Resultado:

/home/compila

Proprietário

ls -ld /home/compila/

Resultado:

drwx------ ... compila compila ... /home/compila/

Escrita sem privilégio administrativo

touch /home/compila/teste-escrita
ls -l /home/compila/teste-escrita
rm /home/compila/teste-escrita

Resultado:

-rw-r--r-- ... compila compila ... /home/compila/teste-escrita

Ferramentas essenciais

git --version
gcc --version
make --version
wget --version | head -n 1

Na reprodução:

git version 2.39.5
gcc (Debian 12.2.0-14+deb12u1) 12.2.0
GNU Make 4.3
GNU Wget 1.21.3 built on linux-gnu.

Checklist

  • Debian e versão identificados;
  • dependências instaladas;
  • python3-distutils reconhecido;
  • whoami retorna compila;
  • pwd retorna /home/compila;
  • /home/compila pertence a compila:compila;
  • escrita no diretório funciona sem sudo;
  • git, gcc, make e wget estão disponíveis;
  • se Byobu estiver sendo usado, foi iniciado como compila.

Resultado esperado

O próximo tutorial começa com:

usuário:   compila
diretório: /home/compila

O que acontecerá a seguir

Você irá obter OpenWrt 24.10.7, instalar os feeds padrão, abrir make menuconfig, selecionar o EAP225-Outdoor v3, salvar .config, baixar as fontes, compilar e validar os binários.

Pontos ainda em validação

  • requisitos mínimos de RAM;
  • requisitos mínimos de disco;
  • efeito do paralelismo sobre tempo e memória;
  • outras versões de Debian;
  • dependências adicionais para outros targets.

Referências externas

Última atualização em