<chapt id="pkgtools">As Ferramentas de Gerenciamento de Pacotes Debian.

<sect id="pkgprogs">Que programas o Debian oferece para administrar seus pacotes?

<sect1 id="dpkg">dpkg

<p>Este é o principal programa de gerenciamento de pacotes. O <prgn>dpkg</prgn>
pode ser chamado com muitas opções. Alguns usos comuns são:
<list>
  <item>Descobrir todas as opções:  <tt>dpkg --help</tt>.
  <item>Imprimir o arquivo de controle (e outras informações) de um
    pacote especificado: <tt>dpkg --info foo_VVV-RRR.deb</tt>
  <item>Instalar um pacote (incluindo desempacotamento e
    configuração) no sistema de arquivos do disco rígido:
    <tt>dpkg --install foo_VVV-RRR.deb</tt>.
  <item>Desempacotar (mas não configurar) um pacote Debian no
    sistema de arquivos do disco rígido: <tt>dpkg --unpack foo_VVV-RRR.deb</tt>.
    Perceba que esta operação <em>não</em> necessariamente deixa o pacote em um
    estado utilizável; alguns arquivos necessitam de uma personalização adicional
    para rodar corretamente. Este comando remove qualquer versão do programa já
    instalada, e executa o script preinst (veja <ref id="maintscripts">) associado
    ao pacote.
  <item>Configurar um pacote que já foi desempacotado:
    <tt>dpkg --configure foo</tt>.  Entre outras coisas, esta ação executa o script
    postinst (veja <ref id="maintscripts">) associado ao pacote.
    Ele também atualiza os arquivos listados no <tt>conffiles</tt> desse pacote.
    Observe que a operação 'configure' recebe como argumento um nome
    de pacote (por exemplo, foo), e <em>não</em> um nome-de-arquivo
    (por exemplo, foo_VVV-RRR.deb).
  <item>Extrair um único arquivo chamado "blurf" (ou um grupo de arquivos
    chamados "blurf*" de um pacote Debian:
    <tt>dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - blurf*</tt>
  <item>Remover um pacote (mas não seus arquivos de configuração):
    <tt>dpkg --remove foo</tt>.
  <item>Remover um pacote (incluindo seus arquivos de configuração):
    <tt>dpkg --purge foo</tt>.
  <item>Listar o estado de instalação dos pacotes contendo a string
    (ou expressão regular) "foo*": <tt>dpkg --list 'foo*'</tt>.
</list>

<sect1 id="dselect">dselect

<p>Este programa é uma interface baseada em menus para o sistema de
gerenciamento de pacotes Debian. É particularmente útil para
instalações iniciais e atualizações em grande escala

<p>O <prgn>dselect</prgn> pode:
<list>
  <item>guiar o usuário conforme ele escolha entre os pacotes a
    instalar ou remover, assegurando que não sejam instalados pacotes
    que entrem em conflito com outros, e que todos os pacotes necessários
    para que cada pacote funcione adequadamente sejam instalados;
  <item>avisar o usuário sobre inconsistências ou incompatibilidades
    nas suas escolhas;
  <item>determinar a ordem na qual os pacotes devem ser instalados;
  <item>fazer a instalação ou remoção automaticamente; e
  <item>guiar o usuário pelo processo de configuração exigido por
    cada pacote.
</list>

<p>O <prgn>dselect</prgn> começa apresentando ao usuário um menu com 7
itens, cada um dos quais realiza uma ação específica. O usuário pode
escolher uma das ações usando as teclas de setas para mover a barra
destacada, e depois pressionando a tecla <em>&lt;enter&gt;</em> para escolher a ação
destacada.

<p>O que usuário vê depois depende da ação que ele escolheu. Se ele
escolheu qualquer opção que não <tt>Access</tt> ou <tt>Select</tt>, 
o <prgn>dselect</prgn> simplesmente executará a ação especificada:
por exemplo, se o usuário escolhesse a ação <tt>Remove</tt>, o dselect
removeria todos os arquivos selecionados para remoção quando da
última vez que o usuário escolheu a ação <tt>Select</tt>.

<p>Tanto o item <tt>Access</tt> como o item <tt>Select</tt>
levam a menus adicionais. Em ambos os casos, os menus são
apresentados em uma tela dividida; a parte de cima apresenta uma lista
de escolhas que pode ser rolada, ao passo que a parte de baixo apresenta
uma breve explicação ("info") para cada escolha.

<p>Uma extensiva ajuda on-line está disponível, use a tecla '?' para
ver uma tela de ajuda a qualquer momento.

<p>A ordem na qual as ações são apresentadas no primeiro menu do
<prgn>dselect</prgn> representa a ordem na qual um usuário normalmente
escolheria para instalar pacotes. Entretanto, o usuário pode
escolher quaisquer das opções do menu principal quantas vezes quiser
(até mesmo nenhuma vez, dependendo do que se quer fazer).

<list>
  <item>Comece escolhendo um "Access Method" (Método de
    Acesso). Este é o método pelo qual o usuário planeja acessar os
    pacotes Debian; por exemplo, alguns usuários possuem os pacotes Debian
    disponíveis em CD-ROM, enquanto outros planejam pegá-los através
    de ftp anônimo. O "Access Method" escolhido é gravado depois que
    o <tt>dselect</tt> termina, de modo que, se
    não for alterado, a opção não precisa ser chamada outra vez.

  <item>Depois faça o <strong>Update</strong> (Atualização) da lista de
    pacotes disponíveis. Para fazer isso, o <prgn>dselect</prgn> 
    lê o arquivo "Packages.gz" que deve estar incluso no diretório
    de nível mais alto do local onde os pacotes Debian a serem instalados
    estão armazenados. (Mas, se ele não estiver lá, o
    <prgn>dselect</prgn> se oferecerá para fazê-lo para você.)

  <item><strong>Selecione</strong> pacotes específicos para instalação em
    seu sistema. Depois de escolher esse item, o usuário é apresentado
    primeiramente a uma tela de ajuda (a menos que a opção de linha de comando
    '--expert' tenha sido usada). Uma vez que o usuário saia da tela de ajuda,
    ele verá o menu da tela dividida para escolher pacotes a instalar (ou
    remover).

    <p>O topo da tela é uma janela relativamente estreita com
    a lista dos &all-pkgs; pacotes do Debian;
    a parte de baixo da tela contém descrições dos pacotes ou grupo
    de pacotes que estiverem destacados acima.

    <p>A pessoa pode especificar quais pacotes deveriam ser operados destacando
    um nome de pacote ou o "label" para um grupo de pacotes. Depois disso,
    você pode selecionar os pacotes:
    <taglist>
      <tag>Para ser instalado:
        <item>Isso pode ser realizado pressionando-se a chave `+'.
      <tag>Para ser removido:
        <item>Pacotes podem ser removidos de duas maneiras:
        <list>
          <item>removidos: isso remove a maioria dos arquivos associados com o
          pacote, mas preserva os arquivos listados como arquivos de configuração
          (veja <ref id="conffile">) e informações de configuração de pacotes.
          Isso é feito pressionando a chave `-'.
          <item>expurgados: isso remove <em>todos</em> os arquivos que fazem partes do
          pacote. Isso é feito pressionando a chave `_'.
        </list>
        Perceba que não é possível remover "todos os pacotes". Se você tentar isso,
        seu sistema se reduzirá aos pacotes base iniciais.
      <tag>Para ser colocado em "hold" (espera)
        <item>Isso é feito pressionando-se `=', e ele efetivamente diz ao
        <prgn>dselect</prgn> para não atualizar, mesmo que a versão atualmente
        instalada em seu sistema não é tão recente quanto a versão disponível
        no repositório Debian que você está usando (isso foi especificado quando
        você quando você configurou o <strong>Access Method</strong>, e adquirido
        quando você usou <strong>Update</strong>).
        <p>Assim como você pode colocar um pacote em "hold", você pode reverter
        esta opção pressionando `:'. Que diz ao <prgn>dselect</prgn> que o(s)
        pacote(s) podem ser atualizados se uma versão mais recente esteja disponível.
        Essa é a configuração padrão.
    </taglist>

    <p>Você pode selecionar uma ordem diferente na qual os pacotes são apresentados,
    usando a chave `o' para alternar entre as várias opções de classificação dos
    pacotes. A ordem padrão apresenta os pacotes por prioridade; dentro de cada
    prioridade, são apresentados pacotes em ordem do diretório (a.k.a. sessão) do
    repositório onde eles estão armazenados. Dada esta ordem de classificação,
    alguns pacotes da seção A podem ser apresentados primeiro, seguidos por
    alguns pacotes da seção B, seguidos por mais pacotes (de menor prioridade)
    da seção A.

    <p>Você também pode ampliar os "labels" do topo da tela, usando a chave
    `v' (verbose). Esta ação empurra a maior parte do texto que cabe dentro
    da tela, para fora da mesma, a direita. Para vê-lo, pressione a seta para
    a direita; para deslizar de volta para a esquerda, pressione a seta para
    a esquerda.

    <p>Se você selecionar um pacote para instalação ou remoção, por exemplo,
    <package>foo.deb</package>, e aquele pacote depende de (ou recomenda)
    outro pacote, por exemplo, <package>blurf.deb</package>, então o
    <prgn>dselect</prgn> apresentará a você uma subtela da tela de seleção
    principal. Nesta tela, você pode escolher dentre os pacotes relacionados,
    aceitando as ações sugeridas (para instalar ou não), ou rejeitando-as.
    Para remover as seleções feitas automaticamente, pressione Shift-D; para
    restaurar as pré-seleções feitas, pressione Shift-U. Em todo caso, você
    pode salvar suas seleções e retornar a tela principal de seleção pressionando
    Shift-Q.

  <item>Ao retornar ao menu principal, o usuário pode então escolher
    o item "Install" para desempacotar e configurar os pacotes escolhidos.
    Alternativamente, os usuários que desejam remover arquivos podem
    escolher o item "Remove". Em qualquer ponto, os usuários pode escolher
    "Quit" para sair do dselect; as escolhas do usuário são preservadas pelo
    <prgn>dselect</prgn>.
</list>

<sect1 id="dpkg-deb">dpkg-deb

<p>Este programa manipula arquivos de pacotes Debian (<tt>.deb</tt>).
Alguns usos comuns são:
<list>
  <item>Descobrir todas as opções:  <tt>dpkg-deb --help</tt>.
  <item>Determinar que arquivos estão contidos num arquivo de pacote
    Debian:  <tt>dpkg-deb --contents foo_VVV-RRR.deb</tt>
  <item>Extrair os arquivos contidos num arquivo Debian encontrado em um
    diretório especificado pelo usuário: <tt>dpkg-deb --extract foo_VVV-RRR.deb tmp</tt>
    extrai todos os arquivos de <tt>foo_VVV-RRR.deb</tt> no
    diretório <tt>tmp/</tt>.  Isto é conveniente para examinar o
    conteúdo de um pacote num diretório localizado, sem instalar o
    pacote no sistema de arquivos raiz.
</list>

<p>Perceba que qualquer pacote que foi desempacotado usando o
<tt>dpkg-deb --extract</tt> será instalado incorretamente, você deverá usar
<tt>dpkg --install</tt> ao invés.

<p>Informações adicionais são dadas na página de manual
<manref name="dpkg-deb" section="1">.

<sect1 id="apt-get">apt-get

<p>O <prgn>apt-get</prgn> oferece um modo simples para instalar pacotes a partir
da linha de comando. Ao contrário do <prgn>dpkg</prgn>, o <prgn>apt-get</prgn>
não entende arquivos .deb, ele trabalha com os nomes dos pacotes e pode somente
instalar arquivos .deb de uma fonte especificada no arquivo
<file>/etc/apt/sources.list</file>.

<p>Para mais informação, instale o pacote <package>apt</package> e leia
<manref name="apt-get" section="8">, <manref name="sources.list" section="5">
e <file>/usr/share/doc/apt/guide.html/index.html</file>.

<sect1 id="dpkg-split">dpkg-split

<p>Este programa divide pacotes grandes em arquivos menores (por exemplo, para
gravá-los em um conjunto de disquetes), e também pode ser usado para
juntar um conjunto de arquivos num único arquivo. Pode ser usado apenas
em um sistema Debian (ou seja, um sistema contendo o pacote
<package>dpkg</package>), pois ele chama o programa
<tt>dpkg-deb</tt> para analisar o pacote Debian em seus componentes.

<p>Por exemplo, para dividir um arquivo .deb grande em N partes,
<list>
  <item>Execute o comando <tt>dpkg-split --split foo.deb</tt>.
    Isto produzirá N arquivos, cada um com aproximadamente 460 KBytes no
    diretório atual.
  <item>Copie esses N arquivos em disquetes.
  <item>Copie o conteúdo dos disquetes no disco rígido desejado na
    outra máquina.
  <item>Junte essas partes de arquivos usando <tt>dpkg-split --join "foo*"</tt>.
</list>

<sect id="updaterunning">O Debian alega ser capaz de atualizar um programa
que está sendo executado; como isto é realizado?

<p>O kernel do sistema &debian; suporta a substituição de arquivos mesmo que
eles estejam sendo usados.

<p>Nós também oferecemos um programa chamado <prgn>start-stop-daemon</prgn>
que é usado para iniciar daemons em tempo de boot, ou para parar daemons quando
o runlevel do kernel é alterado (por exemplo, de multi-user para single-user
ou para desligar). O mesmo programa é instalado para parar de rodar daemons, e
reiniciá-los quando necessário.

<sect id="whatpackages">Como posso descobrir que pacotes estão instalados num
sistema Debian?

<p>Para descobrir o estado de todos os pacotes instalados num sistema Debian,
execute o comando:
  <example>dpkg --list</example>

Isso mostra um resumo de uma linha para cada pacote, dando um símbolo de status
(explicado no cabeçalho), o nome do pacote, a versão que é <em>instalada</em>,
e uma breve descrição.

<p>Para descobrir o status de pacotes cujos nomes correspondem a qualquer
padrão da string começando com "foo", execute o comando:
  <example>dpkg --list 'foo*'</example>

<p>Para adquirir um relatório mais completo para um pacote em particular,
execute o comando:
  <example>dpkg --status NomeDoPacote</example>

<sect id="filesearch">Como posso descobrir que pacote produziu um arquivo específico?

<p>Para identificar o pacote que produziu o arquivo chamado <tt>foo</tt>,
execute um dentre os comandos abaixo:

<list>
  <item><tt>dpkg --search NomeDoArquivo</tt>
    <p>Isto procura por <tt>nome_do_arquivo</tt> em pacotes instalados.
    (isto é atualmente equivalente a procurar todos os arquivos que possuam
    a extensão <tt>.list</tt> no diretório <tt>/var/lib/dpkg/info/</tt>, e
    ajustando a saída para mostrar os nomes de todos os pacotes que o contém).

  <item><tt>zgrep foo Contents-ARCH.gz</tt>
    <p>Isto procura por arquivos que possuam a substring <tt>foo</tt>
    em seus nomes. Os arquivos <tt>Contents-ARQ.gz</tt> (onde ARQ representa
    a arquitetura requerida) residem nos principais diretórios de pacotes
    (main, non-free, contrib) em um site FTP. Um arquivo <tt>Contents</tt>
    refere-se somente aos pacotes da árvore de subdiretórios onde ele reside.
    Além do mais, um usuário poderia ter que procurar mais que um arquivo
    <tt>Contents</tt> para encontrar o pacote contendo o arquivo <tt>foo</tt>.

    <p>Esse método possui a vantagem sobre o <tt>dpkg --search</tt> em que ele achará
    arquivos em pacotes que não estão atualmente instalados em seu sistema.
</list>