linuxman.gif (21978 bytes)

Voltar ao Índice

9 GERÊNCIA DE PACOTES COM RPM

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

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

O RPM 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.

Para desenvolvedores, o RPM permite manter fontes e binários empacotando-os separadamente para os usuários finais.

9.1 Objetivos do RPM

Atualização de Softwares

Com o RPM é 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 a atualização, não se perdendo assim nenhuma customização já efetuada.

Pesquisas

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

Verificação do Sistema

Outra ferramenta poderosa é a verificação de pacotes. Caso haja dúvidas sobre a deleção de um arquivo importante de algum pacote, pode-se inicialmente verificar se o pacote apresenta alguma anormalidade. Caso localizada é possível reinstalar o pacote se necessário, preservando-se as configurações e customizações existentes.

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 softwares. Com RPM é possível ter essas fontes e as atualizações que foram aplicadas. Assim torna-se possível comparar as alterações efetuadas nos softwares a cada nova versão que seja disponibilizada.

9.2 Utilizando RPM

RPM tem cinco modos básicos de operação, excluindo-se o modo de confecção de pacotes: instalação, desinstalação, atualização, pesquisa e verificação. Além deste manual podem ser obtidas mais informações em rpm --help ou em man rpm.

9.2.1 Instalação

Pacotes RPM têm nomes de arquivos tais como foo-1.0-1.i386.rpm, que incluem o nome do pacote (foo), versão (1.0), release (1) e plataforma (i386). A instalação de um pacote é feita através de uma linha de comando, como por exemplo:

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

foo ####################################

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:

9.2.1.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 package foo-1.0-1 is already installed

error: foo-1.0-1.i386.rpm cannot be installed

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

9.2.1.2 Arquivos com conflitos

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.

9.2.1.3 Dependências não resolvidas

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

$ rpm -ivh bar-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.

9.2.2 Desinstalando

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 (p.ex. 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:

$ rpm -e foo

removing these packages would break dependencies:

foo is needed by bar-1.0-1

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

9.2.3 Atualizando

Para atualizar um pacote utilize o comando:

$ rpm -Uvh foo-2.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 software 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, alguns erros podem ocorrer como por exemplo, quando se quer 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 de qualquer forma, deve-se usar o parâmetro --oldpackage na linha de comando.

9.2.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:

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

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

9.2.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 <nome do pacote>

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á nenhuma 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 aos atributos definidos no pacote RPM, onde um ponto significa que o atributo está ok. Os atributos são:

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)

Se alguma informação for apresentada é necessário avaliá-la e verificar se é necessário remover o pacote, reinstalá-lo ou procurar resolver o problema de outra forma.

9.3 RPM - uma agradável surpresa

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 foram apagados. Pode-se então informar:

rpm -Va

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

Outro caso pode ser o de problemas usando o comando /usr/bin/paste. Inicialmente pode-se verificar a qual pacote o arquivo pertence e se ele está ok executando o comando:

rpm -Vf /usr/bin/paste

Caso se esteja utilizando um programa, do qual se deseje 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/man/man4/ispell.4

/usr/man/man4/english.4

/usr/man/man1/unsq.1

/usr/man/man1/tryaffix.1

/usr/man/man1/sq.1

/usr/man/man1/munchlist.1

/usr/man/man1/ispell.1

/usr/man/man1/findaffix.1

/usr/man/man1/buildhash.1

/usr/info/ispell.info.gz

/usr/doc/ispell-3.1.18-1/README

Ao localizar um arquivo RPM e se deseje 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á:

Name : koules

Distribution: Conectiva Red Hat Linux

Version : 1.2

Vendedor: Conectiva Internet Solutions

Release : 2

Build Date: Mon Sep 02 11:59:12 1996

Install date : (none)

Build Host: daisy.conectiva.com.br

Group : Games

Source RPM: koules-1.2-2.src.rpm

Size : 614939

Summary : SVGAlib jogo de ação vários jogadores, rede, som

Description : 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.

Agora se desejar 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

9.4 Outros recursos

Para maiores informações sobre RPM, acesse a página de manual, a tela de help (rpm --help), e a documentação disponível em:

http://www.rpm.org/

Existe ainda um livro disponível chamado Maximum RPM, disponível na Red Hat Software e em http://www.lojalinux.com.br, o qual contém um conjunto valioso de informações sobre o assunto. Uma versão on-line pode ser encontrada no site oficial de RPM.