Capítulo 3. Software de embalagem
3.1. Pacotes de RPM Copiar o linkLink copiado para a área de transferência!
Esta seção cobre os conceitos básicos do formato de embalagem RPM.
3.1.1. O que é um RPM Copiar o linkLink copiado para a área de transferência!
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
rpmutiliza 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 Copiar o linkLink copiado para a área de transferência!
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
# yum instalar rpmdevtools
Procedimento
Liste as utilidades da ferramenta de embalagem RPM:
rpm -ql rpmdevtools | grep bin
$ rpm -ql rpmdevtools | grep binCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 Copiar o linkLink copiado para a área de transferência!
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
# yum instalar rpmdevtools
Procedimento
-
Execute o utilitário
rpmdev-setuptree:
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 Copiar o linkLink copiado para a área de transferência!
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 Copiar o linkLink copiado para a área de transferência!
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
# 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 Copiar o linkLink copiado para a área de transferência!
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 Copiar o linkLink copiado para a área de transferência!
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 Copiar o linkLink copiado para a área de transferência!
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 Copiar o linkLink copiado para a área de transferência!
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}
$ rpm --eval %{_MACRO}
Avaliando as macros %{_bindir} e %{_libexecdir}
rpm --eval %{_bindir}
rpm --eval %{_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}
# On a RHEL 8.x machine
$ rpm --eval %{?dist}
.el8