Este artigo apresenta um breve tutorial para configurar e otimizar o Linux em uma placa Raspberry Pi Zero 2 W, incluindo algumas otimizações para liberar memória RAM e melhorar o desempenho, para usar em aplicações “headless”.
Introdução
A Raspberry Pi Zero 2 W é uma placa extremamente compacta, com um processador quad core, adaptador wi-fi 802.11 b/g/n, Bluetooth, conector para câmera, uma porta USB OTG, saída de vídeo HDMI e um conector com GPIOs e interfaces I2C/SPI/UART/I2S/PWM. Infelizmente, a capacidade de memória é bem limitada para os padrões atuais, 512MBytes, dos quais uma parte não está disponível para rodar aplicações. Este artigo apresenta um breve tutorial para configurar o Linux nessa placa, com algumas otimizações para liberar memória RAM e melhorar o desempenho, para usar em projetos “headless”, isto é, que não necessitam de um monitor de vídeo ou interface gráfica.
Criando a imagem de boot
O primeiro passo é gravar um cartão micro-SD com a imagem do sistema operacional. Um cartão de pelo menos 16GB é recomendado. Para gravar o cartão, é usado o aplicativo Raspberry Pi Imager. A versão 1.8.3, para Windows foi usada para este tutorial; a tela inicial é apresentada na figura abaixo.
Em primeiro lugar, seleciona-se o dispositivo, a Raspberry Pi Zero 2 W. Em seguida, seleciona-se o sistema operacional. O padrão do Imager é uma imagem de 32 bits com suporte a ambiente gráfico. A segunda opção, Raspberry Pi OS (other) dá acesso a outras versões, de 32 e 64 bits, com e sem suporte a ambiente gráfico. Para projetos headless, as opções Lite, sem ambiente gráfico, são recomendadas. Para os testes a versão Lite de 64 bits foi selecionada.
Finalmente é preciso selecionar a mídia onde será gravado o sistema.
Após selecionar a mídia, será necessário fazer alguma customização, para se poder acessar a placa remotamente, via ssh, e para conectá-la a uma rede Wi-Fi. Portanto, ao ser exibida a tela de customização, deve-se selecionar a opção EDIT SETTINGS.
A customização começa pela seleção do hostname, usuário/senha, Wi-Fi e locale.
No caso de roteadores em que haja duas redes Wi-Fi, 2.4GHz e 5GHz, é fundamental selecionar o SSID da rede de 2.4GHz, porque o WiFi da Zero 2 W não suporta redes de 5GHz. No campo de senha de usuário, é recomendável usar uma senha forte. Entretanto, o Imager não mostra a senha e, em caso de erro de digitação, é necessário repetir o processo de configuração e gravação do cartão. Para evitar que isso ocorra, sugere-se usar uma senha fraca e posteriormente alterá-la com o passwd ou digitar a senha em um editor de texto e copiar e colar para o campo de senha.
Na opção SERVICES, habilitar o ssh com autenticação por senha e clicar em SAVE para avançar para a próxima etapa.
Clicar em YES inicia a gravação e verificação do cartão micro-SD, o que exigirá alguns minutos. Ao final da gravação, instala-se o cartão na Raspberry Pi Zero 2 W. Se a imagem tiver sido corretamente gravada, o LED verde da placa começará a piscar e o boot da imagem será iniciado. O primeiro boot exige alguns minutos porque a imagem gravada no cartão vai efetivamente se configurar, o que inclui alguns reboots, demorando alguns minutos. Quando o processo terminar, o LED verde acende continuamente.
Testando a instalação
Se tudo correu bem, agora há um novo computador na rede WiFi. É necessário descobrir o IP dele, configurado por DHCP pelo roteador. Uma das formas de se descobrir o IP da Zero 2 W é logar no roteador e verificar os IPs dos dispositivos conectados.

Uma vez conhecido o IP, será possível se conectar à Zero 2 W, usando um cliente ssh, como o cliente ssh nativo do Windows ou o putty.
Pós-instalação (otimizações)
O primeiro passo consiste em atualizar a instalação:
sudo apt update
sudo apt upgrade
Em seguida, sugere-se instalar o Midnight Comander (mc):
sudo apt install mc
Este é um passo opcional, mas esse excelente e, infelizmente, pouco conhecido utilitário vai poupar muita digitação de cd /rota/de/diretório/quilométrica/pra/achar/arquivo, facilitando muito a navegação pelo sistema de arquivos do Linux.

Em seguida, vamos fazer alguns ajustes adicionais para otimização do sistema. O primeiro é configurar o gerenciador de memória virtual do Linux, para minimizar o uso do arquivo de trocas (swap). Para isso, editar o arquivo /etc/sysctl.conf com um editor de texto (mcedit, nano, vi) executando com o sudo, e adicionar a linha abaixo no final do arquivo:
vm.swappiness=1
Após salvar o arquivo, executar o comando abaixo para a alteração ter efeito:
sudo sysctl -p
Com a configuração padrão de swappiness, o Linux sempre vai usar o arquivo de troca, mesmo quando o uso da memória física for baixo (o porquê disso ocorrer está fora do escopo deste artigo). Queremos que o arquivo de troca seja usado apenas se for absolutamente necessário. Além da melhora de performance, reduz-se a degradação do cartão micro-SD causada pelas operações de escrita.
O próximo passo da pós-instalação é desabilitar o suporte a IPv6. Não é obrigatório, mas recomendável, salvo se sua aplicação exigir esse suporte. Para desabilitar o suporte a IPv6, editar novamente o arquivo /etc/sysctl.conf e adicionar as linhas:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Salvar o arquivo e executar:
sudo sysctl -p
É recomendável atribuir um IP fixo à sua Zero 2 W para evitar mudança do IP por causa do DHCP, facilitando a manutenção do sistema; também pode ser requisito para aplicações que dependam de um IP fixo para funcionar.
Para fixar o IP, editar o arquivo /etc/dhcpcd.conf, executando com o sudo, localizando as linhas abaixo:
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
As linhas devem ser descomentadas e ajustadas com os valores apropriados, por exemplo:
interface wlan0
static ip_address=192.168.0.2/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8
A escolha do IP depende da configuração do roteador WiFi. É necessário configurar o roteador para, por exemplo, reservar uma faixa de IPs que não devem ser atribuídos por DHCP e ajustar o IP da Zero 2 W dentro dessa faixa.
Finalmente, vamos resgatar alguma memória física usada pela GPU. Para isso vamos executar o utilitário de configuração:
$ sudo raspi-config

Seleciona-se Performance Options -> GPU Memory e altera-se valor para o mínimo, 16MB, salvando-se a nova configuração e reiniciando a Pi Zero 2 W.
Abaixo, o resultado do comando free antes e após a alteração, logo após o boot e com uma sessão ssh rodando:
$ free -h
total used free shared buff/cache available
Mem: 419Mi 68Mi 254Mi 0.0Ki 95Mi 297Mi
Swap: 99Mi 0B 99Mi
$ free -h
total used free shared buff/cache available
Mem: 467Mi 61Mi 310Mi 0.0Ki 95Mi 352Mi
Swap: 99Mi 0B 99Mi
Além de a memória total aumentar em 48MiB, houve uma redução no uso da memória. Com isso, ganhamos 53Mib, ou 405Mib livres. Nada mal.
E, para quem estiver imaginando qual seria o consumo de memória com o ambiente gráfico, alguns testes rápidos com a instalação padrão resultaram entre 120MB e 140MB a mais de consumo de memória RAM (coluna used), incluindo o uso de swap, mesmo com vm.swappiness=1.
Aplicação prática
Há vários exemplos de aplicações para a Raspberry Pi Zero w e 2 W na Internet. Um deles é o uso da Pi Zero 2 W como servidor DNS com filtros para bloquear anúncios, rastreadores, conteúdos maliciosos, etc., usando o pi-hole e unbound. Esse servidor filtra requisições de DNS que não passam pelos critérios dos filtros, e direciona as requisições que passam pelos filtros para servidores DNS autoritativos em vez de usar os servidores DNS do ISP, o que é interessante do ponto de vista de segurança e privacidade. Para administrar o pi-hole e monitorar o tráfego, bloqueios e estatísticas das requisições de DNS, um web-server também é configurado. A figura abaixo apresenta a Pi Zero 2 W já configurada e executando o servidor DNS, ainda sem um case para protegê-la, sendo alimentada pela porta USB do roteador, o que é possível pelo seu baixo consumo de energia nessa configuração.
Abaixo, tem-se o resultado do comando free, monitorando o tráfego com um navegador conectado à página de administração do pi-hole, e com uma sessão ssh para interagir com a Zero 2 W, após algumas horas de funcionamento:
pico@raspberrypi:~ $ free -h
total used free shared buff/cache available
Mem: 467Mi 95Mi 193Mi 4.0Mi 178Mi 311Mi
Swap: 99Mi 0B 99Mi
De modo geral, o uso de memória se manteve abaixo de 100MB durante os testes. O consumo de memória pode aumentar dependendo da quantidade de acessos que for feita, porque o cache do pi-hole e do servidor DNS vão aumentar, mas é razoável supor que vai se manter confortavelmente dentro dos mais de 350MB de memória física disponíveis para a aplicação.
Em geral, os tutoriais para configurar o pi-hole na Internet usam as Raspberry Pi mais poderosas (3, 4 etc.), com mais memória, periféricos e recursos. O que é interessante da implementação com a Raspberry Pi Zero 2 W é que ela é mais compacta e de menor custo.
Conclusão
Este artigo apresentou um roteiro passo-a-passo para configurar a Raspberry Pi Zero 2 W com conectividade de rede e com algumas configurações adicionais para melhorar desempenho e aumentar a memória disponível para projetos “headless” que podem se beneficiar da disponibilidade de um sistema operacional Linux completo, de seu tamanho extremamente compacto, baixo consumo de energia e menor custo.










Desde que este artigo foi postado, algumas coisas mudaram e algumas das instruções do artigo não se aplicam à versão mais recente do Linux (Bookwork).
Resumidamente:
Alternativamente, é possível selecionar a versão Bullseye (opções “Legacy” do Imager)