Como modificar um pacote de rpm usando rpmrebuild

Como modificar um pacote de rpm usando rpmrebuild

Introdução

RPM é um dos gerenciadores de pacotes GNU/Linux mais avançados. Criado por Red Hat, é usado em muitas distribuições, como por exemplo fedora e derivados como Rhel e CentOS.

Pacotes a serem instalados com este gerenciador de pacotes têm o .RPM Extensão e são basicamente arquivos que contêm os arquivos fornecidos por uma biblioteca ou um aplicativo mais informações necessárias para que o pacote seja instalado e executado corretamente, como suas dependências. Neste tutorial, aprenderemos a usar rpmrebuild, Uma ferramenta muito poderosa que vamos modificar um pacote de RPM existente sem ter que reconstruí -lo do código -fonte.

Corrigindo uma dependência ausente no exemplo do pacote Atom

Para o bem deste tutorial, corrigiremos um bug real, afetando o oficial Átomo Pacote RPM do editor. Atom depende Gconf2, No entanto, este pacote é omitido na lista de dependências incluídas espec arquivo.

Você não pode notar isso se instalar o Atom em uma instalação padrão da estação de trabalho do Fedora, pois o Gconf2 O pacote já está instalado no sistema (provavelmente algum outro pacote exige como uma dependência).

No entanto, ao instalar o Atom em um ambiente mínimo, o problema surgirá: o pacote será instalado sem problemas, mas ao tentar iniciar o editor, o seguinte erro será exibido:

/usr/share/atom/atom: erro ao carregar bibliotecas compartilhadas: libgconf-2.então.4: Não é possível abrir o arquivo de objeto compartilhado: nenhum arquivo ou diretório

O libgconf-2.então.4 Objeto compartilhado é fornecido pelo Gconf2 Pacote, pois podemos verificar facilmente a emissão do seguinte comando Linux:

$ dnf what fornece libgconf-2.então.4 GCONF2-3.2.6-20.FC28.I686: um sistema de configuração transparente de processo repo: fedora correspondente de: fornece: libgconf-2.então.4 

Vamos corrigir esse bug adicionando a dependência ausente no arquivo de especificações.



Etapa 1 - Instalação RPMrebuild

A primeira coisa que precisamos fazer é instalar o rpmrebuild Pacote, disponível nos repositórios do Fedora padrão. O comando pode variar dependendo se o usuário estiver no roda grupo, e, portanto, pode usar o comando sudo, ou se queremos executar o comando alternando para o usuário root, usando su. Vou assumir o primeiro caso aqui:

$ sudo dnf install rpmrebuild

Deixe o DNF fazer seu trabalho e em breve o pacote será instalado em nosso sistema. Neste ponto, precisamos recuperar o pacote Atom no site oficial do projeto. Vamos usá -lo como base para construir nosso RPM personalizado.

Etapa 2 - Modificação de arquivo de especificações

O espec O arquivo de um pacote de RPM contém informações vitais sobre o próprio pacote, como suas dependências e os arquivos que ele fornece: é esse arquivo que precisamos modificar para corrigir esse pequeno bug. Supondo que estamos no diretório em que baixamos o pacote Atom, podemos emitir o seguinte comando linux:

$ rpmrebuild -enp átomo.x86_64.RPM

Invocamos o rpmrebuild comando fornecendo três opções: -e, -n e -p. Vamos ver brevemente o que eles são. A primeira opção, -e é a versão curta de --Editar-specfile E é necessário dizer ao programa que queremos editar o especfile do pacote; o segundo, -n, versão curta de --Notest-Install modifica o comportamento do programa para que o RPM gerado não seja instalado automaticamente no final do processo de construção.

Finalmente, usando o -p ou --pacote opção, especificamos que queremos usar um real .RPM arquivo de pacote como base de nossa reconstrução, em vez de usar um RPM já instalado.

Depois de executar o comando acima, o arquivo de especificações será aberto em uma instância do nosso editor de texto padrão. No nosso caso, o que queremos fazer é adicionar um Requer Cláusula, para incluir a dependência ausente:

Requer: LSB-Core-noarch Requer: GCONF2 # Aqui está a nossa dependência extra exige: libxsss.então.1 () (64 bits) requer: LibSecret-1.então.0 () (64 bits) 

Além disso, podemos modificar a versão do pacote, a fim de distinguir nossa versão modificada do oficial. É muito simples: tudo o que precisamos fazer é modificar a linha:



Liberação: 0.1

Em algo como:

Liberação: 0.1_custom

Quando terminarmos, salvamos e fechamos o arquivo: um prompt será exibido em nosso terminal, perguntando se queremos prosseguir e construir o pacote modificado:

Você quer continuar ? (S/N)

Se dermos uma resposta afirmativa e pressione Enter, o edifício começará (pode demorar um pouco para terminar). É importante notar que o RPM especificado não será modificado no lugar, mas um novo, com base nele será gerado. No final do processo, o novo RPM estará localizado no $ Home/rpmbuild/rpms/x86_64/ diretório:

$ ls $ home/rpmbuild/rpms/x86_64/atom-1.27.0-0.1_custom.x86_64.RPM 

Para verificar se a dependência foi adicionada corretamente, podemos usar o RPM e consultar as novas dependências do pacote:

$ rpm -qrp $ home/rpmbuild/rpms/x86_64/atom -1.27.0-0.1_custom.x86_64.RPM GCONF2 LIBXSS.então.1 () (64 bits) LibSecret-1.então.0 () (64 bits) LSB-Core-noarch rpmlib (compactedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadIsXz) <= 5.2-1 

Gconf2 agora está incluído na lista das dependências do pacote. Isso fica evidente quando tentamos instalar o pacote: como sempre, um resumo das operações a serem executadas será exibido ao instalar o pacote com DNF:



[…] ================================================= ================================== Tamanho do repositório da versão do arco do pacote ============ =================================================== ================== Instalando: Atom x86_64 1.27.0-0.1_custom @Commandline 99 M Instalando dependências: gconf2 x86_64 3.2.6-20.FC28 Fedora 1.0 m em x86_64 3.1.20-10.fc28 fedora 80 k cronie x86_64 1.5.1-9.fc28 fedora 105 k cronie-anacron x86_64 1.5.1-9.fc28 fedora 40 k crontabs noarch 1.11-16.20150630Git.fc28 fedora 24 k ed x86_64 1.14.2-2.fc28 fedora 80 k Esmtp x86_64 1.2-10.fc28 fedora 57 k libxscrnsaver x86_64 1.2.2-14.fc28 fedora 29 k libesmtp x86_64 1.0.6-14.FC28 Fedora 67 K LiblockFile X86_64 1.14-1.fc28 fedora 30 k m4 x86_64 1.4.18-6.FC28 Fedora 221 K Mailx x86_64 12.5-28.FC28 Atualizações 256 K NCURSES-COMPAT LIBS X86_64 6.1-4.20180224.fc28 fedora 331 k redhat-lsb-core x86_64 4.1-44.fc28 fedora 44 k redhat-lsb-submod-security x86_64 4.1-44.fc28 fedora 21 k spax x86_64 1.5.3-12.FC28 Fedora 216 K Tempo x86_64 1.9-1.fc28 fedora 53 k util-linux-user x86_64 2.32-2.FC28 Fedora 94 K Resumo da transação ================================================== ==================================== Instalar 19 pacotes […] 

O pacote agora será executado corretamente, pois todas as suas dependências de tempo de execução estão corretamente satisfeitas.

Pensamentos finais

Neste tutorial, vimos como modificar um espec arquivo de um pacote sem ter que reconstruí -lo do código -fonte usando o rpmrebuild ferramenta. Corrigimos um pequeno bug, que consiste em uma dependência ausente no pacote de RPM oficial do Atom.

Baixamos e usamos o pacote oficial Atom como base de nossa reconstrução, no entanto, com a mesma ferramenta, é possível trabalhar e modificar arquivos que fazem parte de um RPM já instalado, a fim de gerar uma nova construção que incluirá as modificações. Rpmrebuild é uma ferramenta muito útil e poderosa; A sugestão, como sempre, é mergulhar em seu MANPAGE para dominar o desbloqueio de todo o seu potencial.

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para instalar no Ubuntu 20.04
  • Mastering Bash Script Loops
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Como reconstruir um pacote usando o sistema de construção do arco Linux
  • Loops aninhados em scripts de basquete
  • Como consultar informações de pacotes com o pacote RPM…
  • Como atualizar o CentOS
  • Como migrar de CentOS para Almalinux
  • Download do Linux