Discuta este tópico no fórum

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

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.

domingo, 5 de agosto de 2018

OpenWrt: Lançada a versão 18.06!

Mais um artigo da série sobre o OpenWRT.

Enfim temos novamente uma nova versão do OpenWrt: a versão 18.06!

OpenWrt? E o LEDE? Para quem perdeu a novela, tem a versão "mais" "longa". Vai um resumo: os desenvolvedores do OpenWrt se estranharam com os "fundadores", criaram um novo projeto levando quase todo mundo. O LEDE se tornou um projeto vibrante enquanto o OpenWrt mor-ré-u de solidão. Diante da situação, os dois grupos conversaram e resolveram se unir novamente. Basicamente aproveitaram o nome do OpenWrt e todo o resto do LEDE (código, wiki, fonte, ...). Então, o OpenWrt 18.06 é muito mais próximo do LEDE 17.01 do que do OpenWrt 15.05. Independentemente se estava usando OpenWrt ou LEDE, a sua próxima versão será OpenWrt 18.06.

E o que temos de novidades? Sim! Como sempre, o kernel muitos softwares foram atualizados. Vamos aos destaques:

Dois kernels


Teremos alguns roteadores com o kernel 4.14 e outros com o 4.9:

  • Kernel 4.9.111 for ar7, ar71xx, arc770, at91, brcm2708, brcm63xx, ixp4xx, lantiq, layerscape, mpc85xx, orion, rb532 and uml
  • Kernel 4.14.52 for apm821xx, archs38, armvirt, ath25, bcm53xx, brcm47xx, cns3xxx, gemini, imx6, ipq40xx, ipq806x, kirkwood, malta, mediatek, mvebu, mxs, octeon, octeontx, omap, oxnas, pistachio, ramips, sunxi and x86
E isso importa para o usuário final? Sinceramente, geralmente não. Porém, o próximo item depende da versão do kernel.

Aceleração de fluxo de rede


Até agora, eu mencionava que uma das poucas desvantagens do OpenWrt é que ele tem um desempenho menor de NAT do que a firmware proprietária. Isso devido a uma gambi^H^H^H^H^H^H^H^H^H^H um "mecanismo de acelaração de NAT em hardware" existente somente nas firmwares proprietárias. Bem, desenvolveram uma solução equivalente e aceita pela comunidade Linux, com alternativa de aceleração tanto em software puro como com auxĩlio de hardware. Blah, blah, blah... o que significa tudo isso? Bem, antes um roteador "normal", (aquele que você deve ter em casa e não os multi-ultra-dual-core), conseguia rotear WAN entre LAN algo entre 200 Mbps e 400 Mbps, mesmo com ambas sendo GigabitEthernet. Agora, com a aceleração, é possível ver taxas próximas a velocidade do "fio" (1000Mbps) como transferência de 940 Mbps, mesmo em roteadores mais simples.

Mas tem um grande porém.... só vale para os roteadores cujo algo já utilizem o kernel 4.14. E grande parte dos vendidos no Brasil com suporte ao OpenWrt usam ar71xx.

Mas pera aí. É sério isso Luiz? Você realmente acha que conseguir rotear acima de 200 Mbps com um roteador caseiro vai mudar a vida de alguém no Brasil? Bem, ainda não. Mas quem sabe no futuro próximo poderemos ter internet de algumas centenas de Mbps pagável por pessoas que ainda usam roteadores "normais" com OpenWrt. Enfim, o destaque vale mesmo pelo fato de não ser mais um ponto negativo.

Atualização do CAKE


Para quem não conhece, um algoritmo de escalonamento de pacotes é o cara que controla a(s) fila(s) de pacotes entrando e saindo. O CAKE é um desses e busca preservar a latência sempre baixa, sem necessidade de qualquer configuração além de ativá-lo. Na atualização, ele consegue lidar melhor com pacotes que chegam no seu roteador (vindos da internet). Na prática, é o que mais sentimos e o mais difícil de controlar.

Para quem usa o QoS no roteador, será uma atualização bem vinda.

Aumento do tamanho da firmware


Isso é um problema a cada nova versão. O normal é que novas versões de programas ocupem mais espaço. Isso vale para os programas do OpenWrt. Então, a vida já difícil de quem tinha um roteador com 4 MBytes de flash se tornará ainda pior. Podem ter casos de ser tão pequeno o espaço livre que não será possível preservar as configurações. Se isso ocorrer com você, é bom abrir um bug.

Para minimizar isso, foi criada uma variante tiny (ex: ar71xx/tiny em oposição ao ar71xx/generic) que preserva as funcionalidades mas remove os símbolos do kernel, poupando alguns sagrados kbytes. Então, seu roteador TL-WR740ND v1 ainda pode ser usado (eu uso!).

Wireguard


O Wireguard não é propriamente uma novidade desta versão. Porém, é nela que começa a aparecer o suporte para valer no OpenWrt. Para quem não conhece, o Wireguard é uma nova solução de VPN que busca ser muito mais simples do que as "padrão de mercado", como o IPSec (se conseguir, fuja disso mais rápido que puder) e OpenVPN. Quem já configurou qualquer uma dessas e se deparar com uma configuração do wireguard irá se perguntar: "OK, só isso? Não pode já estar funcionado". O wireguard é tão bem vindo que o Linus, que tem mais coisa para fazer, se meteu no desenvolvimento de rede do Linux para aclamá-lo. Teve até carta de senador gringo para o NIST para recomendar sua avaliação como alternativa às VPN existentes (IPSec e OpenVPN). Mas isso fica para outro artigo.

________________________________________

Parece pouca novidade e nada que me interessa. E então, devo atualizar? Provavelmente sim. A versão 15.05 chegou ao seu fim de vida e a 17.01 caminha para o mesmo destino. Sem atualização, fatidicamente você estará no futuro exposto a alguma vulnerabilidade. Se ela for explorável remotamente, ela será, nem que seja para minerar bitcoin no seu roteador. Mas meu roteador é muito lento para minerar bitcoin! Sim, mas ele também pode injetar o minerador nas páginas que você acessar e quem vai minerar será seu computador, celular, TV...

Minha recomendação é "se o hardware não é um limitador, atualize". Se seu roteador não aguenta a nova versão (por questão de espaço), é bom avaliar o que é menos ruim: comprar um novo roteador de R$ 100,00 ou manter seu roteador antigo?

No próximo artigo, algumas dicas do procedimento de atualização. No fundo, o dito para o 17.01 ainda vale.

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