Como construir um pacote RPM a partir dos arquivos instalados?

7

Existem duas máquinas, versão / arco idêntico do SLES.

Na máquina #A existe um software "foo" instalado que podemos ver usando rpm -qa .

Na máquina #B, o software "foo" precisa ser instalado.

O foo.rpm não está disponível em nenhuma fonte, na Internet, etc.

Pergunta

Como o pacote foo.rpm foi instalado na máquina #A, podemos criar um arquivo foo.rpm a partir dos arquivos já instalados?

Também existem scripts pré / pós no rpm, eu acho. Então, o foo.rpm ( com dependências? ) pode ser instalado.

    
por evachristine 04.07.2014 / 17:07

2 respostas

11

É possível, mas muito difícil fazer isso para que seja feito corretamente. Se você está desesperado, pode criar um novo arquivo RPM .spec e construir um arquivo de RPM (SRPM) de origem "falso", que pode ser usado para construir um arquivo RPM resultante usando rpmbuild --rebuild .

Eu continuaria procurando pelo RPM real. Você não diz qual na sua pergunta, mas tem sido minha experiência que você pode encontrar qualquer coisa na internet, se você souber como procurá-la. Eu encontrei versões antigas de RPMs para distribuições Red Hat que não estão em uso há mais de 10 anos, então eu acho difícil acreditar que não haja nenhum resto desse RPM em lugar algum.

Além disso, muitas vezes você pode voltar para a origem do aplicativo contido no RPM e usá-lo para reconstruir o RPM também. Muitas vezes, os aplicativos de origem incluem um arquivo .spec necessário, usado para reconstruir o RPM.

Por fim, você pode obter a origem e o arquivo .spec de um serviço de construção, como o Koji, para distribuições baseadas no Red Hat. O SuSE também mantém serviços de criação semelhantes, para que você possa pesquisar por meio deles para obter artefatos de construção antigos.

Tomando os binários como estão

Você pode usar esse método para levantar os executáveis reais de um sistema e distribuí-los para implantação em outro sistema.

máquina A

$ rpm -ql <packageNameHere> | xargs tar -zcvf /tmp/program.tgz

máquina B

$ tar -zxvf /path/to/your/program.tgz

Versão do SLES do RPM

De acordo com um dos posts deste tópico: Re : Como criar pacotes RPM instalados pelo RPM rpm no SLES é suposto ter a opção --repackage . Isto não existe na versão Red Hat (no Fedora ou no CentOS). Mas de acordo com o post você pode usar assim:

$ rpm -e --repackage <somepackage>

Depois disso, você encontrará seu RPM acessível aqui:

/var/spool/repackage

Usando o rpmerizor

O

Rpmerizor é uma ferramenta / script de terceiros que você pode instalar e re-empacotar os arquivos fonte em um RPM correspondente. O uso deste script está acessível aqui, intitulado: página do manual do rpmerizor .

trecho

Rpmerizor is a script that allows you to create an RPM package from installed files. You simply have to specify files on the command line and answering a few interactive questions to fill rpm meta-data (package name, version ...). You can also use it in batch mode with command line options for meta-data.

Usando o rpmrebuild

Não confunda com a ferramenta de compilação rpmbuild , rpmrebuild é outro script de terceiros que você pode usar para fazer uma re-embalagem de um RPM já instalado.

trecho

rpmrebuild is a tool to build an RPM file from a package that has already been installed in a basic use, rpmrebuild use does not require any rpm building knowledge. (On debian, the equivalent product is dpkg-repack).

Exemplo

Digamos que queremos reempacotar o openssh-server.

$ rpm -aq | grep openssh-server
openssh-server-6.2p2-8.fc19.x86_64

Agora empacote:

$ rpmrebuild openssh-server-6.2p2-8.fc19.x86_64
/usr/lib/rpmrebuild/rpmrebuild.sh: WARNING: some files have been modified:
..?......  c /etc/ssh/sshd_config
..?......  c /etc/sysconfig/sshd
Do you want to continue ? (y/N) y
Do you want to change release number ? (y/N) n
result: /root/rpmbuild/RPMS/x86_64/openssh-server-6.2p2-8.fc19.x86_64.rpm

Referências

por 04.07.2014 / 17:20
0

Como regra geral, não.

Com um pouco de sorte, rpm -qi e rpm -q --changelog fornecem informações sobre a origem do pacote.

Se ele foi criado no sistema em execução, você ainda pode ter o arquivo de especificação usado para fazer o rpm real, se não ambos.

Como regra geral, eu não recomendo copiar arquivos / binários, mas a maioria das informações meta está no banco de dados RPM e você tem os arquivos reais.

rpm -q --list <pkg_name> mostra todos os arquivos implantados por um pacote.

rpm -q --scripts <pkg_name> para mostrar quaisquer scripts que sejam executados instalando (ou removendo) o pacote pode fornecer pelo menos o máximo de informações sobre sua finalidade que os arquivos que são implementados.

E todas as dependências que precisam ser instaladas podem ser encontradas com rpm -q --requires <pkg_name> .

    
por 04.07.2014 / 17:46

Tags