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.
Instalando os pacotes necessários
Logado como root, e conectado à internet proceda:
apt-get update -y
Em seguida:
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:
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
Exatamente como acima, com hífen ao fim da linha.
Para ARM64:
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
apt-get update
apt-get install docker-ce
usermod -aG docker $USER
E finalmente:
systemctl restart docker.service
E verifique se o serviço subiu corretamente:
systemctl status docker.service
Para testar se o Docker está funcionando corretamente:
docker run hello-world
Testando com uma imagem i386:
docker pull i386/debian
Em seguida:
docker run -it --rm --name i386 --hostname i386 i386/debian
Considerações finais
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.
Fontes: