Instalando pacotes utilizando RPM

Introdução

A maioria das distribuições Linux trabalham com o conceito de pacotes binários para a instalação padronizada de softwares.

Os pacotes mais comuns são o deb, originário do Debian e utilizado em suas distribuições derivadas, e o rpm, originário do RedHat e utilizada em distribuições derivadas como Mandriva, Fedora, CentOS, PCLinuxOS, Scientific, StartCom, OpenSuSE e outros.

Daí os seus nomes DEB, oriundo de Debian, e RPM, acrônimo de RedHat Packet Manager.

O que é um Pacote binário

Um pacote binário de um programa é composto por alguns arquivos, bibliotecas, a documentação do programa, scripts para que eles sejam instalados rápida e corretamente, e a relação de quais outros pacotes ele depende para seu funcionamento proposto.

Os pacotes binários pré-compilados RPM, possuem nomes *.i586.rpm, destinados para processadores com arquitetura de 32 bits, *.x86_64.rpm, destinados para processadores com arquitetura de 64 bits, ou ainda *.noarch.rpm, independentes de arquitetura de processador, geralmente contendo documentação ou programas feitos em linguagens interpretadas. E ainda os pacotes fonte, que podem ser recompilados para gerar os pacotes binários, e possuem nomes *.src.rpm.

Estes com extensão .src.rpm, contém o código-fonte original do programa, instruções ao programa que compilará o pacote fonte para gerar o pacote binário, no caso dos rpms, o arquivo tem extensão .spec e, geralmente, patches que são arquivos contendo diferenças no código-fonte, necessárias para a compilação ou adaptação do programa à distribuição.

Cada distribuição possui um código no nome do arquivo rpm para facilitar a identificação da distribuição para qual foi preparado:
  • Red-hat: *rh9.noarch.rpm
  • Mandriva: *mdv2008.1.i586.rpm
  • Fedora: *fc9.i386.rpm
  • PCLinuxOS: *pclos2007.i586.rpm
  • CentOS: *centos.noarch.rpm
Em alguns casos há plena compatibilidade entre pacotes, pré-compilados para distribuições distintas, como RHEL para CENTOS e vice-versa;

Comando rpm

Para que seja possível instalar um pacote, é necessário um software que conheça o tipo de pacote, confira as dependências e aplique as regras de instalação. Estes software são o rpm para pacotes .rpm e o dkpg para pacotes .deb.

Só que estes programas dispõem somente de recursos básicos, não fazendo coisas como downloads e instalação automática dos pacotes marcados como dependências. É aí que entram os softwares de gerenciamento de pacotes, como o conhecido apt ou aptitude do Debian, o apt-rpm do Conectiva Linux, o urpmi do Mandriva Linux e o yum do CentOS, RedHat e Fedora.

No linux é possível a utilização do gerenciador de pacotes diferentes dos padronizados na distribuição, exemplo fedora utilizando apt, entretanto exigirá uma maior dedicação do utilizador, e não é o escopo deste artigo.

Serão citadas somente as opções mais utilizadas, o comando rpm tem diversas opções, que podem ser, posteriormente se houver interesse, analisadas com man rpm.

Instalação de um pacote

rpm -i pacote; ou
rpm -install pacote
Para uma melhor visualização do que está acontecendo, em geral costuma-se usar também as opções -v (verbose, que imprime detalhes da execução) e -h (para imprimir "#" e apresentar a evolução de progressão).

O comando ficaria então:
rpm -ivh pacote


Instalação de um pacote e dependências ou de vários pacotes ao mesmo tempo
rpm -ivh pacote1 dependência1 dependência2 ... pacote2


Caso o programa já esteja instalado e o pacote que se quer instalar é de uma versão mais recente, deve-se utilizar a opção -U para atualizar (update) o pacote, que faz a remoção da versão antiga e a instalação da versão recente em um único passo.

Ignorando as dependências ou de um ou de vários pacotes ao mesmo tempo
rpm -ivh --nodeps pacote1 pacote2


Atualização de pacote

rpm -U pacote; ou
rpm -upgrade pacote; ou
rpm -Uvh pacote; (para mais detalhes de execução)

Instalação/Atualização forçada de pacotes

Embora a opção -force possa ser usada juntamente com a opção -i ou -U para instalação ou atualização forçada de pacotes, isto é, sem que todas as dependências tenham sido satisfeitas, NÃO É RECOMENDADA pois o programa terá grandes chances de não funcionar, além de fazer com que o rpm ou qualquer outra ferramenta de gerenciamento de pacotes tenda a remover o programa por causa das dependências quebradas.

Não tente usar gerenciadores de pacotes feitos para outras distribuições diferentes da que está em uso, pois geralmente causam estes problemas quando mal configuradas.

Remoção de pacotes

rpm -e pacote; ou
rpm -e pacote1 pacote2 ... pacoteN

Consultas a pacotes

rpm -qi pacote
Dá informações do pacote caso já esteja instalado.
rpm -qpi pacote-versão.i586.rpm
Dá informações sobre o pacote contido em pacote-versão.i586.rpm, que não precisa estar instalado.

rpm -qa
Lista TODOS os pacotes instalados no sistema.
rpm -qa | grep palavra
Exibe o pacote filtrado com a palavra de busca com o grep

Compilação de pacotes fonte para a geração de pacotes binários

Embora nem todo mundo precise recompilar os pacotes fonte .src.rpm, às vezes isso pode ser útil para aproveitar pacotes fonte de outras distribuições ou de versões mais recentes ou experimentais (cooker) da distribuição Linux em uso. Isso pode ser feito com:
rpmbuild -rebuild pacote.src.rpm
Este comando instala o pacote fonte e recompilá-o para gerar o(s) pacote(s) binário(s) derivados;

rpm -ivh pacote.src.rpm
Este comando instalar o pacote a partir do fonte, o compilando especificamente para a arquitetura do processador, o que otimiza o desempenho do programa para o hardware proposto, entretanto se gerencia do gerenciador de pacotes, ou seja, isento de verificações de atualização e correções.

rpmbuild -bb arquivospecdopacote.spec
Este comando gera um novo rpm para ser instalado, como apresentado nos tópicos anteriores

Para compilar e gerar o(s) pacote(s) binário(s) derivados conforme instruções contidas no arquivospecdopacote.spec, se faz necessário colocar os arquivos binários em diretórios especificos. no RedHat, Fedora e CentOS coloca-os em /usr/src/redhat/SOURCES/; no Mandriva coloca-os em /usr/src/RPM/SPECS/ ; Nas outras distribuições RedHat-like não foi pesquisado, podendo conseguir estas informações com o rpmbuild da distribuição.



Referências

http://www.vivaolinux.com.br/dica/Criando-pacotes-RPM-com-o-rpmbuild
man rpmbuild
man rpm
rpm --help

Comentários