Hugo Cisneiros (Eitch), hugo arroba devin ponto com ponto br
Versão 4.0, 2006

The Linux Manual

3.4. Comandos de pacotes (Instalação/Desinstalação/Consulta)

Índice

3.4.1. Pacotes TGZ no Slackware
3.4.2. Pacotes RPM
3.4.3. Pacotes DEB
3.4.4. Gerenciador APT
3.4.5. Gerenciador YUM

No Linux, geralmente os aplicativos vêem em forma de código-fonte, então o usuário tem de baixar e compilar. Os pacotes servem justamente para facilitar o trabalho do usuário, dando a ele um arquivo empacotado com o código já compilado. Existem diversos gerenciadores de pacotes que iremos aprender a usar o básico deles aqui. Tem o RPM (RPM Package Manager), que é usado por várias distribuições como o Mandriva, Red Hat, SuSE, Mandrake, etc. Também tem o DEB (Debian), muito bom também e usado pela distribuição Debian e suas derivadas (que são baseadas no Debian justamente por causa do tipo de gerenciamento de pacotes). E temos também o empacotamento do Slackware (TGZ), que não é tão poderoso como os anteriores, mas serve muito bem.

Além de empacotar o código-fonte compilado, os gerenciadores de pacotes também armazenam as informações de instalação em um banco de dados, para depois o usuário ter informações sobre a instalação e para desinstalar o pacote do sistema. E não há apenas pacotes com código-fonte compilado, também há pacotes que contém o código-fonte sem compilar, mas empacotado, como é o caso dos SRPMS (Source RPMS).

Então vamos ver algumas instruções de como usar estes gerenciadores de pacotes tão úteis e práticos :)

3.4.1. Pacotes TGZ no Slackware

Os pacotes TGZ do Slackware são bem mais simples que os outros tipos de pacotes. Eles são arquivos empacotados e compactados em formato .tar.gz, com a estrutura de diretórios igual ao do sistema e alguns scripts adicionais com informações sobre o pacote. Você pode ver o conteúdo do arquivo justamente descompactando em um diretório qualquer que você tenha criado.

Além disso, nesse tipo de pacote, não há resolução automática de dependências (quer dizer, há gerenciadores tratados mais a frente que fazem isso, mas não de uma forma perfeita). Vamos aprender agora como usar algumas coisas essenciais para os pacotes do Slackware :)

No Slackware, você pode utilizar um menu centralizado ou utilizar os comandos separados para manipular os pacotes do sistema. Para acessar o menu centralizado, digite:

# pkgtool

No menu, você poderá fazer determinadas ações dependendo da opção que você escolher:

Opção Ação
Current Instala todos os arquivos pacotes (.tgz) do diretório atual (onde você executou o comando pkgtool).
Other Instala todos os pacotes contidos em um outro diretório (você irá especificar)
Floppy Instala todos os pacotes contidos em um disquete que você fornecer
Remove Remove um pacote já instalado do sistema (ele lhe dará a lista de pacotes)
View Mostra uma lista dos pacotes do sistema e seus detalhes
Setup Configura alguns pacotes que possuem scripts pra isso

Tabela 3.8. Opções do comando pkgtool

Ou você pode utilizar os comandos individuais para essas tarefas. Por exemplo, se você quiser instalar um pacote .tgz, faça:

# installpkg pacote.tgz

O comando installpkg apenas instala um pacote, mesmo tendo uma versão antiga deste mesmo pacote já instalado. Nesse caso, se você instalar com o installpkg, seu sistema ficará com duas versões do pacote. Para evitar isso quando for fazer uma atualização de versão de um certo pacote, faça:

# upgradepkg pacote.tgz

Para remover um pacote do sistema, use:

# removepkg pacote

Se por acaso você tiver problemas com o pacote e deseja descompactá-lo de forma correta para analisar (o que poderá não ser muito comum e necessário fazer), você pode utilizar o comando:

# explodepkg pacote.tgz

E esses são os comandos individuais. Existe também o makepkg, que cria pacotes .tgz de forma simples. Mas como isso sai um pouco do assunto deste tópico, deixa pra próxima ;)

3.4.2. Pacotes RPM

Para instalar um pacote, usa-se a opção -i:

# rpm -i pacote.rpm

Você também pode utilizar as opções -v e -h combinadas com a -i para uma mostragem mais agradável. Se você já tem o pacote.rpm e deseja atualizar para uma versão mais recente da mesma, você utiliza a opção -U ao invés da -i, exemplo:

# rpm -Uvh pacote-atualizacao.rpm

Isso irá atualizar os arquivos do pacote. Se você quer retirar o pacote do seu sistema, você utiliza a opção -e, assim:

# rpm -e nome-do-pacote

Caso este pacote gere dependências com outros pacotes e mesmo assim você queira removê-lo, você pode utilizar a opção --force, que como o nome diz, força a remoção do mesmo:

# rpm -e nome-do-pacote --force
[Cuidado] Cuidado

Forçar a remoção de um pacote sem resolver as dependência pode causar os programas dependentes do pacote a não funcionarem corretamente. Use apenas se você souber o que estiver fazendo.

Agora o contrário: se você quer instalar um pacote que requer outros pacotes como dependência, utilize o parâmetro --nodeps, dessa forma:

# rpm -Uvh pacote.rpm --nodeps

Além da instalação e desinstalação de pacotes, um recurso muito útil no RPM é a consulta aos pacotes já existentes. Por exemplo, se você quiser listar todos os pacotes instalados no sistema, pode utilizar o comando:

# rpm -qa

Ou se preferir, pode utilizar outros comandos como filtro, organizando melhor a sua visualização:

# rpm -qa | sort | less

O comando acima executou o rpm -qa, ordenou por ordem alfabética e utilizou o comando less para ajudar na visualização. Agora você pode utilizar as setas do teclado, ou as teclas PgUp e PgDown, para navegar entre a listagem e quando quiser sair, é só apertar a tecla Q.

Se você quiser apenar ver se tem um pacote instalado no sistema, sem ter que listar todos e procurar de um em um, basta apenas colocar o nome do pacote depois do comando anterior, exemplo:

# rpm -qa kdebase

kdebase-3.4.1-1.2.fc4.kde

Ou então você pode combinar com o comando grep e listar todos os pacotes com o nome exemplo kde, dessa forma:

# 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
kdelibs-3.4.1-1.3.fc4.kde
kdebase-3.4.1-1.2.fc4.kde
kdeutils-3.4.1-1.2.fc4.kde
kdemultimedia-3.4.1-1.2.fc4.kde
k3b-mp3-0.12.2-1.0.fc4.kde

Legal. Agora eu quero obter informações detalhadas sobre um pacote específico... Digamos assim, do pacote wget:

# rpm -qi wget

Name        : wget                         Relocations: (not
relocatable)
Version     : 1.9.1                             Vendor: Red Hat, Inc.
Release     : 22                            Build Date: Wed 02 Mar 2005 09:23:08
AM BRT
Install Date: Thu 23 Jun 2005 12:05:03 PM BRT      Build Host:
porky.build.redhat.com
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, Key ID 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.

Acima você pode observar qual o pacote fonte do wget, qual o tamanho, quem empacotou, a 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 do Linux pode utilizar o rpm -qa para listar todos os pacotes e usar o rpm -qi para ver o que cada pacote faz :) Haja paciência!

Lembra das dependências? Se quisermos ver quais pacotes dependem de um certo pacote, usamos:

# rpm -qR pacote

Às vezes temos uma dúvida cruel: o que diabos esse arquivo está fazendo aqui? Ele pertence a quem? O que ele faz? Pra solucionar essas 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), ou seja, 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
/usr/share/doc/sox-12.17.7/TODO
/usr/share/man/man1/sox.1.gz
/usr/share/man/man1/soxexam.1.gz
/usr/share/man/man1/soxmix.1.gz

Pra completar, abaixo segue uma tabela com os comandos e suas funções RPM para sua referência e comodidade!

Comando Ação
rpm -qc pacote Lista os arquivos de configuração do pacote
rpm -qd pacote Lista os arquivos de documentação do pacote
rpm -qs pacote Diz o estado do pacote (normal/não instalado/substituído)
rpm --initdb Gera um banco de dados inicial de pacotes para o RPM
rpm --rebuilddb Refaz o banco de dados do RPM (Útil para recuperar um banco corrompido)

Tabela 3.9. Parâmetros do comando RPM

Para mais informações sobre o comando rpm, consulte sua página de manual com o comando:

$ man rpm

3.4.3. Pacotes DEB

Para manipular os pacotes .deb, o Debian e seus derivados utilizam um programa chamado dpkg. Vamos aprender agora como utilizar algumas coisas básicas deste programa.

Primeiro, para instalar um pacote, utilize a opção -i:

# dpkg -i pacote.deb

O -i também serve para atualização de um pacote. Ou seja, se o pacote já existir e o que você estiver tentando instalar for mais novo, ele atualiza para você.

Para remover um pacote do sistema, use o -r:

# dpkg -r pacote

Caso esse pacote não seja removido porque outros pacotes dependem dele, você pode forçar a remoção do pacote com o parâmetro --force-depends:

# dpkg -r --force-depends pacote
[Cuidado] Cuidado

Forçar a remoção de um pacote sem resolver as dependência pode causar os programas dependentes do pacote a não funcionarem corretamente. Use apenas se você souber o que estiver fazendo.

Para ver uma lista com todos os pacotes intalados no sistema, utilize:

# dpkg -l

O dpkg então irá te mostrar uma lista com todos os pacotes, o status deles, a versão e um pequeno sumário sobre o que é o pacote.

[Nota] Nota

Antes do nome do pacote, há duas letras que indicam o status do pacote. Caso seja ii, o pacote está instalado e configurado no sistema :)

Para saber se apenas um pacote está instalado, é só colocar o nome do pacote depois do comando anterior, assim:

# dpkg -l vim

Se você quiser listar todos os pacotes associados a uma certa palavra, use o parâmetro -l da seguinte forma:

# dpkg -l '*gnome*'

Dessa forma todos os pacotes com o nome gnome inclusos serão mostrados na tela.

Beleza, agora eu quero obter uma informação detalhada de um certo pacote (vamos usar o grub como exemplo). Para isso eu utilizo o parâmetro -p assim:

# dpkg -p grub

Package: grub
Priority: optional
Section: admin
Installed-Size: 668
Maintainer: Grub Maintainers <[email protected]>
Architecture: i386
Version: 0.95+cvs20040624-17
Depends: libc6 (>= 2.3.2.ds1-4), libncurses5 (>= 5.4-1)
Suggests: grub-doc, grubconf
Size: 358684
Description: GRand Unified Bootloader
 GRUB is a GPLed bootloader intended to unify bootloading across x86
 operating systems.  In addition to loading the Linux kernel,
 it implements the Multiboot standard, which allows for flexible loading
 of multiple boot images (needed for modular kernels such as the GNU Hurd).

Com isso você obtém detalhes do pacote, como por exemplo quem mantém o pacote, que seção ele pertence, qual arquiteura, do que ele depende, qual o tamanho, versão e um sumário e descrição sobre o que é o pacote. Tá bom pra você ou quer mais? :) Se quiser mais, você pode listar todos os pacotes com o dpkg -l e ir verificando os detalhes de cada pacote para ver o que cada um faz e tudo mais: uma eficiente, porém demorada forma de aprender!

Para verificar o status de um pacote (como mostrado na lista com o dpkg -l, utilize o parâmetro -s:

# dpkg -s pacote

Para listar os arquivos instalados do sistema de um certo pacote, use:

# dpkg -L pacote

E finalmente, se você quiser saber à qual pacote instalado um arquivo pertence (por exemplo: descobrir o que um executável associando à um pacote), use a opção -S dessa forma:

# dpkg -S arquivo

Exemplo:

# dpkg -S /usr/bin/file

file: /usr/bin/file

3.4.4. Gerenciador APT

O apt (Advanced Package Manager) é um poderoso gerenciador de pacotes que resolve as complicações de dependências de pacotes e instalação via internet. Com ele, é possível com apenas um comando, baixar a versão mais atual de um programa e instalar no sistema. Ele foi feito inicialmente para a distribuição Debian e seus pacotes .deb, mas com o tempo o apt foi portado para o tipo de pacote .rpm, podendo ser assim usado em distribuições baseadas em RPM.

Os arquivos do apt estão todos localizados no diretório /etc/apt. Dentro desse diretório há um importante arquivo chamado sources.list, que contém uma lista de todos os repositórios que você irá usar. Vamos aqui configurar apenas alguns repositórios padrões do Debian:

deb http://ftp.debian.org/debian/ sarge main non-free contrib

Exemplo 3.1. Repositório Debian Base (Sarge)

Essa linha acima é a linha que você deve deixar dentro do arquivo /etc/apt/sources.list para configurar o repositório do Debian na versão sarge (estável mais recente enquanto escrevo isto).

Depois dos repositórios configurados, você vai precisar atualizar a lista de pacotes, utilizando o seguinte comando:

# apt-get update

Então o apt irá baixar do servidor Debian da Internet a lista de pacotes com todos os seus cabeçalhos e descrições. Depois de atualizada a lista, você poderá fazer todos os comandos a seguir.

Para procurar por um pacote, utilizando uma palavra relacionada, utilize o apt-cache da seguinte forma:

# apt-cache search DVD

Assim ele te retornará vários pacotes associados com a palavra DVD. Por exemplo, aqui ele me retornou pacotes como o cdlabelgen, dvdauthor, k3b e por aí vai.

Para instalar um pacote e todas as suas dependências, use:

# apt-get install pacote
[Nota] Nota

O comando install também atualiza um pacote caso exista uma versão superior a já instalada no sistema.

Para remover um pacote e todas as suas dependências, use:

# apt-get remove pacote

Caso você queira atualizar todo o seu sistema, instalando as atualizações de todos os pacotes necessitados e carentes de atualização, use o comando upgrade:

# apt-get upgrade

E por último, se você quiser atualizar uma versão de distribuição totalmente (e isso inclui atualizações que podem se tornar perigosas e quebrar o sistema e explodir seu micro), use:

# apt-get dist-upgrade

Epa! Eu já ia me esquecendo... O apt também possui uma característica muito sensacional, que é utilizar os poderes da super vaca. Para utilizá-los, invoque a super vaca com o comando:

# apt-get moo

3.4.5. Gerenciador YUM

O Yum (Yellow dog Updater, Modified) é um programa cujo objetivo é resolver as complicações da instalação/desinstalação de pacotes. Com o yum, o processo de instalação de um pacote se torna extremamente simples: com apenas um comando, você consegue baixar da internet a versão mais atual e instalar no sistema, deixando pronto para o uso. Seu endereço oficial é: http://linux.duke.edu/projects/yum/.

O yum atualmente é utilizado oficialmente pela distribuição Fedora (Seção 2.1.7, “Fedora”. Então estas instruções serão baseadas nesta distribuição. Caso você queira saber como fazer em outra, tente utilizar o apt.

O arquivo de configuração do yum está localizado em /etc/yum.conf. Além disso, os repositórios (sites que contém os pacotes dos programas) são configurados através de cada arquivo com extensão .repo localizados no diretório /etc/yum.repos.d.

A configuração padrão do yum contida no /etc/yum.conf é suficiente para o bom funcionamento do programa. Você só precisará de alguns repositórios já confiurados. Por exemplo, o padrão para o repositório do Fedora Core é o arquivo /etc/yum.repos.d/fedora.repo (ou /etc/yum.repos.d/fedora-core.repo):


[base]
name=Fedora Core $releasever - $basearch - Base
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/
mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora

Exemplo 3.2. Repositório Base do Fedora (/etc/yum.repos.d/fedora.repo)

Com este repositório configurado, pode-se instalar e remover todos os pacotes básicos da distribuição. Mas e as atualizações? No caso das atualizações, o repositório é outro, contido em /etc/yum.repos.d/fedora-updates.repo:


[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/$releasever/$basearch/
mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora

Exemplo 3.3. Repositório de Atualizações (/etc/yum.repos.d/fedora-updates.repo)

[Dica] Dica

Há varios outros repositórios disponíveis (como o DAG, FreshRPMS, Fedora Extras) que contém outros programas. Cada um desses repositórios têm configurações próprias para criar um arquivo .repo. Não irei listar todos os repositórios e sim apenas os oficiais (o repositório Extras recentemente se tornou oficial e padrão nas distribuições Fedora): cabe à você depois de ter aprendido o básico conseguir o resto. Caso precise de ajuda adicional, tente consultar o Fedora FAQ — http://www.fedorafaq.org/ — que contém uma seção especialmente feita sobre como usar o yum com vários repositórios.

Agora vamos aprender a usar alguns comandos básicos com o yum. Primeiramente você pode listar todos os pacotes disponiveis para a instalação através do comando:

# yum list available

Ou então você pode procurar por um pacote, usando alguma palavra relacionada com o pacote. Por exemplo, se você quer todos os pacotes relacionados com a palavra 'DVD', use:

# yum search DVD

E ele te retornará vários pacotes relacionados com a palavra DVD (por exemplo, aqui retornou pacotes como cdrecord, k3b, dvd+rw-tools, etc).

Para instalar um pacote, use:

# yum install pacote

E o yum irá baixar o pacote da Internet e instalar para você. Ou seja, todas essas operações precisam de acesso à Internet ;) Para desinstalar o mesmo pacote, use:

# yum remove pacote

Caso você queira atualizar um certo pacote, use:

# yum update pacote

Ou se quiser atualizar todos os pacotes do seu sistema que precisem de atualização:

# yum update

E se você quiser apenas verificar se precisa de atualizações para o seu sistema ou não, faça um:

# yum check-update

Se você quer listar todos os pacotes disponíveis, utilize:

# yum list

Também existe o conceito de grupos de pacotes. Um grupo de pacotes é um conjunto de pacotes necessários para se instalar alguma funcionalidade no sistema. Para listar os grupos de pacotes, use o comando:

# yum grouplist

Installed Groups:
   Office/Productivity
   MySQL Database
   Editors
   System Tools
   Text-based Internet
   X Software Development
   DNS Name Server
   GNOME Desktop Environment
   Authoring and Publishing
   FTP Server
   Network Servers
   Games and Entertainment
   Legacy Software Development
   X Window System
   Graphics
   Web Server
   Windows File Server
   Printing Support
   KDE Software Development
   KDE (K Desktop Environment)
   Mail Server
   Server Configuration Tools
   Sound and Video
   Administration Tools
   Development Tools
   Graphical Internet
Available Groups:
   Engineering and Scientific
   Window Managers
   GNOME Software Development
   XFCE Software Development
   Legacy Network Server
   Hardware Support
   XFCE
   Java Development
   Eclipse
   Educational Software
   PostgreSQL Database
   News Server

Com isso ele mostra os grupos disponiveis e já instalados. No caso eu quero instalar o suporte ao XFCE, então faço:

# yum groupinstall "XFCE"

E para removê-lo:

# yum groupremove "XFCE"

E é isso!

[Importante] Importante

Como eu disse anteriormente, você necessita de uma conexão de Internet para fazer todas os comandos acima, mesmo consultar o nome de um pacote por alguma palavra relacionada. Das primeiras vezes que você utiliza os comandos, o yum baixa da internet todos os cabeçalhos dos pacotes e eles ficam armazenados na sua máquina. Para não precisar conectar no servidor na Internet toda vez que usar um comando, utilize o parâmetro -C em todo comando yum. Exemplos:

# yum -C search DVD
# yum -C check-update
# yum -C update
# yum -C list | grep gnome
[Dica] Dica

Existe também uma interface gráfica para o yum chamada yumex (Yum Extender). Essa interface permite você atualizar, instalar e desinstalar os pacotes de uma maneira mais amigável. O pacote com esse programa se encontra no repositório do Fedora Extras ou então na seguinte URL:

http://linux.rasmil.dk/yumex/