Aprenda Linux, 101: Gerenciamento de pacote RPM e YUM

Adicione novos softwares e mantenha seu sistema atualizado

Aprenda como instalar, atualizar e gerenciar pacotes no seu sistema® Linux. Este artigo aborda o Red Hat Package Manager (RPM), desenvolvido pela Red Hat, assim como o Yellowdog Updater Modified (YUM), originalmente desenvolvido para gerenciar sistemas Linux Red Hat no departamento de física da Universidade de Duke. Use o material deste artigo para estudar para o exame Linux Professional Institute (LPI) 101 para a certificação de administrador de sistema Linux, ou apenas para explorar as melhores formas de adicionar novos software e manter seu sistema atualizado.

Ian Shields, Senior Programmer, IBM

Ian ShieldsIan Shields trabalha em vários projetos de Linux para a zona Linux do developerWorks. É programador senior da IBM no Research Triangle Park, NC. Passou a fazer parte da IBM em Canberra, na Austrália em 1973 como engenheiro de sistemas e, desde então, vem trabalhando em sistemas de comunicações e computação disseminada em Montreal, Canadá, e em RTP, NC. Possui várias patentes e publicou vários trabalhos. Possui diploma universitário em matemática pura e filosofia pela Universidade Nacional Australiana. É mestre e Ph. D. em ciência da computação pela Universidade Estadual da Carolina do Norte. Saiba mais no perfil do Ian no My developerWorks.


nível de autor Contribuidor do
        developerWorks

13/Dez/2010

Sobre esta série

Esta série de artigos ajuda você a aprender as tarefas de administração de sistema Linux. Também é possível usar o material desses artigos para se preparar para os exames da Linux Professional Institute Certification nível 1 (LPIC-1).

Consulte o roteiro do developerWorks para o LPIC-1 para ver uma descrição de cada artigo da série e um link para cada um desses artigos. O roteiro está em andamento e reflete os objetivos mais recentes (abril de 2009) para os exames LPIC-1: à medida que concluímos os artigos, nós os acrescentamos ao roteiro. Nesse período, no entanto, é possível encontrar versões mais antigas de material semelhante, que suporta os objetivos anteriores do LPIC-1, anteriormente a abril de 2009, em nossos tutoriais anteriores de preparação para o exame de certificação LPI.

Visão geral

Neste artigo, aprenda como usar as ferramentas RPM e YUM para gerenciar os pacotes no seu sistema Linux. Aprenda a:

  • Instalar, reinstalar, atualizar e remover pacotes usando RPM e YUM
  • Obter informações sobre pacotes RPM, incluindo versão, status, dependências, integridade e assinaturas
  • Determine quais arquivos serão fornecidos por um pacote e descubra a qual pacote pertence um arquivo específico.

Este artigo ajuda você a se preparar para o Objetivo 102.5 no Tópico 102 do exame Junior Level Administration (LPIC-1) 101 do Linux Professional Institute. O objetivo tem peso 3.

Pré-requisitos

Para aproveitar ao máximo os artigos nesta série, é necessário ter um conhecimento básico de Linux e um sistema Linux funcional no qual você possa praticar os comandos descritos neste artigo. Às vezes, versões diferentes de um programa formatam a saída de forma diferente; portanto, os seus resultados podem não ser exatamente iguais às listagens e figuras mostradas aqui. Em particular, muitas das saídas que mostramos são altamente dependentes dos pacotes que já estão instalados em nossos sistemas. Nossa própria saída pode ser um pouco diferente, no entanto você deve reconhecer os pontos em comum.


Introdução ao gerenciamento de pacote

Comunique-se com o Ian

Ian é um dos nossos autores mais populares e prolíficos. Navegue em todos os artigos do Ian no developerWorks. Confira o perfil do Ian e comunique-se com ele, outros autores e leitores no My developerWorks.

Anteriormente, muitos programas Linux foram distribuídos como software livre, que um usuário construía no programa ou conjunto de programas necessários, junto com as man pages e arquivos de configuração necessários, e assim por diante. Hoje em dia, a maioria dos distribuidores Linux usa programas ou conjuntos de programas pré-construídos chamados de pacotes, que vêm prontos para instalação em uma distribuição. Neste artigo, você aprenderá sobre ferramentas de gerenciamento de pacote que o ajudam a instalar, atualizar e remover pacotes. Este artigo aborda o Red Hat Package Manager (RPM), que foi desenvolvido pela Red Hat, bem como o Yellowdog Updater Modified (YUM), que foi originalmente desenvolvimento para gerenciar sistemas Linux Red Hat no departamento de física da Universidade de Duke. Um outro artigo desta série, "Aprenda Linux 101: Gerenciamento de pacote do Debian", cobre as ferramentas de gerenciamento de pacote usadas em sistemas Debian.

Da perspectiva do usuário, a função básica de gerenciamento de pacote é fornecida por comandos. À medida que os desenvolvedores de Linux se esforçam para tornar o Linux mais fácil de usar, as ferramentas básicas foram complementadas por outras ferramentas, incluindo ferramentas de GUI, que escondem algumas das complexidades das ferramentas básicas do usuário final. Neste artigo e no artigo sobre gerenciamento de pacote do Debian, focamos as ferramentas básicas, embora mencionemos algumas das outras ferramentas, para que você possa procurar mais material sobre elas.

RPM, YUM e APT (para sistemas Debian) possuem muitas semelhanças. Todos podem instalar e remover pacotes. As informações sobre pacotes instalados são mantidas em um banco de dados. Todos possuem a funcionalidade básica de linha de comando, enquanto as ferramentas adicionais oferecem interfaces com o usuário mais fáceis e simples. Todos podem recuperar pacotes da Internet.

Quando você instala um sistema Linux, normalmente você instala uma grande seleção de pacotes. O conjunto pode ser customizado para o uso desejado do sistema, como servidor, desktop ou estação de trabalho do desenvolvedor. E, ao mesmo tempo, você provavelmente precisará instalar novos pacotes para funcionalidade adicionada, atualizar os pacotes que você tem ou mesmo remover pacotes dos quais não precisa mais ou que se tornaram obsoletos por causa de pacotes mais novos. Vamos ver como realizar essas tarefas e alguns dos desafios relacionados, como encontrar qual pacote contém um comando em particular.

RPM

A Red Hat lançou o RPM em 1995. Hoje o RPM é o sistema de gerenciamento de pacote usado para pacotes no Linux Standard Base (LSB). As opções de comando rpm estão agrupadas em três subgrupos para:

  • Consultar e verificar pacotes
  • Instalar, atualizar e remover pacotes
  • Realizar funções diversas

Focaremos os primeiros dois conjuntos de opções de comando neste artigo. Você encontrará informações sobre diversas funções nas man pages de RPM.

Também devemos observar que rpm é o nome do comando para o comando principal usado com RPM, enquanto .rpm é a extensão usada para arquivos de RPM. Assim, "um rpm" ou "o rpm xxx" normalmente estará se refere a um arquivo de RPM, enquanto que rpm normalmente se refere ao comando.

YUM

O YUM adiciona atualizações e gerenciamento de pacote, incluindo gerenciamento de dependências, a sistemas RPM. Além de entender os pacotes instalados no sistema, o YUM, assim como a Debian Advanced Packaging Tool (APT), trabalha com repositórios, que são coleções de pacotes, normalmente acessível através de uma conexão de rede.


Instalação de pacotes de RPM

Suponha que você queira aprender Lisp, e um colega diz a você para usar o gcl . É possível tentar gcl --help, ou tentar which gcl(type gcl. Mas se o seu sistema não conseguir localizar gcl, você deve providenciar uma saída semelhante à mostrada na listagem 1.

Listagem 1. Comando gcl ausente
[ian@echidna ~]$ gcl --help
bash: gcl: command not found

[ian@echidna ~]$ which gcl
/usr/bin/which: no gcl in (/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerber
os/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/
sbin:/home/ian/bin)

[ian@echidna ~]$ type gcl
bash: type: gcl: not found

Você deve verificar com seu colega para descobrir qual pacote instalar, ou você pode simplesmente adivinhar que o comando gcl está no pacote gcl. Normalmente, adivinhar dá certo, mas nem sempre. Veremos mais tarde como encontrar o pacote certo. Neste caso, você realmente precisa do pacote gcl. Presumindo que você fez o download ou que adquiriu de um outro modo uma cópia do pacote, você deve tentar instalá-lo usando o comando rpm com a opção -i (para instalação), como mostrado na listagem 2.

Listagem 2. Instalação de gcl com rpm - tomada 1
[root@echidna ~]# rpm -i gcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpm
error: Failed dependencies:
gcl-selinux is needed by gcl-2.6.8-0.6.20090701cvs.fc12.x86_64

O comando rpm sabe que o pacote possui uma dependência, mas, infelizmente, ele não poderá ajudá-lo a resolver essa dependência. Você precisará obter o(s) pacote(s) dependente(s), tentar novamente e ver se há dependências adicionais—e continuar fazendo isso até que todas as dependências tenham sido satisfeitas. Uma coisa boa é que é possível dar ao comando rpm uma lista de pacotes para instalar e ele instalará todos eles na ordem correta se todas as dependências forem satisfeitas. Assim, pelo menos, você não precisará instalar manualmente um por um na ordem correta.

Se você usou a APT do Debian, nesse momento você provavelmente gostaria de ter alguma coisa como o comando apt-get , que simplesmente iria localizar o que você precisa, incluindo dependências, e instalar. Para sistemas baseados em RPM, o YUM (ou Yellowdog Updater Modified) fornece uma função como essa. A listagem 3 mostra como instalar gcl e o gcl requerido; pré-requisitos de -selinux usando o comandoyum com a opção install .

Listagem 3. Instalação de gcl usando yum
[root@echidna ~]# yum install gcl
Loaded plugins: presto, refresh-packagekit
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated
--> Processing Dependency: gcl-selinux for package: gcl-2.6.8-0.7.20100201cvs.fc12.x86_64
--> Running transaction check
---> Package gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package           Arch         Version                          Repository     Size
=====================================================================================
Installing:
 gcl               x86_64       2.6.8-0.7.20100201cvs.fc12       updates       6.3 M
Installing for dependencies:
 gcl-selinux       x86_64       2.6.8-0.7.20100201cvs.fc12       updates        17 k

Transaction Summary
=====================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 6.4 M
Installed size: 40 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
updates/prestodelta                                           | 964 kB     00:01     
Processing delta metadata
Package(s) data still to download: 6.4 M
(1/2): gcl-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm              | 6.3 MB     00:12     
(2/2): gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm      |  17 kB     00:00     
-------------------------------------------------------------------------------------
Total                                                398 kB/s | 6.4 MB     00:16     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64                 1/2 
  Installing     : gcl-2.6.8-0.7.20100201cvs.fc12.x86_64                         2/2 

Installed:
  gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12                                            

Dependency Installed:
  gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12                                    

Complete!

A saída da listagem 3 mostra que o YUM localizou o gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 e o gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 em um repositório chamado "updates" (atualizações) (veremos mais sobre isso mais adiante), e determinou o tamanho total do download. Depois que você respondeu "y" para concordar com a transação, ele fez o download dos dois pacotes e depois instalou a dependência, seguida do gcl. Você aprenderá mais sobre dependências mais adiantes neste artigo.


Locais de pacote

Na seção anterior, você aprendeu como instalar um pacote RPM. Mas de onde vêm os pacotes? Como o yum sabe de onde fazer download? O ponto de partida é o diretório /etc/yum.repos.d/, que normalmente contém vários arquivos repo . Esse é o local padrão para repos, mas outros locais podem ser especificados no arquivo de configuração do YUM, que normalmente é o /etc/yum.conf. A listagem 4 mostra o fedora-updates.repo correspondente ao local de onde instalamos o gcl em nosso sistema Fedora 12.

Um arquivo repo típico é dividido em três seções, uma para pacotes normais, uma para pacotes de depuração e outra para pacotes de origem. Normalmente, haverá várias cópias dos pacotes de uma distribuição disponíveis em diferentes locais, ou espelhos. Assim, o arquivo repo diz ao yum onde encontrar a lista mais recente de espelhos para cada seção. Observe que o nível do release de distribuição e a arquitetura da máquina são parametrizados, de modo que o yum faz o download da lista para o meu sistema Fedora 12 x86_64 a partir de https://mirrors.fedoraproject.org/metalink?repo=updates-released-f12&arch=x86_64.

Além do local do repositório, o arquivo repo diz se um repositório em particular está ativado e se as assinaturas GPG devem ser usadas para verificar os pacotes transferidos por download.

Listagem 4. /etc/yum.repos.d/*.repo
[ian@echidna ~]$ cat /etc/yum.repos.d/fedora-updates.repo
[updates]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever
/$basearch/
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$r
eleasever&arch=$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

[updates-debuginfo]
name=Fedora $releasever - $basearch - Updates - Debug
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever
/$basearch/debug/
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-deb
ug-f$releasever&arch=$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

[updates-source]
name=Fedora $releasever - Updates Source
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever
/SRPMS/
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-sou
rce-f$releasever&arch=$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

O YUM e o RPM usam um banco de dados local para determinar quais pacotes estão instalados. Os metadados sobre pacotes que estão armazenados no banco de dados local são recuperados dos repositórios ativados. Embora você raramente tenha que se preocupar com o banco de dados local, use o comando yum clean paralimpar várias das informações armazenadas localmente, e yum makecache para criar as informações em seu banco de dados local para os repos ativados. Você deve fazer isso se alterar a configuração do repo, por exemplo.


Remoção de pacotes de RPM

Se deseja remover um pacote, é possível usar a opção yum removeou a opção -e do rpm. Uma execução de teste para mover o gcl usando a opção rpm  -e é mostrada na listagem 5. Se o pacote for removido, não haverá saída.

Listagem 5. Teste de remoção do gcl
[root@echidna ~]# rpm -e --test gcl

Diferentemente da remoção simulada de pacotes do Debian usando apt-get, o sistema RPM não mantém informações sobre pacotes que foram adicionados automaticamente, de modo que não há uma forma trivial de descobrir quais dependências também devem ser removidas. No entanto, se você especificar múltiplos pacotes para remoção em um único comando, então os pacotes sem dependências serão removidos antes dos pacotes que contêm dependências.

Ao remover pacotes usando o rpm, não há nenhum prompt antes de os pacotes serem removidos, diferentemente de quando os pacotes são instalados. No entanto, se você tentar remover um pacote que é necessário para algum outro pacote, a operação não é realizada e você recebe uma mensagem de erro, como mostrado na listagem 6.

Listagem 6. Remoção de um pacote dependente com rpm
[root@echidna ~]# rpm -e gcl-selinux
error: Failed dependencies:
	gcl-selinux is needed by (installed) gcl-2.6.8-0.7.20100201cvs.fc12.x86_64

Em vez disso, se usar yum remove, então você será avisado depois que os testes de transação forem realizados. Se o pacote que você está tentando remover é um pacote dependente para outros pacotes instalados, o YUM perguntará se deseja remover estes pacotes além do pacote dependente, como mostrado na listagem 7.

Listagem 7. Remoção de um pacote dependente com yum
[root@echidna ~]# yum remove gcl-selinux
Loaded plugins: presto, refresh-packagekit
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be erased
--> Processing Dependency: gcl-selinux for package: gcl-2.6.8-0.7.20100201cvs.fc12.x86_64
--> Running transaction check
---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be erased
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package          Arch        Version                            Repository     Size
=====================================================================================
Removing:
 gcl-selinux      x86_64      2.6.8-0.7.20100201cvs.fc12         @updates       90 k
Removing for dependencies:
 gcl              x86_64      2.6.8-0.7.20100201cvs.fc12         @updates       40 M

Transaction Summary
=====================================================================================
Remove        2 Package(s)
Reinstall     0 Package(s)
Downgrade     0 Package(s)

Is this ok [y/N]: n
Exiting on user Command
Complete!

Upgrade de pacotes de RPM

Agora que você sabe como instalar e remover um RPM, vamos dar uma olhada em como fazer o upgrade de pacotes de RPM para um nível mais novo. É possível usar yum update para atualizar todo o seu sistema, ou é possível especificar um único pacote ou uma especificação curinga. A listagem 8 mostra como atualizar todos os pacotes cujos nomes começam com "gr". Observe o uso de aspas para evitar expansão de shell do "*".

Listagem 8. Atualização usando a atualização do yum
[root@echidna ~]# yum update 'gr*'
Loaded plugins: presto, refresh-packagekit
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package grep.x86_64 0:2.6.3-1.fc12 set to be updated
---> Package groff.x86_64 0:1.18.1.4-20.fc12 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package         Arch             Version                    Repository         Size
=====================================================================================
Updating:
 grep            x86_64           2.6.3-1.fc12               updates           228 k
 groff           x86_64           1.18.1.4-20.fc12           updates           1.5 M

Transaction Summary
=====================================================================================
Install       0 Package(s)
Upgrade       2 Package(s)

Total download size: 1.7 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Download delta size: 854 k
http://fedora.fastsoft.net/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3-
6.fc12_2.6.3-1.fc12.x86_64.drpm: [Errno 14] HTTP Error 404 : http://fedora.fastsoft.n
et/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_
64.drpm 
Trying other mirror.
(1/2): grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_64.drpm             | 214 kB     00:00     
(2/2): groff-1.18.1.4-18.fc12_1.18.1.4-20.fc12.x86_64.drpm    | 640 kB     00:00     
Finishing rebuild of rpms, from deltarpms
<delta rebuild>                                               | 1.7 MB     00:02     
Presto reduced the update size by 52% (from 1.7 M to 854 k).
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating       : grep-2.6.3-1.fc12.x86_64                                      1/4 
  Updating       : groff-1.18.1.4-20.fc12.x86_64                                 2/4 
  Cleanup        : grep-2.5.3-6.fc12.x86_64                                      3/4 
  Cleanup        : groff-1.18.1.4-18.fc12.x86_64                                 4/4 

Updated:
  grep.x86_64 0:2.6.3-1.fc12             groff.x86_64 0:1.18.1.4-20.fc12            

Complete!

Se você sabe onde os arquivos RPM estão localizados, ou para onde eles foram transferidos por download, também é possível atualizar usando o rpm . Esse é um processo semelhante à instalação, exceto pelo fato de que se usa a opção -U ou a opção-F , em vez da opção -i . A diferença entre essas duas opções é que a opção -U fará o upgrade de um pacote existente ou instalará o pacote se ele ainda não foi instalado, enquanto a opção -F fará somente o upgrade ou atualizará um pacote que já está instalado. Por causa disso, a opção -U é usada frequentemente, especialmente quando a linha de comando contém uma lista de RPMs. Desse modo, os pacotes não instalados são instalados, enquanto os pacotes não instalados são atualizados. Duas outras opções, -v (verbose - detalhado) e -h (hash marks - jogo da velha), são usadas muitas vezes para oferecer uma indicação do progresso. A listagem 9 mostra como atualizar os pacotes vim-common, vim-enhanced e vim-minimal usando o rpm . Temos os pacotes vim-common e vim-enhanced já transferidos por download no diretório inicial raiz, enquanto recuperamos o pacote vim-minimal de um dos espelhos de atualização.

Listagem 9. Atualização de pacotes com rpm
[root@echidna ~]# ls *.rpm
vim-common-7.2.411-1.fc12.x86_64.rpm  vim-enhanced-7.2.411-1.fc12.x86_64.rpm
[root@echidna ~]# rpm -Uvh *.rpm http://mirrors.usc.edu/pub/linux/distributions\
> /fedora/linux/updates/12/x86_64/vim-minimal-7.2.411-1.fc12.x86_64.rpm
Retrieving http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/updates/12/x86
_64/vim-minimal-7.2.411-1.fc12.x86_64.rpm
Preparing...                ########################################### [100%]
   1:vim-common             ########################################### [ 33%]
   2:vim-enhanced           ########################################### [ 67%]
   3:vim-minimal            ########################################### [100%]

Consulta de pacotes RPM

Em nossos exemplos, você viu que instalar um rpm com o comando rpm exige o nome completo do arquivo do pacote (ou URL), como, por exemplo, gcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpm. Por outro lado, fazer a instalação com yum ou remover um rpm com qualquer comando exige somente o nome do pacote, como, por exemplo, gcl. Assim como o APT, o RPM mantém um banco de dados interno dos pacotes instalados, permitindo manipular os pacotes instalados usando o nome do pacote. Nesta seção, veremos algumas das informações que estão disponíveis para você nesse banco de dados usando a opção -q (de query) do comando rpm ou as consultas de yum associadas.

A consulta básica simplesmente pergunta se um pacote está instalado e, caso esteja, qual versão. Adicione a opção -i e você obterá informações sobre o pacote. Observe que você deve ter propriedade de administrador para instalar, atualizar ou remover pacotes, mas usuários não raiz podem realizar consultas junto ao banco de dados do rpm.

Listagem 10. Exibição de informações sobre o gcl
[ian@echidna ~]$ yum list gcl
Loaded plugins: presto, refresh-packagekit
Installed Packages
gcl.x86_64                  2.6.8-0.7.20100201cvs.fc12                  @updates
[ian@echidna ~]$ rpm -q gcl
gcl-2.6.8-0.7.20100201cvs.fc12.x86_64

[ian@echidna ~]$ yum info gcl
Loaded plugins: presto, refresh-packagekit
Installed Packages
Name       : gcl
Arch       : x86_64
Version    : 2.6.8
Release    : 0.7.20100201cvs.fc12
Size       : 40 M
Repo       : installed
From repo  : updates
Summary    : GNU Common Lisp
URL        : http://www.gnu.org/software/gcl/
License    : GPL+ and LGPLv2+
Description: GCL is a Common Lisp currently compliant with the ANSI standard.
           : Lisp compilation produces native code through the intermediary of
           : the system's C compiler, from which GCL derives efficient
           : performance and facile portability. Currently uses TCL/Tk as GUI.

[ian@echidna ~]$ rpm -qi gcl
Name        : gcl                          Relocations: (not relocatable)
Version     : 2.6.8                             Vendor: Fedora Project
Release     : 0.7.20100201cvs.fc12          Build Date: Tue 23 Mar 2010 03:20:36 PM EDT
Install Date: Wed 05 May 2010 01:01:34 PM EDT      Build Host: x86-02.phx2.fedoraproject.
org
Group       : Development/Languages         Source RPM: gcl-2.6.8-0.7.20100201cvs.fc12.sr
c.rpm
Size        : 41667750                         License: GPL+ and LGPLv2+
Signature   : RSA/8, Tue 23 Mar 2010 04:14:06 PM EDT, Key ID 9d1cc34857bbccba
Packager    : Fedora Project
URL         : http://www.gnu.org/software/gcl/
Summary     : GNU Common Lisp
Description :
GCL is a Common Lisp currently compliant with the ANSI standard.  Lisp
compilation produces native code through the intermediary of the
system's C compiler, from which GCL derives efficient performance and
facile portability. Currently uses TCL/Tk as GUI.

As listagens mais abrangentes mostram algumas das tags que podem ser associadas a um pacote RPM. Você observará que rpm eyum mostram informações ligeiramente diferentes em formatos ligeiramente diferentes. Neste artigo, ficaremos na saída básica fornecida pelas opções de comando padrão. Consulte a man page se quiser usar a opção - rpm  -queryformat para construir uma saída de consulta customizada. Tente executar a opção - rpm  -querytags se quiser conhecer todas as tags suportadas pela sua versão do rpm.

Como mostrado na listagem 10, é possível usar o yum para listar pacotes instalados. Também é possível usá-lo para listar pacotes que possuem atualizações disponíveis, pacotes que estão disponíveis para instalação e pacotes com outras características, como obsoletos ou recentemente adicionados a um repositório. É possível usar o yum até mesmo para procurar pacotes. Na listagem 11, é possível ver que o pacote texmacs não está instalado, mas está disponível no repositório do fedora. Se você procurar por "texmacs", verá quatro pacotes que o mencionam. É possível ver facilmente por que os pacotes TeXmacs* foram encontrados. Use pydot de informações do yum para descobrir por que o pacote pydot ainda é mencionado.

Listagem 11. Exibição de informações sobre o gcl
[ian@echidna ~]$ yum list texmacs
Loaded plugins: presto, refresh-packagekit
Available Packages
TeXmacs.x86_64                         1.0.7.2-2.fc12                          fedora
[ian@echidna ~]$ yum search texmacs
Loaded plugins: presto, refresh-packagekit
================================= Matched: texmacs ==================================
TeXmacs-devel.i686 : Development files for TeXmacs
TeXmacs-devel.x86_64 : Development files for TeXmacs
TeXmacs.x86_64 : Structured wysiwyg scientific text editor
pydot.noarch : Python interface to Graphviz's Dot language

Para o restante dos exemplos de consulta, usaremos principalmente o rpm, já que ele possui um conjunto mais abrangente de opções. Muitos dos exemplos também podem ser realizados com o yum, e o yum possui alguns recursos que não estão nas opções básicas do rpm . Consulte as man pages para aprender mais.

Pacotes de RPM e os arquivos contidos neles

Com frequência você irá querer saber o que há dentro de um pacote ou de qual pacote veio um arquivo em particular. Para listar os arquivos no pacote gcl, usa a opção -ql , como mostrado na listagem 12. Há muitos arquivos nesse pacote, então mostraremos apenas uma parte da saída.

Listagem 12. Exibição de arquivos do pacote gcl
[ian@echidna ~]$ rpm -ql gcl
/usr/bin/gcl
/usr/lib/gcl-2.6.8
/usr/lib/gcl-2.6.8/clcs
/usr/lib/gcl-2.6.8/clcs/sys-proclaim.lisp
/usr/lib/gcl-2.6.8/cmpnew
/usr/lib/gcl-2.6.8/cmpnew/gcl_cmpmain.lsp
/usr/lib/gcl-2.6.8/cmpnew/gcl_cmpopt.lsp
/usr/lib/gcl-2.6.8/cmpnew/gcl_collectfn.lsp
.
.
.
/usr/share/info/gcl-tk.info.gz
/usr/share/info/gcl.info-1.gz
/usr/share/info/gcl.info-2.gz
/usr/share/info/gcl.info-3.gz
/usr/share/info/gcl.info-4.gz
/usr/share/info/gcl.info-5.gz
/usr/share/info/gcl.info-6.gz
/usr/share/info/gcl.info-7.gz
/usr/share/info/gcl.info-8.gz
/usr/share/info/gcl.info-9.gz
/usr/share/info/gcl.info.gz
/usr/share/man/man1/gcl.1.gz

É possível restringir os arquivos listados para somente arquivos de configuração, adicionando a opção -c à sua consulta. De forma semelhante, a opção -d limita a exibição para somente arquivos de documentação.

Consulta de arquivos do pacote

Os comandos de consulta do pacote acima consultam o banco de dados do RPM para verificar se há pacotes instalados. Se você acabou de fazer o download de um pacote e quer usar o mesmo tipo de informações, é possível obter isso usando a opção -p (de package file) na sua consulta, especificando também o nome do arquivo do pacote (como usado para instalar o pacote). A listagem 13 mostra isso para os dois pacotes vim transferidos por download anteriormente. Executamos como raiz apenas porque os arquivos estavam no diretório inicial raiz. É possível adicionar outras opções de consulta, como -l para listar arquivos ou -i para listar informações.

Listagem 13. Exibição das informações do arquivo do pacote para dois pacotes vim
[root@echidna ~]# rpm -qp *.rpm
vim-common-7.2.411-1.fc12.x86_64
vim-enhanced-7.2.411-1.fc12.x86_64

Consulta de todos os pacotes instalados

A opção -a se aplica à sua consulta para todos os pacotes instalados. Isso pode gerar muita saída, então você normalmente irá usá-la em conjunção com um ou mais filtros, como sort para classificar a listagem, more ou less para passar pelas páginas, wc para obter contagens de pacote ou arquivo, ou grep para procurar pacotes cujos nomes você não tem certeza. A listagem 14 mostra as seguintes consultas:

  1. Uma lista classificada de todos os pacotes do sistema
  2. Uma contagem de todos os pacotes do sistema
  3. Uma contagem de todos os arquivos em todos os pacotes do sistema
  4. Uma contagem com todos os arquivos de documentação instalados com RPMs
  5. Uma procura por todos os pacotes com "gcl" (sem distinção de maiúsculas e minúsculas) como parte do nome
Listagem 14. Consultas com relação a todos os pacotes
[ian@echidna ~]$ rpm -qa | sort | more
aalib-libs-1.4.0-0.18.rc5.fc12.x86_64
abrt-1.0.8-2.fc12.x86_64
abrt-addon-ccpp-1.0.8-2.fc12.x86_64
abrt-addon-kerneloops-1.0.8-2.fc12.x86_64
abrt-addon-python-1.0.8-2.fc12.x86_64
abrt-desktop-1.0.8-2.fc12.x86_64
abrt-gui-1.0.8-2.fc12.x86_64
abrt-libs-1.0.8-2.fc12.x86_64
abrt-plugin-bugzilla-1.0.8-2.fc12.x86_64
abrt-plugin-logger-1.0.8-2.fc12.x86_64
abrt-plugin-runapp-1.0.8-2.fc12.x86_64
abyssinica-fonts-1.0-5.fc12.noarch
acl-2.2.49-2.fc12.x86_64
...
[ian@echidna ~]$ rpm -qa | wc -l
1792
[ian@echidna ~]$ rpm -qal | wc -l
281052
[ian@echidna ~]$ rpm -qad | wc -l
45686
[ian@echidna ~]$ rpm -qa | grep -i gcl
gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64
gcl-2.6.8-0.7.20100201cvs.fc12.x86_64

Usar rpm -qa pode facilitar a administração de múltiplos sistemas. Se você redirecionar a saída classificada para um arquivo em uma máquina e depois fizer o mesmo em outra máquina, é possível usar o programa diff para localizar as diferenças.

Qual pacote contém um arquivo?

Dado que é possível listar todos os pacotes e todos os arquivos em um pacote, agora você possui todas as informações de que precisa para localizar qual pacote contém um arquivo. No entanto, o comando rpm fornece uma opção -f (ou --file) para ajudá-lo a localizar o pacote que contém um arquivo. Suponha que você queira saber quais dos pacotes vim vistos anteriormente realmente fornece o vim . Você precisará fazer o caminho completo até o arquivo. A listagem 15 mostra como usar o comando which para obter o caminho completo para o comando vim e uma dica útil para usar essa saída como entrada para rpm -qf . Observe que as marcas em torno de `which guile-config` são acentos agudos. Outra forma de usar isso no Bash shell é usar $(which vim).

Listagem 15. Qual pacote fornece o vim executável
[ian@echidna ~]$ which vim
/usr/bin/vim
[ian@echidna ~]$ rpm -qf `which vim`
vim-enhanced-7.2.411-1.fc12.x86_64
[ian@echidna ~]$ rpm -qf $(which vim)
vim-enhanced-7.2.411-1.fc12.x86_64

Dependências de RPM

Você viu anteriormente que nossa tentativa de apagar o pacote gcl-selinux falhou por causa das dependências. Além de arquivos, um pacote RPM pode conter recursos arbitrários dos quais outros pacotes podem depender.

Como você viu, isso normalmente funciona bem. Se precisar instalar vários pacotes de uma vez, sendo que alguns deles podem depender de outros, use simplesmente o yum ou forneça toda a lista para o seu comando rpm -Uvh e ele analisará as dependências e realizará as instalações na ordem correta.

Além de tentar instalar ou apagar um pacote e obter uma mensagem de erro, há maneiras de descobrir quais arquivos ou recursos um pacote requer ou depende de.

O comando rpm fornece uma opção para interrogar pacotes instalados ou arquivos do pacote para descobrir de quais recursos eles dependem ou exigem.Essa é a opção --requires , que pode ser abreviada para -R. A listagem 16 mostra os recursos requeridos pelo gcl. Adicione a opção -p e use o nome completo do arquivo de RPM se quiser consultar o arquivo do pacote em vez de o banco de dados do RPM.

Listagem 16. O que o gcl requer
[ian@echidna ~]$ rpm -qR gcl
/bin/sh  
/bin/sh  
/bin/sh  
/sbin/install-info  
/sbin/install-info  
gcl-selinux  
libX11.so.6()(64bit)  
libc.so.6()(64bit)  
libc.so.6(GLIBC_2.11)(64bit)  
libc.so.6(GLIBC_2.2.5)(64bit)  
libc.so.6(GLIBC_2.3)(64bit)  
libc.so.6(GLIBC_2.3.4)(64bit)  
libc.so.6(GLIBC_2.4)(64bit)  
libc.so.6(GLIBC_2.7)(64bit)  
libc.so.6(GLIBC_2.8)(64bit)  
libdl.so.2()(64bit)  
libgmp.so.3()(64bit)  
libm.so.6()(64bit)  
libm.so.6(GLIBC_2.2.5)(64bit)  
libreadline.so.6()(64bit)  
libtcl8.5.so()(64bit)  
libtk8.5.so()(64bit)  
libz.so.1()(64bit)  
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)  
rpmlib(PayloadIsXz) <= 5.2-1

Pode ser um pouco complicado fazer a correspondência entre os recursos e os pacotes que os fornecem. O comando yum com a opção deplist podem ser úteis aqui. Se você acabou de nomear um pacote que não é qualificado pela versão, é possível obter uma listagem de outras versões conhecidas. A listagem 17 mostra como obter a lista de dependências somente para a versão de gcl que está instalada.

Listagem 17. Uso de uma deplist do yum para localizar o que o gcl requer
[ian@echidna ~]$ yum deplist $(rpm -q gcl)
Loaded plugins: presto, refresh-packagekit
Finding dependencies: 
package: gcl.x86_64 2.6.8-0.7.20100201cvs.fc12
  dependency: libc.so.6(GLIBC_2.3.4)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: gcl-selinux
   provider: gcl-selinux.x86_64 2.6.8-0.6.20090701cvs.fc12
   provider: gcl-selinux.x86_64 2.6.8-0.7.20100201cvs.fc12
  dependency: libgmp.so.3()(64bit)
   provider: gmp.x86_64 4.3.1-5.fc12
  dependency: libc.so.6(GLIBC_2.8)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libc.so.6()(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: /sbin/install-info
   provider: info.x86_64 4.13a-7.fc12
   provider: info.x86_64 4.13a-9.fc12
  dependency: libX11.so.6()(64bit)
   provider: libX11.x86_64 1.3-1.fc12
  dependency: libc.so.6(GLIBC_2.7)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libtcl8.5.so()(64bit)
   provider: tcl.x86_64 1:8.5.7-4.fc12
   provider: tcl.x86_64 1:8.5.7-5.fc12
  dependency: libc.so.6(GLIBC_2.11)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libtk8.5.so()(64bit)
   provider: tk.x86_64 1:8.5.7-2.fc12
   provider: tk.x86_64 1:8.5.7-3.fc12
  dependency: libc.so.6(GLIBC_2.3)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libm.so.6()(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libz.so.1()(64bit)
   provider: zlib.x86_64 1.2.3-23.fc12
  dependency: rtld(GNU_HASH)
   provider: glibc.i686 2.11-2
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
   provider: glibc.i686 2.11.1-6
  dependency: libdl.so.2()(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libreadline.so.6()(64bit)
   provider: readline.x86_64 6.0-3.fc12
  dependency: /bin/sh
   provider: bash.x86_64 4.0.33-1.fc12
   provider: bash.x86_64 4.0.35-3.fc12
  dependency: libc.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libm.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6

Esta lista também mostra possíveis provedores para cada recurso. É possível ver que a maioria das dependências poderia ser fornecida por mais de um nível alternativo de um pacote. Por exemplo, /bin/sh pode vir de qualquer um dos dois níveis de bash. Com um pouco de filtragem criativa, é possível reduzir essa saída para uma lista de nomes de pacotes, como mostrado na listagem 18.

Listagem 18. Redução da saída da deplist do yum para somente lista de nomes de pacotes
[ian@echidna ~]$ yum deplist $(rpm -q gcl) | grep "provider:" | \
> awk '{ print $2 }'|sort|uniq
bash.x86_64
gcl-selinux.x86_64
glibc.i686
glibc.x86_64
gmp.x86_64
info.x86_64
libX11.x86_64
readline.x86_64
tcl.x86_64
tk.x86_64
zlib.x86_64

Se você só precisar saber quais pacotes precisam ser instalados, sempre é possível executar a instalação do yum e ver a lista antes que seja solicitado a aceitar a proposta de instalação.

Além de descobrir quais recursos um pacote requer, você pode precisar descobrir qual pacote fornece algum recurso. Você viu acima como descobrir qual pacote contém um arquivo. A listagem 19 mostra como usar rpm ou yum para localizar qual pacote fornece o recurso gcl-selinux(x86-64). Além de informações sobre pacotes instalados que fornecem o recurso, o YUM também mostra os pacotes ou versões disponíveis em repositórios. Essas são a versão original 2.6.8-0.6 do repositório do fedora e a versão 2.6.8-0.7 atualizada disponíveis no repositório de atualizações.

Listagem 19. Quais pacotes fornecem recurso gcl-selinux(x86-64)
[ian@echidna ~]$ rpm -q --whatprovides 'gcl-selinux(x86-64)'
gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64
[ian@echidna ~]$ yum whatprovides 'gcl-selinux(x86-64)'
Loaded plugins: presto, refresh-packagekit
gcl-selinux-2.6.8-0.6.20090701cvs.fc12.x86_64 : SELinux policy for GCL images
Repo        : fedora
Matched from:
Other       : gcl-selinux(x86-64)



gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64 : SELinux policy for GCL images
Repo        : updates
Matched from:
Other       : gcl-selinux(x86-64)



gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64 : SELinux policy for GCL images
Repo        : installed
Matched from:
Other       : Provides-match: gcl-selinux(x86-64)

Integridade do arquivo do pacote RPM

Para garantir sua integridade, os pacotes de RPM incluem uma compilação, como MD5 ou SHA1, e normalmente são assinados digitalmente. Os pacotes que são assinados digitalmente precisam de uma chave pública para verificação. Para verificar a integridade de um arquivo do pacote RPM, use a opção --checksig (abreviada para -K) do rpm. Você poderá achar útil adicionar a opção -v para uma saída mais detalhada. A listagem 20 mostra um exemplo de vim-enhanced de RPM.

Listagem 20. Verificação da integridade do arquivo do pacote vim- enhanced
[root@echidna ~]# rpm -vK vim-enhanced-7.2.411-1.fc12.x86_64.rpm
vim-enhanced-7.2.411-1.fc12.x86_64.rpm:
    Header V3 RSA/SHA256 signature: OK, key ID 57bbccba
    Header SHA1 digest: OK (f9a199545a515f7ff0716729768b41eb68fe29a8)
    V3 RSA/SHA256 signature: OK, key ID 57bbccba
    MD5 digest: OK (d4045f1f72d48073e3f401ee9d1f71cf)

É possível obter uma linha de saída como esta:

V3 DSA signature: NOKEY, key ID 16a61572

Isso significa que você possui um pacote assinado, mas não possui a chave pública necessária no seu banco de dados de RPM. Observe que versões anteriores de RPM podem apresentar a verificação de um modo diferente.

Se um pacote está assinado e você deseja verificá-lo com relação à assinatura, você precisará localizar o arquivo de assinatura apropriado e importá-lo no seu banco de dados de RPM. Primeiro você deve fazer o download da chave e depois verificar sua impressão digital antes de importá-la usando rpm --import . Para obter mais informações, consulte as man pages de RPM. Você também encontrará mais informações sobre binários assinados na página inicial de RPM (consulte Recursos para obter um link).


Verificação de um pacote instalado

Além de verificar a integridade em um rpm, também é possível verificar a integridade dos seus arquivos instalados usando rpm -V. Essa etapa garante que os arquivos não foram modificados desde que foram instalados do rpm. Como mostrado na listagem 21, não há saída desse comando se o pacote ainda estiver bom, mas é possível adicionar a opção -v para obter uma saída muito mais detalhada.

Listagem 21. Verificação do pacote vim-common instalado
[ian@echidna ~]$ rpm -V vim-common

Let's become root and corrupt our vim-common installation by deleting /usr/bin/xxd and replacing /usr/share/vim/vim72/syntax/bindzone.vim /bin/bash. Vamos tentar fazer a verificação mais uma vez. Os resultados são mostrados na listagem 22.

Listagem 22. Violação com o pacote vim-common
[root@echidna ~]# rpm -qf /usr/bin/xxd /usr/share/vim/vim72/syntax/bindzone.vim
vim-common-7.2.411-1.fc12.x86_64
vim-common-7.2.411-1.fc12.x86_64
[root@echidna ~]# rm /usr/bin/xxd
rm: remove regular file `/usr/bin/xxd'? y
[root@echidna ~]# cp /bin/bash /usr/share/vim/vim72/syntax/bindzone.vim
cp: overwrite `/usr/share/vim/vim72/syntax/bindzone.vim'? y
[root@echidna ~]# rpm -V vim-common
missing     /usr/bin/xxd
S.5....T.    /usr/share/vim/vim72/syntax/bindzone.vim

Essa saída nos mostra que o arquivo /usr/share/vim/vim72/syntax/bindzone.vim falha na soma de MD5, tamanho do arquivo e testes de mtime. Uma forma de resolver o problema seria remover o pacote e depois reinstalá-lo, mas há outros pacotes que dependem do vim-common e que estão instalados e ainda estão OK. A solução é reinstalá-lo de forma forçada, usando a opção --force do rpm ou a função reinstall do yum. A listagem 23 mostra como reinstalar com o yum e depois verificar se o pacote está OK e se o arquivo excluído foi restaurado.

Listagem 23. Reinstalação do pacote vim-common
[root@echidna ~]# yum reinstall vim-common
Loaded plugins: presto, refresh-packagekit
Setting up Reinstall Process
Resolving Dependencies
--> Running transaction check
---> Package vim-common.x86_64 2:7.2.411-1.fc12 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package            Arch           Version                     Repository       Size
=====================================================================================
Reinstalling:
 vim-common         x86_64         2:7.2.411-1.fc12            updates         6.0 M

Transaction Summary
=====================================================================================
Remove        0 Package(s)
Reinstall     1 Package(s)
Downgrade     0 Package(s)

Total download size: 6.0 M
Installed size: 17 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
updates/prestodelta                                           | 969 kB     00:00     
Processing delta metadata
Package(s) data still to download: 6.0 M
vim-common-7.2.411-1.fc12.x86_64.rpm                          | 6.0 MB     00:01     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing     : 2:vim-common-7.2.411-1.fc12.x86_64                            1/1 

Installed:
  vim-common.x86_64 2:7.2.411-1.fc12                                                 

Complete!
[root@echidna ~]# rpm -V vim-common
[root@echidna ~]# ls /usr/bin/xxd
/usr/bin/xxd

Se precisar de mais força

Normalmente, o sistema de gerenciamento de pacote mantém seus pacotes em ordem. No entanto, se você excluir algum arquivo que seja uma parte importante de um pacote—e reinstalar o pacote sem removê-lo, isso não corrigirá o problema—então é preciso remover o pacote antes de instalá-lo novamente. Neste caso, muito provavelmente você irá querer excluir a cópia existente e reinstalá-lo, sem a necessidade de desinstalar e reinstalar todos os pacotes que dependem dele. Para isso, é possível usar a opção --nodeps do comando de rpm para evitar verificação de dependência ao remover um pacote. A listagem 24 mostra como isso funciona se você removeu acidentalmente o arquivo /usr/bin/xxd file, que é parte do pacote vim-common, como fizemos anteriormente.

Listagem 24. Atualização de pacotes com rpm
[root@echidna ~]# rm /usr/bin/xxd
rm: remove regular file `/usr/bin/xxd'? y
[root@echidna ~]# # Oops! we needed that file
[root@echidna ~]# rpm -Fvh vim-common-7.2.411-1.fc12.x86_64.rpm 
[root@echidna ~]# ls /usr/bin/xxd
ls: cannot access /usr/bin/xxd: No such file or directory
[root@echidna ~]# # Oh! Freshening the package didn't replace the missing file
[root@echidna ~]# rpm -e vim-common
error: Failed dependencies:
	vim-common = 2:7.2.411-1.fc12 is needed by (installed) vim-enhanced-2:7.2.411-1.f
c12.x86_64
[root@echidna ~]# # Can't remove vim-common because vim-enhanced needs it
[root@echidna ~]# rpm -e --nodeps vim-common
[root@echidna ~]# # Bypassing the dependency check allowed removal
[root@echidna ~]# rpm -Uvh vim-common-7.2.411-1.fc12.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:vim-common             ########################################### [100%]
[root@echidna ~]# # Update (or install) vim-common again
[root@echidna ~]# ls /usr/bin/xxd
/usr/bin/xxd
[root@echidna ~]# # And /usr/bin/xxd is back

Assim, há algumas abordagens para atualização e reparo se acidentes acontecerem e o processo de atualização comum falhar. Observe que também é possível evitar verificação de dependência ao instalar um RPM, mas normalmente essa não é uma boa ideia.


Download de RPMs de repositórios

Embora o yum recupere automaticamente pacotes de repositórios, você pode querer fazer o download de RPMs e salvá-los, talvez para instalá-los em um sistema sem rede ou para examinar seu conteúdo, ou por qualquer outro motivo. É possível usar o comando yumdownloader , como mostrado na listagem 25. No nosso caso, o pacote já está instalado, de modo que não há pacotes adicionais a serem transferidos por download. Se tais pacotes existissem, a opção --resolve faria com que eles fossem transferidos por download também.

Listagem 25. Download do pacote gcl
[ian@echidna ~]$ yumdownloader --resolve gcl
Loaded plugins: presto, refresh-packagekit
adobe-linux-i386                                                               17/17
--> Running transaction check
---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated
--> Finished Dependency Resolution
gcl-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm                     | 6.3 MB     00:01

Uso do rpm2cpio

Se você fez o download de um RPM e precisa examinar seu conteúdo, em vez de instalá-lo é possível usar o comando rpm2cpiopara converter o conteúdo em um archive cpio e depois filtrá-lo através do comando cpio para extrair arquivos individuais ou todos os arquivos do pacote. A listagem 26 mostra como fazer isso com o pacote gcl-selinux e depois mostra quais arquivos (e diretórios) foram desempacotados. Consulte as man pages do rpm2cpio e do cpio para obter detalhes adicionais sobre esses comandos.

Listagem 26. Desempacotamento do pacote gcl-selinux com rpm2cpio
[ian@echidna ~]$ yumdownloader gcl-selinux
Loaded plugins: presto, refresh-packagekit
gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm        |  17 kB     00:00     
[ian@echidna ~]$ mkdir gcl-selinux
[ian@echidna ~]$ cd gcl-selinux
[ian@echidna gcl-selinux]$ rpm2cpio ../gcl-selinux*.rpm | cpio -idv
./usr/share/selinux/packages/gcl
./usr/share/selinux/packages/gcl/gcl.pp
182 blocks
[ian@echidna gcl-selinux]$ find .
.
./usr
./usr/share
./usr/share/selinux
./usr/share/selinux/packages
./usr/share/selinux/packages/gcl
./usr/share/selinux/packages/gcl/gcl.pp

Descoberta de RPMs

Vimos anteriormente que o YUM oferece um recurso de procura, que procura descrições, bem como nomes de pacote. Se precisar localizar qual pacote contém um programa que você não instalou, há outras maneiras de se fazer isso:

  • Você pode adivinhar qual pacote pode contê-lo e fazer o download do pacote sem instalá-lo. Assim que tiver o pacote, é possível interrogá-lo.
  • É possível procurar na Internet.
  • Você deve usar o recurso de comando não encontrado descrito abaixo.

Se não conseguir localizar um RPM em particular através das suas ferramentas de sistema, um bom recurso da Internet para localizar RPMs é o servidor Rpmfind.Net (consulte Recursos para obter um link).

Comando não encontrado

Quando o Bash shell procura um comando e não o localiza, o shell procura por uma função de shell chamada command_not_found_handle. Se a funçãocommand_not_found_handle existir, ela é invocada com o comando original e os argumentos originais como seus argumentos, e o status de saída da função se torna o status de saída do shell. Se a função não estiver definida, o shell imprime uma mensagem de erro e retorna um status de saída 127. A função normalmente é configurada no arquivo /etc/bash.bashrc do sistema. A listagem 27 mostra como procuramos pelo recurso de comando não encontrado e depois o instalamos.

Listagem 27. Localização e instalação do recurso de comando não encontrado
[root@echidna ~]# yum search command-not-found
Loaded plugins: presto, refresh-packagekit
========================== Matched: command-not-found ==========================
PackageKit-command-not-found.x86_64 : Ask the user to install command line
                                    : programs automatically
You have new mail in /var/spool/mail/root
[root@echidna ~]# yum install PackageKit-command-not-found.x86_64
Loaded plugins: presto, refresh-packagekit
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package PackageKit-command-not-found.x86_64 0:0.5.7-2.fc12 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                          Arch       Version          Repository   Size
================================================================================
Installing:
 PackageKit-command-not-found     x86_64     0.5.7-2.fc12     updates     102 k

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)

Total download size: 102 k
Installed size: 262 k
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Package(s) data still to download: 102 k
PackageKit-command-not-found-0.5.7-2.fc12.x86_64.rpm     | 102 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : PackageKit-command-not-found-0.5.7-2.fc12.x86_64         1/1 

Installed:
  PackageKit-command-not-found.x86_64 0:0.5.7-2.fc12                            

Complete!

A listagem 28 mostra como a identificação da função é definida depois da instalação do PackageKit-command-not-found. Se a função não puder realizar a procura, ela imita o comportamento padrão do sistema e retorna 127.

Listagem 28. A função command_not_found_handle
[ian@echidna ~]$ type command_not_found_handle
command_not_found_handle is a function
command_not_found_handle () 
{ 
    runcnf=1;
    retval=127;
    [ ! -S /var/run/dbus/system_bus_socket ] && runcnf=0;
    [ ! -x /usr/sbin/packagekitd ] && runcnf=0;
    if [ $runcnf -eq 1 ]; then
        /usr/libexec/pk-command-not-found $1;
        retval=$?;
    else
        echo "bash: $1: command not found";
    fi;
    return $retval
}

Se ela não foi instalada antes de executar o gcl, como fizemos na listagem 1, você deve ter visto algo parecido com a listagem 29.

Listagem 29. Tentar gcl com command_not_found_handle
[ian@echidna ~]$ gcl
Command not found. Install package 'gcl' to provide command 'gcl'? [N/y]

Outras ferramentas

Além do yum e do rpm, seu distribuidor pode fornecer outras ferramentas para instalação de pacotes do repositório ou para atualizar todo o seu sistema. Essas ferramentas podem ser gráficas ou de linha de comando, ou ambas. Alguns exemplos:

  • YaST (SUSE)
  • up2date (Red Hat)
  • Mandrake Software Management (Mandriva)

Normalmente essas ferramentas lidarão com múltiplas atualizações de pacote de forma automática ou semiautomática. Elas também podem oferecer recursos de exibição de conteúdo de repositórios ou procura de pacotes. Consulte a documentação da sua distribuição para obter mais detalhes.


PackageKit

Nenhuma discussão sobre instalação de pacote seria completa sem mencionar o PackageKit, que é um sistema que foi elaborado para tornar a instalação e a atualização de software mais fáceis. O objetivo é unificar todas as ferramentas gráficas de software usadas em diferentes distribuições. O PackageKit usa um daemon ativado de sistema, o que significa que o daemon é ativado apenas quando necessário. O Packagekit possui versões para Gnome (gnome-packagekit) e KDE (KPackageKit). A identificação de comando não encontrado descrita acima também faz parte do PackageKit. Ele inclui os comandos pkcon , para realizar funções de gerenciamento de pacote a partir do console, e pkmon , para monitorar a atividade do kit do pacote. Ele também inclui ferramentas gráficas para inclusão de pacotes de software ou para atualização do seu sistema. A figura 1 mostra um exemplo da interface gráfica do Software Update.

Figura 1. Interface gráfica do Software Update no Fedora 12 (Gnome)
Screen shot of the Software Update graphical interface on Fedora 12 (Gnome)

Há muito mais sobre os sistemas de gerenciamento de pacote RPM e YUM do que aquilo que foi abordado aqui. Consulte Recursos para obter links adicionais.

Recursos

Aprender

  • Use o roteiro do developerWorks para o LPIC-1 para encontrar os artigos do developerWorks que o ajudarão a estudar para a certificação LPIC-1 de acordo com os objetivos de abril de 2009.
  • No site LPIC Program , você encontra objetivos detalhados, listas de tarefas e exemplos de perguntas referentes aos três níveis da certificação em administração de sistema do Linux Professional Institute. Especificamente, consulte os objetivos de abril de 2009 referentes ao exame LPI 101 eexame LPI 102. Consulte sempre o site do Programa LPIC para ver os objetivos mais recentes.
  • Revise toda a série de preparação para os exames LPI no developerWorks para aprender os fundamentos de Linux e se preparar para a certificação de administrador de sistema com base em objetivos dos exames LPI anteriores a abril de 2009.
  • Na página inicial de RPM encontre informações atuais sobre a ferramenta de pacote e os ponteiros do software RPM para obter mais informações sobre RPM.
  • O livro Maximum RPM oferece um tratamento abrangente e sistemático de todos os aspectos de RPM. Ele está disponível em formato impresso e não impresso.
  • No LSB Home, aprenda sobre o Linux Standard Base (LSB), um projeto do Free Standards Group (FSG) para desenvolver um ambiente operacional binário padrão.
  • Consulte a página inicial doPackageKit para aprender mais sobre o PackageKit.
  • O Linux Documentation Project tem uma série de documentos úteis, com destaque para as suas instruções.
  • Na zona Linux do developerWorks, você encontra centenas de artigos e tutoriais de instruções além de downloads, fóruns de discussão e vários outros recursos para desenvolvedores e administradores de Linux.
  • Fique por dentro dos eventos técnicos e webcasts do developerWorks sobre uma série de produtos IBM e tópicos do segmento de mercado de TI.
  • Participe de instruções em Live! grátis no developerWorks para atualizar-se rapidamente sobre produtos e ferramentas IBM e tendências do segmento de mercado de TI.
  • Acompanhe Demos on demand do developerWorks que abrangem desde demos de instalação e configuração de produtos para iniciantes até funcionalidade avançada para desenvolvedores experientes.
  • Siga o developerWorks no Twitter, ou assine um feed de tweets sobre o Linux no developerWorks.

Obter produtos e tecnologias

  • Localize pacotes em um dos espelhos da sua distribuição, como o Fedora/12 Public Active Mirrors.
  • Procure RPMs para a sua distribuição em Rpmfind.Net e RPM Search.
  • Avalie os produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto online, use-o em um ambiente de nuvem ou passe algumas horas na SOA Sandbox aprendendo a implementar a Arquitetura Orientada a Serviços com eficiência.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=600653
ArticleTitle=Aprenda Linux, 101: Gerenciamento de pacote RPM e YUM
publish-date=12132010