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:

PACKAGE_CLASSES = "package_ipk"
IMAGE_FEATURES += "package-management"

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:

sudo apt-get install nginx

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

sudo service apache2 stop

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

server {
    listen 80 default_server;

    root /home/dsueiro/yocto/build-fido/tmp/deploy/ipk/;

    autoindex on;
}

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:

sudo rm /etc/nginx/sites-enabled/default 
sudo mv /etc/nginx/sites-available/default ~/nginx-sites-available-default.bak
sudo ln -s /etc/nginx/sites-enabled/fido-repo /etc/nginx/sites-available/fido-repo 

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:

user dsueiro;

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

Agora iremos reiniciar o servidor HTTP com o comando:

sudo service nginx restart

Para testar veremos se no borwser do Host aparece o repositório de pacotes através do endereço: https://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:

src/gz all https://10.42.0.1/all
src/gz raspberrypi2 https://10.42.0.1/raspberrypi2
src/gz cortexa7hf-vfp-vfpv4-neon https://10.42.0.1/cortexa7hf-vfp-vfpv4-neon

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:

opkg update

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:

bitbake alsa-utils

Atualizar o índice de pacotes no Host:

bitbake package-index

ou

bitbake alsa-utils package-index

Atualizar o índice de pacotes no Target:

opkg update

E instalar o pacote no target:

opkg install alsa-utils

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.
Comentários:
Notificações
Notificar
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.

Home » Hardware » Ferramentas de Desenvolvimento » Criando um repositório de pacotes com o Yocto Project

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: