16.2. Usando o RPM

O RPM tem cinco modos de operação básicos (sem contar a compilação de pacotes): instalar, desinstalar, atualizar, buscar e verificar. Esta seção contém uma visão geral de cada modo. Para ver os detalhes e opções completas, invoque rpm --help, ou vá para a Seção 16.5 para obter mais informações sobre o RPM.

16.2.1. Encontrando Pacotes RPM

Antes de usar um RPM, você deve saber onde encontrá-los. Uma busca na Internet retorna muitos repositórios de RPM, mas se você procura por pacotes RPM compilados pela Red Hat, estes podem ser encontrados nas seguintes localidades:

16.2.2. Instalando

Os pacotes RPM geralmente têm nomes de arquivos como foo-1.0-1.i386.rpm. O nome do arquivo inclui o nome do pacote (foo), versão (1.0), sub-versão (1) e arquitetura (i386). Instalar um pacote é tão simples quanto se autenticar como root e digitar o seguinte em uma janela de comandos:

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

Se a instalação for bem-sucedida, o seguinte output é apresentado:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [100%]

Como você pode observar, O RPM traz o nome do pacote e então uma sucessão de hífens como medida do progresso, conforme o pacote é instalado.

Iniciando com a versão 4.1 do RPM, a assinatura de um pacote é verificada automaticamente ao instalar ou atualizar um pacote. Se a verificação da assinatura falhar, é apresentada uma mensagem de erro parecida com a seguinte:

error: V3 DSA signature: BAD, key ID 0352860f

Se a assinatura é nova, somente com cabeçalho, aparece uma mensagem de erro parecida com a seguinte:

error: Header V3 DSA signature: BAD, key ID 0352860f

Se você não tem a chave apropriada instalada para verificar a assinatura, a mensagem contém a palavra NOKEY, tal como:

warning: V3 DSA signature: NOKEY, key ID 0352860f

Consulte a Seção 16.3 para mais informações sobre a verificação da assinatura de pacotes.

NotaNota
 

Se você está instalando um pacote do kernel, deve usar o comando rpm -ivh. Consulte o Capítulo 39 para mais detalhes.

A instalação de pacotes foi concebida para ser simples, mas você pode encontrar erros em algumas vezes.

16.2.2.1. Pacote Já Instalado

Se o pacote da mesma versão já está instalado, o seguinte é apresentado:

Preparing...                ########################################### [100%]
package foo-1.0-1 is already installed

Se você deseja instalar o pacote de qualquer maneira e a mesma versão já está instalada, você pode usar a opção --replacepkgs, que pede ao RPM para ignorar o erro:

rpm -ivh --replacepkgs foo-1.0-1.i386.rpm

Esta opção é útil se os arquivos instalados pelo RPM foram apagados ou se você deseja instalar os arquivos originais de configuração pelo RPM.

16.2.2.2. Arquivos Conflitantes

Se você tentar instalar um pacote que contém um arquivo que foi instalado por outro pacote ou por uma versão mais antiga do mesmo pacote, aparece o seguinte:

Preparing...                ########################################### [100%]
file /usr/bin/foo from install of foo-1.0-1 conflicts with file from package bar-2.0.20

Para fazer com que o RPM ignore este erro, use a opção --replacefiles:

rpm -ivh --replacefiles foo-1.0-1.i386.rpm

16.2.2.3. Dependência Não-resolvida

Os pacotes ROM podem "depender" de outros pacotes, o que significa que eles requerem a instalação de outros pacotes para rodarem apropriadamente. Se você tentar instalar um pacote que tem uma dependência não-resolvida, aparece um output similar ao seguinte:

Preparing...                ########################################### [100%]
error: Failed dependencies:
        bar.so.2 is needed by foo-1.0-1
    Suggested resolutions:
        bar-2.0.20-3.i386.rpm

Se você instalar um pacote pelos CDs do Red Hat Enterprise Linux, geralmente sugere-se que resolva a dependência do(s) pacote(s). Encontre este pacote nos CDs do Red Hat Enterprise Linux ou pelo site (ou espelho) FTP da Red Hat e adicione-o ao comando:

rpm -ivh foo-1.0-1.i386.rpm bar-2.0.20-3.i386.rpm

Se a instalação dos dois pacotes for bem-sucedida, aparece um output similar ao seguinte:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [ 50%]
   2:bar                    ########################################### [100%]

Se não sugere um pacote para resolver a dependência, você pode tentar a opção --redhatprovides para determinar qual pacote contém o arquivo necessário. Você precisa ter o pacote rpmdb-redhat instalado para usar estas opções.

rpm -q --redhatprovides bar.so.2

Se o pacote que contém o bar.so.2 está no banco de dados instalado pelo pacote rpmdb-redhat, o nome do pacote é apresentado:

bar-2.0.20-3.i386.rpm

Para forçar a instalação de qualquer maneira (uma má idéia já que o pacote provavelmente não rodará corretamente), use a opção --nodeps.

16.2.3. Desinstalando

Desinstalar um pacote é tão simples quanto instalar um. Digite o seguinte em uma janela de comandos:

rpm -e foo

NotaNota
 

Note que usamos o nome do pacote foo e não o nome do arquivo do pacote original foo-1.0-1.i386.rpm. Para desinstalar um pacote, substitua foo pelo nome verdadeiro do pacote original.

Você pode encontrar um erro de dependência ao desinstalar um pacote, caso um outro pacote instalado dependa daquele que tenta remover. Por exemplo:

Preparing...                ########################################### [100%]
error: removing these packages would break dependencies:
        foo is needed by  bar-2.0.20-3.i386.rpm

Para fazer com que o RPM ignore este erro e desinstale o pacote de qualquer maneira (o que também é uma má idéia já que o pacote que depende deste provavelmente não funcionará corretamente), use a opção --nodeps.

16.2.4. Atualizando (upgrade)

Atualizar um pacote é similar a instalar um. Digite o seguinte em uma janela de comandos:

rpm -Uvh foo-2.0-1.i386.rpm

O que você não vê acima é que o RPM automaticamente desinstalou todas as versões antigas do pacote foo. Se quiser, você pode sempre usar -U para instalar pacotes, já que funciona mesmo quando não há versões anteriores do pacote instalado.

Como o RPM executa a atualização inteligente de pacotes com arquivos de configuração, você talvez veja uma mensagem como esta:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

Esta mensagem significa que suas alterações ao arquivo de configuração talvez não sejam "compatíveis"com o novo arquivo de configuração no pacote, portanto o RPM salvou o arquivo original e instalou um novo. Você deve verificar as diferenças entre os dois arquivos de configuração e resolvê-las o quanto antes para garantir o bom funcionamento do seu sistema.

Na realidade, atualizar é uma combinação entre instalar e desinstalar, portanto, durante uma atualização do RPM, você pode encontrar erros de instalação e desinstalação, mais um. Se o RPM acha que você está tentando atualizar para um pacote com uma versão mais antiga, o ouput é similar ao seguinte:

package foo-2.0-1 (which is newer than foo-1.0-1) is already installed

Para fazer com que o RPM "atualize" de qualquer maneira, use a opção --oldpackage:

rpm -Uvh --oldpackage foo-1.0-1.i386.rpm

16.2.5. Recarregando

Recarregar um pacote é similar a atualizar um. Digite o seguinte em uma janela de comandos:

rpm -Fvh foo-1.2-1.i386.rpm

A opção de recarregamento (freshen) do RPM verifica as versões dos pacotes especificados na linha de comando com as versões dos pacotes que já foram instalados no seu sistema. Quando uma versão mais recente de um pacote já instalado é processada pela opção de recarregamento do RPM, é atualizada para a versão mais nova. Entretanto, a opção de recarregamento do RPM não instala um pacote se não houver um outro previamente instalado com o mesmo nome. Isto difere da opção de atualização do RPM, já que a atualização instala os pacotes, independente do fato de haver uma versão mais antiga do pacote ou não.

A opção de recarregamento do RPM para pacotes simples ou um grupo de pacotes. Se você fez o download de um grande número de pacotes diferentes e só deseja atualizar os pacotes que já estão instalados no sistema, o recarregamento é a melhor opção. Se usar o recarregamento, não é necessário apagar pacotes não quistos do grupo baixado (download) antes de usar o RPM.

Neste caso, invoque o seguinte comando:

rpm -Fvh *.rpm

O RPM atualiza automaticamente somente aqueles pacotes que já estão instalados.

16.2.6. Busca

Use o comando rpm -q para efetuar buscas no banco de dados de pacotes instalados. O comando rpm -q foo exibe o nome, versão e sub-versão do pacote instalado foo:

foo-2.0-1

NotaNota
 

Note que usamos nome do pacote foo. Para buscar um pacote, é necessário substituir foo pelo nome verdadeiro do pacote.

Ao invés de especificar o nome do pacote, você pode usar as seguintes opções com -q para especificar o(s) pacote(s) que deseja buscar. Estas são chamadas Opções de Especificação de Pacotes.

Há diversas maneiras de especificar quais informações devem ser apresentadas sobre os pacotes encontrados. As opções a seguir são usadas para selecionar o tipo de informação pela qual você procura. Estas são chamadas de Opções de Seleção das Informações.

Para as opções que apresentam listas de arquivos, você pode adicionar -v ao comando para apresentar as listas num formato ls -l familiar.

16.2.7. Verificando

Verificar um pacote compara as informações sobre os arquivos instalados de um pacote às mesmas informações do pacote original. Dentre outras coisas, a verificação compara o tamanho, soma MD5, permissões, tipo, proprietário (owner) e o grupo de cada arquivo.

O comando rpm -V verifica um pacote. Você pode usar qualquer uma das Opções de Seleção de Pacotes listadas para a procura, para especificar os pacotes que deseja verificar. Um uso simples da verificação é rpm -V foo, que verifica se todos os arquivos do pacote foo estão como estavam quando foram originalmente instalados. Por exemplo:

Se tudo for verificado apropriadamente, não haverá output. Se houver discrepâncias, estas serão apresentadas. O formato do output é um conjunto de oito caracteres (um c denota um arquivo de configuração) e então o nome do arquivo. Cada um dos oito caracteres denota o resultado de uma comparação de um atributo do arquivo ao valor deste mesmo atributo registrado no banco de dados RPM. Um único . (ponto) significa que o teste foi aprovado. Os seguintes caracteres denotam a falha de determinados testes:

Se você ver algum output, use seu bom senso para determinar se deve remover ou reinstalar o pacote, ou então consertar o problema de outra maneira.