Replicação de ambientes de desenvolvimento com Rebuild

Não é raro na carreira de desenvolvedor de software embarcado, deparar-se com situações em que é necessário ter mais de um ambiente de desenvolvimento. Ou ainda, necessitar de um ambiente que de compilação que o fabricante do processador instruiu usar uma distribuição Linux mais antiga ou diferente da instalada na máquina de desenvolvimento. Foi por enfrentar esses problemas, dentre outros, que a ferramenta rebuild foi criada.

 

O rebuild, ou simplesmente rbld, é uma aplicação de terminal que permite o desenvolvedor (não exclusivamente de sistemas embarcados) criar ambientes de desenvolvimento, com toolchain, bibliotecas e aplicações isoladas do ambiente de trabalho. Esse isolamento provê a possibilidade de criação de diversos ambientes em uma única máquina, e ainda, compartilhá-los, de forma que dentro de um time, todos os membros tenham a mesma configuração de ambiente.

 

Mas como o rbld consegue realizar isso? O rbld funciona sobre o Docker, que é uma ferramenta que permite criar e gerenciar “conteiners” Linux, que são como distribuições completas dentro ambientes isolados (algo semelhante ao “chroot”, mas com recursos mais avançados). No caso o rbld abstrai o uso do Docker, permitindo que seja possível criar containers para desenvolvimento, mesmo sem saber como utilizar o Docker.

 

 

Hands-on

 

Para exemplificar o uso do rbld, vamos compilar uma imagem da versão 15.05 (Chaos Calmer) do OpenWRT. Essa versão não pode ser compilada por versões mais atuais do GCC, o que pode ser um problema para quem usa distribuições do tipo Rolling Release ou as últimas versões do Ubuntu ou Fedora.

 

Este exemplo utiliza o Linux Mint 18 - adapte os comandos abaixo aos gerenciadores de pacote (se enfrentar alguma dificuldade, peça ajuda pelos comentários)

 

Primeiramente, é necessário instalar algumas aplicações como o interpretador Ruby (uma vez que rbld é escrito nessa linguagem), o gerenciador de pacotes Gem, e por fim, o Docker.

 

 

 

Para que seja possível rodar o rbld sem permissões de super usuário (sudo), basta adicionar o usuário que pretende utilizá-lo ao gropo 'docker'.

 

 

 

Agora, basta instalar o rebuild usando o Gem:

 

 

 

 

Criando um environment

 

A primeira coisa a se fazer é criar um ambiente. Como dito anteriormente, o ambiente nada mais é que um container do Docker. A vantagem de usar o rbdl é que tudo que envolve o docker fica transparente para o desenvolvedor, evitando ter que aprender mais uma ferramenta.

 

Para criar um ambiente utiliza-se o comando 'create', cuja sintaxe é:

 

 

 

A opção 'base' é usada para especificar a distribuição (é possível especificar inclusive a versão) que se deseja utilizar. Por exemplo, a versão 15.03 (Chaos Calmer) do OpenWRT exige uma versão X do gcc, disponível no Ubuntu 14.04. Versões mais novas do gcc simplesmente não compilam essa versão do OpenWRT.

 

Para inciar um ambiente para o OpenrWRT 15.03, rode

 

 

 

Se tudo der certo, no final do que é mostrado na tela, deve-se ler: "Successfully created openwrt:initial"

 

O sistema base não inclui as ferramentas de desenvolvimento (toolchain, bibliotecas, headers dakernel, etc.). Precisamos, então, modificar o ambiente base para incluir as ferramentas necessárias. O processo de instalar as ferramentas necessárias no ambiente é chamado provisionamento, que é realizado pelo  comando modify:

 

 

 

No caso do ambiente para o OpenrWRT, precisamos instalar uma série de pacotes, que o faremos pelo apt-get no ambiente:

 

 

 

Para encerrar o provisionamento, devemos “comitar” as mudanças realizadas.

 

 

 

O parâmetro “tag” permite colocar “apelidos” nas versões de um mesmo ambiente. Por exemplo, “v001” para primeira versão, ou “com-libssl” para uma versão hipotética que inclua a libssl.

 

Dando continuidade ao exemplo do OpenWRT, comite as mudanças realizadas anteriormente:

 

 

 

Com o ambiente criado e provisionado, realize um teste com o comando run:

 

 

 

O comando “run” executa comandos no container (ambiente) capazes de interagir com o ambiente de máquina de desenvolvimento. Essa iteração ficará mais clara no passo seguinte, onde será realizado o “clone” do repositório do OpenWRT:

 

 

 

 

Deste ponto em diante, basta rodar os comandos para compilar o OpenWRT usando o rbld run openwrt -- como prefixo,

 

 

 

Ao final, você deve ter uma imagem compilada em no diretório bin.

 

Um pouco mais sobre o gerenciamento de ambientes

 

Para ver os ambientes criados até o momento, utiliza-se o comando ‘list’:

 

 

 

O comando “rm” apaga versões (criadas com a opção “tag”) ou ambientes inteiros.

 

 

 

Por exemplo, para apagar a versão inicial do ambiente do tutorial,

 

 

 

É possível salvar um ambiente (comando “save”) e carregá-lo com outra máquina (comando “load”), ou mesmo publicar esses ambientes em um serviço chamado Registry (comando “publish”) - deixamos para o leitor mais interessado pesquisar na documentação como utilizar esses comandos e de que forma isso pode ser útil para seus projetos. 

 

Mais informações

 

Quem quiser conhecer mais sobre o projeto Rebuild, pode acessar a sua documentação em https://github.com/rbld/rebuild/wiki ou seguir o tutorial em inglês em https://medium.com/jumperiot/simplifying-iot-development-using-rebuild-71b8de2dea5f

 

Nota:

Este artigo contou com a colaboração de Tiago Medicci Serrano, a quem eu agradeço imensamente pela ajuda.

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

1
Deixe um comentário

avatar
 
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
Neuber Jose de Sousa Sousa Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Neuber Jose de Sousa Sousa
Visitante
NEUBER JOSE DE SOUSA

To c/ uma duvida aki pra fazer meu openwrt dir825 c1 virar wifi cliente