Estrutura e Funcionamento de um Ebuild no Gentoo Linux
Informações básicas para quem pretende entender um pouco sobre ebuilds.
Introdução
O gerenciador de pacotes do sistemaGentoo, denominado Portage, realiza a instalação de softwares através da compilação do código-fonte. O arquivo que fornece as instruções para este procedimento é o ebuild. O ebuild é um script em formato texto, baseado na linguagem Bash, que contém variáveis e funções predefinidas. Ele padroniza o download, a preparação, a compilação e a integração de um programa ao sistema operacional.Para compreender a estrutura, analisaremos o ebuild do software DOOM Retro (
doomretro-5.8.2.ebuild) que disponibilizo no meu overlay (https://github.com/xerxeslins/xerxes-overlay).Cabeçalho e Metadados
O arquivo inicia com a identificação técnica do sistema de construção e metadados de catálogo.EAPI=8
inherit cmake
DESCRIPTION="The dark, gritty, thoroughly refined, and decidedly retro DOOM source port"
HOMEPAGE="https://www.doomretro.com/"
inherit cmake
DESCRIPTION="The dark, gritty, thoroughly refined, and decidedly retro DOOM source port"
HOMEPAGE="https://www.doomretro.com/"
- EAPI=8: A sigla significa Ebuild Application Programming Interface. Define a versão das regras internas de processamento que o Portage deve utilizar ao ler o arquivo.
- inherit: Esta instrução carrega coleções de funções embutidas, chamadas eclasses. A eclass
cmakefornece comandos padronizados para compilar softwares que utilizam o sistema CMake, eliminando a necessidade de redigir etapas manuais de configuração. - DESCRIPTION e HOMEPAGE: Fornecem o texto informativo sobre o pacote e o endereço do desenvolvedor. O Portage utiliza estes dados para exibições em ferramentas de busca de pacotes (
emerge --search).
Aquisição e Controle de Versão
Esta seção orienta o Portage sobre o local de obtenção dos arquivos e as regras de versionamento.SRC_URI="https://github.com/bradharding/doomretro/archive/v${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~x86"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~x86"
- SRC_URI: Informa a URL de download do código-fonte. O sistema utiliza variáveis dinâmicas:
${PV}(Package Version) representa o número da versão extraído do nome do arquivo (5.8.2) e${P}(Package) representa o nome do software associado à versão. Isso automatiza a reutilização do script em atualizações futuras. - LICENSE: Declara a licença de software que rege o uso do código.
- SLOT: Controla o mecanismo de coexistência de instalações. O valor
0instrui o Portage a sobrescrever versões anteriores do mesmo pacote. Valores numéricos distintos permitem a instalação de múltiplas versões do mesmo software simultaneamente em diretórios isolados. - KEYWORDS: Define a compatibilidade com a arquitetura do processador. O símbolo til (
~) precedendo a arquitetura (como~amd64) categoriza a versão como testing (em fase de testes para uso geral). A remoção do til categoriza o pacote como estável.
Gerenciamento de Dependências
A compilação exige a presença prévia de componentes no sistema.DEPEND="
media-libs/libsdl2[sound,video,opengl]
media-libs/sdl2-image[png,jpeg]
media-libs/sdl2-mixer[midi,mp3,vorbis,wav]
"
media-libs/libsdl2[sound,video,opengl]
media-libs/sdl2-image[png,jpeg]
media-libs/sdl2-mixer[midi,mp3,vorbis,wav]
"
RDEPEND="${DEPEND}"
- DEPEND: Enumera os pacotes e bibliotecas que o compilador necessita para processar o código-fonte.
- USE flags em dependências: Os termos entre colchetes impõem condicionais de recursos. A linha
media-libs/libsdl2[sound,video,opengl]força o Portage a verificar o estado de instalação da bibliotecalibsdl2. Se a biblioteca estiver instalada, porém compilada sem suporte aopengl, o gerenciador de pacotes interrompe a sequência do DOOM Retro, recompila alibsdl2com o recurso exigido, e então retoma o processo. - RDEPEND: Enumera as dependências de execução (runtime). São os pacotes necessários para o funcionamento do software após a instalação. Na estrutura demonstrada, a variável herda os mesmos componentes da etapa de compilação.
Fases de Execução
Quando o comando de instalação é acionado (emerge doomretro), o Portage fraciona o processo em etapas sequenciais padronizadas.- Fase de Setup (
pkg_setup): O sistema executa verificações de segurança, integridade de ambiente e permissões de conta de usuário. - Fase de Unpack (
src_unpack): O Portage executa o download do arquivo compactado especificado na variávelSRC_URIe extrai o conteúdo em um diretório de trabalho isolado, localizado em/var/tmp/portage/. - Fase de Prepare (
src_prepare): Aplica modificações diretas no código-fonte, caso o mantenedor do ebuild inclua arquivos de correção (patches). - Fase de Configure (
src_configure): Parametriza as variáveis de ambiente e prepara as instruções de compilação. - Fase de Compile (
src_compile): Aciona o compilador do sistema, que converte o código-fonte textual em arquivos binários legíveis pela máquina. - Fase de Install (
src_install): O sistema movimenta os arquivos binários, manuais e ícones gerados para um diretório temporário que emula a raiz do sistema operacional, chamado de diretório de imagem (image). - Fase de Merge: A operação de consolidação. O Portage transfere os arquivos da imagem para os diretórios absolutos (como
/usr/bin/e/usr/share/) e registra as localizações de cada arquivo no banco de dados do gerenciador de pacotes.
O ebuild final pode ser visto em:
Conclusão
Um guia básico sobre montar ebuild pode ser visto em:Acredito que um ebuild pode ser simples ou complexo. Mas saber um pouco sobre como ele funciona, mesmo que não conhecendo tudo, pode ser de grande ajuda para entender o que acontece quando um programa é compilado e também para criar o seu próprio ebuild, mesmo que solicitando ajuda de uma IA.