Como lidar com os pacotes de programas que encontramos por aí na Internet, ou nos CDs das distribuições Linux? Quais os processos para instalar, remover e atualizar programas que estão no formato RPM? (Não, RPM neste caso não significa Rotação Por Minuto e nem a bandinha brasileira!)
O RPM Package Manager é uma poderosa ferramenta de gerenciamento de pacotes que pode ser utilizada para construir, instalar, consultar, verificar, atualizar, ou apagar pacotes de programas. Um pacote RPM nada mais é que um arquivo cpio com um cabeçalho adicional. Dentro do pacote podemos encontrar os arquivos do programa e os meta-dados do pacote que contém scripts de ajuda, definições sobre os atributos dos arquivos, informações descritivas, entre outros.
Os pacotes podem ser de dois tipos: binários e fontes. Os pacotes binários são chamados de RPMs e vêm na forma pacote-versão.arquitetura.rpm. Os pacotes de fontes são chamados de Source RPMS (SRPMS) e vêm na forma pacote-versão.src.rpm. É possível extrair o conteúdo de um pacote RPM para um diretório sem precisar instalá-lo, utilizando o rpm2cpio:
$ mkdir -p ~/pacote-tmp
$ cd ~/pacote-tmp
$ rpm2cpio ~/download/exemplo-1.0.i386.rpm | cpio -ivd
O banco de dados do RPM está localizado por padrão no diretório /var/lib/rpm e o formato dos arquivos é Berkeley DB (BDB). Quando não existem dados neste diretório, podemos inicializar um banco de dados RPM com o parâmetro –initdb:
# rpm --initdb
Pode ser também que o banco de dados RPM possa estar corrompido. Geralmente quando isto acontece, o comando rpm fica “parado” infinitamente quando é executado, como se estivesse esperando algo acontecer. Caso isso aconteça, temos que reconstruir uma nova base a partir dos cabeçalhos dos pacotes instalados.
Para reconstruir o banco de dados, primeiro apagamos todos os arquivos que começam com “__db.” e utilizamos o parâmetro –rebuilddb para reconstruir:
# cd /var/lib/rpm
# rm -f __db.*
# rpm --rebuilddb
RPM: Instalação e desinstalação
Para instalar um pacote, usa-se a opção -i:
# rpm -i pacote.rpm
Podemos utilizar as opções -v e -h combinadas com a -i para uma mostragem mais agradável. Caso o sistema já possuir o pacote instalado, mas desejamos atualizar para uma versão mais recente, utilizamos a opção -U ao invés da -i. Exemplo:
# rpm -Uvh pacote-atualizacao.rpm
Isso irá atualizar o pacote. Para retirar o pacote do sistema, utilizamos a opção -e:
# rpm -e nome-do-pacote
Caso o pacote gere dependências com outros pacotes e mesmo assim é desejado querer removê-lo, utilizamos a opção –force, que como o nome diz, força a remoção do pacote:
# rpm -e nome-do-pacote --force
Cuidado! Forçar a remoção de um pacote sem resolver as dependência pode causar problemas! Os programas dependentes do pacote poderão não funcionar corretamente. Use apenas se você souber o que estiver fazendo.
Agora o contrário: se for necessário instalar um pacote que necessita de outros pacotes como dependência (mas infelizmente não temos essas dependências), utilizamos o parâmetro –nodeps:
# rpm -Uvh pacote.rpm --nodeps
Lembre-se que instalar pacotes sem suas dependências também não é uma boa prática. O programa pode não funcionar.
RPM: Consulta
Além da instalação e desinstalação de pacotes, um recurso muito útil no RPM é a consulta aos pacotes já existentes. Para utilizar o modo de consulta do RPM, todos os comandos irão começar com o parâmetro -q (query, consulta em inglês).
Se quisermos ver apenas se um pacote está instalado no sistema sem ter que listar todos e procurar de um em um, basta apenas colocar o nome do pacote depois do parâmetro de consulta. Exemplo:
$ rpm -q kdebase
kdebase-3.4.1-1.2.fc4.kde
Quando quisermos listar todos os pacotes instalados no sistema, utilizamos:
$ rpm -qa
Ou podemos, se preferir, utilizar outros comandos como filtro, organizando melhor a visualização:
$ rpm -qa | sort | less
O comando anterior executou o rpm -qa, ordenou por ordem alfabética e utilizou o comando less para paginar a saída. Podemos também procurar por todos os pacotes que possuam a palavra kde no nome:
$ rpm -qa | grep kde
kdenetwork-3.4.1-1.2.fc4.kde
kdegraphics-3.4.1-1.3.fc4.kde
k3b-0.12.2-1.0.fc4.kde
amarok-1.2.4-6.1.fc4.kde
kdegames-3.4.1-1.2.fc4.kde
...corte...
Para obter informações detalhadas sobre sobre um pacote, utilizamos a opção -qi:
$ rpm -qi wget
Name : wget Relocations: (not relocatable)
Version : 1.9.1 Vendor: Red Hat, Inc.
Release : 22 Build Date: Wed 02 Mar 2005
Install Date: Thu 23 Jun 2005 12:05:03 PM BRT Build Host: porky.build.r
Group : Applications/Internet Source RPM: wget-1.9.1-22.src.rpm
Size : 1141398 License: GPL
Signature : DSA/SHA1, Fri 20 May 2005 03:28:44 PM BRT, KeyID b44269d04f2a6fd2
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL : http://wget.sunsite.dk/
Summary : A utility for retrieving files using the HTTP or FTP protocols.
Description :
GNU Wget is a file retrieval utility which can use either the HTTP or
FTP protocols. Wget features include the ability to work in the
background while you are logged out, recursive retrieval of
directories, file name wildcard matching, remote file timestamp
storage and comparison, use of Rest with FTP servers and Range with
HTTP servers to retrieve files over slow or unstable connections,
support for Proxy servers, and configurability.
Na saída anterior podemos observar qual o pacote-fonte do wget, qual seu tamanho, quem empacotou, sua licença, versão, quando foi instalado, além de um resumo e descrição do que é o pacote. Quem quer conhecer mais sobre os programas dentro da distribuição pode utilizar o rpm -qa para listar todos os pacotes e utilizar o rpm -qi para ver o que cada pacote faz. Haja paciência!
Lembra-se das dependências? Se quisermos ver quais pacotes dependem de um certo pacote, usamos:
$ rpm -qR pacote
Ou às vezes, nos deparamos com uma dúvida cruel: o que esse arquivo está fazendo aqui? Ele pertence a quem? O que ele faz? Para solucionar estas dúvidas, podemos verificar qual o pacote dono de um arquivo utilizando:
$ rpm -qf /etc/arquivo
Exemplo:
$ rpm -qf /usr/sbin/chroot
coreutils-5.2.1-48
Ou você pode fazer o contrário (o que é muito útil): listar todos os arquivos que pertencem a um pacote:
$ rpm -ql pacote
Exemplo:
$ rpm -ql sox
/usr/bin/play
/usr/bin/rec
/usr/bin/sox
/usr/bin/soxmix
/usr/bin/soxplay
/usr/share/doc/sox-12.17.7
/usr/share/doc/sox-12.17.7/Changelog
/usr/share/doc/sox-12.17.7/README
...corte...
Se quisermos saber unicamente quais são os arquivos de configuração de um pacote:
$ rpm -qc crontabs
/etc/crontab
/etc/sysconfig/crontab
Ou se quisermos saber apenas quais são os arquivos de documentação de um pacote:
$ rpm -qd wget
/usr/share/doc/wget-1.10.2/AUTHORS
/usr/share/doc/wget-1.10.2/COPYING
/usr/share/doc/wget-1.10.2/MAILING-LIST
/usr/share/doc/wget-1.10.2/NEWS
/usr/share/doc/wget-1.10.2/PATCHES
/usr/share/doc/wget-1.10.2/README
...corte...
RPM: Verificação
Uma vez que os pacotes estejam instalados no sistema, além das consultas, é possível fazer também verificações nestes pacotes. Em um consulta, o rpm apenas pega informações sobre um pacote e mostra ao usuário. Em uma verificação, o rpm compara essas informações do banco de dados com o estado atual dos arquivos no sistema. Na verificação, se um arquivo estiver faltando ou tiver sido alterado, o rpm irá avisá-lo sobre isto.
Este tipo de tarefa é muito boa para auditoria e para verificar se todos os pacotes e arquivos do sistema estão instalados e funcionando corretamente.
Para fazer a verificação, utilizamos o parâmetro -V:
# rpm -V pacote
Caso tudo esteja em ordem, o rpm não mostrará nada. Se algum arquivo for modificado de alguma forma, ele mostrará algumas letras de estado antes do arquivo. Exemplo:
# rpm -V httpd
S.5....T c /etc/httpd/conf.d/proxy_ajp.conf
missing c /etc/httpd/conf.d/welcome.conf
S.5....T c /etc/httpd/conf/httpd.conf
Os primeiros 8 caracteres indicam testes que o rpm fez. Quando um ponto (.) aparecer, o teste foi bem sucedido. Se um sinal de interrogação (?) aparecer, significa que o teste não pode ser completado (geralmente por causa de permissões do arquivo). Cada uma das 8 letras significa:
S | O tamanho do arquivo não é igual ao original (conteúdo foi modificado). |
M | As permissões do arquivo foram alteradas. |
5 | A soma MD5 diferente do original (conteúdo foi modificado). |
D | Número Major/Minor do dispositivo não coinscide. |
L | Link simbólico inválido. |
U | Usuário dono diferente do original. |
G | Grupo dono diferente do original. |
T | A hora da última modificação diferente do original (conteúdo foi modificado). |
Depois destes 8 caracteres, pode ser que haja uma letra antes do nome do arquivo, que indica qual a função do arquivo no pacote. Por exemplo: c para arquivos de configuração, d para arquivos de documentação e nada para arquivos normais.
Para fazer uma verificação completa em todos os pacotes instalados, usamos:
# rpm -Va
Para verificarmos apenas um arquivo, usamos:
# rpm -Vf /usr/bin/file
0 comentários :
Enviar um comentário