sexta-feira, 28 de agosto de 2009

Dica Linux - Extraindo arquivos de um pacote RPM

Num dia desses, eu estava tentando compilar um programa, que reclamava a falta de uma biblioteca ou, particularmente, de um arquivo em especial. Descobri que este arquivo estava contido em um pacote RPM.

Todavia, para instalar este pacote eu teria que instalar dezenas de outros apenas para satisfazer as dependências do pacote com a biblioteca requerida. A pergunta surgiu: como pegar deste pacote apenas o arquivo que eu quero? A solução:

$ rpm2cpio | cpio -idmv arquivo.rpm

que "descompacta" o arquivo RPM.

Este processo é feito em duas etapas:

1ª) o comando rpm2cpio converte o pacote RPM para um arquivo CPIO (maiores informações sobre este formato de arquivo pode ser encontrado em http://en.wikipedia.org/wiki/Cpio, em inglês).

2ª) o arquivo CPIO gerado pelo comando rpm2cpio é passado (através do pipe, |) ao comando cpio, que, por sua vez, extrai os arquivos contidos no pacote. As opções passadas ao comando cpio dizem a ele para que extraia os arquivos do arquivo CPIO (-i), que crie os diretórios existentes no arquivo CPIO (-d), que mantenha a data original de modificação dos arquivos (-m) e que mostre o progresso da extração (-v).

Use as páginas manuais desses comandos para maiores informações.

Este exemplo descompacta todo os arquivos, mas o processo pode ser um pouco mais refinado, solicitando, por exemplo, a extração apenas do arquivo que se quer. Para ver se o pacote RPM possui o arquivo desejado, liste o seu conteúdo com

$ rpm2cpio arquivo.rpm | cpio -t

Se o pacote RPM possuir o arquivo desejado, extraia-o diretamente com

$ rpm2cpio arquivo.rpm | cpio -idv arquivo

sendo arquivo o nome do arquivo que se quer extrair, exatamente como ele aparece na listagem gerada com o comando cpio -t.

Não esqueça que o cpio com a opção -d cria os diretórios onde o arquivo seria instalado, no diretório local. Digamos que o arquivo seria instalado em /usr/lib. Depois de extraí-lo, ele estará disponível em usr/lib/, no diretório onde foi executado o comando anterior.

Até mais.

OBS.: a parte final desta dica, que refere-se a extração individual de arquivos, foi retirada de http://www.rpm.org/max-rpm/s1-rpm-miscellania-rpm2cpio.html, que está em inglês.

Nenhum comentário:

Postar um comentário