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
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 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 bin
Copy 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