RPM - RPM Package Manager:  O Instalador de Pacotes

 

O RPM (RPM Package Manager) é um Gerenciador de Pacotes para Linux capaz de instalar, remover e atualizar os arquivos de pacotes nele instalados. No Linux, os softwares são instalados através de 'pacotes'. Os pacotes são arquivos  em cujo interior há softwares inteiros, prontos para serem instalados e executados.

Os pacotes RPMs têm nomes que obedecem o formato <nome-do-pacote>-<versão>-<release>.<plataforma>.rpm. Um exemplo típico seria o pacote que permite conexões ADSL via PPPoE: rp-pppoe-3.5-1.i386.rpm. Aqui, rp-pppoe é o nome do pacote propriamente dito, 3.5 é a versão do software e 1 é o número do release, i386 é a plataforma que, neste caso, indica que o software em questão é compátivel com os chips Intel 386 e posteriores.

A instalação de um pacote como este pode ser feita da seguinte forma:

  rpm -ivh rp-pppoe-3.5-1.i386.rpm

O comando acima gerará uma saída semelhante a esta:

  Preparing              ########################### [100%]
   1: rp-pppoe           ########################### [100%]

 

O texto acima indica que o pacote foi instalado, sem erros ou problemas. Os parâmetros -ivh indicam, respectivamente INSTALL (para instalar o pacote), VERBOSE (para mostrar as mensagens informativas sobre o quê está sendo feito) e HASH (responsável pela exibição dos sinais de sustinido -  ou escopo, ou cerquilha, se preferir  - apresentados durante o progresso da instalação).

 

Parâmetros da Linha de Comando

Ao comando RPM podemos passar os seguintes parâmetros:

-i Install: instala o pacote
-F Freshen: instala pacote apenas se uma
          versão prévia do pacote já
          existir
-v Verbose: mostra mensagens explicativas na
          tela
-U Upgrade: atualiza um pacote
-h Hash: mostra o progresso da instalação
-q Query: consulta se um pacote já está
        instalado
-qa Query -All: mostra todos os pacotes
       instalados
-qf <arquivo> Query -File: consulta o pacote do qual o
              arquivo faz parte
-qp <pacote> Query -Package: consulta um pacote não
       instalado
-qi <pacote> Query -Info: apresenta informações
       detalhadas sobre o pacote.
-ql <pacote> Query -List: lista os arquivos pertencentes
       ao pacote
-qd <pacote> Query -Doc: apresenta uma lista dos
    arquivos de documentação do pacote,
    como READMEs, páginas de manual (MAN),
    etc.
-qc <pacote> Query -Config: apresenta uma lista dos
       arquivos de configuração.
-V Verify: compara arquivos instalados com
         informações disponíveis na base
         de dados RPM. Compara permissões,
         proprietário, tamanho e outras
         informações de cada arquivo.
--force   força a instalação de um pacote,
  sobrescrevendo arquivos e pacotes de
  mesmo nome já instalados
--nodeps No Dependencies: não verifica se há dependências de arquivos antes de instalar um pacote(leia sobre DEPENDÊNCIAS adiante).
-e Erase: remove um pacote instalado
--nobuild No Building: não instala o pacote em
   questão; apenas realiza uma verificação
   e reporta eventuais conflitos.

 

Exemplos e Observações

1 - Para verificar se um pacote chamado RP-PPPOE está instalado:

  rpm -q rp-pppoe

A resposta a este comando será o nome do pacote instalado (se ele estiver instalado); algo como: rp-ppoe-3.5-1.

2- Para verificar todos os pacotes instalados no sistema:

  rpm -qa

3- Para exibir informações do pacote, tais como release, tamanho, etc:

   rpm -qi rp-pppoe

O resultado mostrado será semelhante a:

Name : rp-pppoe   Relocations: (not relocateable)      Version : 3.5
Vendor: Roaring Penguin Software Inc.     Release : 1
Build Date: Mon Jul 8 11:38:57 2002
Install date: Sat Jul 20 00:32:49 2002
Build Host: shishi.roaringpenguin.com
Group : System Environment/Daemons
Source RPM: rp-pppoe-3.5-1.src.rpm
Size : 189958    License: GPL   Packager : David F. Skoll 
URL : http://www.roaringpenguin.com/pppoe/
Summary : PPP Over Ethernet (xDSL support)

Description : PPPoE (Point-to-Point Protocol over Ethernet) is a protocol used by many ADSL Internet Service Providers. Roaring Penguin has a free client for Linux systems to connect to PPPoE service providers. The client is a user-mode program and does not require any kernel modifications. It is fully compliant with RFC 2516, the official PPPoE specification.

 

4- Para conhecer os arquivos de configuração de um pacote:

    rpm -qc rp-pppoe

O resultado deste comando será algo semelhante a:

   /etc/ppp/firewall-masq
   /etc/ppp/firewall-standalone
   /etc/ppp/pppoe.conf
   /etc/ppp/pppoe-server-options

No exemplo acima, pppoe.conf, pppoe-server-options e os demais arquivos mostrados são arquivos de configuração do pacote rp-pppoe.

 

5- Para atualizar um pacote:

  rpm -Uvh <pacote>

Se o <pacote> que você estiver atualizando estiver numa versão mais antiga que a já instalada, uma mensagem de alerta irá surgir e a atualização não continuará. Para forçar a atualização mesmo assim, use este mesmo comando com o parâmetro --force: rpm -Uvh --force <pacote>.

ATENÇÃO:  ao invés de --force, também podem ser usados --oldpackage, --replacepkgs ou --replacefiles. O resultado final será o mesmo.

 

6- Para instalar um determinado pacote:

   rpm -ivh <pacote>

 

7- Para desinstalar um determinado pacote:

    rpm -e <pacote1>

Eventualmente, como certos pacotes dependem uns dos outros, ao tentar desinstalar um pacote PACOTE1 poderá surgir uma mensagem de erro do tipo:

erro: a remoção deste pacote quebraria dependências: PACOTE1 é necessário para PACOTE2

Isso indica que o PACOTE2 precisa do PACOTE1 para funcionar corretamente. Se mesmo assim você quiser desinstalá-lo, use o parâmetro --nodeps. Assim:

   rpm -e --nodeps <pacote1>

O comando acima impediria o erro de dependências. Mas é possível que, por depender do PACOTE1, o PACOTE2 não funcione mais corretamente após isto.

 

Erros Durante a Instalação de Pacotes

O processo de instalação foi desenvolvido para ser o mais simples possível. Porém, como pode-se perceber pelos exemplos acima, eventualmente alguns erros podem ocorrer, como o alerta de que o pacote que está sendo instalado é mais antigo do que o que já encontra-se no sistema, conflitos de arquivos, etc. Veja agora maiores informações sobre tais erros:

 

  • Pacotes já instalados: se o pacote já tiver sido instalado anteriormente, será apresentada a seguinte mensagem:

       Preparing     ############################# [100%]
       Pacote <nome-do-pacote> já está instalado

Caso se deseje ignorar o erro, pode-se usar o parâmetro --force na linha de comando, fazendo com que o erro não seja mais mostrado e o pacote reinstalado.

  • Arquivos com conflitos: se o arquivo contém um arquivo já instalado por outro pacote, será apresentada a seguinte mensagem:

      /usr/bin/<arquivo> conflicts with file from <pacote2>
      error: <nome-do-pacote> não pode ser instalado

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

  • Dependências não resolvidas: os 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:

Falha nas dependências:
foo é necessário para bar-1.0.1
Para corrigir este 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. Entretanto, provavelmente o pacote não
funcionará ou o fará de forma incorreta.

 

Atualização de Pacotes: Salvando Configurações Existentes

Para atualizar um pacote, utilize o comando a seguir:

   rpm -Uvh <nome-do-pacote>

Uma mensagem informativa, semelhante a esta, surgirá:

    Preparing...      ######################### [100%]
     1: <pacote>:    ######################### 1100%]

 

Ao atualizarmos um pacote já instalado, qualquer versão anterior do pacote será desinstalada e será feita uma nova instalação, guardando as configurações anteriores do programa para um possível uso caso o formato dos arquivos de configuração não tenha sido alterado.

Uma vez que o RPM executa um processo de atualização inteligente, é apresentada uma mensagem do tipo:

   saving /etc/<pacote>.conf as /etc/<pacote>.conf.rpmsave

Isso significa que os arquivos de configuração existentes estão salvos. Esta é uma característica interessante, já que outros métodos de instalação de softwares (como os compactados com o tar e/ou gz) simplesmente não preservam as configurações originais.

Vale dizer, porém, que, mesmo instalando pacotes via RPM, algumas mudanças no programa a ser instalado / atualizado podem tornar esse arquivo de configuração não mais compatível com o pacote - embora isso não seja comum. Neste caso, as adequações necessárias deverão ser feitas pelo usuário.

Como o processo de atualização é uma combinação de processos de desinstalação e instalação, algumas mensagens de erro 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 <pacote>

   Preparing ... [100%]
   O pacote <pacote>-2.0.1 (o qual é mais novo que
   <pacote>-1.0.1) já está instalado.

Neste caso, para forçar a atualização, deve-se usar o parâmetro --oldpackage na
linha de comando (os parâmetros --force, --replacepkgs e --replacefiles também podem ser usados aqui).


Voltar


(Fonte: Manual (MAN) RPM do Linux, www.rpm.org,
Conectiva: Fundamentos de Adm. de Sistemas, Red Hat: Package Management with RPM)