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

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

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

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Robinson D. S. Santos
Robinson D. S. Santos
08/09/2015 11:28

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

Diego Sueiro
Diego Sueiro
Reply to  Robinson D. S. Santos
08/09/2015 13:23

Olá Robinson,

Obrigado pelo apoio.

Talvez você goste:

Séries

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services