Configuração otimizada do Linux para a Raspberry Pi Zero 2 W

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.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Raspberry Pi » Configuração otimizada do Linux para a Raspberry Pi Zero 2 W

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: