Você está na página 1de 5

Devin » RPM – RPM Package Manager » Print http://www.devin.com.

br/rpm/print/

- Devin - http://www.devin.com.br -

RPM – RPM Package Manager


Posted By Hugo Cisneiros (Eitch) On 18 de setembro de 2008 @ 10:15 pm In Linux, Tutoriais | 2 Comments

Como lidar com os pacotes de programas que encontramos por aí na Internet, ou nos CDs das
distribuições Linux? Quais os processos para instalar, remover e atualizar programas que estão no formato
RPM? (Não, RPM neste caso não significa Rotação Por Minuto e nem a bandinha brasileira!)

O RPM Package Manager é uma poderosa ferramenta de gerenciamento de pacotes que pode ser
utilizada para construir, instalar, consultar, verificar, atualizar, ou apagar pacotes de programas. Um pacote
RPM nada mais é que um arquivo cpio com um cabeçalho adicional. Dentro do pacote podemos encontrar
os arquivos do programa e os meta-dados do pacote que contém scripts de ajuda, definições sobre os
atributos dos arquivos, informações descritivas, entre outros.

Os pacotes podem ser de dois tipos: binários e fontes. Os pacotes binários são chamados de RPMs e vêm
na forma pacote-versão.arquitetura.rpm. Os pacotes de fontes são chamados de Source RPMS (SRPMS)
e vêm na forma pacote-versão.src.rpm. É possível extrair o conteúdo de um pacote RPM para um diretório
sem precisar instalá-lo, utilizando o rpm2cpio:

$ mkdir -p ~/pacote-tmp
$ cd ~/pacote-tmp
$ rpm2cpio ~/download/exemplo-1.0.i386.rpm | cpio -ivd

O banco de dados do RPM está localizado por padrão no diretório /var/lib/rpm e o formato dos arquivos é
Berkeley DB (BDB). Quando não existem dados neste diretório, podemos inicializar um banco de dados
RPM com o parâmetro –initdb:

# rpm --initdb

Pode ser também que o banco de dados RPM possa estar corrompido. Geralmente quando isto acontece,
o comando rpm fica “parado” infinitamente quando é executado, como se estivesse esperando algo
acontecer. Caso isso aconteça, temos que reconstruir uma nova base a partir dos cabeçalhos dos pacotes
instalados.

Para reconstruir o banco de dados, primeiro apagamos todos os arquivos que começam com “__db.” e
utilizamos o parâmetro –rebuilddb para reconstruir:

# cd /var/lib/rpm
# rm -f __db.*
# rpm --rebuilddb

RPM: Instalação e desinstalação


Para instalar um pacote, usa-se a opção -i:

# rpm -i pacote.rpm

Podemos utilizar as opções -v e -h combinadas com a -i para uma mostragem mais agradável. Caso o
sistema já possuir o pacote instalado, mas desejamos atualizar para uma versão mais recente, utilizamos
a opção -U ao invés da -i. Exemplo:

# rpm -Uvh pacote-atualizacao.rpm

Isso irá atualizar o pacote. Para retirar o pacote do sistema, utilizamos a opção -e:

1 de 5 01-05-2011 11:30
Devin » RPM – RPM Package Manager » Print http://www.devin.com.br/rpm/print/

# rpm -e nome-do-pacote

Caso o pacote gere dependências com outros pacotes e mesmo assim é desejado querer removê-lo,
utilizamos a opção –force, que como o nome diz, força a remoção do pacote:

# rpm -e nome-do-pacote --force

Cuidado! Forçar a remoção de um pacote sem resolver as dependência pode causar problemas! Os
programas dependentes do pacote poderão não funcionar corretamente. Use apenas se você souber o
que estiver fazendo.

Agora o contrário: se for necessário instalar um pacote que necessita de outros pacotes como
dependência (mas infelizmente não temos essas dependências), utilizamos o parâmetro –nodeps:

# rpm -Uvh pacote.rpm --nodeps

Lembre-se que instalar pacotes sem suas dependências também não é uma boa prática. O programa
pode não funcionar.

RPM: Consulta
Além da instalação e desinstalação de pacotes, um recurso muito útil no RPM é a consulta aos pacotes já
existentes. Para utilizar o modo de consulta do RPM, todos os comandos irão começar com o parâmetro -q
(query, consulta em inglês).

Se quisermos ver apenas se um pacote está instalado no sistema sem ter que listar todos e procurar de
um em um, basta apenas colocar o nome do pacote depois do parâmetro de consulta. Exemplo:

$ rpm -q kdebase
kdebase-3.4.1-1.2.fc4.kde

Quando quisermos listar todos os pacotes instalados no sistema, utilizamos:

$ rpm -qa

Ou podemos, se preferir, utilizar outros comandos como filtro, organizando melhor a visualização:

$ rpm -qa | sort | less

O comando anterior executou o rpm -qa, ordenou por ordem alfabética e utilizou o comando less para
paginar a saída. Podemos também procurar por todos os pacotes que possuam a palavra kde no nome:

$ rpm -qa | grep kde


kdenetwork-3.4.1-1.2.fc4.kde
kdegraphics-3.4.1-1.3.fc4.kde
k3b-0.12.2-1.0.fc4.kde
amarok-1.2.4-6.1.fc4.kde
kdegames-3.4.1-1.2.fc4.kde
...corte...

Para obter informações detalhadas sobre sobre um pacote, utilizamos a opção -qi:

$ rpm -qi wget


Name : wget Relocations: (not relocatable)
Version : 1.9.1 Vendor: Red Hat, Inc.
Release : 22 Build Date: Wed 02 Mar 2005
Install Date: Thu 23 Jun 2005 12:05:03 PM BRT Build Host: porky.build.r
Group : Applications/Internet Source RPM: wget-1.9.1-22.src.rpm
Size : 1141398 License: GPL

2 de 5 01-05-2011 11:30
Devin » RPM – RPM Package Manager » Print http://www.devin.com.br/rpm/print/

Signature : DSA/SHA1, Fri 20 May 2005 03:28:44 PM BRT, KeyID b44269d04f2a6fd2


Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL : http://wget.sunsite.dk/
Summary : A utility for retrieving files using the HTTP or FTP protocols.
Description :

GNU Wget is a file retrieval utility which can use either the HTTP or
FTP protocols. Wget features include the ability to work in the
background while you are logged out, recursive retrieval of
directories, file name wildcard matching, remote file timestamp
storage and comparison, use of Rest with FTP servers and Range with
HTTP servers to retrieve files over slow or unstable connections,
support for Proxy servers, and configurability.

Na saída anterior podemos observar qual o pacote-fonte do wget, qual seu tamanho, quem empacotou,
sua licença, versão, quando foi instalado, além de um resumo e descrição do que é o pacote. Quem quer
conhecer mais sobre os programas dentro da distribuição pode utilizar o rpm -qa para listar todos os
pacotes e utilizar o rpm -qi para ver o que cada pacote faz. Haja paciência!

Lembra-se das dependências? Se quisermos ver quais pacotes dependem de um certo pacote, usamos:

$ rpm -qR pacote

Ou às vezes, nos deparamos com uma dúvida cruel: o que esse arquivo está fazendo aqui? Ele pertence a
quem? O que ele faz? Para solucionar estas dúvidas, podemos verificar qual o pacote dono de um arquivo
utilizando:

$ rpm -qf /etc/arquivo

Exemplo:

$ rpm -qf /usr/sbin/chroot


coreutils-5.2.1-48

Ou você pode fazer o contrário (o que é muito útil): listar todos os arquivos que pertencem a um pacote:

$ rpm -ql pacote

Exemplo:

$ rpm -ql sox


/usr/bin/play
/usr/bin/rec
/usr/bin/sox
/usr/bin/soxmix
/usr/bin/soxplay
/usr/share/doc/sox-12.17.7
/usr/share/doc/sox-12.17.7/Changelog
/usr/share/doc/sox-12.17.7/README
...corte...

Se quisermos saber unicamente quais são os arquivos de configuração de um pacote:

$ rpm -qc crontabs


/etc/crontab
/etc/sysconfig/crontab

Ou se quisermos saber apenas quais são os arquivos de documentação de um pacote:

3 de 5 01-05-2011 11:30
Devin » RPM – RPM Package Manager » Print http://www.devin.com.br/rpm/print/

$ rpm -qd wget


/usr/share/doc/wget-1.10.2/AUTHORS
/usr/share/doc/wget-1.10.2/COPYING
/usr/share/doc/wget-1.10.2/MAILING-LIST
/usr/share/doc/wget-1.10.2/NEWS
/usr/share/doc/wget-1.10.2/PATCHES
/usr/share/doc/wget-1.10.2/README
...corte...

RPM: Verificação
Uma vez que os pacotes estejam instalados no sistema, além das consultas, é possível fazer também
verificações nestes pacotes. Em um consulta, o rpm apenas pega informações sobre um pacote e mostra
ao usuário. Em uma verificação, o rpm compara essas informações do banco de dados com o estado atual
dos arquivos no sistema. Na verificação, se um arquivo estiver faltando ou tiver sido alterado, o rpm irá
avisá-lo sobre isto.

Este tipo de tarefa é muito boa para auditoria e para verificar se todos os pacotes e arquivos do sistema
estão instalados e funcionando corretamente.

Para fazer a verificação, utilizamos o parâmetro -V:

# rpm -V pacote

Caso tudo esteja em ordem, o rpm não mostrará nada. Se algum arquivo for modificado de alguma forma,
ele mostrará algumas letras de estado antes do arquivo. Exemplo:

# rpm -V httpd
S.5....T c /etc/httpd/conf.d/proxy_ajp.conf
missing c /etc/httpd/conf.d/welcome.conf
S.5....T c /etc/httpd/conf/httpd.conf

Os primeiros 8 caracteres indicam testes que o rpm fez. Quando um ponto (.) aparecer, o teste foi bem
sucedido. Se um sinal de interrogação (?) aparecer, significa que o teste não pode ser completado
(geralmente por causa de permissões do arquivo). Cada uma das 8 letras significa:

S O tamanho do arquivo não é igual ao original (conteúdo foi modificado).


M As permissões do arquivo foram alteradas.
5 A soma MD5 diferente do original (conteúdo foi modificado).
D Número Major/Minor do dispositivo não coinscide.
L Link simbólico inválido.
U Usuário dono diferente do original.
G Grupo dono diferente do original.
T A hora da última modificação diferente do original (conteúdo foi modificado).

Depois destes 8 caracteres, pode ser que haja uma letra antes do nome do arquivo, que indica qual a
função do arquivo no pacote. Por exemplo: c para arquivos de configuração, d para arquivos de
documentação e nada para arquivos normais.

Para fazer uma verificação completa em todos os pacotes instalados, usamos:

# rpm -Va

Para verificarmos apenas um arquivo, usamos:

4 de 5 01-05-2011 11:30
Devin » RPM – RPM Package Manager » Print http://www.devin.com.br/rpm/print/

# rpm -Vf /usr/bin/file

Article printed from Devin: http://www.devin.com.br

URL to article: http://www.devin.com.br/rpm/

5 de 5 01-05-2011 11:30

Você também pode gostar