Discuta este tópico no fórum

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

quarta-feira, 16 de maio de 2012

OpenWRT: Recuperação de desastre

Mais um artigo da série sobre o OpenWRT. Neste artigo vou tentar ajudar os usuários que, por ventura, tenham feito algo de errado com seus roteadores com OpenWRT.

Depois de diversos pedidos de ajuda após problemas com o OpenWRT, achei interessante criar uma postagem para tentar ajudar a diagnosticar problemas e, com sorte, resolvê-los. O que mais escuto é: nada funciona! Vamos tentar derivar a afirmação catastrófica em coisas mais palpáveis. Como diria o Jack, vamos por partes.

O que você pode fazer que "estragaria" o OpenWRT? As possibilidades são limitadas. A mais comum é uma falha de software provocada. Alguma coisa (incluindo a coisa você) pode ter "estragado" o sistema de arquivos. Você pode ter editado/apagado algo que não devia ou ter enchido a partição de dados. Outra possibilidade é que alguma alteração da configuração fez com que alguma (ou todas as) funcionalidade do roteador deixasse de funcionar. Se você está usando a imagem recomendada no formato squashfs, no pior dos casos, você pode entrar no modo de recuperação, que veremos mais adiante. Mesmo que você exclua todos os arquivos, a recuperação é tranquila. Isto porque no caso do squashfs, a imagem inicial do OpenWRT não é alterada. Todas as modificações são gravadas em uma área separada, que pode ser limpa ou ignorada com o modo de recuperação. Se é tudo tranquilo, quando que não é?

O mais simples dos desastres é um dano físico. Deixar cair o roteador, molhar, alta tensão, são coisas que podem estragar os componentes eletrônicos. O OpenWRT não tem culpa neste caso e a instalação do OpenWRT não causa falhas físicas (e também não irá resolvê-las). Então, se já com o OpenWRT ele funcionava e "deixou de funcionar" sem ninguém mexer, deve estar nesta categoria. Se "deixou de funcionar" após algum evento não físico, vai ser o caso anterior ou o próximo.


O dano tão grave quanto um problema físico é um problema durante a fase de gravação da firmware/imagem. Isto vale tanto na troca da firmware original pelo OpenWRT como na atualização do OpenWRT para outra versão. Os problemas são diversos: imagem corrompida, imagem incompatível (modelo ou versão do hardware), uso de imagem de versão em desenvolvimento (trunk), interrupção por falta de energia... Neste caso, se o roteador "não responde", provavelmente você terá que usar um cabo serial para recuperar o roteador. Conheço apenas estes métodos "normais" de gravar a firmware de dentro do OpenWRT:
  1. gravando a firmware pela interface Web
  2. usando o comando sysupgrade,
  3. usando o comando mtd ou,
  4. mais hardcore, o comando dd interagindo com o dispositivo /dev/mtd* (mtd seguido de qualquer coisa).
Se a última coisa que você fez não foi um destes comandos ou não envolveu o caminho /dev/mtd*, provavelmente seu problema é sistema ou físico.

Como identificar até onde o roteador funciona? Precisamos entender um pouco do processo de boot do sistema. Após ligar o roteador na tomada, ele dispara o gerenciador de boot. No Linux, hoje em dia, temos o grub ou o syslinux. Para os dispositivos embarcados, como os roteadores, isto varia. Os TP-Link usam uma versão customizada do U-boot. Outros usam RedBoot. Tudo depende. Vamos a alguns casos comuns:
  1. Se o roteador nem deu sinal de vida, nem piscou, é provavelmente uma falha física.
  2. Se ele ligou e após um curto momento (1 segundo, por exemplo) ele apagou tudo e parou ou entrou em um processo de repetição, provavelmente você tem uma firmware inválida e precisa recuperar com o auxílio de uma serial.

Algumas pessoas nesta situação testam as portas Ethernet locais para comunicação entre duas máquinas e, quando funciona, dizem que o roteador está funcionando. Estas portas, na grande parte dos casos, possuem um circuito dedicado que realiza a tarefa de um switch. Então, não é condição determinante para avaliar a operação do roteador.

O processo de boot do kernel e do sistema do OpenWRT é ligeiramente rápido e termina em poucos segundos. Esperar por vários minutos provavelmente não irá resolver seu problema. Então "o tempo cura tudo" não se aplica neste caso. Para modelos TP-Link, o LED "system" começa a piscar logo que o roteador inicia o processo de boot e o OpenWRT, ao final do deste processo, troca o estado deste LED de "piscando" para "ligado constantemente". É um indicativo que ele terminou de ligar o sistema. Se o LED nunca deixa de piscar, pode ter algo que impeça a inicialização do sistema ou ele travou. Pode tentar resolver com o modo de recuperação ou, em casos mais graves, recuperar com o auxílio de uma serial.

Algumas reclamações sobre problemas são que a "rede sem fio não funciona". Se este é o seu caso, fique feliz. Leia o artigo sobre configuração. A rede sem fio, por padrão estará desligada. Use o cabo durante a configuração. Outra possibilidade, remota para modelos suportados e versões estáveis, é de alguma incompatibilidade com o driver da placa sem fio do seu roteador. Se em algum momento ele funcionava com o OpenWRT e deixou de funcionar, é problema de configuração e não incompatibilidade. Se não souber o que foi feito, zere as configurações ou entre no modo de recuperação.

Outra ferramenta muito útil para diagnosticar o que ainda funciona no roteador é um sniffer de rede. Recomendo o wireshark, que funciona em qualquer sistema operacional comum. É o canivete suíço para diagnosticar quase qualquer problema de rede. Preferencialmente, force a sua interface de rede local para sempre estar levantada, com configuração IP fixa e escute o tráfego pelo wireshark. Se o roteador falar algo, já é um bom sinal. Pode observar a origem dos pacotes pelo endereço físico (MAC).

Agora, vamos para as técnicas:

Zerar as Configurações

Se você fez algo de que se arrepende mas não sabe como resolver, no pior dos casos, zere as configurações. Isto pode ser feito pela interface Web ou usando um terminal (SSH, Telnet ou cabo serial) com o comando "firstboot". Reinicie o sistema e ele estará com as configurações que você tinha logo após instalar o OpenWRT.

Modo de Recuperação (referencia)

É comum escutar alguém dizendo que "o roteador não reseta mais". Sim, com o OpenWRT, o botão "reset", normalmente escondido dentro de um furo no gabinete, não serve para zerar o roteador. Ele é a entrada para iniciar o modo de recuperação. Porém, ele somente pode ser acionado durante um pequeno momento após iniciar o roteador. Logo que o roteador é ligado e o OpenWRT assume o controle, ainda antes de ler as mudanças do disco e configurações, ele envia um pacote UDP pela rede com o seguinte conteúdo: "Please press button now to enter failsafe". Nesta hora, pressione o botão, mas seja rápido. Uma dica é observar o primeiro pacote enviado pelo roteador depois de ligado nas informações da placa de rede. Este primeiro pacote será o aviso do modo de recuperação. Em geral, na ausência do botão de "reset", um botão físico qualquer é usado.

Outra alternativa para iniciar o modo de recuperação é pela serial. Observe as mensagens de boot até que irá aparecer a mensagem: "Press the [f] key and hit [enter] to enter failsafe mode". Como a mensagem diz, pressione a letra "f" e depois "enter", mas seja rápido.

No modo de recuperação, o roteador irá ignorar todas as alterações feitas no passado no disco. Isto inclui mudanças nos arquivos, configurações e pacotes instalados. A configuração de rede do roteador será 192.168.1.1, com máscara 255.255.255.255 (/24). Para seu computador conseguir conversar com o roteador, ele deve ter um endereço na mesma rede como, por exemplo, 192.168.1.2, máscara 255.255.255.0. O DHCP ou interface Web não estarão funcionando. O roteador estará esperando uma conexão Telnet, que acessará o roteador sem usar senha (ex: telnet 192.168.1.1).

Se seu problema é mais pontual e você quer simplesmente alterar alguma coisa como uma regra de firewall, execute o comando "mount_root". Você poderá, então mudar as configurações ou trocar a senha de root com o comando "passwd". Porém, se a ideia é simplesmente rezar as configurações, execute o "firstboot".

Deslige e ligue o roteador ou execute "reboot -f" para testar suas alterações.

Usando um Cabo Serial

O uso do cabo serial é extremo e especializado para cada modelo. Busque maiores documentações na página de seu dispositivo na Wiki do OpenWRT. Normalmente, os fabricantes não se preocupam em facilitar o acesso à serial do dispositivo, mesmo ela existindo. Em geral, nos modelos mais baratos, o acesso da serial depende da solda em algum ponto da placa do roteador. Em alguns casos, é um local bem acessível. Em outros, você precisa de uma precisão cirúrgicas (é o cabo fino da imagem em zoom). Outro ponto para ser observado é que a serial do roteador pode não ser uma serial convencional. Ela pode usar tensão abaixo do padrão da serial (nível de tensão TTL), que depende de um circuito divisor de tensão ou adaptador. Neste caso, alguns cabos de celular realizam esta tarefa com perfeição. Eu usei um cabo DKU-5 antigo para celular Nokia. Se ligar um cabo serial convencional neste caso, ele vai fritar a placa do seu roteador.

Uma vez com o acesso serial, você precisa de um emulador de terminal. O minicom no Linux ou o Hyperterminal no Windows cumprem esta função. Identifique a configuração necessária para o seu dispositivo, por exemplo 115200 8N1, e aplique no seu emulador de terminal.

Se estiver funcionado, você receberá mensagens logo que ligar o dispositivo. Neste ponto, você poderá interagir com o gerenciador de boot, trocar parâmetros ou até mesmo gravar uma nova imagem. Tudo isto depende do modelo em questão. Novamente, busque documentação na wiki, informações em fóruns.


Espero que estas dicas ajudem aos aventureiros a resolver seus problemas de configuração. Até a próxima.

segunda-feira, 7 de maio de 2012

OpenWRT: Desinstalando o OpenWRT

Mais um artigo da série sobre o OpenWRT. Neste artigo vou mostrar como "desinstalar" o OpenWRT.

O OpenWRT é um caminho sem volta? Bem, para mim foi. Mas não por obrigação e sim por escolha. Depois de experimentar com o OpenWRT, por um motivo ou outro, você pode querer (ou precisar) retornar ao firmware do fabricante. Isto pode ser especialmente importante se precisar acionar a garantia (se o roteador ainda funcionar). Vamos tentar descrever os cuidados do processo.

A instalação do OpenWRT é extremamente facilitada pois os desenvolvedores do OpenWRT criam um pacote de instalação compatível com o instalador do próprio fabricante. É um trabalho individual que envolve entender o layout da flash do fabricante, os campos de controle de proteção, integridade e o resultado de sua gravação no disco e, como sempre, um pouco de bruxaria. Uma vez dissecado estes pontos, é só uma questão de replicá-los para o caso do OpenWRT. Por este motivo que existem a versão factory (para suprir as necessidades do fabricante) e a versão sysupgrade (para simplesmente atualizar o OpenWRT já instalado), como já comentei anteriormente.

O processo de desinstalação do OpenWRT consiste em simplesmente (re)instalar o firmware do fabricante. O problema é que a firmware do fabricante nem sempre é uma imagem direta do sistema. Podem existir os campos de controle, a firmware pode conter uma atualização do gerenciador de boot, etc. Enfim, tudo depende do fabricante, do modelo e, até mesmo, da versão da firmware.

A regra geral é: leia a documentação do OpenWRT sobre seu modelo. E como sempre, observe a versão da revisão do hardware. Há também uma documentação "genérica" de desinstalação, mas não foi muito útil para mim. Vou dar um exemplo para o modelo TL-WR741nd.

A página na wiki do OpenWRT sobre este modelo possui um item especial chamado "Back to original firmware". Em geral, todos os artigos de modelos possuem este item. Nele está descrito o que deve ser observado e, quando necessário, como extrair a parte a ser gravada da firmware do fabricante. Até onde eu observei, os os firmwares da TP-Link são de dois tipos: com e sem boot (gerenciador de boot). O primeiro, além de um novo sistema, possui uma atualização do gerenciador de boot no início da firmware. Tambérm, normalmente, tem a palavra "boot" no nome do arquivo. Por isto, existe instruções de como retirar este início indesejado da imagem do fabricante. Para o segundo, o arquivo contém apenas o sistema e é similar ao presente no pacote sysupgrade do OpenWRT. Mas como ter certeza? Ainda para este modelo, existe uma forma de validar o tipo.

Primeiro baixe uma firmware do fabricante. Normalmente ela está compactada em um ZIP. Descompacte. No caso do modelo em estudo, o TL-WR741nd, você terá um arquivo "alguma-coisa-xxx.bin", que é a firmware propriamente dita. Para TP-Link, o comando:
cat alguma-coisa-xxx.bin| dd bs=4 count=1 skip=37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'; echo
Deve retornar 000000 se não tiver um boot ou algo como 0000c6bc se ela contém o boot (e não deve ser usada para desinstalar o OpenWRT.

Se não tiver o boot, o retorno é tão simples como instalar ou atualizar o OpenWRT.

Se for algo diferente, principalmente referenciando o U-boot, com o nome do arquivo sendo "alguma-coisa-boot-xxx.bin", você terá que retirar o gerenciador de boot antes de gravar. Para este modelo, esta região inicial a ser cortada é de 131584 bytes (ou 0x20200 bytes, em hexadecimal). O comando "dd" pode fazer este corte.
dd if=firware-baixada.bin of=firmware-a-ser-gravada.bin skip=257 bs=512
Agora, o comando de verificação vai retornar 000000.

Para gravar este arquivo ".bin", basta usar qualquer um dos métodos disponíveis pelo OpenWRT: interface Web, comando mtd, TFTP, serial... Vai do seu gosto. A documentação descreve diversas formas. Recomendo a interface web ou o sysupgrade, que fazem validações antes da gravação.

Apesar de tratar de um caso específico, estas instruções valem para muitos modelos Tp-Link.
Se pintar alguma dúvida, posso tentar ajudar ou você pode consultar o fórum do projeto, onde estão todos os gurus do OpenWRT.

Até mais.

Atualização: se não tiver um Linux no seu desktop, pode usar o próprio OpenWRT para preparar a firmware para a gravação.

Vou considerar que ele está com acesso à internet funcionando e que está acessível por telnet/ssh.
  1. Copie a URL da firmware lá do site da Tp-Link que você quer gravar.
  2. Conecte no seu roteador via Telnet ou SSH.
  3. Entre no diretório /tmp
    1. cd /tmp
  4. Baixe o zip com a firmware em /tmp. Ex:
    1. wget http://www.tp-link.com.br/resources/software/201011814560814.zip
  5. Descompacte o arquivo. Ele deve gerar um algumacoisa.bin. As vezes em um subdiretório.
    1. unzip 201011814560814.zip
  6. Anote o nome do arquivo .bin gerado
    1. ls *.bin
  7. Verifique se ele tem boot (troque o arquivo pelo que o zip gerou):
    1. dd bs=4 count=1 skip=37 'if=wr741nv1_en_3_12_4_up(100910).bin'  | hexdump -v -n 4
      1. Se retornar algo como: 0000000 0000 0000, tudo certo. Grave este arquivo diretamente no passo final.
      2. Se for algo como: 0000000 0000 bd86, precisa cortar no próximo passo.
  8. Para cortar a firmware:
    1. dd if=firware-baixada.bin of=firmware-a-ser-gravada.bin skip=257 bs=512
    2. E execute o passo 7. sobre este novo arquivo firmware-a-ser-gravada.bin
  9. Grave a nova firmware:
    1. sysupgrade -n firmware-a-ser-gravada.bin


terça-feira, 1 de maio de 2012

Ubuntu 12.04 LTS com Suporte para Processadores Antigos (sem PAE)

A Canonical lançou a nova versão semestral do seu famoso sistema operacional Ubuntu. Além disto, esta é uma versão LTS, com suporte estendido de 5 anos. É ideal para aqueles ambientes onde você só quer que o sistema funcione por muito tempo sem você ter trabalho . Indico principalmente para a instalação em computadores velhos, dos pais, da mulher... No meu caso, era exatamente o que eu precisava para o meu antigo EeePC 701. \o/ Acho que ele não vai aguentar mais 5 anos de uso...

Mas pera ai! Olha que interessante: a Canonical resolveu que iria abandonar o suporte aos processadores sem o recurso de PAE. Cuma? Physical Address Extension. É um recurso que permite o endereçamento de mais de 4GB de memória em ambientes 32-bit. Nunca dei muita bola para este recurso pois já havia migrado para o 64-bit um bom tempo antes de chegar no limite da memória do 32-bit. Exceto, claro, pelo EeePC.

Para a minha infelicidade, o EeePC 700 (e de mais alguns modelos 900) possuem o processador Celerom Pentium M de 900 Mhz (mas rodando a 600 Mhz). Bem, como se trata de um processador antigo reaproveitado, ele ainda não teve conhecimento da existência do PAE (e como o EeePC suporta o máximo de 2GB de RAM, realmente não fazia muito sentido). Mas então é adeus ao Ubuntu? Ainda não!

O Ubuntu não quis mais gerar os CDs com suporte a processadores sem PAE, mas ainda compila os kernels para estes processadores. Menos mal. A ideia é permitir uma última chance de atualização para estes processadores mais antigos. A próxima versão, 12.10, já não terá mais qualquer suporte para processadores non-pae. Mas por que não permitir uma instalação nova? Por que não gerar um simples LiveCD a mais?! Para que dificultar a vida dos usuários? É difícil de entender...

Pesquisando um pouco, identifiquei duas possíveis alternativas:
  1. Fazer a instalação pela rede (que ainda possui versão para processadores nonpae)
  2. Instalar a versão anterior do ubuntu (10.10) e realizar um live upgrade (novamente pela rede)
Depois de ter baixado o CD, eu realmente não estava afim de baixar novamente todo o conteúdo durante uma instalação. Ainda mais, nem teria certeza se iria funcionar. Bem, pelo menos, como se trata de um ambiente de Software Livre, nem tudo está perdido. Sempre podemos sujar as mãos.

O Ubuntu possui um tutorial de como modificar um LiveCD. A ideia era realizar o transplante de cérebro: trocar o kernel pae pelo kernel non-pae. Mount pra cá, mkisofs para lá, mais uns ajustes e voilà! Um LiveCD para sistemas antigos.

Editado 2: Atenção, o dropbox bloqueia o tráfego além de 10GB/dia. Então, se retornar um erro de "overtraffic", tente novamente em outro dia ou entre em contato comigo.

Editado 4: Adicionei um link magnet. Porém, sou o único seeder no momento.
Editado 5: Adicionei um link para o Google Drive também, caso o dropbox esteja bloqueado.


http://dl.dropbox.com/u/1286502/ubuntu-12.04-desktop-i386-nonpae.iso
magnet:?xt=urn:btih:KKUJ7U5Z6XH3RECGK77DLCA32OOFVQVO
http://wtrns.fr/3wgMpBgr_Kzj6t
https://docs.google.com/file/d/0B54xzz44RpW6RkVLc3d4WEdpMEU/edit?usp=sharing
MD5SUM 7435d1d1740dcf16fbbba2e746de4de1
SHA1SUM 4fb527b2e2c6a00499677102df36ec466e79c373
SHA256SUM a8e4427889fa6786e4cfe82ad578fcbf833fe66146a180f90abcc5caa6fe6dbb

Só baixar e instalar. Se alguém tiver algum problema, só avisar.

Ainda acho que eu não deveria precisar de todo este trabalho mas, pelo menos, outros podem aproveitar meu o trabalho.