Aprenda Linux, 101: Gerenciamento de pacotes do Debian

Adicione novos softwares e mantenha seu sistema atual

Aprenda como instalar, atualizar e gerenciar pacotes em seu sistema Linux®. Este artigo foca no Advanced Packaging Tool, ou APT, que é um sistema de gerenciamento de pacote usado pelo Debian e distribuições derivadas do Debian, como o Ubuntu. É possível usar o material neste artigo para estudar para o exame LPI 101 para a certificação de administrador do sistema Linux ou simplesmente para explorar as melhores maneiras de adicionar novos softwares e manter seu sistema atualizado.

Ian Shields, Senior Programmer, IBM

Ian ShieldsIan Shields trabalha em vários dos projetos Linux para a zona Linux do developerWorks. Ele é um programador senior da IBM em Research Triangle Park, NC. Ele iniciou na IBM em Canberra, Austrália, como um Engenheiro de Sistemas em 1973 e, desde então, trabalhou em sistemas de comunicações e computação disseminada em Montreal, no Canadá, e em RTP na Carolina do Norte, nos Estados Unidos. Ele possui diversas patentes. Sua graduação é em matemática pura e filosofia na Australian National University. Ele possui mestrado em ciências e é doutor em ciências da computação na Universidade do Estado da Carolina do Norte.


nível de autor Contribuidor do
        developerWorks

28/Mai/2010

Sobre esta série

Esta série de artigos o ajuda a aprender as tarefas de administração de sistema Linux. Também é possível usar os materiais nestes artigos como preparação para os exames Linux Professional Institute Certification nível 1 (LPIC-1).

Consulte o nosso roteiro do developerWorks para o LPIC-1 para obter a descrição e o link para cada um dos artigos nesta série. O roteiro está em andamento e reflete os últimos objetivos (abril de 2009) dos exames LPIC-1: à medida em que formos concluindo estes artigos, eles serão adicionados ao roteiro. Enquanto isso, é possível encontrar versões anteriores do mesmo material, que dão suporte aos objetivos do LPIC-1 anteriores a abril de 2009, em nossos tutoriais de preparação para o exame de certificação LPI.

Visão Geral

Aprenda, neste artigo, a usar as ferramentas de gerenciamento de pacotes do Debian para gerenciar pacotes em seu sistema Linux. Aprenda a:

  • Instalar, reinstalar, atualizar e remover pacotes binários do Debian
  • Encontrar pacotes contendo arquivos ou bibliotecas específicos, mesmo que o pacote não esteja instalado
  • Obter informações de pacote como versão, conteúdo, dependências, integridade do pacote e status de instalação, mesmo que o pacote não esteja instalado

Este artigo ajuda na preparação para o Objetivo 102.4 no Tópico 102 do exame 101 de Administração Nível Junior do Linux Professional Institute (LPIC-1). O objetivo possui peso 3.

Pré-requisitos

Para tirar o máximo dos artigos desta série, é necessário ter conhecimento básico de Linux e possuir um sistema Linux funcional em que seja possível praticar os comandos aqui abordados. Algumas vezes, é possível que versões diferentes de determinado programa formatem a saída de modo diferente, assim, pode ser que seus resultados não sejam exatamente iguais às listas e figuras exibidas neste documento. Em particular, grande parte da saída mostrada é altamente dependente dos pacotes que já estão instalados em nossos sistemas. Sua própria saída pode ser bem diferente, apesar de que deve ser possível reconhecer as similaridades importantes.


Introduzindo o gerenciamento de pacote

Entre em contato com o Ian

Ian é um dos nossos autores mais populares e produtivos. Pesquise todos os artigos do Ian no developerWorks. Confira o perfil de Ian e entre em contato com ele, com outros autores e leitores no My developerWorks.

No passado, muitos programas do Linux eram distribuídos como código de origem, que o usuário integraria ao programa ou conjunto de programas necessários, em conjunto com as man pages, arquivos de configuração necessários, etc. Atualmente, a maioria dos distribuidores do Linux usam programas ou conjuntos de programas pré-criados chamados pacotes, que já são entregues prontos para instalação naquela distribuição. Neste artigo, aprenda sobre ferramentas de gerenciamento de pacote que o ajudam a instalar, atualizar e remover pacotes. Este artigo foca no Advanced Packaging Tool, ou APT, o sistema de gerenciamento de pacote usado pelo Debian e distribuições derivadas do Debian, como o Ubuntu. Outro artigo desta série, "Learn Linux 101: RPM and YUM package management," cobre as ferramentas de gerenciamento de pacote Red Hat.

Do ponto de vista do usuário, a função básica de gerenciamento de pacotes é fornecida pelos comandos. Como os desenvolvedores de Linux vêm se empenhando para tornar o Linux mais fácil de usar, as ferramentas básicas foram complementadas por outras ferramentas, incluindo ferramentas de GUI, que ocultam algumas das complexidades das ferramentas básicas do usuário final. Neste artigo e no artigo sobre gerenciamento de pacote RPM e YUM, focamos nas ferramentas básicas, apesar de mencionarmos algumas outras ferramentas para que seja possível seguir adiante.

APT, RPM, e YUM (os últimos dois são ferramentas de gerenciamento de pacote para sistemas Red Hat) possuem muitas similaridades. Todos podem instalar e remover pacotes. As informações sobre pacotes instalados são mantidas em um banco de dados. Todos possuem funcionalidade básica de linha de comando, enquanto que ferramentas adicionais podem fornecer interfaces mais fáceis e simples. Todos podem recuperar pacotes da Internet.

Ao instalar um sistema Linux, uma grande seleção de pacotes é geralmente instalada. O conjunto pode ser customizado para o uso pretendido para o sistema, como servidor, desktop ou estação de trabalho do desenvolvedor. E em algum momento, provavelmente será necessário instalar novos pacotes para funcionalidades adicionadas, atualizar os pacotes que você possui ou até mesmo remover pacotes que não são mais necessários ou que se tornaram obsoletos por causa dos pacotes mais novos. Vamos ver como executar essas tarefas e alguns dos desafios relacionados, como encontrar que pacote pode conter um comando em particular.


Instalando pacotes do Debian

Suponhamos que você gostaria de saber sobre Lisp e um colega diz para você usar o comando gcl. É possível tentar gcl --help ou which gcl ou type gcl. Mas se seu sistema não puder encontrar gcl, é provável que uma saída similar a mostrada na Listagem 1 seja exibida.

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

ian@pinguino:~$ gcl --help
The program 'gcl' is currently not installed.  You can install it by typing:
sudo apt-get install gcl
gcl: command not found

ian@pinguino:~$ which gcl

ian@pinguino:~$ type gcl
-bash: type: gcl: not found

Caso não tenha obtido a sugestão útil da segunda forma de saída na Listagem 1, é possível consultar seu colega para descobrir que pacote instalar. Caso contrário, é possível simplesmente supor que o comando gcl esteja no pacote gcl. Essa é, frequentemente, uma boa suposição, mas nem sempre é a certa. Veremos mais tarde como encontrar o pacote correto. Nesse caso, o pacote gcl é necessário. Instale-o usando o comando apt-get, com a opção install como mostra a Listagem 2. Observe que apt-get determinará que pacotes extras são necessários para satisfazer as dependências e, então, lhe fornecerá uma lista de todos os pacotes que serão instalados. Nesse momento, um aviso para continuar é exibido. Em nosso exemplo, respondemos y para instalar o gcl e o pacote necessário adicional, libreadline5.

Listagem 2. Instalando o gcl usando apt-get
ian@pinguino:~$ sudo apt-get install gcl
[sudo] password for ian: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  libreadline5
Suggested packages:
  gcl-doc
The following NEW packages will be installed:
  gcl libreadline5
0 upgraded, 2 newly installed, 0 to remove and 30 not upgraded.
Need to get 47.1MB of archives.
After this operation, 157MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com karmic/main libreadline5 5.2-6 [140kB]
Get:2 http://us.archive.ubuntu.com karmic/universe gcl 2.6.7-45ubuntu1 [47.0MB]
Fetched 47.1MB in 1min 33s (502kB/s)
Preconfiguring packages ...
Selecting previously deselected package libreadline5.
(Reading database ... 142156 files and directories currently installed.)
Unpacking libreadline5 (from .../libreadline5_5.2-6_i386.deb) ...
Selecting previously deselected package gcl.
Unpacking gcl (from .../gcl_2.6.7-45ubuntu1_i386.deb) ...
Processing triggers for man-db ...
Setting up libreadline5 (5.2-6) ...

Setting up gcl (2.6.7-45ubuntu1) ...
install/gcl: Handling install for emacsen flavor emacs22
Loading 00debian-vars...
No /etc/mailname. Reverting to default...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50gcl.el (source)...
Wrote /usr/share/emacs22/site-lisp/gcl/add-default.elc
Wrote /usr/share/emacs22/site-lisp/gcl/ansi-doc.elc
Wrote /usr/share/emacs22/site-lisp/gcl/dbl.elc
Wrote /usr/share/emacs22/site-lisp/gcl/doc-to-texi.elc
Wrote /usr/share/emacs22/site-lisp/gcl/gcl.elc
Wrote /usr/share/emacs22/site-lisp/gcl/man1-to-texi.elc
Wrote /usr/share/emacs22/site-lisp/gcl/smart-complete.elc
Wrote /usr/share/emacs22/site-lisp/gcl/sshell.elc
install/gcl: Handling install for emacsen flavor emacs23
Loading 00debian-vars...
No /etc/mailname. Reverting to default...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50gcl.el (source)...
Wrote /usr/share/emacs23/site-lisp/gcl/add-default.elc
Wrote /usr/share/emacs23/site-lisp/gcl/ansi-doc.elc
Wrote /usr/share/emacs23/site-lisp/gcl/dbl.elc
Wrote /usr/share/emacs23/site-lisp/gcl/doc-to-texi.elc
Wrote /usr/share/emacs23/site-lisp/gcl/gcl.elc
Wrote /usr/share/emacs23/site-lisp/gcl/man1-to-texi.elc
Wrote /usr/share/emacs23/site-lisp/gcl/smart-complete.elc
Wrote /usr/share/emacs23/site-lisp/gcl/sshell.elc

Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

A partir da saída na Listagem 2, é possível ver que apt-get leu uma lista de pacotes de algum local (mais informações a respeito em breve), criou uma árvore de dependência e determinou que libreadline5 é um pré-requisito necessário que não está instalado atualmente. Você também notará a sugestão para instalar o pacote separado para a documentação, gcl-doc. Após algumas informações de resumo adicionais, incluindo uso de espaço, será pedido que você continue, e o gcl será instalado em conjunto com o pacote de pré-requisitos. Os pacotes do Debian geralmente possuem uma extensão .deb e o download e a extração dos pacotes pode ser vista, como mostra a linha:

Unpacking gcl (from .../gcl_2.6.7-45ubuntu1_i386.deb) ...

Suponhamos que, ao invés de instalar o pacote, você simplesmente gostaria de descobrir se ele depende de outros pacotes. É possível usar a opção -s (para simular) no apt-get. Há várias outras opções com função equivalente, como --just-print e \--dry-run. Consulte as man pages para os detalhes completos. A listagem 3 mostra o que acontece em uma simulação de instalação do pacote gcl-doc.

Listagem 3. Instalação simulada ou de testes do gcl-doc
ian@pinguino:~$ sudo apt-get install -s gcl-doc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  gcl-doc
0 upgraded, 1 newly installed, 0 to remove and 30 not upgraded.
Inst gcl-doc (2.6.7-45ubuntu1 Ubuntu:9.10/karmic)
Conf gcl-doc (2.6.7-45ubuntu1 Ubuntu:9.10/karmic)

Não é uma surpresa que a documentação não possui nenhum pacote de pré-requisitos.


Locais dos pacotes

Na seção anterior, você aprendeu como instalar um pacote do Debian. Mas, de onde vêm os pacotes? Como apt-get sabe de onde fazer o download dos pacotes? Mencionamos que apt-get lê uma lista de pacotes de algum local. O ponto de partida para esse local é /etc/apt/sources.list. A lista diz ao apt-get onde procurar por pacotes, incluindo um CD-ROM, seus sistema de arquivos local ou uma rede usando http ou ftp. É possível adicionar origens adicionais no diretório /etc/apt/sources.list.d.

A Listagem 4 mostra algumas das primeiras linhas de /etc/apt/sources.list em meu sistema. Observe que o CD de distribuição na primeira linha está comentado (# na posição 1). Caso necessite instalar vários novos pacotes que podem não ter sido atualizados, pode valer a pena remover o comentário e instalar a partir de seu CD ou DVD de distribuição. Caso possua uma rede com conexão de banda larga ou necessite de muitas atualizações, pode ser mais eficiente simplesmente fazer o download dos pacotes adicionais no nível mais recente das origens de rede que seguem em /etc/apt/sources.list.

Listagem 4. /etc/apt/sources.list
ian@pinguino:~$ cat /etc/apt/sources.list
#deb cdrom:[Ubuntu 9.10 _Karmic Koala_ - Release i386 (20091028.5)]/ karmic main restrict
ed
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

deb http://us.archive.ubuntu.com/ubuntu/ karmic main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ karmic-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ karmic universe
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic universe
deb http://us.archive.ubuntu.com/ubuntu/ karmic-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic-updates universe

Apt-get e ferramentas similares usam um banco de dados local para determinar quais pacotes estão instalados. Eles podem verificar os níveis instalados em relação aos níveis disponíveis. Para fazer isso, as informações dos níveis disponíveis são recuperadas das origens listadas em /etc/apt/sources.list e armazenadas no seu sistema de arquivos local. Use o comando apt-get update para sincronizar as informações em seu banco de dados local com as origens especificadas em /etc/apt/sources.list. Isso deve ser feito antes de instalar ou atualizar qualquer pacote e deve ser feito sempre após modificar /etc/apt/sources.list ou adicionar arquivos a /etc/apt/sources.list.d.


Removendo pacotes do Debian

Caso queira remover um pacote, é possível usar a opção remove de apt-get. Uma execução simulada é mostrada na Listagem 5.

Listagem 5. Remoção simulada de gcl
ian@pinguino:~$ sudo apt-get remove -s gcl
[[sudo] password for ian: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic libreadline5
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
  gcl
0 upgraded, 0 newly installed, 1 to remove and 30 not upgraded.
Remv gcl [2.6.7-45ubuntu1]

Note que o pacote libreadline5 que instalamos como um pré-requisito para gcl não é removido automaticamente, apesar de uma das linhas de saída nos dizer que esse pacote, em conjunto com dois pacotes de cabeçalho do Linux, não é mais necessário. A função autoremove de apt-get (ou a função remove equivalente e a opção --auto-remove) removerá os pacotes solicitados, em conjunto com qualquer pacote que tenha sido instalado como dependência, mas não é mais necessário para qualquer pacote instalado. Isso inclui dependências instaladas por pacotes diferentes do ou dos pacotes que você está tentando remover, como os cabeçalhos do Linux-2.6.31-14 e os cabeçalhos do Linux-2.6.31-14-pacotes genéricos em nosso exemplo. A Listagem 6 mostra como remover o gcl, sua dependência libreadline5 e os dois pacotes de cabeçalho do Linux não relacionados que não são mais necessários.

Listagem 6. Removendo o gcl e as dependências
ian@pinguino:~$ sudo apt-get autoremove gcl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  gcl libreadline5 linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
0 upgraded, 0 newly installed, 4 to remove and 30 not upgraded.
After this operation, 239MB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 142327 files and directories currently installed.)
Removing gcl ...
remove/gcl: purging byte-compiled files for emacs22
remove/gcl: purging byte-compiled files for emacs23
Removing libreadline5 ...
Removing linux-headers-2.6.31-14-generic ...
Removing linux-headers-2.6.31-14 ...
Processing triggers for man-db ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

Caso veja a função autoremove do apt-get mas não especificar qualquer nome de pacote, então, todos os pacotes não usados que foram instalados como dependências serão removidos de nosso sistema. Também é possível usar a opção apt-get purge para remover informações de configuração. Consulte a man page para obter mais informações.


Atualizando pacotes do Debian

Caso necessite atualizar um pacote individual, use apt-get com a opção install novamente. A Listagem 7 mostra como atualizar o pacote tzdata já instalado em meu sistema. Lembre-se de executar apt-get update antes de atualizar pacotes para garantir que seu banco de dados local reflete as atualizações mais recentes disponíveis.

Listagem 7. Atualizando um pacote único
ian@pinguino:~$ sudo apt-get install  tzdata
[sudo] password for ian: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  tzdata
1 upgraded, 0 newly installed, 0 to remove and 29 not upgraded.
Need to get 679kB of archives.
After this operation, 0B of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com karmic-updates/main tzdata 2010i-0ubuntu0.9.10 [679kB]
Fetched 679kB in 1s (569kB/s) 
Preconfiguring packages ...
(Reading database ... 124394 files and directories currently installed.)
Preparing to replace tzdata 2010h-0ubuntu0.9.10 (using .../tzdata_2010i-0ubuntu0.9.10_all
.deb) ...
Unpacking replacement tzdata ...
Setting up tzdata (2010i-0ubuntu0.9.10) ...

Current default time zone: 'America/New_York'
Local time is now:      Mon May  3 16:11:57 EDT 2010.
Universal Time is now:  Mon May  3 20:11:57 UTC 2010.
Run 'dpkg-reconfigure tzdata' if you wish to change it.

Atualizando todos os pacotes ou atualizando para uma nova distribuição

Ao invés de atualizar pacotes individuais, é possível atualizar todos os pacotes em seu sistema usando o comando apt-get upgrade. De maneira similar, apt-get dist-upgrade o ajudará a migrar para um novo nível de sua distribuição.

Para mais informações sobre outros recursos e outras opções de apt-get, veja a man page.

Configuração APT — o arquivo apt.conf

Caso verifique a man page para apt-get, verá que existem muitas opções. Caso use muito o comando apt-get e descobrir que as opções padrões não são as desejadas, você poderá definir novos padrões em /etc/apt/apt.conf. Um programa, apt-config, está disponível para scripts para interrogar o arquivo apt.conf. Veja as man pages de apt.conf e apt-config para mais informações.


Reconfigurando pacotes do Debian

O APT contém um recurso, denominado debconf, que é usado para configurar pacotes após eles serem instalados. Pacotes que usam esse recurso (e nem todos usam) podem ser reconfigurados após serem instalados. A maneira mais fácil de fazer isso é usando o comando dpkg-reconfigure. Por exemplo, o comando adduser pode criar diretórios iniciais legíveis por todos os usuários de sistema. Talvez você não queira isso por motivos de privacidade. De maneira similar, o pacote tzdata que atualizamos na Listagem 7 sugeriu executar dpkg-reconfigure tzdata para alterar o fuso horário. É necessário executar dpkg-reconfigure com propriedade de administrador.

A Figura 1 mostra a primeira questão que lhe será perguntada caso execute dpkg-reconfigure tzdata. O padrão pré-definido pode não ser América; ele refletirá seu próprio sistema. Navegue por essa tela em modo de texto usando a tecla Tab e as teclas de movimento do cursor.

Figura 1. Usando dpkg-reconfigure para reconfigurar o fuso horário.
Screen shot showing the time zone selections when you run the dpkg-reconfigure tzdata command

Informações do pacote do Debian

Agora, vejamos algumas ferramentas para obter informações sobre pacotes. Algumas dessas ferramentas também fazem outras coisas, mas focaremos aqui na maneira de obter informações.

Status de pacote com dpkg

Outra ferramenta que faz parte do sistema APT é a ferramenta dpkg. Essa é uma ferramenta de gerenciamento de pacotes de nível médio que pode instalar e remover pacotes e também exibir informações de status. A configuração de dpkg pode ser controlada por /etc/dpkg/dpkg.cfg e também é possível ter um arquivo .dpkg.cfg em seu diretório inicial para o fornecimento de configuração adicional.

A ferramenta dpkg usa muitos arquivos na árvore /var/lib/dpkg do sistema de arquivos. Particularmente, o arquivo /var/lib/dpkg/status contém informações sobre pacotes presentes no seu sistema. A Listagem 8 mostra o uso de dpkg -s para exibir o status do pacote tzdata após a atualização e do pacote gcl após a remoção. Observe que o pacote gcl ainda mostra alguns arquivos de configuração restantes. Também é possível usar a opção purge para limpar os arquivos do pacote transferidos por download do cache e remover informações de configuração.

Listagem 8. Status do pacote tzdata
ian@pinguino:~$ dpkg -s gcl tzdata
Package: gcl
Status: deinstall ok config-files
Priority: optional
Section: interpreters
Installed-Size: 152848
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Architecture: i386
Version: 2.6.7-45ubuntu1
Config-Version: 2.6.7-45ubuntu1
Depends: libc6 (>= 2.7), libgmp3c2, libice6 (>= 1:1.0.0), libncurses5 (>= 5.6+20071006-3
), libreadline5 (>= 5.2), libsm6, libx11-6, libxaw7, libxext6, libxmu6, libxt6, tcl8.4 (
>= 8.4.16), tk8.4 (>= 8.4.16), debconf (>= 1.2.0), gcc, emacs22 | emacsen
Suggests: gcl-doc
Conffiles:
 /etc/default/gcl 9301be50652f86b8d3f8b835f6dce03e
 /etc/emacs/site-start.d/50gcl.el 12116c8c8988326764799973a0a7d5ab
Description: GNU Common Lisp compiler
 GNU Common Lisp (GCL) is a Common Lisp compiler and interpreter
 implemented in C, and complying mostly with the standard set
 forth in the book "Common Lisp, the Language I".  It attempts
 to strike a useful middle ground in performance and portability
 from its design around C.
 .
 This package contains the Lisp system itself.  Documentation
 is provided in the gcl-doc package.
Original-Maintainer: Camm Maguire <camm@enhanced.com>

Package: tzdata
Status: install ok installed
Priority: required
Section: libs
Installed-Size: 6276
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Version: 2010i-0ubuntu0.9.10
Replaces: libc0.1, libc0.3, libc6, libc6.1
Provides: tzdata-squeeze
Depends: debconf (>= 0.5) | debconf-2.0
Description: time zone and daylight-saving time data
 This package contains data required for the implementation of
 standard local time for many representative locations around the
 globe. It is updated periodically to reflect changes made by
 political bodies to time zone boundaries, UTC offsets, and
 daylight-saving rules.
Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>

Pacotes e os arquivos presentes neles

Você irá querer saber, com frequência, o que há em um pacote ou de qual pacote específico veio um arquivo. Essas duas tarefas são de dpkg. A Listagem 9 mostra o uso de dpkg -L para listar os arquivos (incluindo diretórios) instalados pelo pacote libparted. É possível, para a maioria dos pacotes, dar o nome do pacote e não se preocupar em especificar uma versão em particular. No entanto, alguns pacotes podem estar disponíveis em múltiplas versões, então, talvez seja necessário especificar um nome de pacote mais detalhado ao usar dpkg para interrogar sobre informações de pacote.

Listagem 9. O que é o pacote libparted?
ian@pinguino:~$ dpkg -L libparted
Package `libparted' is not installed.
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
ian@pinguino:~$ dpkg -L libparted1.8-12
/.
/lib
/lib/libparted-1.8.so.12.0.0
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libparted1.8-12
/usr/share/doc/libparted1.8-12/copyright
/usr/share/doc/libparted1.8-12/changelog.Debian.gz
/lib/libparted-1.8.so.12

Para localizar qual pacote contém um arquivo específico, use a opção -S de dpkg, conforme mostrado na Listagem 10. O nome do pacote é listado à esquerda.

Listagem 10. Qual pacote contém um arquivo?
ian@pinguino:~$ dpkg -S /lib/libparted-1.8.so.12
libparted1.8-12: /lib/libparted-1.8.so.12

Algumas vezes, pode parecer que um arquivo não pertence a nenhum pacote. Quando isso ocorrer, será preciso realizar um trabalho de investigação extra para descobrir de onde um pacote vem. Por exemplo, a etapa de configuração da instalação pode executar tarefas como a criação de links simbólicos que não estejam listados como parte do conteúdo do pacote. Uma adição relativamente recente aos sistemas Linux é o sistema alternatives que é gerenciado com o uso do comando update-alternatives. Frequentemente, são criadas alternativas para comandos como java, que podem ser a versão openJDK, Sun ou IBM, entre outras possibilidades.

A Listagem 11 mostra como usar o comando which para descobrir o que é invocado ao tentarmos executar java. Então, use o comando ls para ver ao que esse comando java está simbolicamente ligado. O link para o diretório /etc/alternatives é uma dica de que estamos usando o sistema alternatives, portanto, usamos o comando update-alternatives para localizar mais informações e, por fim, usamos o comando dpkg -S para confirmar que o comando java bem do pacote openjdk-6-jre-headless. A configuração do sistema alternatives teria sido feita por um script post-install, que faz parte do pacote openjdk-6-jre-headless.

Listagem 11. Um uso mais complexo de dpkg -S
ian@pinguino:~$ which java
/usr/bin/java
ian@pinguino:~$ ls -l $(which java)
lrwxrwxrwx 1 root root 22 2010-05-03 17:51 /usr/bin/java -> /etc/alternatives/java
ian@pinguino:~$ update-alternatives --display java
java - auto mode
 link currently points to /usr/lib/jvm/java-6-openjdk/jre/bin/java
/usr/lib/jvm/java-6-openjdk/jre/bin/java - priority 1061
 slave java.1.gz: /usr/lib/jvm/java-6-openjdk/jre/man/man1/java.1.gz
Current `best' version is /usr/lib/jvm/java-6-openjdk/jre/bin/java.
ian@pinguino:~$ dpkg -S /usr/lib/jvm/java-6-openjdk/jre/bin/java
openjdk-6-jre-headless: /usr/lib/jvm/java-6-openjdk/jre/bin/java

Usando aptitude

Mencionamos anteriormente que o status dos pacotes é mantido em /var/lib/dpkg/status. Mencionamos também que dpkg pode fazer mais do que apenas exibir informações de pacote. Agora, vejamos o comando aptitude, que fornece uma interface de tela cheia baseada em texto (usando ncurses) para as funções de gerenciamento de pacote APT. É possível usar aptitude para instalar ou remover pacotes e também controlar os sinalizadores de status que indicam se os pacotes devem ser mantidos atualizados ou em seu estado atual, por exemplo. Caso execute o comando aptitude (como raiz), uma tela similar à da Figura 2 será exibida.

Figura 2. Executando aptitude
Screen shot showing the available packages when you run the aptitude command

Pressione Enter para expandir ou reduzir as várias seleções e use ctrl-t para acessar a barra de menus. A Figura 3 mostra que uma nova versão do kernel, 2.6.31.20, está disponível para meu sistema, entre outras atualizações disponíveis. O 'i' na coluna da esquerda indica que o status atual é para instalar o pacote. O item de menu Help explica as várias opções disponíveis, incluindo manter o pacote em seu nível atual ao invés de atualizá-lo, removê-lo ou torná-lo automaticamente instalado e, assim, elegível para a remoção automática. Lembra-se da opção autoremove do apt-get? Agora você sabe como examinar ou controlar que pacotes são elegíveis para a remoção automática. Use os atalhos de teclado descritos em Help ou use o item de menu Package para alterar os sinalizadores.

Figura 3. Executando aptitude e examinando sinalizadores de pacote
Screen shot showing the available updates and their package flags when you run the aptitude command

É possível usar a tecla da barra ("/") para procurar pacotes. Por exemplo, caso queira reinstalar o pacote gcl que foi removido anteriormente, simplesmente digite "/gcl" para procurá-lo. Se o resultado da busca mostrar algo diferente com gcl, como gcl-doc, pressione a tecla "n" para avançar para a próxima correspondência. Então, use o menu Package para marcar o pacote para instalação.

Ao terminar, selecione Actions->Install/remove packages (ou pressione "g") para aplicar suas seleções ao sistema. Também é possível selecionar a opção quit caso não queira aplicar as mudanças.

Para obter ajuda a qualquer momento, use a barra de menu ou digite "?" (interrogação) para ajuda e então, pressione a tecla "q" para sair da ajuda.


Atualizando Debian com outras ferramentas

Vimos agora que aptitude pode ajudá-lo a instalar ou remover pacotes individuais e também atualizar todos os pacotes do seu sistema para a versão mais recente.

Além de aptitude, há diversas outras interfaces de gerenciamento de pacotes interativos para sistemas Debian, incluindo dselect, synaptic, update-manager, gnome-apt e wajig. Synaptic é um aplicativo gráfico para uso com o Sistema Window X. A Figura 4 mostra a interface do usuário synaptic com nosso velho amigo, o pacote gcl, marcado para instalação.

Figura 4. Instalando gcl usando synaptic
Screen shot showing the package management interfaces for synaptic

O botão Apply instalará o gcl e atualizará qualquer outro pacote que esteja programado para ser atualizado. O botão Reload atualizará as listas de pacotes. Se estiver acostumado com interfaces GUI, você poderá achar synaptic mais fácil de usar do que apt-get, dpkg ou dselect.

De maneira similar, é possível descobrir que seu sistema inclui o update-manager, um aplicativo do Sistema Window X, especificamente padronizado para ajudá-lo a manter seu sistema atualizado. Caso esteja instalado, é provável que ele seja inicializado de maneira automática regularmente para que você não se esqueça de atualizar. A Figura 5 mostra como o update manager exibe o conjunto de atualizações visto na Figura 2. Como foi o caso do aptitude, as atualizações são classificadas para que você saiba quais atualizações são atualizações de segurança importantes.

Figura 5. Exemplo do Update Manager
Screen shot showing the Update Manager interface

Localizando pacotes do Debian

Em nosso tópico sobre o gerenciamento de pacotes do Debian, vemos as formas de localizar pacotes. Em geral, apt-get e as outras ferramentas que já discutimos já saberão sobre qualquer outro pacote do Debian que possa ser necessário proveniente da lista de pacotes disponíveis. Um comando que ainda não usamos é o apt-cache, que é útil para procurar por informações de pacote em seu sistema. apt-cache pode realizar buscas usando expressões regulares (veja Aprenda Linux, 101: Procure arquivos de texto usando expressões regulares para maiores informações sobre expressões regulares). Suponha que gostaria de encontrar o nome do pacote contendo o loader de Linux. A Listagem 12 mostra como isso pode ser feito.

Listagem 12. Procurando o loader de Linux com apt-cache
ian@pinguino:~$ apt-cache search "linux loader"
lilo - LInux LOader - The Classic OS loader can load Linux and others
lilo-doc - Documentation for LILO (LInux LOader)

Você viu anteriormente que aptitude e synaptic também oferecem ferramentas de pesquisa. Se você usar synaptic, observe que terá opções no menu de pesquisa para pesquisar apenas os nomes de pacote ou também as descrições de pacote.

Caso ainda não consiga localizar o pacote, ele ainda poderá ser encontrado na lista de pacotes no site do Debian (consulte Recursos para o link), ou em qualquer outro lugar na Internet.

A maioria das ferramentas de pacotes pode dizer muito mais sobre um pacote instalado do que sobre um pacote que ainda não foi instalado, como uma lista de arquivos dentro de um pacote. Caso necessite descobrir que pacote contém um programa que não possui instalado, há algumas maneiras:

  • É possível adivinhar que pacote pode conter o programa e fazer o download do pacote sem instalá-lo. Quando possuir o pacote, é possível interrogá-lo.
  • É possível pesquisar na Internet.
  • É possível tentar o recurso do comando não encontrado, descrito sob "Comando não encontrado" mais adiante neste artigo.

O comando apt-get possui uma opção -d para fazer o download de um pacote e não fazer sua instalação. Há também uma opção --print-uris para mostrar de onde o download de um pacote seria feito e qual seria sua soma de verificação. Provavelmente, as somas de verificação atuais serão SHA256, então é possível verificar a integridade do pacote transferido por download usando o comando sha256sum. Observe que as informações de URI e soma de verificação não são exibidas caso já tenha feito o download do pacote, então, é necessário obter essas informações antes de fazer o download do pacote.

Suponha que gostaria de saber se o comando gcl está realmente contido no pacote gcl. A Listagem 13 mostra como usar apt-get para fazer somente o download do pacote gcl, sem instalá-lo.

Listagem 13. Usando apt-get somente para download
ian@pinguino:~$ sudo apt-get install -d gclReading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libreadline5
Suggested packages:
  gcl-doc
The following NEW packages will be installed:
  gcl libreadline5
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 47.1MB of archives.
After this operation, 157MB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://us.archive.ubuntu.com karmic/main libreadline5 5.2-6 [140kB]
Get:2 http://us.archive.ubuntu.com karmic/universe gcl 2.6.7-45ubuntu1 [47.0MB]
Fetched 47.1MB in 7s (6,475kB/s)                                               
Download complete and in download only mode

Ao ter feito o download do pacote, é possível usar a opção --info do dpkg para exibir informações do pacote ou a opção --contents para exibir que arquivos o pacote instala. O arquivo transferido por download estará, geralmente, localizado em /var/cache/apt/archives/. A Listagem 14 mostra como localizar o arquivo transferido por download e descobrir que binários ele instalará (considerando que eles estejam instalados em um diretório .../bin/...).

Listagem 14. Usando dpkg para listar os conteúdos de .deb
ian@pinguino:~$ sudo find /var/cache -name "*.deb"
/var/cache/apt/archives/gcl_2.6.7-45ubuntu1_i386.deb
/var/cache/apt/archives/libreadline5_5.2-6_i386.deb
ian@pinguino:~$ sudo dpkg --contents /var/cache/apt/archives/gcl*.deb| grep "/bin/"
drwxr-xr-x root/root         0 2008-12-06 07:42 ./usr/bin/
-rwxr-xr-x root/root       617 2008-12-06 07:42 ./usr/bin/gcl

Caso encontre e faça o download do arquivo .deb usando algo diferente de apt-get, é possível instalá-lo usando dpkg -i.

Caso decida que não gostaria de instalar o pacote transferido por download nos arquivos APT, é possível executar apt-get clean para limpar qualquer arquivo de pacote transferido por download.

Se tudo falhar, existe ainda outra origem possível para pacotes. Suponha que encontre um programa compactado como RPM em vez de como .deb. Talvez seja possível usar o programa alien, que pode converter entre formatos de pacotes. Leia a documentação de alien cuidadosamente, já que nem todos os recursos de todos os sistemas de gerenciamento de pacotes podem ser convertidos em outro formato por alien.


Comando não encontrado

De volta à Listagem 1, você viu uma mensagem útil dizendo qual pacote instalar para obter o comando gcl. Como isso é realizado? Quando o Bash shell pesquisa um comando e não o encontra, o shell pesquisa uma função shell chamada command_not_found_handle. A Listagem 15 mostra como isso é definido em meu sistema Ubuntu 9.10.

Listagem 15. command_not_found_handle
ian@pinguino:~$ type command_not_found_handle
command_not_found_handle is a function
command_not_found_handle ()
{
    if [ -x /usr/lib/command-not-found ]; then
        /usr/bin/python /usr/lib/command-not-found -- $1;
        return $?;
    else
        return 127;
    fi
}

Se a função command_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. Caso a função não esteja definida, o shell imprime uma mensagem de erro e retorna um status de saída de 127. A função está geralmente definida no arquivo /etc/bash.bashrc do sistema. É possível ver na Listagem 15 que a função verifica a existência de /usr/lib/command-not-found e o executa como um script Python caso ele exista. Caso ele não exista, talvez devido ao fato de o pacote do comando não encontrado que o fornece ter sido removido após o início da sessão shell, então, a função imita o comportamento padrão do sistema e retorna 127.


PackageKit

Nenhuma discussão sobre instalação de pacotes estaria completa sem mencionar o PackageKit, que é um sistema criado para facilitar a instalação e atualização de software. O objetivo é unificar todas as ferramentas gráficas de software usadas em diferentes distribuições. O Packagekit usa um daemon ativado pelo sistema, o que significa que o daemon é ativado somente quando necessário. O Packagekit possui uma versão para Gnome (gnome-packagekit) e KDE KPackageKit).

Existe muito mais coisa relacionada ao sistema de gerenciamento de pacotes do Debian do que o abordado aqui. Também há muito mais coisa sobre Debian do que o seu sistema de gerenciamento de pacotes. Consulte os Recursos abaixo para mais detalhes e links para outros artigos desta série.

Recursos

Aprender

Obter produtos e tecnologias

  • Obtenha o conversor de pacotes Alien.
  • Obtenha pacotes do Debian na página inicial do Debian.
  • Avalie os produtos da IBM da forma que melhor lhe convém: Faça o download de uma versão de teste de produto, experimente um produto on-line, use um produto em um ambiente de nuvem ou passe algumas horas no SOA Sandbox aprendendo como implementar Arquitetura Orientada a Serviço de forma eficiente.

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=493207
ArticleTitle=Aprenda Linux, 101: Gerenciamento de pacotes do Debian
publish-date=05282010