Criando um repositório de pacotes com o Yocto Project

repositório de pacotes com yocto

Uma das características bastante vantajosas do Yocto Project é a possibilidade de se gerar uma distribuição Linux embarcado com suporte ao gerenciamento de pacotes. O gerenciamento de pacotes é especialmente interessante durante o processo de desenvolvimento de uma distribuição, bem como sistemas que demandam atualizações depois que foram enviados para "campo".

 

Dependendo da complexidade do sistema, quantidade de pacotes e cadeia de dependência entre eles, o processo de desenvolvimento de uma distribuição pode demandar adições de pacotes ao longo do ciclo de desenvolvimento do produto. Durante esse processo ter à disposição uma ferramenta que possibilite a fácil adição de novos pacotes para testes e novas implementações, traz agilidade e economia de tempo e recursos.

 

Quando o produto já está em campo ele potencialmente irá apresentar falhas e tendo a mãos um gerenciador de pacotes, os custos de manutenção serão reduzidos e a possibilidade em se adicionar novas "features" também será facilitada.

 

 

Gerenciadores de pacotes do Yocto Project

 

O Yocto pode gerar pacotes nos três formatos mais comumente encontrados em sistemas embarcados:

 

Uma observação a ser feita é que: o Yocto Project gera uma distribuição Linux embarcados criada por VOCÊ e que disponibiliza a inclusão de um ou mais gerenciadores de pacotes para a SUA distribuição. Isso quer dizer que sua distribuição NÃO É compatível com Ubuntu/Debian (deb) ou Fedora/Red Hat (rpm), pois as definições e nomeações de arquitetura e versões de pacotes provavelmente serão diferentes daquelas utilizadas pelas distribuições de desktop citadas.

 

Você até consegue instalar os pacotes pré-compilados para estas distribuições em seu sistema gerado, desde que use parâmetros para ignorar algumas flags e forçar a instalação. Isso pode acarretar em problemas que podem não ser muito facilmente detectados e rastreados.

 

Se você não conhece o Yocto e/ou nunca gerou uma imagem com ele, sugiro que procure entendê-lo e conhecer pelo menos superficialmente o processo de construção. Aqui no Embarcados temos diversos artigos que abordam esses aspectos e que em especial podemos destacar: 

 

Neste artigo iremos mostrar como configurar sua estação de trabalho (computador Host onde o sistema é gerado) para que ele sirva como um repositório de pacotes. Esse processo também está documento no manual do Yocto.

 

 

Requisitos da imagem para usar o gerenciamento de pacotes

 

Basicamente você deverá configurar duas variáveis para que sua imagem tenha suporte ao gerenciamento de pacotes:

  • PACKAGE_CLASSES - a ser preenchida no arquivo local.conf ou no arquivo de configuração da distribuição.
    • Pode receber os seguintes valores: "package_rpm", "package_deb", "package_ipk";
  • IMAGE_FEATURES - a ser preenchida no arquivo local.conf , ou no arquivo de configuração da distribuição, ou na receita da imagem.
    • Deve conter o valor "package-management".

 

Como exemplo, teremos em nosso arquivo conf/local.conf inserido no diretório de build:

 

Após configuradas, você irá gerar uma nova imagem (comando "bitbake <nome_da_imagem>") e instala-la em seu target.

 

 

Preparação do Host

 

Para que o target consulte o servidor de pacotes via web temos que configurar o Host com um servidor HTTP apontando para o local onde o Yocto "entrega" os pacotes gerados. Estamos usando nesse exemplo um Host Ubuntu 14.04 64-bits com o Nginx.

 

Vamos realizar as instalações e configurações necessárias. Abra um terminal e digite:

 

Se você tiver o apache2 instalado, é necessário que você pare o seu serviço através do comando:

 

Crie o arquivo de configuração /etc/nginx/sites-enabled/fido-repo com o seguinte conteúdo:

 

Note que nesse caso o Yocto está fazendo deploy dos pacotes gerados em "/home/dsueiro/yocto/build-fido/tmp/deploy/ipk/". Faça as modificações no caminho necessárias para que reflita o ambiente que você está utilizando.

 

Agora vamos remover e fazer backup da configuração padrão do Nginx e adicionar o nosso repositório de pacotes:

 

Para que o servidor HTTP funcione corretamente nós devemos adicionar o nosso usuário ao seguinte arquivo de configuração do Nginx /etc/nginx/nginx.conf:

 

Modifique o nome de usuário que você esteja utilizando em seu ambiente.

 

Agora iremos reiniciar o servidor HTTP com o comando:

 

Para testar veremos se no borwser do Host aparece o repositório de pacotes através do endereço: http://localhost

 

yocto host package feed
Figura 1 - Host como repositório de pacotes

 

Pela figura acima, onde temos um sistema gerado para a Raspberry Pi 2, podemos notar que o Yocto separa os pacotes em 3 principais tipos:

  • Pacotes independentes de arquitetura - all;
    • Exemplos: update-rc.d e tzdata.
  • Pacotes dependentes da arquitetura da CPU - cortexa7hf-vfp-vfpv4-neon;
    • Exemplos: busybox e libstdc++.
  • Pacotes dependentes da MACHINE - raspberrypi2.
    • Exemplos: u-boot e kernel.

 

Em cada subdiretório teremos, além dos binários dos pacotes, os arquivos texto "Packages" que contém a lista e informações dos pacotes gerados.

 

 

Configurando o Target

 

Em nosso exemplo, na imagem está inserido o gerenciador de pacotes opkg e para que o Target "enxergue" nosso servidor de pacotes devemos configurar o arquivo "/etc/opkg/base-feeds.conf" no Target com o seguinte conteúdo:

 

Nesse exemplo o Host está configurado com o IP 10.42.0.1 e como servidor DHCP também. A conexão entre ele e o target está sendo feita via cabo Ethernet. Modifique o endereço de IP de acordo com o ambiente que você esteja utilizando.

 

Agora iremos atualizar o Target com as informações de pacotes disponíveis no servidor através do comando:

 

 

Instalando novos pacotes no Target

 

Para instalar novos pacotes no target, como por exemplo o alsa-utils, primeiro teremos que gerá-lo no Host através do Yocto:

 

Atualizar o índice de pacotes no Host:

ou

 

Atualizar o índice de pacotes no Target:

 

E instalar o pacote no target:

 

 

Conclusão

 

O processo de configuração tanto do Host quanto do Target para uso de gerenciamento de pacotes em sistemas Linux embarcado gerados pelo Yocto é bastante simples e direto. Neste artigo mostramos como montar esse setup para uma conexão local, mas que pode ser facilmente estendida para conexões via internet.

 

 

Para saber mais

 

Embedded Linux Build Systems

Cozinhando com o Yocto Project

Desvendando Yocto Project – Primeiros passos

 

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.

Diego Sueiro
Formado em Engenharia de Controle e Automação pela UNIFEI e CEO do Embarcados, atualmente trabalho na Inglaterra com Desenvolvimento de Sistemas Linux Embarcado Real Time. Sou consultor e desenvolvedor de software para Sistemas Embarcados com vasta experiência em projetos com processadores de 8bits a 32bits, sistemas bare metal, RTOS, Linux Embarcado e Android Embarcado. Um apaixonado por Pink Floyd e Empreendedorismo.

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Diego SueiroRobinson D. S. Santos Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Robinson D. S. Santos
Visitante
Robinson D. S. Santos

Como sempre ótimo artigo e de grande valor. Valeu Diegão!

Diego Sueiro
Visitante
Diego Sueiro

Olá Robinson,

Obrigado pelo apoio.