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.
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.
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.
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.
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.
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.
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.
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 recursosPara maiores informações sobre RPM, acesse a página de manual, a tela de help (rpm --help), e a documentação disponível em:
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.