Capítulo 3. Software de embalagem
3.1. Pacotes de RPM
Esta seção cobre os conceitos básicos do formato de embalagem RPM.
3.1.1. O que é um RPM
Um pacote RPM é um arquivo contendo outros arquivos e seus metadados (informações sobre os arquivos que são necessários ao sistema).
Especificamente, um pacote de RPM consiste no arquivo cpio
.
O arquivo cpio
contém:
- Arquivos
Cabeçalho RPM (metadados do pacote)
O gerenciador de pacotes
rpm
utiliza estes metadados para determinar as dependências, onde instalar arquivos e outras informações.
Tipos de pacotes de RPM
Há dois tipos de pacotes de RPM. Ambos os tipos compartilham o formato do arquivo e as ferramentas, mas têm conteúdos diferentes e servem a propósitos diferentes:
Fonte RPM (SRPM)
Um SRPM contém o código fonte e um arquivo SPEC, que descreve como construir o código fonte em um RPM binário. Opcionalmente, os patches para o código-fonte também são incluídos.
RPM Binário
Um RPM binário contém os binários construídos a partir das fontes e remendos.
3.1.2. Listagem das utilidades da ferramenta de embalagem RPM
Os seguintes procedimentos mostram como listar as utilidades fornecidas pelo pacote rpmdevtools
.
Pré-requisitos
Para poder utilizar as ferramentas de embalagem RPM, você precisa instalar o pacote rpmdevtools
, que fornece várias utilidades para embalagem de RPMs.
# yum instalar rpmdevtools
Procedimento
Liste as utilidades da ferramenta de embalagem RPM:
$ rpm -ql rpmdevtools | grep bin
Informações adicionais
- Para mais informações sobre as utilidades acima, consulte suas páginas de manual ou diálogos de ajuda.
3.1.3. Criação de espaço de trabalho de embalagem RPM
Esta seção descreve como configurar um layout de diretório que é o espaço de trabalho de embalagem RPM, usando o utilitário rpmdev-setuptree
.
Pré-requisitos
O pacote rpmdevtools
deve ser instalado em seu sistema:
# yum instalar rpmdevtools
Procedimento
-
Execute o utilitário
rpmdev-setuptree
:
$ rpmdev-setuptree $ tree ~/rpmbuild/ /home/user/rpmbuild/ |-- BUILD |-- RPMS |-- SOURCES |-- SPECS `-- SRPMS 5 directories, 0 files
Os diretórios criados servem a estes propósitos:
Diretório | Objetivo |
CONSTRUÇÃO |
Quando as embalagens são construídas, vários diretórios |
RPMS |
Os RPMs binários são criados aqui, em subdiretórios para diferentes arquiteturas, por exemplo, nos subdiretórios |
FONTES |
Aqui, o empacotador coloca arquivos de código fonte comprimido e patches. O comando |
SPECS | O embalador coloca aqui os arquivos SPEC. |
SRPMS |
Quando |
3.1.4. O que é um arquivo SPEC
Você pode entender um arquivo SPEC como uma receita que o utilitário rpmbuild
usa para construir um RPM. Um arquivo SPEC fornece informações necessárias para o sistema de construção definindo instruções em uma série de seções. As seções são definidas no Preamble e na parte Body. A parte Preamble contém uma série de itens de metadados que são usados na parte Body. A parte Body representa a parte principal das instruções.
3.1.4.1. Preâmbulo Itens
A tabela abaixo apresenta algumas das diretrizes que são usadas com freqüência na seção Preamble do arquivo SPEC da RPM.
Diretriz SPEC | Definição |
---|---|
| O nome base do pacote, que deve combinar com o nome do arquivo SPEC. |
| O número da versão upstream do software. |
|
O número de vezes que esta versão do software foi lançada. Normalmente, defina o valor inicial para 1%{?dist}, e aumente-o a cada novo lançamento do pacote. Redefinir para 1 quando um novo |
| Um breve resumo de uma linha do pacote. |
| A licença do software que está sendo embalado. |
| A URL completa para mais informações sobre o programa. Na maioria das vezes este é o site do projeto upstream para o software que está sendo empacotado. |
| Caminho ou URL para o arquivo comprimido do código-fonte a montante (não corrigido, as correções são tratadas em outro lugar). Isto deve apontar para um armazenamento acessível e confiável do arquivo, por exemplo, a página a montante e não o armazenamento local do empacotador. Se necessário, mais diretrizes do SourceX podem ser adicionadas, incrementando o número a cada vez, por exemplo: Fonte1, Fonte2, Fonte3, e assim por diante. |
| O nome do primeiro patch a ser aplicado ao código fonte, se necessário. A diretiva pode ser aplicada de duas maneiras: com ou sem números no final do Patch. Se nenhum número for dado, um é atribuído à entrada internamente. Também é possível dar os números explicitamente usando Patch0, Patch1, Patch2, Patch3, e assim por diante. Estes remendos podem ser aplicados um a um utilizando a macro %patch0, %patch1, %patch2 e assim por diante. As macros são aplicadas dentro da diretiva %prep na seção Body do arquivo SPEC da RPM. Alternativamente, é possível usar a macro topatch que aplica automaticamente todos os patches na ordem em que são dados no arquivo SPEC. |
|
Se o pacote não for dependente da arquitetura, por exemplo, se for escrito inteiramente em uma linguagem de programação interpretada, defina isso para |
|
Uma lista separada por vírgula ou espaço em branco dos pacotes necessários para construir o programa escrito em uma linguagem compilada. Pode haver múltiplas entradas de |
|
Uma lista separada por vírgula ou espaço em branco dos pacotes requeridos pelo software para ser executado uma vez instalado. Pode haver múltiplas entradas de |
| Se um software não puder operar em uma arquitetura de processador específica, você pode excluir essa arquitetura aqui. |
|
|
|
Esta diretiva altera a forma de trabalho das atualizações dependendo se o comando |
|
Se |
As diretrizes Name
, Version
, e Release
compreendem o nome do arquivo do pacote RPM. Os mantenedores do pacote RPM e os administradores do sistema freqüentemente chamam estas três diretivas de N-V-R ou NVR, porque os nomes dos arquivos do pacote RPM têm o formato NAME-VERSION-RELEASE
.
O exemplo a seguir mostra como obter a informação NVR para um pacote específico consultando o comando rpm
.
Exemplo 3.1. Consultar as rpm para fornecer as informações NVR para o pacote bash
# rpm -q bash bash-4.4.19-7.el8.x86_64
Aqui, bash
é o nome do pacote, 4.4.19
é a versão, e 7.el8
é o lançamento. O marcador final é x86_64
, que sinaliza a arquitetura. Ao contrário do NVR, o marcador de arquitetura não está sob controle direto do empacotador RPM, mas é definido pelo ambiente de construção rpmbuild
. A exceção a isto é o pacote noarch
independente da arquitetura.
3.1.4.2. Itens do corpo
Os itens usados no arquivo Body section
do RPM SPEC estão listados na tabela abaixo.
Diretriz SPEC | Definição |
---|---|
| Uma descrição completa do software embalado no RPM. Esta descrição pode abranger várias linhas e pode ser dividida em parágrafos. |
|
Comando ou série de comandos para preparar o software a ser construído, por exemplo, desempacotar o arquivo em |
| Comando ou série de comandos para construir o software em código de máquina (para idiomas compilados) ou código de byte (para alguns idiomas interpretados). |
|
Comando ou série de comandos para copiar os artefatos de construção desejados do diretório |
| Comando ou série de comandos para testar o software. Isto normalmente inclui coisas tais como testes unitários. |
| A lista de arquivos que serão instalados no sistema do usuário final. |
|
Um registro das mudanças que aconteceram com o pacote entre as diferentes construções do |
3.1.4.3. Itens avançados
O arquivo SPEC também pode conter itens avançados, tais como Scriptlets ou Triggers. Eles têm efeito em diferentes pontos durante o processo de instalação no sistema do usuário final, não no processo de construção.
3.1.5. BuildRoots
No contexto da embalagem RPM, buildroot
é um ambiente chroot. Isto significa que os artefatos de construção são colocados aqui usando a mesma hierarquia do sistema de arquivos que a hierarquia futura no sistema do usuário final, com buildroot
atuando como diretório raiz. A colocação dos artefatos de construção deve estar de acordo com o padrão de hierarquia do sistema de arquivos do sistema do usuário final.
Os arquivos em buildroot
são posteriormente colocados em um arquivo cpio
, que se torna a parte principal do RPM. Quando o RPM é instalado no sistema do usuário final, estes arquivos são extraídos no diretório root
, preservando a hierarquia correta.
A partir do Red Hat Enterprise Linux 6, o programa rpmbuild
tem seus próprios padrões. Substituir estes padrões leva a vários problemas; portanto, a Red Hat não recomenda que você defina seu próprio valor desta macro. Você pode usar a macro %{buildroot}
com os defaults do diretório rpmbuild
.
3.1.6. Macros RPM
Uma macro rpm é uma substituição de texto reto que pode ser atribuída condicionalmente com base na avaliação opcional de uma declaração quando determinada funcionalidade embutida é utilizada. Portanto, o RPM pode realizar substituições de texto para você.
Um exemplo de uso é a referência ao software embalado Version várias vezes em um arquivo SPEC. Você define Version apenas uma vez na macro %{version}
, e usa esta macro em todo o arquivo SPEC. Cada ocorrência será automaticamente substituída por Version que você definiu anteriormente.
Se você vir uma macro não familiar, você pode avaliá-la com o seguinte comando:
$ rpm --eval %{_MACRO}
Avaliando as macros %{_bindir} e %{_libexecdir}
$ rpm --eval %{_bindir} /usr/bin $ rpm --eval %{_libexecdir} /usr/libexec
Uma das macros mais usadas é a macro %{?dist}
, que sinaliza qual distribuição é usada para a construção (etiqueta de distribuição).
# On a RHEL 8.x machine $ rpm --eval %{?dist} .el8