SheevaPlug – a Debian home server in a wall-wart
Autor original: Patrick Van Oosterwijck
Publicado originalmente no: distrowatch.com
Tradução: Roberto Bechtlufft
Eu sempre me interessei por hardware exótico. Tenho um passado com eletrônicos, e por isso eu geralmente acho o hardware de computadores “comuns” um tanto entediante. Gosto de experimentar coisas que fujam à regra. Por isso fiquei muito empolgado quando soube do Marvell SheevaPlug movido a Linux, e o encomendei na mesma hora na GlobalScale Technologies por apenas 99 dólares. Minha intenção era substituir meu servidor doméstico velho e papador-de-energia por esse dispositivo pequeno e de baixo consumo energético.
Decisões em nível de sistema
O SheevaPlug (à esquerda) é um computador de arquitetura ARM, com processador de 1,2 GHz, 512 MB de RAM e 512 MB de memória flash, uma porta Gigabit Ethernet e um conector host USB, tudo “empacotado” em um transformador comum, do tipo que usamos para ligar vários aparelhos à tomada. Ele é vendido como um kit de desenvolvimento, na esperança de que os desenvolvedores descubram coisas legais para fazer com ele e deem início a um novo conceito chamado “computação em plug”. Desde que o dispositivo foi apresentado, vários sites surgiram com informações valiosas para botá-lo para funcionar em diversas aplicações.
A instalação do Linux em um dispositivo desses segue um mecanismo totalmente diferente do tradicional ponha-o-cd-e-instale com o qual estamos acostumados ao instalar o Linux em PCs comuns. Para começar, não há interface de usuário local, com monitor e teclado. Também não há unidade de CD, e o dispositivo não tem bios – em seu lugar está um gerenciador de inicialização de código aberto chamado U-Boot, bastante famoso no meio de sistemas embarcados.
O SheevaPlug vem com um Ubuntu simplificado pré-instalado na unidade flash, e para diversas utilizações (como para atuar como servidor de arquivos ou servidor web comum) ele deve ser mais do que suficiente. Mas eu uso meu servidor doméstico como backend do MythTV, e me surpreendi ao notar que o Ubuntu pré-instalado não tem nenhum módulo do kernel instalado. Com isso, meu sintonizador de TV USB não foi reconhecido. Talvez eu pudesse encaixar os módulos de que eu precisava, mas como eu ia adicionar um disco rígido USB externo para armazenar backups de rede e programas de TV gravados, decidi deixar em paz a instalação do Ubuntu na unidade flash e instalar o Debian no disco rígido USB.
Se alguém quiser instalar um Ubuntu novo, vale observar que a edição ARM do Ubuntu 9.10 não é compatível como o processador do SheevaPlug. O Ubuntu 9.10 usa o conjunto de instruções ARMv6+VFP, enquanto o processador do SheevaPlug só pode lidar com instruções ARMv5. Até onde eu sei, todas as outras distros com versões ARM devem funcionar, como é o caso do Ubuntu 9.04.
Uma breve observação sobre a utilização do SheevaPlug como backend do MythTV: embora o processador do SheevaPlug possa lidar com várias cargas de trabalho relacionadas a servidores, falta a ele uma unidade de ponto flutuante, o que faz com que o desempenho da codificação de mídia seja péssimo. Na minha instalação eu só recebo HDTV via antena, e o fluxo MPEG2 de entrada pode ser copiado diretamente para o disco rígido sem a necessidade de codificação. Se a ideia fosse usar o MythTV do SheevaPlug para gravar TV analógica, os resultados provavelmente seria péssimos, já que o SheevaPlug não tem potência para lidar com a codificação necessária em tempo real. Como sempre, use a ferramenta certa para a tarefa. No meu caso, como não preciso de codificação extra, o SheevaPlug cuida das tarefas de backend de reprodução de programas gravados e de exibição de TV ao vivo com time-shifting muito bem.
Instalação
Depois de já ter iniciado o projeto, descobri que havia maneiras diferentesde instalar o Debian no SheevaPlug que provavelmente são mais fáceis do que o meu procedimento, mas como não segui essa orientações, não tenho como analisá-las aqui. Em vez disso, segui o procedimento descrito aqui para realizar manualmente o processo de inicialização. Esse procedimento provavelmente é mais difícil, mas funcionou bem comigo. A etapa inicial precisa ser realizada em uma máquina diferente, que já esteja rodando o Debian. Mas eu não segui os procedimentos à risca, e fiz algumas alterações para personalizar o meu sistema. Por exemplo, em vez do Debian “unstable”, optei pelo Debian “testing”. Ele tem um kernel suficientemente recente para incluir suporte ao meu sintonizador de TV (um ATI TV Wonder 600 USB, bem suportado no Linux), além de ser mais estável do que a árvore do Debian unstable.
Personalizei o /etc/hostname, o /etc/network/interfaces e o /etc/fstab para que se adequassem à minha rede e ao meu sistema. Optei por particionar o disco rígido USB com uma partição de sistema ext3 e uma partição swap de 1 GB, deixando o resto da unidade com um sistema de arquivos JFS encarregado do armazenamento em rede, dos backups e das gravações do MythTV. Escolhi o sistema de arquivos JFS, que é menos conhecido, porque ele lida bem com os arquivos grandes gerados pelo MythTV, e por ele ter fama de consumir pouca CPU, uma ótima vantagem em um sistema modesto como este. Pulei algumas das recomendações para deixar o raiz apenas como leitura incluídas no procedimento, já que eu não estava usando um dispositivo de armazenamento flash, e sim um disco rígido de verdade.
Com o disco rígido configurado com a primeira etapa do sistema de inicialização, era hora de conectá-lo ao SheevaPlug e botá-lo para funcionar. Como eu tive que conectar um disco rígido USB e um sintonizador de TV USB, adicionei um hub para multiplicar por quatro a única conexão desse tipo do SheevaPlug. Eu gostaria que o fabricante tivesse incluído um hub USB no SheevaPlug para que houvesse mais de um conector disponível, mas tudo bem, o hub externo quebra o galho.
O SheevaPlug não tem conexão para monitor; o console inicial é acessado pela conexão de um dispositivo via USB, que oferece uma porta serial virtual. Na verdade, essa conexão oferece duas portas seriais virtuais: uma para conectividade JTAG para depuração de baixíssimo nível, e outra para o console serial a 115.200 bps. Em um sistema Linux, essas portas seriais virtuais podem ser acessadas como dispositivos /dev/ttyUSBx, e o console serial é o segundo dispositivo. Uma inconveniência é que esses dispositivos só aparecem depois que o SheevaPlug é ligado, e você precisa ser rápido para fazer sua conexão de terminal serial depois que os dispositivos aparecem para poder interromper o gerenciador automático de inicialização a tempo.
O SheevaPlug (branco) sobre um disco rígido USB externo (preto) e com um sintonizador de TV conectado a um hub USB
Depois de mudar os parâmetros do gerenciador de inicialização de acordo com as instruções deste procedimento, eu inicializei e cheguei a um prompt do Bash, onde era possível executar o segundo estágio do processo de inicialização e o restante da configuração. Além dos repositórios comuns de pacotes do Debian, acrescentei também o repositório debian-multimedia.org, e tive uma grata surpresa ao ver como o repositório ARM é bem sortido. O suporte do Debian a várias arquiteturas tem uma reputação excelente, mas eu não esperava que essa fama se estendesse aos repositórios de terceiros. Havia um pacote do MythTV para a arquitetura ARM, poupando o tempo que eu ia perder no longo ciclo de compilação pelo qual eu esperava passar.
Ainda assim, não deu para fugir completamente da compilação. Tive problemas para fazer o sintonizador USB funcionar, embora ele supostamente funcione sem complicações no Linux. O kernel nunca conseguia carregar o firmware, embora eu tivesse seguido as instruções para adicioná-lo; o kernel encontrava o arquivo, mas devolvia um erro avisando sobre a adição de um nó de dispositivo duplicado. Conectei o sintonizador no meu netbook que roda o sidux, e funcionou de primeira. Fiquei um tempo atolado com esse problema, mas acabei descobrindo sua fonte: uma diferença na forma como os kernels ARM e x86 do Debian são configurados. O kernel ARM tem uma opção definida para ter o sistema de arquivos de dispositivo I2C compilado no kernel. Só que no kernel x86 ele se apresenta como módulo. O sintonizador usa componentes que se conectam pelo barramento I2C, e tanto o sistema de arquivos de dispositivo I2C quando o driver do sintonizador de TV estavam tentando criar nós de dispositivos para esses componentes. Resolvi o problema baixando os fontes do kernel pelo APT, copiando a configuração do kernel padrão do diretório /boot, alterando a opção problemática e recompilando o kernel.
Para fechar, usei o apt-get para instalar o SSH, o Samba, o SWAT, o MySQL, o MythTV, o rsync e provavelmente umas outras coisinhas que estou esquecendo. A configuração disso tudo vai além do escopo deste artigo, mas o procedimento é igual ao realizado em outros sistemas Debian, ou seja, há muita informação disponível por aí. A única coisa incomum e que pode confundir é a forma de executar o mythtv-setup, já que trata-se de um programa Qt e o SheevaPlug não tem interface Qt nativa. A resposta é que você pode usar ssh -X <nome_do_host> para fazer login no SheevaPlug com encaminhamento de porta; ao executar o mythtv-setup, a interface de usuário será exportada para a máquina da qual você está fazendo o login.
MythTV exibindo “A Era do Gelo 2”
Conclusão
A intenção deste artigo foi a de oferecer um relato de alto nível sobre a instalação que fiz nesse sistema incomum, e não a de ser um guia passo a passo. Há muitas informações detalhadas disponíveis online, em sites como plugcomputer.org e computingplugs.com, que podem ser de extrema valia para se botar o SheevaPlug para funcionar. Como eu já disse, o sistema é vendido como um kit para desenvolvedores, e sua configuração definitivamente não é para qualquer um, muito menos para aqueles que fogem do terminal como o diabo foge da cruz. No fim das contas, eu me diverti um bocado fazendo essa instalação, e o sistema está funcionando lindamente. Aprendi muito no processo, e estou mais uma vez surpreso com a flexibilidade do Debian como sistema operacional para qualquer tipo de computador, mesmo sistemas embarcados como esse.
Créditos a Patrick Van Oosterwijck – distrowatch.com
Tradução por Roberto Bechtlufft <info at bechtranslations.com.br>
Deixe seu comentário