Como descompactar, modificar, reconstruir e instalar um SRPM

9

Gostaria de modificar um pacote do Fedora 15 ( gnome-shell-extensions-alternative-status-menu). É uma pequena modificação (revertendo esse commit ). Usando yumdownloadereu sou capaz de baixar um SRPM ( gnome-shell-extensions-3.0.2-1.g63dd27cgit.fc15.src.rpm).

Depois disso, como faço para descompactar e depois reconstruí-lo?

Vitor Py
fonte
Você deve alterar sua edição recente para ser um comentário na resposta do @ mdpc ou adicionar uma resposta própria com as etapas que o ajudaram a resolver o problema. Mantenha os dados da resposta fora da própria pergunta, por favor.
Caleb
@Caleb Done! (Mais 3 para ir ...)
Vitor Py

Respostas:

7

O que eu faço, como usuário ROOT:

  1. Instale o SRPM como faria com qualquer outro pacote ( rpm --install [source-rpm-filename])

  2. Examine o /root/rpmbuild/SPECSdiretório e encontre o arquivo de especificações que corresponde ao seu pacote

  3. rpmbuild -bb /root/rpmbuild/SPECS/[found-filename]

Os pacotes binários resultantes são então localizados no /root/rpmbuild/RPMS/diretório que está pronto para ser instalado através do rpm --installcomando padrão .

NOTA: Isso apenas cria o que está no pacote binário padrão. Estou postando isso respondendo à pergunta específica, não como fazer alterações na fonte e gerar novos pacotes.

Para fazer as modificações, você pode fornecer correções como entrada e alterar o arquivo SPECS .... ou substituir o padrão *.tar.bz2localizado /root/rpmbuild/SOURCESpor você mesmo com a alteração e, em seguida, fazer a construção conforme descrito acima.

Cuidado, talvez seja necessário alterar o pacote SPECS para fazê-lo funcionar (geralmente removendo o patch e alterando alguns nomes de arquivos programados pelo arquivo SPECS).


EDITAR

Parece que construir rpms como root é uma prática ruim ( fonte ). Funciona bem como um usuário não root.

Instruções passo a passo para adicionar um patch ( daqui ):

  1. Copie seu patch para rpmbuild/SOURCES.
  2. Edite o rpmbuild/SPECS/package.spece adicione um Patch0: mypatch.patchlogo após a Source0: ...linha.
  3. Após a %setup ...linha, adicione uma %patch0 -p1linha

Agora ele irá construir normalmente, ie. com:rpmbuild -ba SPECS/package.spec

mdpc
fonte
2
Você deve esclarecer que apenas a instalação é feita como raiz, não o rpmbuild. A criação de arquivos rpm nunca deve ser feita como raiz.
Caleb
@ Caleb eu instalei como não root os pacotes. O rpm coloca na hierarquia ~ / rpmbuild. Também fiz o que você sugeriu na pergunta e coloquei as etapas extras aqui.
Vitor Py
Apenas algumas notas: sudo dnf install rpmdevtoolsé necessário para o comando rpmbuild. E a %patch0 -p1linha deve ser omitida se o arquivo de especificação usar uma %autosetuplinha em vez de uma %setup(como %autosetupo patch se aplica automaticamente).
Nelson
Além disso, para instalar o novo RPM sobre o original (no caso o original já está instalado no sistema), façasudo rpm -ivh --force your.rpm
Nelson
4

OpenSSL Package Rebuild O CentOS 6.4 é um exemplo detalhado de uma reconstrução de pacote SRPM.

O exemplo acima usa Mock - o Jedi Light Saber dos construtores de pacotes.

O mock foi criado para preencher um chroot de maneira confiável e, em seguida, reconstruir um pacote nesse chroot.

Para mais, consulte http://fedoraproject.org/wiki/Projects/Mock

No exemplo, o mock é usado três vezes - uma vez para "descompactar" o pacote, depois para reconstruir o .src.rpm e, finalmente, para criar o .rpm.

neonzeon
fonte