O Gerenciador de Pacotes Red Hat (RPM)
Autor: Dayce Silva | Publicado: 2011-07-11T23:56:00-03:00

O Gerenciador de Pacotes Red Hat (RPM) é um sistema que pode ser executado
tanto no Conectiva Linux quanto em qualquer outro sistema Unix e é um produto distribuído
sob os termos da licença GPL.

Para usuários finais, o RPM disponibiliza uma série de implementações que facilitam
a manutenção do sistema. Instalar, desinstalar ou atualizar um programa que esteja no
formato de um pacote RPM pode ser feito através de um único comando, sendo que o
gerenciador cuidará de todos os detalhes necessários ao processo.

Para desenvolvedores, o RPM permite manter fontes e binários e suas atualizações
separadamente, empacotando-os de forma configurável para os usuários finais.

O gerenciador mantém uma base de dados com os pacotes instalados e seus
arquivos, o que permite executar pesquisas complexas e verificações de maneira ágil e
segura. Durante atualizações de programas, por exemplo, o RPM administra, por exemplo,
arquivos de configuração, mantendo as configurações já realizadas no sistema, uma tarefa
impossível por exemplo para programas em formato tar.gz.

7.1 Objetivos do RPM
7.1.1 Atualização de Softwares
Com o gerenciador de pacotes é possível atualizar componentes individuais do
sistema, sem a necessidade de reinstalação total. Ao se ter uma nova versão de um
determinado pacote baseado em RPM, a atualização se dá de maneira rápida, inteligente e
totalmente automatizada. Os arquivos de configuração são mantidos durante o processo,
não se perdendo assim uma personalização já efetuada.

7.1.2 Pesquisas
O RPM foi projetado, ainda, para atender a pesquisas sobre os pacotes já instaladose seus arquivos. É possível pesquisar a que pacote pertence determinado arquivo e qual a
sua origem. Os arquivos RPM estão em formato compactado e com um cabeçalho padrão
contendo informações úteis sobre os pacotes e seus conteúdos.

1.1.1 Verificação do Sistema
Outra ferramenta poderosa é a verificação de pacotes. Caso algum arquivo importante
de algum pacote tenha sido removido, pode-se inicialmente verificar se o pacote apresenta
alguma anormalidade. Caso detectada é possível reinstalar o pacote, preservando-se as
configurações e personalizações existentes.

1.1.2 Códigos Básicos
Um dos principais objetivos do RPM é possibilitar a distribuição dos fontes originais,
idênticos aos distribuídos pelos autores dos programas e as alterações separadamente.
Com o gerenciador de pacotes é possível ter os fontes e as atualizações que foram
aplicadas. Assim torna-se possível comparar as alterações efetuadas nos programas a cada
nova versão que seja disponibilizada.


7.2 Instalação
Pacotes RPM têm nomes de arquivos com o seguinte formato: foo-1.0-1.i386.rpm,
que incluem o nome do pacote (foo), versão (1.0), release (1) e plataforma (i386) e o sufixo
rpm indicando tratar-se de um pacote RPM. A instalação de um programa é feita através de
uma única linha de comando, como por exemplo:

# rpm –ivh foo-1.0-1.i386.rpm

Como se pode observar, o RPM apresenta o nome do pacote (o qual não tem
necessariamente o mesmo nome do programa) e apresenta uma sucessão de caracteres #
atuando como uma régua de progresso do processo de instalação.

O processo de instalação foi desenvolvido para ser o mais simples possível, porém
eventualmente alguns erros podem ocorrer, dentre estes:

7.2.1 Pacotes já Instalados
Se o pacote já tiver sido instalado anteriormente será apresentada a seguinte
mensagem:

# rpm –ivh foo-1.0-1.i386.rpm
foo packaged foo-1.0-1.i386.rpm is already installed
error: foo-1.0-1.i386.rpm cannot be installed


Caso se deseje instalar o pacote de qualquer forma, pode-se usar o parâmetro
-replacekgs na linha de comando, fazendo com que RPM ignore o erro.

7.2.2 Arquivos Com Conflitos
Ao se tentar instalar um pacote que contém um arquivo já instalado por outro pacote,
será apresentada a seguinte mensagem:

# rpm –ivh foo-1.0-1.i386.rpm
foo /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed


Caso se deseje ignorar o erro, pode-se usar o parâmetro -replacefiles na linha de
comando.

7.2.3 Dependências Não Resolvidas
Pacotes RPM podem depender da instalação prévia de outros pacotes, o que significa
que eles necessitam daqueles para poderem ser executados adequadamente. Caso se
deseje instalar um pacote que dependa de outro não localizado será apresentada a seguinte
mensagem:

# rpm –ivh foo-1.0-1.i386.rpm
failed dependencies:
foo is needed by bar-1.0-1



Para corrigir esse erro será necessário instalar o pacote solicitado. Caso se deseje
que a instalação ocorra de qualquer forma, pode-se utilizar o parâmetro -nodeps na linha de
comando. Porém, provavelmente o pacote não funcionará ou o fará de forma incorreta.

7.3 Desinstalação
Para desinstalar um pacote utilize o comando:

# rpm -e foo

Onde foo é o nome do pacote e não do arquivo utilizado na instalação (por exemplo
foo-1.0-1.i386.rpm).

Pode ser encontrado um erro de dependência durante o processo de desinstalação
de um pacote (outro pacote necessita da sua existência para poder funcionar corretamente).
Neste caso será apresentada a seguinte mensagem:

Para ignorar a mensagem de erro e desinstalar o pacote deve ser utilizado o
parâmetro -nodeps na linha de comando.

1.2 Atualização
Para atualizar um pacote utilize o comando:

$ rpm -Uvh foo-1.0-1.i386.rpm
foo ################################


O RPM desinstalará qualquer versão anterior do pacote e fará a nova instalação
preservando as configurações. Sugerimos utilizar sempre a opção -U, uma vez que ela
funciona perfeitamente, mesmo quando não há uma versão anterior do pacote.

Uma vez que o RPM executa um processo de atualização inteligente, é apresentada
uma mensagem do tipo: saving /etc/foo.conf as /etc/foo.conf.rpmsave o que significa que os
arquivos de configuração existentes estão salvos, porém mudanças no programa podem
tornar esse arquivo de configuração não mais compatível com o pacote (o que não é
comum). Neste caso as adequações necessárias devem ser feitas pelo usuário.

Como o processo de atualização é uma combinação dos processos de desinstalação
e instalação, algumas mensagens de erros podem surgir, como por exemplo, ao se tentar
atualizar um pacote com uma versão anterior à versão corrente, será apresentada a seguinte
mensagem:

$ rpm -Uvh foo-1.0-1.i386.rpm
foo package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed


Para forçar uma atualização, deve-se usar o parâmetro --oldpackage na linha de
comando.

7.4 Consultas
A consulta à base de dados de pacotes instalados é feita através do comando rpm -q.
Com a sua utilização são apresentados o nome do pacote, versão e release. Como exemplo
temos:


$ rpm -q foo
rpm-2.0-1


Ao invés de especificar o nome do pacote, pode-se utilizar as seguintes opções após

o parâmetro q:
· -a - consulta todos os pacotes instalados.
· -f &lt;arquivo&gt; - consulta o pacote que contém &lt;arquivo&gt;.
· -F -funciona como o parâmetro -f, exceto que funciona a partir de stdin11.1, como
por exemplo find /usr/bin | rpm -qF.
· -p &lt;arquivo do pacote&gt; - consulta o pacote originado pelo &lt;arquivo do pacote&gt;.
· -P -funciona como o parâmetro -p, exceto a partir da entrada padrão, como por

exemplo find /mnt/cdrom/RedHat/RPMS | rpm -qP.

Há diversas formas de especificar que informações devem ser apresentadas pelas
consultas. As opções de seleção são:

•
-i -apresenta as informações do pacote, tais como nome, descrição, release,

tamanho, data de criação, data de instalação, vendedor e outras.
· -l - apresenta a lista de arquivos relacionadas com o pacote.
· -s -apresenta o status dos arquivos do pacote. Há dois estados possíveis: normal

ou missing11.2.
· -d -apresenta uma lista dos arquivos de documentação (páginas de manual,
páginas info, README, etc.).

•
-c -apresenta uma lista dos arquivos de configuração. Estes arquivos podem ser
alterados após a instalação para personalização. Exemplos sendmail.cf, passwd,
inittab, etc..

Para as opções que apresentam listas de arquivos podem ser adicionados os
parâmetros -v para obter a lista no formato do comando ls -l.

7.5 Verificando
A verificação de um pacote provoca a comparação dos arquivos instalados de um
pacote com as informações localizadas nas bases de dados do RPM. Entre outras coisas a
verificação compara o tamanho, MD5 sum, permissões, tipo, dono e grupo de cada arquivo.

Para verificar um pacote deve-se utilizar o comando:

$ rpm -V &lt;nome do pacote&gt;

Pode-se usar as mesmas opções disponíveis no processo de pesquisas.
Exemplos:


•
Para verificar um pacote que contenha um arquivo em especial:
$ rpm -Vf /bin/vi

•
Para verificar todos os pacotes instalados:
$ rpm -Va

•
Para verificar um pacote instalado e o arquivo de pacote RPM:

$ rpm -Vp foo-1.0-1.i386.rpm

Esta função pode ser útil caso haja alguma suspeita de que a base de dados RPM
esteja corrompida.

Se não houver nenhuma discrepância não haverá resposta do sistema, caso contrário
será apresentada na forma de um string com 8 caracteres, com um c significando arquivo de
configuração e após o nome do arquivo. Cada um dos 8 caracteres significa um dos
atributos do arquivo comparado com aqueles definidos no pacote RPM, onde um ponto
significa que o atributo está ok. Os atributos são mostrados na tabela abaixo.

Código Significado
5 MD5 checksum
S Tamanho do arquivo
L Link simbólico
T Modificação do arquivo
D Device
U Usuário
G Grupo
M Modo (inclui permissões e tipo de arquivo)

Caso algum código seja apresentado, é necessário avaliar a necessidade de remoção
do pacote, ou de sua reinstalação (o mais provável) ou ainda buscar resolver o problema de
outra forma (buscar uma versão atualizada na Internet, por exemplo).

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;&lt;!--Converted with
LaTeX2HTML 98.2 beta3 (July 4th, 1998)

original version by: Nikos Drakos, CBLU, University of Leeds

* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others --&gt;&lt;script
language="JAVASCRIPT"&gt;&lt;!-if
(navigator.onLine){

7.6 Uma Agradável Surpresa
O RPM é extremamente útil no gerenciamento, diagnóstico e resolução de problemas
no sistema. Vejamos alguns exemplos:

•
Digamos que alguns arquivos foram apagados acidentalmente, mas não se tem
certeza de quais arquivos o foram. Pode-se então informar:
$ rpm -Va

Se alguns arquivos não forem localizados ou aparentem estar corrompidos, pode-se
reinstalar o pacote imediatamente.

•
Caso um arquivo não reconhecido seja detectado. Para saber a qual pacote ele
pertence, basta digitar:
$ rpm -qf /usr/X11R6/bin/xjewel


A saída será algo similar a:

xjewel-1.6-1

•
Pode-se combinar os dois exemplos acima no seguinte cenário. Digamos que alguns
problemas estão ocorrendo com o comando /usr/bin/paste. Inicialmente pode-se
verificar a qual pacote o arquivo pertence e se ele está íntegro, executando-se o
comando:
$ rpm -Vf /usr/bin/paste

•
Caso se esteja utilizando um programa, do qual se queira encontrar a documentação
disponível no pacote, pode-se usar o comando (neste caso para o utilitário ispell):
$ rpm -qdf /usr/bin/ispell

A saída será:

/usr/doc/ispell-3.1.20/README
/usr/info/ispell.info.gz
/usr/man/man1/buildhash.1
/usr/man/man1/findaffix.1
/usr/man/man1/ispell.1
/usr/man/man1/munchlist.1
/usr/man/man1/sq.1
/usr/man/man1/tryaffix.1
/usr/man/man1/unsq.1
/usr/man/man4/ispell.4


•
Ao localizar um arquivo RPM e se queira maiores informações sobre o pacote, basta
informar (neste caso o arquivo koules):
$ rpm -qip koules-1.2-2.i386.rpm

A saída será similar à apresentada na tabela abaixo.

Name: koules Distribution: Conectiva Linux
Version: 1.2 Vendedor: Conectiva Internet Solutions
Release: 2 Build Date: Mon Sep 02 11:59:12 1996Install date: (none) Build Host: daisy.conectiva.com.brGroup: Games Source RPM: koules-1.2-2.src.rpmSize: 614939
Summary: SVGAlib jogo de ação vários jogadores, rede, somDescription: Este programa de estilo arcade, é ótimo na sua
concepção e excelente na sua execução. Sem tiros, sangue ou
violência, trata-se de um jogo simples onde os jogadores devem
desenvolver suas habilidades para executá-lo.

· Para saber quais arquivos o pacote RPM koules instala, deve-se informar:
$ rpm -qlp koules-1.2-2.i386.rpm

A saída será:

/usr/man/man6/koules.6
/usr/lib/games/kouleslib/start.raw
/usr/lib/games/kouleslib/end.raw
/usr/lib/games/kouleslib/destroy2.raw
/usr/lib/games/kouleslib/destroy1.raw
/usr/lib/games/kouleslib/creator2.raw
/usr/lib/games/kouleslib/creator1.raw
/usr/lib/games/kouleslib/colize.raw
/usr/lib/games/kouleslib
/usr/games/koules