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