Como modificar um pacote de rpm usando rpmrebuild
- 4002
- 1034
- Arnold Murray
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
- « Instalar anel, uma alternativa de VoIP do VoIP
- Como criar um VPN Killswitch usando iptables no Linux »