<?xml version='1.0' encoding='utf-8'?>
<!-- -*- DocBook -*- -->
<chapter id="pkgtools"><title>As Ferramentas de Gerenciamento de Pacotes Debian.</title>
<section id="pkgprogs"><title>Que programas o Debian oferece para administrar seus pacotes?</title>
<section id="dpkg"><title>dpkg</title>
<para>
Este é o principal programa de gerenciamento de pacotes.  O
<command>dpkg</command> pode ser chamado com muitas opções.  Alguns usos
comuns são:
</para>
<itemizedlist>
<listitem>
<para>
Descobrir todas as opções: <literal>dpkg --help</literal>.
</para>
</listitem>
<listitem>
<para>
Imprimir o arquivo de controle (e outras informações) de um pacote
especificado: <literal>dpkg --info foo_VVV-RRR.deb</literal>
</para>
</listitem>
<listitem>
<para>
Instalar um pacote (incluindo desempacotamento e configuração) no sistema de
arquivos do disco rígido: <literal>dpkg --install foo_VVV-RRR.deb</literal>.
</para>
</listitem>
<listitem>
<para>
Desempacotar (mas não configurar) um pacote Debian no sistema de arquivos do
disco rígido: <literal>dpkg --unpack foo_VVV-RRR.deb</literal>.  Perceba que
esta operação <emphasis>não</emphasis> 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 <xref
linkend="maintscripts"/>) associado ao pacote.
</para>
</listitem>
<listitem>
<para>
Configurar um pacote que já foi desempacotado: <literal>dpkg --configure
foo</literal>.  Entre outras coisas, esta ação executa o script postinst
(veja <xref linkend="maintscripts"/>) associado ao pacote.  Ele também
atualiza os arquivos listados no <literal>conffiles</literal> desse pacote.
Observe que a operação 'configure' recebe como argumento um nome de pacote
(por exemplo, foo), e <emphasis>não</emphasis> um nome-de-arquivo (por
exemplo, foo_VVV-RRR.deb).
</para>
</listitem>
<listitem>
<para>
Extrair um único arquivo chamado "blurf" (ou um grupo de arquivos chamados
"blurf*" de um pacote Debian: <literal>dpkg --fsys-tarfile foo_VVV-RRR.deb |
tar -xf - blurf*</literal>
</para>
</listitem>
<listitem>
<para>
Remover um pacote (mas não seus arquivos de configuração): <literal>dpkg
--remove foo</literal>.
</para>
</listitem>
<listitem>
<para>
Remover um pacote (incluindo seus arquivos de configuração): <literal>dpkg
--purge foo</literal>.
</para>
</listitem>
<listitem>
<para>
Listar o estado de instalação dos pacotes contendo a string (ou expressão
regular) "foo*": <literal>dpkg --list 'foo*'</literal>.
</para>
</listitem>
</itemizedlist>
</section>

<section id="dselect"><title>dselect</title>
<para>
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
</para>
<para>
O <command>dselect</command> pode:
</para>
<itemizedlist>
<listitem>
<para>
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;
</para>
</listitem>
<listitem>
<para>
avisar o usuário sobre inconsistências ou incompatibilidades nas suas
escolhas;
</para>
</listitem>
<listitem>
<para>
determinar a ordem na qual os pacotes devem ser instalados;
</para>
</listitem>
<listitem>
<para>
fazer a instalação ou remoção automaticamente; e
</para>
</listitem>
<listitem>
<para>
guiar o usuário pelo processo de configuração exigido por cada pacote.
</para>
</listitem>
</itemizedlist>
<para>
O <command>dselect</command> 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 <emphasis>&lt;enter&gt;</emphasis>
para escolher a ação destacada.
</para>
<para>
O que usuário vê depois depende da ação que ele escolheu.  Se ele escolheu
qualquer opção que não <literal>Access</literal> ou
<literal>Select</literal>, o <command>dselect</command> simplesmente executará
a ação especificada: por exemplo, se o usuário escolhesse a ação
<literal>Remove</literal>, o dselect removeria todos os arquivos selecionados
para remoção quando da última vez que o usuário escolheu a ação
<literal>Select</literal>.
</para>
<para>
Tanto o item <literal>Access</literal> como o item <literal>Select</literal>
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.
</para>
<para>
Uma extensiva ajuda on-line está disponível, use a tecla '?'  para ver uma
tela de ajuda a qualquer momento.
</para>
<para>
A ordem na qual as ações são apresentadas no primeiro menu do
<command>dselect</command> 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).
</para>
<itemizedlist>
<listitem>
<para>
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 <literal>dselect</literal> termina, de modo que, se não
for alterado, a opção não precisa ser chamada outra vez.
</para>
</listitem>
<listitem>
<para>
Depois faça o <emphasis role="strong">Update</emphasis> (Atualização) da
lista de pacotes disponíveis.  Para fazer isso, o <command>dselect</command>
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 <command>dselect</command> se oferecerá para
fazê-lo para você.)
</para>
</listitem>
<listitem>
<para>
<emphasis role="strong">Selecione</emphasis> 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).
</para>
<para>
O topo da tela é uma janela relativamente estreita com a lista dos 42551
pacotes do Debian; a parte de baixo da tela contém descrições dos pacotes ou
grupo de pacotes que estiverem destacados acima.
</para>
<para>
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:
</para>
<variablelist>
<varlistentry>
<term>Para ser instalado:</term>
<listitem>
<para>
Isso pode ser realizado pressionando-se a chave `+'.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Para ser removido:</term>
<listitem>
<para>
Pacotes podem ser removidos de duas maneiras:
</para>
<itemizedlist>
<listitem>
<para>
removidos: isso remove a maioria dos arquivos associados com o pacote, mas
preserva os arquivos listados como arquivos de configuração (veja <xref
linkend="conffile"/>) e informações de configuração de pacotes.  Isso é
feito pressionando a chave `-'.
</para>
</listitem>
<listitem>
<para>
expurgados: isso remove <emphasis>todos</emphasis> os arquivos que fazem partes
do pacote.  Isso é feito pressionando a chave `_'.
</para>
</listitem>
</itemizedlist>
<para>
Perceba que não é possível remover "todos os pacotes".  Se você tentar
isso, seu sistema se reduzirá aos pacotes base iniciais.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Para ser colocado em "hold" (espera)</term>
<listitem>
<para>
Isso é feito pressionando-se `=', e ele efetivamente diz ao
<command>dselect</command> 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 <emphasis role="strong">Access Method</emphasis>, e
adquirido quando você usou <emphasis role="strong">Update</emphasis>).
</para>
<para>
Assim como você pode colocar um pacote em "hold", você pode reverter esta
opção pressionando `:'.  Que diz ao <command>dselect</command> que o(s)
pacote(s) podem ser atualizados se uma versão mais recente esteja disponível.
Essa é a configuração padrão.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
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.
</para>
<para>
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.
</para>
<para>
Se você selecionar um pacote para instalação ou remoção, por exemplo,
<systemitem role="package">foo.deb</systemitem>, e aquele pacote depende de (ou
recomenda) outro pacote, por exemplo, <systemitem
role="package">blurf.deb</systemitem>, então o <command>dselect</command>
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.
</para>
</listitem>
<listitem>
<para>
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 <command>dselect</command>.
</para>
</listitem>
</itemizedlist>
</section>

<section id="dpkg-deb"><title>dpkg-deb</title>
<para>
Este programa manipula arquivos de pacotes Debian (<literal>.deb</literal>).
Alguns usos comuns são:
</para>
<itemizedlist>
<listitem>
<para>
Descobrir todas as opções: <literal>dpkg-deb --help</literal>.
</para>
</listitem>
<listitem>
<para>
Determinar que arquivos estão contidos num arquivo de pacote Debian:
<literal>dpkg-deb --contents foo_VVV-RRR.deb</literal>
</para>
</listitem>
<listitem>
<para>
Extrair os arquivos contidos num arquivo Debian encontrado em um diretório
especificado pelo usuário: <literal>dpkg-deb --extract foo_VVV-RRR.deb
tmp</literal> extrai todos os arquivos de <literal>foo_VVV-RRR.deb</literal> no
diretório <literal>tmp/</literal>.  Isto é conveniente para examinar o
conteúdo de um pacote num diretório localizado, sem instalar o pacote no
sistema de arquivos raiz.
</para>
</listitem>
</itemizedlist>
<para>
Perceba que qualquer pacote que foi desempacotado usando o <literal>dpkg-deb
--extract</literal> será instalado incorretamente, você deverá usar
<literal>dpkg --install</literal> ao invés.
</para>
<para>
Informações adicionais são dadas na página de manual
<citerefentry><refentrytitle>dpkg-deb</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
</para>
</section>

<section id="apt-get"><title>apt-get</title>
<para>
O <command>apt-get</command> oferece um modo simples para instalar pacotes a
partir da linha de comando.  Ao contrário do <command>dpkg</command>, o
<command>apt-get</command> não entende arquivos .deb, ele trabalha com os
nomes dos pacotes e pode somente instalar arquivos .deb de uma fonte
especificada no arquivo <filename>/etc/apt/sources.list</filename>.
</para>
<para>
Para mais informação, instale o pacote <systemitem
role="package">apt</systemitem> e leia
<citerefentry><refentrytitle>apt-get</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sources.list</refentrytitle><manvolnum>5</manvolnum></citerefentry>
e <filename>/usr/share/doc/apt/guide.html/index.html</filename>.
</para>
</section>

<section id="dpkg-split"><title>dpkg-split</title>
<para>
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 <systemitem
role="package">dpkg</systemitem>), pois ele chama o programa
<literal>dpkg-deb</literal> para analisar o pacote Debian em seus componentes.
</para>
<para>
Por exemplo, para dividir um arquivo .deb grande em N partes,
</para>
<itemizedlist>
<listitem>
<para>
Execute o comando <literal>dpkg-split --split foo.deb</literal>.  Isto
produzirá N arquivos, cada um com aproximadamente 460 KBytes no diretório
atual.
</para>
</listitem>
<listitem>
<para>
Copie esses N arquivos em disquetes.
</para>
</listitem>
<listitem>
<para>
Copie o conteúdo dos disquetes no disco rígido desejado na outra máquina.
</para>
</listitem>
<listitem>
<para>
Junte essas partes de arquivos usando <literal>dpkg-split --join
"foo*"</literal>.
</para>
</listitem>
</itemizedlist>
</section>

</section>

<section id="updaterunning"><title>O Debian alega ser capaz de atualizar um programa que está sendo executado; como isto é realizado?</title>
<para>
O kernel do sistema Debian GNU/Linux suporta a substituição de arquivos mesmo
que eles estejam sendo usados.
</para>
<para>
Nós também oferecemos um programa chamado
<command>start-stop-daemon</command> 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.
</para>
</section>

<section id="whatpackages"><title>Como posso descobrir que pacotes estão instalados num sistema Debian?</title>
<para>
Para descobrir o estado de todos os pacotes instalados num sistema Debian,
execute o comando:
</para>
<screen>
dpkg --list
</screen>
<para>
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 é
<emphasis>instalada</emphasis>, e uma breve descrição.
</para>
<para>
Para descobrir o status de pacotes cujos nomes correspondem a qualquer padrão
da string começando com "foo", execute o comando:
</para>
<screen>
dpkg --list 'foo*'
</screen>
<para>
Para adquirir um relatório mais completo para um pacote em particular, execute
o comando:
</para>
<screen>
dpkg --status NomeDoPacote
</screen>
</section>

<section id="filesearch"><title>Como posso descobrir que pacote produziu um arquivo específico?</title>
<para>
Para identificar o pacote que produziu o arquivo chamado
<literal>foo</literal>, execute um dentre os comandos abaixo:
</para>
<itemizedlist>
<listitem>
<para>
<literal>dpkg --search NomeDoArquivo</literal>
</para>
<para>
Isto procura por <literal>nome_do_arquivo</literal> em pacotes instalados.
(isto é atualmente equivalente a procurar todos os arquivos que possuam a
extensão <literal>.list</literal> no diretório
<literal>/var/lib/dpkg/info/</literal>, e ajustando a saída para mostrar os
nomes de todos os pacotes que o contém).
</para>
</listitem>
<listitem>
<para>
<literal>zgrep foo Contents-ARCH.gz</literal>
</para>
<para>
Isto procura por arquivos que possuam a substring <literal>foo</literal> em
seus nomes.  Os arquivos <literal>Contents-ARQ.gz</literal> (onde ARQ
representa a arquitetura requerida) residem nos principais diretórios de
pacotes (main, non-free, contrib) em um site FTP.  Um arquivo
<literal>Contents</literal> 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 <literal>Contents</literal> para encontrar o
pacote contendo o arquivo <literal>foo</literal>.
</para>
<para>
Esse método possui a vantagem sobre o <literal>dpkg --search</literal> em que
ele achará arquivos em pacotes que não estão atualmente instalados em seu
sistema.
</para>
</listitem>
</itemizedlist>
</section>

</chapter>

