Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

segunda-feira, 6 de setembro de 2021

OpenWrt: atualizando para a versão 21.02

Mais um artigo da série sobre o OpenWrt.

Enfim temos uma nova versão do OpenWrt. Mãos a obra para atualizar!

Parece repeteco do artigo de upgrade do 19.07, mas é assim mesmo. O 19.07 seria o último com suporte para o alvo ar71xx. Agora, a migração para o ath76 é obrigatório. No 19.07 os modelos com pouca RAM e Flash poderiam apresentar problemas, mas ainda eram "suportados". Agora com o 21.02 eles não terão mais uma imagem pronta. Quem quiser e souber como fazer, deve usar o Image Builder e fazer sua própria firmware.

Para começar, o upgrade só é suportado vindo da 19.07.x. Então, se estiver saltando da 18.06.x, dê uma paradinha na 19.07 antes de prosseguir.

96,72% dos problemas com instalação/atualização com OpenWrt que ajudo é em relação a escolha incorreta da imagem da firmware. O OpenWrt tem uma página que simplifica a busca pela firmware correta, mas nada é à prova de pessoas criativas. Pegue o arquivo no download da última versão estável e nunca em um endereço qualquer, mesmo que seja em um artigo na wiki do OpenWrt (lembre-se como funciona uma wiki). Normalmente a wiki referência a versão em desenvolvimento, que não é a que você quer. As versões dentro de "(stables) releases", exceto as com o rc (release candidate) são estáveis. Pegue preferencialmente a mais nova (com número maior). Evite qualquer firmware que tenha no caminho palavras como "trunk", "snapshot" ou "rc1", "rc2"... exceto se estiver testando algo. As versões estáveis também mencionam a respectiva versão do OpenWrt no nome do arquivo como em "openwrt-21.02.0-ath79-generic-tplink_archer-c7-v4-squashfs-sysupgrade.bin", ao contrário da versão instável/em desenvolvimento "openwrt-ath79-generic-tplink_archer-c7-v4-squashfs-sysupgrade.bin".

A nomenclatura da versão é adota o formato: ano.mês.correção. O ano/mês se referem ao momento que foi criado um ramo nos fontes para o lançamento da nova versão e não propriamente quando o lançamento final ocorreu. Já o último número é apenas um sequencial de correção. Então, para quem usa uma versão 21.02.x, a próxima 21.02.x+1 deverá conter apenas bugs resolvidos (em especial, os de segurança) e deve ser considerada como recomendada. Estas versões de correção são lançadas com certa frequência. É bom acompanhar (e atualizar).

Na página principal, temos um atalho para cada versão lançada com o nome "Download a firmware image for your device (firmware selector)". Essa é a versão amigável de escolha da firmware buscando por texto. Observe sempre a versão do hardware! Para upgrades entre versões do OpenWrt, sempre use o "sysupgrade" e "factory "para instalações da firmware original de fábrica.

Finalmente, é muito importante ler a wiki do seu roteador independente se ele já funcionava na versão anterior! São poucos minutos de leitura que podem salvar horas de trabalho ou mesmo seu roteador. A wiki atual está ainda aquém do que era mas sempre vale a busca. Para modelos antigos, a antiga ainda tem seu valor.

Bem, se eu simplesmente ir na interface, fornecer a nova imagem, ele vai funcionar? Provavelmente, mas talvez não é a maneira que dê menos trabalho. A atualização pode preservar as configurações mas não os programas instalados. Se você tem raiz expandida em unidade externa, a encrenca é ainda maior.

"Mas eu nunca instalei um programa!" OK, use a interface web e provavelmente todas as configurações serão migradas sem problemas. Já testei isto em mais de um roteador e funcionou sem problemas. Mas faça o backup antes! Caso tenha instalado algum pacote, continue lendo.

Se está migrando da ar71xx para a ath79, o backup não poderá ser aplicado às cegas. Será necessário migrar manualmente ou refazer a configuração do zero. Se quiser arriscar, as configurações "incompatíveis" serão as que referenciam os LEDs (leds em system), o arranjo da rede (switches e vlans no network) e os rádios (radio em wireless). O resto é, na sua grande maioria, reaproveitável até mesmo para outras arquiteturas.

Em primeiro lugar, precisamos do plano de retorno caso a nova versão não se comporte como o esperado. Faça sempre um backup geral do seu sistema. No processo de upgrade, eu sugiro que sejam feitas as três formas diferentes de backup que eu comento no artigo sobre o tema: backup padrão gerado pelo sistema, lista de pacotes instalados e todos os arquivos do overlay. Este último serve apenas para o plano de retorno caso algo importante não funcione para você na nova versão (e para recuperar algo que não entrou no backup do sistema).

Recomendo estes backup:

# cd /tmp
# sysupgrade -o -k -u -b backup.tgz

Em resumo:
  • '-u': salva tudo da /overlay, exceto aquilo que vem dos pacotes, mas inclui os arquivo de configuração modificados e os listados em /etc/sysupgrade.conf
  • '-o': ignora os arquivos que são idênticos ao /rom (já estavam assim na firmware)
  • '-k': inclui uma lista de pacotes instalados para reinstalação
  • '-b': somente gera um backup, não atualiza o sistema
Dá até para fazer por SSH:

pc1$ ssh router sysupgrade -o -k -u -b - > backup.tgz

Mantenha seu backup.tgz em um lugar seguro, não no /tmp do roteador que se apaga ao reiniciar!

Agora, finalmente, você está pronto para enviar a nova firmware. Se você usa um armazenamento externo para expandir a raiz, leia até o final deste post antes de iniciar o processo!

Você pode optar por fazer o upgrade pela interface web ou pelo terminal. Inclusive, você pode baixar o arquivo diretamente no roteador. Só cuidado ao colar a URL. O openwrt.org usa HTTPS por padrão mas o "wget" do OpenWrt não tem suporte para HTTPS (por padrão). Se tiver problemas, remova o "s" de "https". E sempre salve no /tmp.

E pode fazer pela Wifi? Os fabricantes não recomendam usar sempre um computador "conectado por cabo"? Sim, e já tive problemas com atualização a partir da firmware do fabricante por não escutar isto. Mas não com OpenWrt. Se estiver atualizando (e não instalando a primeira vez!), pode fazer pela Wifi sem problemas. Quando a gravação for iniciada, todo o processo já está independente do computador cliente. Só não pode faltar energia 😉

Se optar pela interface Web, vá no menu para gravar a nova firmware, informe o arquivo .bin baixado. Confirme e reze. Se só tinha configurações e nada instalado a mais, a opção para preservar as configurações será suficiente. Caso contrário, poderá optar por preservar (ou não) as configurações e aplicar o backup gerado por "sysupgrade -o -k -u -b" na sequência. Se for fazer pela linha de comando, pode até usar o sysupgrade diretamente sem buscar um backup externo "sysupgrade -o -k -u openwrt-21.02-....img"

Se optar por preservar as configurações, tudo que seria guardado em um backup do sistema (os arquivos listado pelo "sysupgrade -l") será restaurado. Se você instalou algum pacote e guardou a lista do que foi instalado (lembra que eu sugeri há alguns parágrafos atrás?), esta é a hora que você reinstala os pacotes desejados. Se for instalar manualmente, procure instalar os pacotes de mais alto nível (ex: "luci-app-minidlna" antes de "minidlna"), pois eles irão, por dependência, baixar os pacotes necessários. No final do processo, é bom refazer a listagem do que está instalado e comparar com o que você tinha na versão anterior.

Caso tenha gerado o backup com "sysupgrade -o -k -u", você pode aplicá-lo depois da instalação, independentemente de ter optado por preservar as configurações durante a instalação.

Agora falta reinstalar os pacotes. A opção '-k' do backup gerou uma lista de pacotes instalados. Vamos aproveitá-la:

# opkg update
# grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg install
# rm /etc/backup/installed_packages.txt
# reboot

Podem ser criados arquivos sufixados com "-opkg" em /etc/. Este são arquivos de configuração originais do pacote e são criados pois você modificou algo na configuração. Sugiro que verifique se não existe alguma coisa introduzida neste pacote que deveria ser adicionada no seu arquivo de configuração. Eu gosto do diff ou do "vim -d" para este trabalho comparando o arquivoconf com arquivoconf-opkg. Ao final do processo, eu gosto de apagar qualquer -opkg para deixar claro que apliquei tudo que queria.

As atualizações de segurança serão disponibilizadas por meio de atualização de pacotes (exceto as que exijam mudar o kernel). Para listar os pacotes atualizáveis:

# opkg update
# opkg list-upgradable

O maior problema é que estas atualizações de segurança, quando de pacotes embutidos oriundos na firmware instalada, ocuparão o espaço duas vezes no roteador pois ao substituir arquivos existentes na firmware inicial, ainda será preservado a versão em somente leitura para recuperação. Se for um problema para seu caso, a alternativa é esperar a próxima versão com a correção ou gerar uma nova firmware com o pacote atualizado.

Por fim, faça um novo backup geral. É sempre bom preservar o seu trabalho. Lembre-se que agora você pode gerar o backup com:

# cd /tmp
# sysupgrade -o -k -u -b backup.tgz

Só não esqueça de tirá-lo do /tmp pois ele será perdido ao desligar o roteador.

Se precisar retornar a versão anterior do OpenWrt, realize a gravação da firmware antiga, entre no modo de recuperação, monte a raiz e restaure o backup.

Se você não usa uma unidade externa para expandir o espaço interno, seu trabalho acabou. Para os demais, o processo é um pouco mais complicado. Ao atualizar o sistema, você terá um kernel novo que é incompatível com os módulos de kernel ou mesmo com as bibliotecas existentes na unidade externa, que ainda pertencentes à versão anterior. Você precisaria reinstalá-los. Esta é a sugestão de como proceder.

Em primeiro lugar, gere os backups sugeridos anteriormente. É importante preservar seu trabalho anterior. Ainda sem instalar a nova firmware, reinicie o sistema sem a unidade externa. Se você seguiu minha sugestão de manter uma configuração básica na flash interna, você ainda terá um ambiente funcional. Com isto, ele vai usar somente a flash interna (com a configuração que você tinha antes de usar a unidade externa).

Com a unidade externa conectada, faça o backup como sugerido anteriormente. Reinicie o roteaador sem a unidade externa e faça o procedimento de atualização descrito neste artigo para quem não usa raiz expandida, inclusive com a etapa de backups. Você terá que preservar os dois conjuntos de backups: com e sem a unidade externa em uso. Ao final do processo, você deverá ter a sua configuração básica restabelecida. Caso tenha optado por não preservar as configurações na gravação, você pode aproveitar o backup gerado quando a unidade externa estava desconectada (o segundo) para restaurar as configurações.

Neste momento, a unidade externa ainda está com os programas da versão anterior, que são geralmente incompatíveis com a nova versão (os módulos de kernel sempre o são). Por isto, precisamos nos livrar de todos os arquivos da versão anterior do OpenWrt presentes na unidade externa. Na unidade externa, na partição usada como overlay, remova todo o conteúdo ou mova tudo para um subdiretório (ou para outra unidade se não estiver com espaço livre) afim de que este não seja usado. Como sugestão, crie um "openwrt-versao-xxx" e mova tudo para lá. Refaça a configuração de uso de uma unidade externa (que no mínimo será reinstalar os pacotes necessários). Reinicie o sistema. Você deve estar agora com mais espaço na raiz.

Neste ponto, você ainda terá as mesmas configurações que tinha quando usou o sistema sem a unidade externa. Envie o primeiro backup da versão anterior feito com a unidade externa conectada (primeiro backup). Na sequência, reinstale os pacotes extras, assim como é feito para ambientes sem a raiz expandida. Complete o trabalho com aquele backup final.

Espero que apreciem a nova versão. De agora em diante, vou apenas focar em configurações específicas para OpenWrt 21.02, que ainda podem funcionar nas versões anteriores.

Até a próxima.

domingo, 5 de setembro de 2021

OpenWrt: versão 21.02 lançada!

Mais um artigo da série sobre o OpenWrt.

Enfim, a 21.02 foi lançada! Demorou bem mais do que o que seria o esperado mas antes tarde que mais tarde. Vamos as novidades:

Primeiro, se você tem um dispositivo com 4 MB de flash e 32 MB de RAM, vai ficar difícil para você. O mínimo agora é 8 MB de flash e 64 MB de RAM. É o fim da linha para muitos entre o TL-WR740ND e TL-WR1043ND. Se souber o que está fazendo, pode customizar a firmware removendo supérfluos com a interface web. Porém, mesmo removendo coisas, a memória RAM limitada pode acabar te sabotando. Eu ainda uso esporadicamente um TL-WR740ND como AP, mas não arriscaria minha internet com ele como roteador, em especial pela Wifi. Minha sugestão? Agradeça a seu velho companheiro e compre um roteador novo. Ou você pode segurar por mais um tempo no 19.07 que ainda terá atualizações de correções e segurança até a próxima versão maior do OpenWrt.

"E qual modelo você recomenda?"A recomendação é buscar modelos com 16 MB de flash e 128 MB de RAM. E a oferta no mercado não está ajudando, principalmente no Brasil. Só não se apegue na esperança que vai surgir um novo modelo lindo, cheio de recursos e barato. Nada de revolucionário surgiu por anos e o velho TP-Link Archer C7 ainda desponta na lista das recomendações. Os baseados em Broadcom nunca tiveram e não vão ter drivers da Wifi, o que elimina quase metade dos modelos acessíveis. Resta dos econômicos um ou outro modelo da TP-Link, D-Link ou Xiaomi ou adicionar um dígito no preço e comprar um Linksys, ASUS,.... Se está aguardando algo com IEEE 802.11ax (vulgo Wifi 6), por enquanto só tem suporte alguns roteadores que usam MediaTek.

A grande novidade da versão é a introdução do DSA no lugar do swconfig. Antes, era como se o OpenWrt fosse um computador com uma porta (ou mais) ligada a um switch gerenciável e o swconfig era o software para configurar este switch. Agora com o DSA, as portas do switch se apresentam como portas do sistema operacional (aparecem no "ip link") e elas são agrupadas como já ocorre com pontes em software (pelo comando "ip"). O sistema operacional cuida, de forma transparente, de escolher como arranjar as portas para usar os recursos em hardware. Mas isso dá algum benefício ao usuário final? Não muito. Uma vantagem é que mudanças no link das portas agora são visíveis ao sistema operacional. Antes o OpenWrt não tinha como saber que a porta usada pela Wan está sem link. Para quem administra o OpenWrt, talvez o DSA seja mais intuitivo pois, para os iniciantes, era difícil ver que a única interface de rede que o sistema operacional via (eth0) não era nenhuma das 5 portas que ele via externamente. Para o projeto a mudança é muito bem vinda pois o DSA já está no kernel do Linux, enquanto o swconfig nunca foi e nunca será aceito. Assim, pode-se reduzir os custos de manter as modificações em paralelo.

"Ótimo, vou logo instalar o 21.02 para ver como o DSA..." Pera aí! A maioria dos modelos não foi migrada. Acredito que o próximo esforço do projeto será migrar tudo para DSA mas, por enquanto, a lista de modelos suportados é pequena. Todavia, a introdução do DSA trouxe uma nova família de produtos para o OpenWrt: switches gerenciáveis de rede. Por enquanto são só modelos (de diversos fabricantes) baseados em Realtek. Não vejo a hora de poder padronizar a gestão de switches de rede em OpenWrt.

O DSA exigiu uma mudança na configuração e aproveitaram o embalo para trocar uns nomes. A configuração antiga ainda vale mas uma configuração nova irá usar nomes diferentes para algumas seções e campos e a interface web vai migrar algumas coisas no primeiro uso. Vai exigir uma pequena adaptação mas vejo como uma mudança para o bom sentido pois temos configurações bem isolada mostrando o que é camada 2 ("device") e camada 3 ("interface").

Ah, se for atualizar para um modelo que migrou para DSA, você verá um erro assustador dizendo que a imagem não é compatível por causa dele. Infelizmente a única forma de instalar de dentro do OpenWrt é forçando a instalação. O problema é "forçar" permite também a instalação de uma imagem errada. Faça com cuidado e preferencialmente em modelos com um método de recuperação de firmware corrompido.

Outra novidade é a inclusão do WPA3 na imagem padrão. Já era possível usar WPA3 no 19.07, mas era preciso instalar e trocar alguns pacotes. E como o WPA3 precisa de uma implementação de SSL, tudo que dependeria de SSL sai quase "de graça", como a interface web por https://. Isso foi um dos motivos (mas não o único) da incompatibilidade com flashes de 4 MB.

Para quem ainda não migrou do ar71xx para o ath76, como esperado, o ar71xx não existe mais. A maioria dos modelos foram migrados e, apesar de não existir uma migração automática, muito da migração é um copia/cola.

E como qualquer nova versão, temos muitas atualizações, com destaque ao kernel 5.4. Ativaram também a aleatorização dos endereços de memória (ASLR) e recursos necessários para containers. Logo poderemos ver os serviços do OpenWrt conteinerizados.

Por fim, esta versão foi lançada com um problema sério conhecido. Para quem depende da aceleração do NAT por software (software offload) para conseguir usar a velocidade de internet contratada, existe o problema de perda de pacotes com o IPv6. Então, para estes, talvez seja bom esperar por uma versão com este problema corrigido.

Vale a pena atualizar? Realmente é uma pergunta difícil de responder. A nova versão trouxe pouco para o OpenWrt. Claro que junto com a nova versão temos uma miríade de pacotes adicionados e atualizados que podem ter melhorias de seu interesse. Mas para quem não instala nada no OpenWrt além da imagem padrão, fica difícil justificar o trabalho do upgrade (mesmo que pequeno). Eu vou atualizar meus equipamentos pelas atualizações nos pacotes e por obrigação de ofício. Depois envio uma postagem sobre o upgrade.

Até a próxima.