: Linux
Pacotes RPM

O sistema operacional Linux, até hoje, tem a fama de ter instalações complicadas, o que, muitas vezes, não deixa de ser verdade. Na tentativa de resolver esses problemas de instalação, A empresa Red Hat criou uma tecnologia chamada RPM, que significa RedHat Package Manager (Gerenciador de Pacotes RedHat).

O RPM é um poderoso gerenciador de pacotes, que pode ser usado para criar, instalar, desinstalar, pesquisar, verificar e atualizar pacotes individuais de software. Um pacote consiste em armazenagem de arquivos e informações, incluindo nome, versão e descrição. Veja a seguir, alguns comandos e suas respectivas funções, usadas nos pacotes RPM:

* rpm -ivh - Instalação de pacotes;
* rpm -Uvh - Atualização de pacotes;
* rpm -qi - Informações sobre o pacote;
* rpm -ql - Lista os arquivos do pacote;
* rpm -e - Desinstala o pacote;
* rpm -qa - Lista os pacotes instalados;

Utilizando o RPM

O RPM tem 5 modos básicos de operação, excluindo-se o modo de confecção de pacotes: instalação, desinstalação, atualização, consulta e verificação. Você pode obter mais informações usando rpm --help ou man rpm. Vejamos cada modo:

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 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 acorrer:

- 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 ignorar o erro, pode-se usar o parâmetro --replacefiles na linha de comando;

- Dependências não resolvidas

Pacotes RPM podem depender da instalação de outros pacotes, o que significa que eles necessitam destes pacotes para poderem ser executados adequadamente. Caso 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 este erro, será necessário instalar o pacote solicitado. Caso deseje que a instalação ocorra de qualquer forma, pode-se utilizar o parâmetro --nodeps na linha de comando.

2 - Desinstalação

Para desinstalar um pacote utilize o comando:

$ rpm -e foo

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

$ rpm -e foo removing these package

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.

3 - Atualização

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, já 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 este arquivo de configuração incompatível com o pacote. 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. 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 never) 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.

4 - Consulta

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

$ rpm -q foo foo-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 - Consulta o pacote que contém o arquivo ;
* F - Funciona como o parâmetro -f, exceto que funciona a partir do stdin (entrada padrão), como por exemplo find /usr/bin | rpm -qF;
* p - Consulta o pacote originado pelo ;
* P - Funciona como o parâmetro -p, exceto que funciona a partir do stdin (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 e outras;
* l - Apresenta a lista de arquivos relacionados com o pacote;
* s - Apresenta o status dos arquivos do pacote. Há dois estados possíveis: normal ou missing (não localizado);
* 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.

5 - Verificação

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
Pode-se usar as mesmas opções disponíveis no processo de consultas.

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 uma discrepância não haverá resposta do sistema, caso contrário será apresentada na forma de uma expressão 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

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, estudando outra forma.

Escrito por Emerson Alecrim, sob material cedido por http://www.poli.org. Publicado em 30/06/200