Snappy Ubuntu Core na Beaglebone Black
- por Sergio Prado
No começo deste ano a Canonical lançou o Snappy Ubuntu Core, uma versão do Ubuntu focada em IoT.
Mas como assim, focado em IoT?
A principal idéia desta distribuição é isolar as aplicações, de forma que instalar ou remover uma aplicação não cause nenhum tipo de impacto no funcionamento de outras aplicações, além de garantir com que uma aplicação não comprometa o funcionamento de outras aplicações. Para isso, as aplicações rodam de forma isolada utilizando um módulo de segurança do kernel Linux chamado AppArmor.
Para implementar estas funcionalidades, o Snappy Ubuntu Core utiliza uma nova ferramenta de gerenciamento de pacotes chamada Snappy e um novo formato de empacotamento de aplicações chamado snap, ao invés do DPKG (e suas ferramentas relacionadas) e do antigo formato de empacotamento do Debian (*.deb).
Neste novo formato, as aplicações são empacotadas com todas as suas dependências, garantindo independência total entre elas. E as atualizações de aplicações são incrementais e transacionais. Incrementais porque, ao atualizar um pacote snap, não é necessário baixar todo o pacote, mas sim apenas a diferença entre as versões. E transacionais porque, durante uma atualização, é tudo ou nada. As atualizações são atômicas, e não existe o risco de deixar o ambiente em um estado inconsistente.
Mas onde tudo isso se encaixa no conceito de IoT? Bom, a promessa é conectar tudo à Internet. Neste sentido, será essencial gerenciar de forma efetiva e com segurança as atualizações de aplicações em dispositivos IoT para corrigir bugs e problemas de segurança. É aí que entra o Snappy Ubuntu Core! Além de dispositivos IoT, esta distribuição visa também prover uma plataforma para computação em nuvem.
Devido à segurança e à performance provida por este mecanismo de atualização incremental e atômico, fica fácil desenvolver sistemas que se atualizam automaticamente. E pelo fato das aplicações rodarem de forma isolada e independente, através do Snappy é possível criar um repositório de aplicações para estender o funcionamento do sistema, parecido com as soluções que temos em dispositivos móveis como o Google Play.
Já existem versões do Snappy Ubuntu Core para as plataformas de computação em nuvem da Microsoft (Azure), do Google (Google Cloud Platform) e da Amazon (Elastic Compute Cloud), além do suporte para servidores x86, virtualização (KVM, VirtualBox, etc) e dispositivos ARM como a Raspberry Pi 2 e a Beaglebone Black!
SNAPPY UBUNTU CORE NA BEAGLEBONE BLACK
A imagem do Snappy Ubuntu Core pode ser baixada conforme abaixo (no momento em que escrevo este artigo, está disponível a versão 15.04):
$ wget http://releases.ubuntu.com/15.04/ubuntu-15.04-snappy-armhf-bbb.img.xz |
Depois basta descompactar a imagem e gravar do cartão SD (substitua sdX no comando abaixo pelo nome do arquivo de dispositivo do cartão SD):
$ xz -d ubuntu-15.04-snappy-armhf-bbb.img.xz $ sudo dd if=ubuntu-15.04-snappy-armhf-bbb.img of=/dev/sdX bs=1M && sync |
Para testar, você pode ligar um teclado e um monitor na Beaglebone Black, ou então conectá-la à console serial ou mesmo acessar por SSH. Faça o login com o usuário ‘ubuntu‘ e a senha ‘ubuntu‘.
Informações sobre a distribuição podem ser exibidas com o comando abaixo:
$ snappy info release: ubuntu-core/15.04/stable architecture: armhf frameworks: webdm apps: |
É possível procurar por aplicações no repositório do Snappy Ubuntu Core através do parâmetro ‘search‘ (no momento em que escrevo este artigo, existem mais de 40 aplicações compatíveis com a Beaglebone Black):
$ snappy search Name Version Summary mosquitto.kartben 1.4.2.201505120017 Mosquitto pi2.canonical 0.16 pi2 beagleblack 1.12 beagleblack pastebinit.mvo 1.4.0.0.2 pastebinit say 1.4 say glowapi.vtuson 0.1.2 PiGlow RestAPi 4console.theregrunner 2015.8.28.0 4console ... |
Instalar uma aplicação é bem simples:
$ sudo snappy install hello-world |
As aplicações instaladas podem ser listadas com o parâmetro list:
$ snappy list Name Date Version Developer ubuntu-core 2015-09-17 5 ubuntu hello-world 2015-10-03 1.0.18 canonical webdm 2015-09-17 0.9 canonical beagleblack 2015-09-17 1.12 canonical |
Por padrão, o Snappy Ubuntu Core vem com a aplicação webdm instalada, que é basicamente uma interface web para instalar e desinstalar aplicações do repositório do Snappy Ubuntu Core.
Bacana, não? :)
DOCKER
O Docker é uma plataforma de gerenciamento de containers bem prática e fácil de usar. Com o Docker é possível criar e distribuir imagens inteiras de sistemas Linux, que podem ser executadas simultaneamente na mesma máquina!
Que tal então utilizar o Docker para rodar uma versão do Debian em cima do Snappy Ubuntu Core na Beaglebone Black? :)
O primeiro passo é instalar o Docker:
$ sudo snappy install docker |
Ao procurar as imagens Docker disponíveis para a Beaglebone, encontrei uma imagem do Debian:
$ docker search beagle NAME DESCRIPTION STARS OFFICIAL AUTOMATED resin/beaglebone-node Node.js is a JavaScript-based platform for... 1 resin/beaglebone-debian The bare bones OS image for Beaglebone. 0 resin/beaglebone-python The Python buildpack image for Python apps... 0 resin/beaglebone-buildpack-deps A collection of common build dependencies ... 0 strictlybusiness/beaglebone-black-iojs 0 strictlybusiness/beaglebone-black-node 0 nghiant2710/beaglebone-black-debian 0 |
Então é só utilizar o Docker para instalar esta imagem:
$ docker pull resin/beaglebone-debian |
E executar a imagem com o comando abaixo:
$ docker run -i -t resin/beaglebone-debian /bin/bash |
Pronto, estamos dentro do Debian!
root@5057dc3f223b:/# cat /etc/issue Debian GNU/Linux 8 \n \l |
Esta idéia de isolar aplicações com o Snappy (ou mesmo sistemas inteiros através de containers) é bastante interessante, e pode ser estendida para outros dispositivos embarcados como set-top-boxes e roteadores. Com o aumento da capacidade do hardware e queda nos custos que vem acontecendo nos últimos anos (C.H.I.P. == $9!), o uso deste tipo de solução em sistemas embarcados pode se tornar uma tendência. Quem viver, verá!
Um abraço,
Sergio Prado