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.

sexta-feira, 10 de janeiro de 2020

OpenWrt: atualizando para a versão 19.07

Mais um artigo da série sobre o OpenWrt.

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

No post anterior, comentei sobre o lançamento do OpenWrt 19.07. Dois pontos importantes para relembrar:
  • se seu dispositivo tem 4 MBytes de flash, talvez não funcione e você terá que fazer um downgrade. Vou fazer um artigo sobre isso;
  • para os usuários da plataforma ar71xx na versão 18.06, temos a opção de se manter no ar71xx (mas na versão 19.07) ou migrar para a ath76.
96,72% dos problemas com instalação/atualização com OpenWrt/LEDE 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-19.07.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 nomeclatura 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 19.07.x, a próxima 19.07.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". Isso irá redirecionar uma tabela de hardware suportáveis, com filtragem dinâmica. Alternativamente, você sempre pode optar por clicar em "All firmware images" e buscar manualmente sua firmware, como ocorria com versões anteriores. Na dúvida, se você já é um usuário do OpenWrt, você pode descobrir a plataforma olhando o arquivo /etc/openwrt_release ou /etc/os-release:

root@router:~#  grep _TARGET /etc/openwrt_release 
DISTRIB_TARGET='ar71xx/generic'

root@router:~# grep _BOARD /etc/os-release
LEDE_BOARD="ar71xx/tiny"

root@router:~# grep _BOARD /etc/os-release
OPENWRT_BOARD="ramips/mt7620

OK, chegamos a uma lista enorme de firmwares! Vamos entender o que significa cada parte do nome do arquivo. Tomemos por exemplo "openwrt-19.07.0-ath79-generic-tplink_archer-c7-v4-squashfs-sysupgrade.bin":
  • openwrt é o sistema operacional que você está instalando 😉
  • 19.07.0 é a versão do openwrt. Em firmwares instáveis, este campo não existe!
  • ath79 é a plataforma do seu dispositivo. Você descobre isso na wiki do projeto ou na tabela de hardware (ToH), campo "Target".
  • generic é o subtipo do layout da flash. Normalmente será o "generic", exceto para casos especiais como roteadores com 4 MB que usam "tiny".
  • tplink_archer-c7-v4 este é o modelo do seu roteador. Observe em especial a versão do HW (v4) pois ela pode mudar completamente o dispositivo, inclusive de família do SoC e se é suportado pelo OpenWrt.
"squashfs" é o tipo do armazenamento da imagem. Nesta, existe uma cópia imutável dos arquivos (ROM) e o resto da flash é usada para, de forma transparente, guardar as modificações (overlay). Tudo parece editável para o usuário. A diferença é que você pode, a qualquer momento, apagar as diferenças e restaurar o sistema pós-instalação. Existem outros formatos como o jffs2 (com escrita total sem recuperação), initram (rodar sem gravar na flash), mas normalmente são para casos marginais.

"sysupgrade" é a função da firmware. Esta é para atualizar de um OpenWrt para outro (e, em alguns casos, de outros firmwares alternativos como DD-WRT). Porém, não deve ser reconhecido pela firmware original do roteador. Para primeira instalação, ainda com a firmware original, use a variante "factory".

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 optou por migrar 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).

A partir da versão 19.07 (depois dela estar instalada) teremos mais opções para gerar o backup. Se estiver familizarizado com a CLI, as novas opções facilitam em muito o processo. Tudo que você precisará está no backup gerado com:

# 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
Para atualizações da versão anterior, você pode baixar o novo sysupgrade no /tmp e usá-lo com:

# cd /tmp
# wget http://luizluca.github.io/sysupgrade
# chmod +x ./sysupgrade
# ./sysupgrade -o -k -u -b backup.tgz

E salve seu backup.tgz em um lugar seguro.

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 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 -b", você pode aplicá-lo depois da instalação, independentemente de ter optado por preservar as configurações. A diferença é que o processo de reinstalação de pacotes é simplificado.

# 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 e restaure a overlay.

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 19.07, que ainda podem funcionar nas versões anteriores.

Até a próxima.

OpenWrt: versão 19.07 lançada!

Mais um artigo da série sobre o OpenWrt.

Enfim, depois de muito tempo (era para ser 19.01) e alguns atrasos (o 7 na versão significa julho), temos uma nova versão do OpenWrt! E obviamente temos um batalhão de correções e algumas novidades interessantes.

Uma primeira e mais impactante é a introdução da plataforma ath79 que irá substituir o muito popular ar71xx. Se você tem um dispositivo TP-Link, tem uma grande probabilidade de usar o ar71xx. A plataforma compartilha um kernel e normalmente atende a uma família de SoC (no caso do ar71xx e ath79, Qualcomm Atheros ar71xx, ar72xx, ar91xx, ar93xx, qca95xx). Só para não misturar, plataforma não é o mesmo que ISA (conjunto de instruções), que pode ser compartilhado entre diversas plataformas como ARM, MIPS (big e little endian), RISC-V e x86. O maior problema do ar71xx era que a descrição do hardware era feita por código C em arquivos tipo march. Cada vez que aparecia um novo dispositivo, mais um pedacinho de código era anexada no kernel (lembra que ele é compartilhado na plataforma?) e isso vai fazendo ele crescer. A alternativa é usar Device Tree, que descreve o hardware de cada dispositivo em uma linguagem própria. Esse arquivo é compilado para cada dispositivo e é anexado ao kernel durante a montagem da firmware. Assim, cada firmware terá apenas a descrição do seu próprio hardware, salvando alguns escassos kbytes de flash. O ath79 é basicamente a migração do ar71xx para o Device Tree. E, principalmente, nos últimos anos, nada entra no Linux que não use Device Tree. Isso permite iniciar os trabalhos de subir o ath79 do OpenWrt para o kernel principal. Agora, vou tentar antecipar algumas perguntas:

P: Meu dispositivo usa ar71xx no 18.06. Posso migrar para ath79?
R: Provavelmente, mas nem todos foram portado. E o ar71xx ainda continua a existir no 19.07.

P: Posso só fazer um sysupgrade do ar71xx para o ath79?
R: Sim, mas as configurações não são exatamente compatíveis. Migrações sem preservar as configurações funcionarão perfeitamente quando o modelo estiver suportando em ambas.

P: Posso manter a configuração do ar71xx no ath79?
R: Na sua essência sim, mas a migração do march para Device Tree permitiu arrumar a casa. Então o nome de LEDs e o caminho das placas Wireless mudaram. O nome dos modelos do roteador também podem ter mudado. É possível que, simplesmente aplicando a configuração do ar71xx, diversas coisas deixem de funcionar, o que exigiria um retrabalho a mais. Sugiro fazer um bom backup e começar do zero, restaurando pontualmente os arquivos.

P: Devo migrar agora do ar71xx para o ath79?
R: Para novos dispositivos, sim. Para upgrades limpos (sem preservar a configuração), sim. Todavia, provavelmente a migração será mais suave (ou não) na próxima versão quando a plataforma ar71xx será removida definitivamente.

Outra novidade interessante é a padronização do kernel na versão 4.14. Isso traz o suporte para a aceleração do roteamento a um bom nível para boa parte das plataformas. Infelizmente poucos têm uma internet de mais de 200 Mbps para usufruir desta melhoria.

Um outro recurso interessante é o suporte ao 802.11r Fast Transition ou Fast Roaming. Para ambientes com múltiplos APs com o mesmo nome/senha, o 802.11r permite a rápida troca de APs. Só não vai funcionar com o wpad-mini (o wpad-basic é o suficiente).

Temos também o suporte para WPA3. Porém, deve exigir o wpad-openssl (o wpad-wolfssl está com problemas).

Agora umas pequenas melhorias de autoria deste que vos escreve.
  1. trafficshaper: pacote para configurar limitação, reserva e priorização de taxa de transferência para classes de máquinas. Era uma pedida frequente.
  2. sysupgrade agora pode gerar backups mais limpos ignorando arquivos não modificados (-u), mais completos, salvando além da configuração (-o) e com uma lista dos pacotes instalados e sua "origem" (-k). Comentei sobre estas opções no passado. No artigo da atualização, devo citá-las novamente.

Provavelmente cada um carece de uma postagem própria.

Por fim, o lado ruim. Como grande parte das atualizações, tudo cresceu de tamanho. Os proprietários de dispositivos com flash de 4 MBytes podem não conseguir atualizar. Para os dispositivos que ainda funcionam, esta será a sua última versão pois o plano é encerrar o suporte para flash pequenas (4 Mbytes ou menos) ou com pouca memória RAM (32 MBytes ou menos) depois da versão 19.07. É o fim da linha para o TL-WR740ND.

Até a próxima.

terça-feira, 12 de novembro de 2019

OpenWrt: desativando horário de verão (pela última vez?)

Mais um artigo da série sobre o OpenWrt.

Essa vai ser uma postagem relâmpago! Neste ano, para a alegria e tristeza de muitos, não teremos mais horário de verão. Como diversos sistemas, o OpenWrt também irá exigir uma pequena configuração para resolver o "problema".

O OpenWrt, na verdade, não tem o banco de dados com as regras do fuso horário. Ele simplesmente tem um campo system.@system[0].timezone onde você pode configurar quando ocorre a mudança no horário e outro system.@system[0].zonename com o "nome fantasia" do fuso horário. Quem provê uma lista com os nomes dos fusos e "regras" é o Luci (interface web), com toda limitação inerente a esta forma de representação das regras (como o caso onde o fim do horário de verão era postergado em uma semana se ele fosse coincidir com o Carvanal).

Mas vamos a prática. Rode:

uci set system.@system[0].timezone='BRT3'
uci commit
reboot

E seja feliz.

Agora, vamos combinar: não tenho uma opinião forte quanto a ter ou não o horário de verão. SÓ PARE DE MUDAR A REGRA! Muito obrigado.

Até a próxima.

segunda-feira, 22 de outubro de 2018

OpenWrt: horário de verão novo

Mais um artigo da série sobre o OpenWRT/LEDE.

Senta que lá vem a história... (se quiser só a parte técnica, pule para o final)

Era uma vez, em uma terra sombria, existiam computeiros que sofriam todos os anos do mesmo mal: horário de verão. Não por acordar mais cedo, que geralmente também é verdade, mas pelo trabalho de reconfigurar dezenas, centenas, milhares de equipamentos com uma regra de mudança de horário mais volúvel que uma pluma ao vento. E pior, era definido em cima da hora. Parecia algo insolúvel, digno dos teoremas de Fermat. Porém, quando todos já haviam perdido a esperança, surge do alto do seu cavalo branco um ser iluminado que define uma regra fixa! Eureka! E todos viveram feliz para sempre... até este ano. A partir deste ano, o horário começa na primeira semana de novembro. E talvez mude de novo no próximo ano, e de novo....

Mas para que mexer?! Bem, existe uma lenda de um estado chamado Acre. Eles usam um horário com 2 horas a menos que Brasília. Com o horário de verão, esta diferença fica de 3 horas. E eu com isso?! Veja bem, a cada quatro anos, temos eleições nacionais. E para não influenciar os que ainda estão votando, não são divulgados os resultados parciais até o horário de encerramento da votação. Lembra do Acre? Eles também votam para presidente! Então, no primeiro turno, a primeira parcial nacional divulgada é às 19 horas (Brasília). Já no segundo turno, com o Acre ainda mais atrasado (no horário!), eles votam até às 20 horas (bem, tem mais brasileiro no exterior que no Acre e que ainda estarão votando... mas não vem ao caso). Depois de três horas do fim da votação, quase todos os votos já foram totalizados e, normalmente, temos uma boa ideia do resultado final. Uns dizem que isso traz ansiedade à sociedade. Outros que pode passar a ideia que estão "modificando o resultado". Tem até gente que diz que "perde a graça", meio como "ejaculação precoce".

Em resumo: para não influenciar os eleitores do Acre mas ainda divulgar o resultado às 19h, mudaram o início do horário para o primeiro domingo depois das eleições (ou primeiro domingo de novembro). Valeu Temer! Ótimo trabalho! Dane-se o custo de reconfigurar milhões de dispositivos, dane-se quem já planejava eventos anuais para não coincidir com a troca (ENEM?), dane-se quem vai perder uma hora de sono com trocas antecipadas do horário, DANE-SE TUDO! Eu acho que é mais importante saber o resultado PARCIAL das eleições nacionais uma hora antes. Eu quero e pronto!

Pergunta para qualquer um se eles querem ser acordados por engano uma hora antes ou ter o resultado parcial das eleições nacionais uma hora antes? Se já sabe a resposta, era só seguir. Isso é mais ou menos o que seria uma tal de democracia.

Só uma observação: no Acre temos 547.680 eleitores. Se eles votarem de forma bem distribuída ao longo das 10 horas de votação, a divulgação às 19h de Brasília poderia influenciar 10% do eleitorado, ou 54.768 eleitores. Se descontar os históricos 30% de brancos, nulos e abstenções, seriam um pouco mais de 38.000 eleitores! Agora pense quantos destes mudariam o voto sabendo da PARCIAL nos outros estados. Se for uns 20%, são míseros 7.667 eleitores. TUDO ISSO PARA ISSO?!

Início parte técnica


Mas voltando ao OpenWrt, ele não usa banco de dados de horário. A configuração do fuso já incluí o horário de verão.

# uci show system.@system[0].timezone
system.cfg01e48a.timezone='BRT3BRST,M10.3.0/0,M2.3.0/0'

Se você configurou pela interface web (Luci) o fuso de São Paulo, ele tem um banco de dados com essas regras e preenche para você. Se você estiver como Luci atualizado, este banco está atualizado. Porém, ele é usado apenas durante a mudança de configuração pelo Luci. Se mudar a regra, ele não vai automaticamente trocar a configuração.

Para resolver:

# uci set system.@system[0].timezone='BRT3BRST,M11.1.0/0,M2.3.0/0'
# uci commit
# reboot

Também pode trocar o fuso pela interface web ou editar o /etc/config/system. Fica a gosto do cliente.

O formato da configuração é bem simples. Nota-se que o retorno está definido no terceiro domingo de fevereiro. E não é que temos uma exceção? Essa regra quebra se a volta for no carnaval (algo raro). Para não dar mais uma hora de folia, adia-se o final para o próximo final de semana.

Então é isso. Bom sono a todos. Até a próxima.

domingo, 19 de agosto de 2018

OpenWrt: atualizando para a versão 18.06

Mais um artigo da série sobre o OpenWRT/LEDE.

No post anterior, comentei sobre o lançamento do OpenWrt 18.06. Agora vamos instalá-lo.
Sim, este artigo repete diversos pontos do artigo da versão LEDE 17.01 e a anteanterior

Só um aviso: já foi lançada a versão 18.06.1 devido a uma vulnerabilidade no kernel.

96,72% dos problemas com instalação/atualização com OpenWrt/LEDE que ajudo é em relação a escolha incorreta da imagem da firmware. Como sempre, recomendo a versão squashfs, que possui modo de recuperação. A variante jffs2 e ext4 nem estão mais disponível por padrão para a maioria dos dispositivos. Pegue o arquivo no download da última versão estável e nunca em um endereço qualquer, mesmo que seja na wiki do OpenWrt. 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-18.06.1-ar71xx-generic-archer-c7-v4-squashfs-sysupgrade.bin", ao contrário da versão instável/em desenvolvimento "openwrt-ar71xx-generic-archer-c7-v4-squashfs-sysupgrade.bin".

A nomeclatura 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 18.06.x, a próxima 18.06.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).


Em downloads, navegue para releases, a versão desejada (ex: 18.06.x), a "arquitetura alvo" em uso no seu roteador. Se você já é um usuário do OpenWRT, você pode vê-la olhando o arquivo /etc/openwrt_release:
root@router:~#  grep _TARGET /etc/openwrt_release 
DISTRIB_TARGET='ar71xx/generic'
Ou:
root@router:~# grep _BOARD /etc/os-release
LEDE_BOARD="ar71xx/tiny"
OK, chegamos a uma lista enorme de firmwares! Vamos entender o que significa cada parte do nome do arquivo. Tomemos por exemplo "openwrt-18.06.1-ar71xx-generic-archer-c7-v4-squashfs-sysupgrade.bin":
  • openwrt é o sistema operacional que você está instalando ;-)
  • 18.06.1 é a versão do openwrt. Em firmwares instáveis, este campo não existe!
  • ar71xx é a família do SoC (chip) do seu dispositivo. Você descobre isso na wiki do projeto ou abrindo o seu roteador e lendo os CI.
  • generic é o subtipo do layout da flash. Normalmente será o "generic", exceto para casos especiais como roteadores com 4 MB que agora usam "tiny".
  • archer-c7-v4 este é o modelo do seu roteador. Observe em especial a versão do HW (v4) pois ela pode mudar completamente o dispositivo, inclusive de família do SoC e se é suportado pelo OpenWrt.
  • squashfs é o tipo do armazenamento da imagem. Nesta, existe uma cópia imutável dos arquivos (ROM) e o resto da flash é usada para, de forma transparente, guardar as modificações (overlay). Tudo parece editável para o usuário. A diferença é que você pode, a qualquer momento, apagar as diferenças e restaurar o sistema pós-instalação. Pode existir também o formato jffs2. Neste, não existe uma ROM e tudo pode ser realmente apagado. Alterou o arquivo errado? Vai ter que recuperar pela serial, JTAG ou arrancando a flash. Não recomendo!
  • sysupgrade é a função da firmware. Esta é para atualizar de um OpenWrt/LEDE para outro (e, em alguns casos, de outros firmwares alternativos como DD-WRT). Porém, não deve ser reconhecido pela firmware original do roteador. Para primeira instalação, ainda com a firmware original, use a variante "factory".
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.

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.

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 temabackup 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).

Eu fiz uma proposta de melhoria do backup do OpenWrt para simplificar este processo. Vamos ver como será a aceitação. Mais abaixo mostro como usá-la.

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! Faça o upgrade pela interface web ou pelo terminal. Inclusive, você pode baixar o arquivo diretamente no roteador. Só cuidado ao colar a URL. O downloads.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 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 ;-)

E depois do "Enter"/"Gravar", é a hora que você reza. Sempre dá um frio na barriga.

Se optar por preservar as configurações, tudo que seria guardado em um backup do sistema (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.

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.

Se estiver familizarizado com um terminal, você pode experimentar os novos modos de backup que eu comentei anteriormente. As novas opções são:

  • '-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

Isso simplifica em muito as instalações mais complexas, com arquivos e pacotes extra. O resultado final é próximo ao que você tem em uma atualização de distribuição no Linux, onde os arquivos são preservados e os pacotes reinstalados:


# cd /tmp
# wget http://luizluca.github.io/sysupgrade
# chmod +x ./sysupgrade
# ./sysupgrade -o -k -u -b backup.tgz
# wget https://downloads.openwrt.org/releases/.../openwrt....bin
# sysupgrade -f backup.tgz openwrt...-sysupgrade.bin
<agora ele reinicia>
# opkg update
# grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg install
# rm /etc/backup/installed_packages.txt
# reboot

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

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 todos 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).

Ainda com a unidade externa desconectada, 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 18.06, que ainda podem funcionar nas versões LEDE 17.01, OpenWRT 15.05, 14.07, 12.09 e 10.03.1.

Se pintar um problema, tem sempre o fórum deste blog. Até a próxima.