Rodando contêineres e aplicações Linux x86 no Raspberry Pi [Artigo]
[ Hits: 2.019 ]
Por: Carlos Affonso Henriques. em 12/08/2020
Quem é do ramo de automação industrial sabe que existem uma infinidade de sistemas e aplicações proprietários legados, geralmente compostos por hardwares e softwares muito antigos. Quando ocorre a queima de um hardware dedicado geralmente é uma agonia. Os fabricantes das máquinas industriais quando dispõe do dispositivo cobram fortunas. Para terem uma ideia recentemente fiz um trabalho onde um simples PC industrial da Phoenix Contact com a solução para a máquina industrial custava em seu país de origem a bagatela de ? 13.000,00 (treze mil euros) fora frete e impostos de importação e nem vou mencionar que normalmente não dispõem desses dispositivos para pronta entrega e levam semanas e até meses para disponibilizá-lo.
Por que contêiner e não VM?
Cada caso é um caso e há situações em que é mais fácil ou até mesmo possível fazer com um ou com outro. Em automação industrial não há consensos nem padrões para nada com exceção do protocolo MODBUS e ainda assim há fabricantes que usam seus protocolos proprietários para assegurar a "fidelidade" dos clientes. Nesse artigo vou abordar o uso de contêiner Docker. O Contêiner apresenta a facilidade de contornar situações onde por exemplo não é possível fazer um Linux antigo rodar dispositivos de hardware novos, ou ainda como eu peguei uma vez todo o sistema raiz estava em um initrd com Squashfs, onde foi preciso fazer um unsquashfs do initrd para gerar a imagem e só havia um único driver de interface de rede compilado para um chipset específico e mesmo que eu conseguisse uma interface de rede com esse chipset ficaria impossibilitado de instalá-la no PC industrial pois sequer havia um slot PCI disponível.
Instalando o RaspOS ARM64 (Raspbian)
A imagem pode ser obtida nos servidores da Raspberry Foundation. Usei a versão 64bit por uma questão de compatibilidade pois podemos rodar tanto contêineres x86 quando 64. Segue o link para o diretório:
Não vou abordar a instalação do sistema operacional pois há farto material sobre o assunto.
Logado como root, e conectado à internet proceda:
apt-get install qemu qemu-user qemu-user-static -y
Somente com esses pacotes já é possível fazer um chroot de um sistema x86 no RPI.
Agora vamos à instalação do Docker.
Instalando a chave do repositório:
Exatamente como acima, com hífen ao fim da linha.
echo 'deb [arch=arm64] https://download.docker.com/linux/debian buster stable' | tee /etc/apt/sources.list.d/docker.list
Para ARM32:
echo 'deb [arch=armhf] https://download.docker.com/linux/debian buster stable' | tee /etc/apt/sources.list.d/docker.list
E verifique se o serviço subiu corretamente:
Para testar se o Docker está funcionando corretamente:
Testando com uma imagem i386:
docker pull i386/debian
docker run -it --rm --name i386 --hostname i386 i386/debian
Só ressaltando que o desempenho não é dos melhores, visto que não trata-se de virtualização e sim emulação. Nem todas as aplicações são possíveis ou viáveis rodando dessa forma.