Discuta este tópico no fórum

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

Mostrando postagens com marcador extroot HD. Mostrar todas as postagens
Mostrando postagens com marcador extroot HD. Mostrar todas as postagens

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, 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.

quinta-feira, 1 de outubro de 2015

OpenWRT: Atualizando para versão 15.05

Mais um artigo da série sobre o OpenWRT.

Já temos a Caos Calmer (CC) 15.05. Agora vamos atualizar nossos sistemas!

Sim, este artigo repete diversos pontos do artigo de atualização anterior.

96,72% dos problemas com instalação/atualização com OpenWRT 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. Pegue o arquivo no download da Caos Calmer e nunca em um endereço qualquer, mesmo que seja na wiki do OpenWRT. Normalmente a wiki referencia a versão em desenvolvimento, que não é a que você quer. No diretório de download, navegue seguindo o caminho da "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:~~# cat /etc/openwrt_release
DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='15.05'
DISTRIB_REVISION='r46767'
DISTRIB_CODENAME='chaos_calmer'
DISTRIB_TARGET='ar71xx/generic'
DISTRIB_DESCRIPTION='OpenWrt Chaos Calmer 15.05'
DISTRIB_TAINTS=''
A diferença entre a primeira instalação e a atualização é que não será usada a imagem "factory" e sim a "sysupgrade". Escolha o arquivo correspondente ao seu roteador (inclusive versão de hardware!). E muito importante, leia 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 openwrt, 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.

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. Ex:

# cd /tmp
# wget http://downloads.openwrt.org/chaos_calmer/15.05/.../openwrt-15.05-...-squashfs-sysupgrade.bin
# sysupgrade openwrt...xxx....img 

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). Contudo, o downloads.openwrt.org aceita http sem problemas, só tirar o "s".

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

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, 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 requeridos. No final do processo, é bom refazer a listagem do que está instalado e comparar com o que você tinha na versão anterior.

Não é comum no OpenWRT mas pode existir alguma atualização de segurança importante, como ocorreu com o Heartbleed. De qualquer forma, é bom listar os pacotes atualizáveis:

# opkg update
# opkg list-upgradable

O maior problema é que estas atualizações de segurança também ocupararão espaço a mais do seu roteador (overlay) pois apagar ou substituir arquivos existentes na firmware inicial não recupera o espaço usado no sistema de arquivos.

Por fim, faça um novo backup geral. É sempre bom preservar o seu trabalho.

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 existentes na unidade externa ou mesmo com as bibliotecas 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 do 15.05, que ainda podem funcionar nas versões 14.07, 12.09 e 10.03.1.

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

domingo, 31 de março de 2013

OpenWRT: Expandindo o espaço do disco com unidade externa

O grande limitador de um roteador com OpenWRT não está no software que ele usa. Afinal de contas, rodando um Linux, é possível montar um servidor completo. O que restringe os usos do roteador são suas características fisicas, principalmente disco e memória. Processador também é um limitador importante para operações de tempo real, como streaming de conteúdo multimídia, mas pouco podemos fazer para melhorar o processador. Ao menos para o disco e a memória temos alguma alternativa. Sim, também é possível trocar os chips da placa por outros de maior capacidade, mas o que eu vou mostrar aqui é algo bem menos intrusivo.

Como já escrevi anteriormente, em imagens squashfs, OpenWRT divide o sistema de arquivos em duas partes: uma imagem base e as suas alterações. A primeira, chamada de "rom", é um sistema de arquivos completo, imutável, e somente é modificado na gravação de uma nova firmware. O usuário nem nota esta característica pois qualquer alteração efetuada nesta imagem são guardados em uma segunda área de disco, o chamado "overlay". O espaço livre do disco é, na verdade, o espaço disponível na "overlay". Seguindo esta estrutura, não adianta apagar coisas do disco que sejam provenientes da "rom" pois eles somente serão marcados como apagados e não serão liberados do disco.

Por padrão, o "kernel" e a "rom" dividem a flash do roteador e o que sobra fica para a "overlay". Quanto maior as duas primeiras, menos espaço "livre", e tudo isto em uma flash de 4 ou 8MB. O que vamos fazer é configurar o OpenWRT para usar uma unidade externa como a "overlay", expandindo o limite disponível.

O primeiro passo é escolher a unidade externa. No meu caso vai ser um pendrive antigo de 128MB, mas pode ser qualquer dispositivo de armazenamento USB. A configuração inicial é a mesma apresentada no último post. Se conectar o dispositivo e ele aparecer em /mnt ou no comando mount, você está pronto para a segunda etapa.

É bom ter uma configuração funcional antes de iniciar o processo. Caso você remova o disco externo, você terá seu roteador com esta configuração. Sugiro algo simples com a capacidade de acessar a internet.

A montagem automática funciona muito bem para dispositivos de uso eventual. Porém, como será um dispositivo permanente, o ideal é fixar algumas configurações. A primeira coisa a ser melhorada é o ponto de montagem. "/dev/sda5" não diz muito a quem está lendo e quando se trata de discos, é importante não errar a unidade. Também, se for conectada mais de uma unidade, a ordem que estes discos aparecem dependem da ordem de conexão. O primeiro será o sda, o segundo sdb e assim por diante. O ideal é a ordem dos discos não influencie. Para estas configurações, existe o arquivo "/etc/config/fstab". A entrada que nos interessa é a de montagem. Você pode ter quantas entradas destas desejar. No meu caso, terei 2: uma para a partição do HD externo e outra para a nova "overlay".

Atualizado em 2015-09-30: para versões mais novas (como a CC), o recomendado é gerar a configuração "/etc/config/fstab" com:

# block detect >/etc/config/fstab

Depois é só ajustar os valores (normalmente só o enable)

Existem três características que podem ser usadas para identificar um disco no OpenWRT (também suportadas em Linux "convencionais"): dispositivo, nome e uuid. O primeiro é o nome do arquivo que representa o dispositivo, em geral /dev/sd??. Como já comentei, este nome depende da ordem de conexão dos discos e deve ser evitado. A segunda forma, pelo nome, usa o nome ou rótulo dado ao sistema de arquivos, configurado na formatação ou posteriormente. Para partições ext2/3/4, o comando é o tune2fs. O terceiro é o uuid. Ele funciona como um identificador único e é gerado na criação do disco (tune2fs também pode alterá-lo). Se gerado aleatoriamente, é desprezível a possibilidade de conflito. Apesar da segurança do uuid, prefiro a contextualização que o nome me fornece. Estas propriedades dos discos podem ser visualizadas com o comando "blkid". Como usarei dois discos, foram adicionadas as seguintes linhas no meu arquivo /etc/config/fstab:
config mount
        option target   /mnt/usb-dados
        #option device  /dev/sda1
        option label    "usb-dados"
        #option uuid    "b7dc2020-b12a-431e-98d3-619a..."
        option fstype   ext4
        option options  rw,sync
        option enabled  1
        option enabled_fsck 0
config mount
        option target /mnt/extroot
        option label "openwrt-extroot"
        option fstype ext3
        option options rw,sync
        option enabled 1
        option enabled_fsck 0
Para registro, deixei intencionalmente as opções para apontamento por dispositivo e uuid. Porém, estas opções, por estarem comentadas, não serão lidas. Reiniciando o serviço fstab ou o roteador, você terá o disco identificado como usb-dados montado em /mnt/usb-dados e o nomeado "openwrt-extroot" em /mnt/extroot. O caminho deste segundo é temporário e logo será substituído.

Se as partições retornarem de um reboot montadas, é hora de migrar da "overlay" interna para a externa. O primeiro passo é configurar em  /etc/config/fstab a nova partição como a "overlay". E isto depende da versão que você está usando do OpenWRT. Para a versão 12.09, ainda em desenvolvimento, basta trocar onde antes era "/mnt/extroot", colocar "/overlay". Para a versão 10.04.1, backfire, é necessário instalar o pacote "block-extroot" adicionar a opção "option is_rootfs 1" e não alterar a opção target para "/overlay".

Agora basta popular a nova partição Copie os arquivos da "overlay" atual para a nova:
tar -C /overlay -cvf - . | tar -C /mnt/extroot -xf -
Lembre-se de ajustar o nome em negrito para o ponto de montagem em uso pela futura "overlay". Mas preciso usar o tar? É bom pois ele copia todos os atributos necessários e não sei se o cp do busybox faria melhor.

Se tudo der certo, só falta reiniciar. Antes, minhas montagem antes de reiniciar eram estas:
# mount
rootfs on / type rootfs (rw)
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,noatime)
sysfs on /sys type sysfs (rw,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime,size=30856k)
tmpfs on /dev type tmpfs (rw,noatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,noatime,mode=600)
/dev/mtdblock3 on /overlay type jffs2 (rw,noatime)
overlayfs:/overlay on / type overlayfs (rw,relatime,lowerdir=/,upperdir=/overlay)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
none on /proc/bus/usb type usbfs (rw,relatime)
/dev/sda5 on /mnt/usb-dados type ext4 (rw,sync,relatime,user_xattr,barrier=1,data=ordered)
/dev/sdb1 on /mnt/extroot type ext3 (rw,sync,relatime,user_xattr,barrier=1,nodelalloc,data=ordered)
E com a nova "overlay" ficaram:
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,noatime)
sysfs on /sys type sysfs (rw,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime,size=30856k)
tmpfs on /dev type tmpfs (rw,noatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,noatime,mode=600)
/dev/sdb1 on /overlay type ext3 (rw,sync,relatime,user_xattr,barrier=1,nodelalloc,data=ordered)
overlayfs:/overlay on / type overlayfs (rw,relatime,lowerdir=/,upperdir=/overlay)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
/dev/sda5 on /mnt/usb-dados type ext4 (rw,sync,relatime,user_xattr,barrier=1,data=ordered)
none on /proc/bus/usb type usbfs (rw,relatime)
E, principalmente, o espaço livre:
# df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                  117.6M     13.7M     97.8M  12% /
(...)
Pronto! É espaço de sobra para instalar o que eu pretendo utilizar no roteador. Apesar de ser apenas 128MB, é muito mais do que os 6MB restantes da flash interna. Nos próximos posts, farei a configuração do samba, servidor de impressão e cliente torrent. Até mais e Feliz Páscoa.