04/03/2017 Aleatoriedades

Já contei sobre o Lev, o leitor de livros digitais da Saraiva. Mas como bom nerd, eu queria fazer o que não dava para fazer: acessar o sistema operacional Linux por dentro dele através do SSH. O Lev é fabricado pela Bookeen e as instruções a seguir podem ser usadas em outros leitores tais como Cybook Muse, Cybook Odyssey e Nolimbook. Mas não testei em nenhum deles, pois o único equipamento que possuo é o Lev.

É claro que comecei pesquisando na Internet por “SSH Bookeen”. O que resultou no seguinte artigo: GAME OVER. Nele explica como usar uma versão modificada do arquivo de atualização desses equipamentos para obter o desejado acesso remoto SSH. Essa atualização é aquela que o Lev te oferece ao ligar o WiFi. O que o Lev faz automaticamente é baixar um arquivo na memória interna, reiniciar e atualizar através desse arquivo. Então vamos colocar um arquivo ali para forjar uma atualização offline.

Apesar do uso da palavra forjar, essa atualização offline é realmente um recurso do equipamento. O arquivo de atualização original do Lev pode ser baixado pelo site da Saraiva até com direito a instruções: Atualizações do Lev. Então o que vamos fazer é modificar esse arquivo, colocando um servidor SSH, o Dropbear. Note que da próxima vez que seu Lev avisar que existe uma nova atualização disponível e você aceitar, você vai perder sua atualização personalizada e seu acesso SSH. Mas se isso acontecer, é só você fazer o que descrevo novamente.

O caminho mais fácil, é pegar o arquivo pronto no site citado. A versão correta é o arquivo para Cybook Muse/Odyssey/Nolimbook versão 6.3.2326 ou 6.3.2350. O problema é que os dicionários são os franceses, a versão do Dropbear é um pouco antiga, assim como a versão do próprio firmware que para o Lev atualmente é a 6.3.2360. E com isso seu Lev vai notificar que existe uma nova atualização disponível, a qual vai lhe tirar o SSH conforme expliquei acima. É claro que você não precisa aceitar essa atualização.

O caminho mais difícil é criar o seu próprio arquivo de atualização. Nem é tão mais difícil assim, pois eu criei o repositório lev-jailbreak no GitHub. Tudo o que você precisa é um Linux com algumas ferramentas como: make, sudo, loop mount, tar, bzip2, normalmente parte de qualquer distribuição. E os seguintes comandos:

$ git clone https://github.com/br-lemes/lev-jailbreak.git
$ cd lev-jailbreak
$ make

Os comandos acima vão criar um arquivo chamado lev-jailbreak.bin. Você deve copiar para o Lev esse arquivo, através de um cabo USB. Renomeie o arquivo para CybUpdate.bin. Desconecte o USB e o Lev vai detectar o arquivo de atualização e perguntar se deseja atualizar. Responda que sim e aguarde. Demora um bom tempo. Quando terminar e reiniciar, ative o WiFi e conecte-se. Descubra o IP do Lev pelo seu roteador.

Então é só conectar: ssh root@IP_DO_LEV. O usuário root não tem senha. No Windows você pode usar o putty ou WinSCP. Você pode querer colocar uma senha, para evitar acesso não autorizado. Para que seja possível alterar a senha, é necessário que o sistema de arquivo raiz seja montado para leitura e escrita. Mas é bom que o sistema de arquivos permaneça somente para leitura depois. Então faça o seguinte:

$ mount -o remount,rw /
$ passwd
$ mount -o remount,ro /

O Lev automaticamente desliga o WiFi depois de um tempo e entra em modo de descanso. Se quiser permanecer conectado por um tempo mais longo, para evitar isso pode matar os processos ebrmain e boordr (o primeiro reinicia o segundo). Digite os comandos killall ebrmain e killall boordr. Quando fizer isso o Lev vai passar a funcionar somente pelo acesso remoto, a tela e os botões vão parar de responder. Quando terminar o que estiver fazendo, digite o comando /mnt/app/ebrmain &. O Lev vai voltar a funcionar normalmente, a tela e os botões vão realizar suas funções normais. Porém o WiFi vai ser desligado. Basta ligar e conectar novamente (ou não, se já terminou).

Você pode copiar arquivos de e para o Lev através do SCP. Porém se você copiar novos livros em /mnt/fat o Lev não vai reconhecer automaticamente. Você pode conectar e desconectar o cabo USB ou reiniciar o Lev. Mas o modo mais prático é reiniciar o boordr. É só matar o processo com o comando killall boordr. Lembra que o processo ebrmain reinicia o boordr? Então nem precisa fazer mais nada. Ao reiniciar o boordr o WiFi desliga, e o Lev reconhece seus novos livros. Você pode religar o WiFi se precisar.

Agora vou explicar o que aquele mágico comando make faz. Primeiro ele baixa o arquivo de atualização do Lev diretamente da Saraiva. O arquivo CybUpdate.bin. Você pode copiar manualmente um outro arquivo ali, se estiver interessado em fazer o procedimento com uma versão diferente. Seria o caso se você tem algum dos outros modelos compatíveis da Bookeen.

O arquivo de atualização é simplesmente um arquivo tar comprimido com o bzip2. Então o próximo passo é extrair esse arquivo. Dentro do arquivo de atualização tem quatro arquivos. Somente dois deles nos interessam aqui: contents e rootfs.fex. Este último é um arquivo de imagem com um sistema de arquivos ext2. O próximo passo então é montar em loop e copiar os arquivos necessários ao servidor SSH Dropbear nele. Em seguida, desmontar.

O arquivo contents possui uma descrição dos arquivos, com o seu tamanho em bytes e seu md5sum. Então o próximo passo é atualizar o arquivo contents para conter as novas informações. Na verdade, o tamanho do arquivo nem vai mudar, mas o seu md5sum sim.

Por fim, o último passo é empacotar e compactar o arquivo de volta ao formato tar com bzip2. E pronto, você tem um arquivo de atualização capaz de injetar um servidor SSH no seu Lev.

No repositório há uma versão binária pré-compilada do Dropbear, para não adicionar requisitos como compiladores. Mas o make também é capaz de baixar e compilar o Dropbear se você quiser. Você pode estar atualizando para uma versão mais recente, por exemplo. Se for o caso, vai precisar editar o arquivo Makefile para indicar qual a versão do Dropbear. Você vai precisar de um compilador arm-linux-gnueabi e sua respectiva glibc. No Ubuntu está tudo disponível nos repositórios, você pode instalar com o apt-get. Para que o make reconheça a necessidade de compilar o Dropbear, você deve apagar o arquivo src/usr/bin/dropbearmulti.

Então porque afinal eu tive o trabalho de criar um Makefile tão complexo ao invés de simplesmente disponibilizar um link para baixar o arquivo pronto? Em primeiro lugar, porque com o Makefile eu tenho uma rotina automática programável que posso reutilizar para acrescentar novas coisas ou atualizar a versão dos softwares facilmente no futuro. E em segundo lugar, mas talvez mais importante, o arquivo de atualização contém software não livre sobre os quais eu não tenho o direito de redistribuir. Como o Adobe Reader Mobile (Adobe Digital Editions), Boo Reader e provavelmente outros códigos de propriedade da Bookeen e da Saraiva.

ATENÇÃO: todas as instruções acima tem por objetivo ensinar, porém sem nenhuma garantia da minha parte. Use-as por sua conta e risco. Em especial tome muito cuidado ao realizar alterações no sistema de arquivo raiz se você o montar para escrita, bem como no arquivo de atualização. Todo o processo está baseado no correto funcionamento das rotinas de atualização. Se você criar um script de inicialização e por algum erro ele impedir de inicializar o sistema, você vai perder o recurso de atualização para que possa corrigir. Tornando seu Lev inacessível e inútil. Não preciso dizer que a garantia não vai cobrir algo assim.

br_lemes, o Ciclope insano (Sonâmbulo)