[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ próximo ]

Como usar o APT
Capítulo 3 - Gerenciando pacotes


3.1 Atualizando a lista de pacotes disponíveis

O sistema de empacotamento usa um banco de dados próprio para saber quais pacotes estão instalados, quais não estão e quais estão disponíveis para instalação. O apt-get usa esse banco de dados para saber instalar os pacotes solicitados pelo usuário e para saber quais pacotes são necessários para que o pacote selecionado rode perfeitamente.

Para atualizar essa lista, você usa o comando apt-get update. Ele procura pelas listas de pacotes nos repositórios indicados no seu arquivo /etc/apt/sources.list, veja O arquivo /etc/apt/sources.list, Seção 2.1 para maiores informações sobre esse arquivo.

É útil executar esse comando regularmente para saber de possíveis atualizações nos pacotes, principalmente de segurança.


3.2 Instalando pacotes

Finalmente um dos processos mais esperados! Com sua sources.list preparada e a lista de pacotes disponíveis, basta rodar o apt-get para ter seu pacote instalado. Por exemplo você pode fazer:

     apt-get install xchat

O APT vai buscar então em seu banco de dados a versão mais nova desse pacote e vai baixá-la do repositório correspondente na sources.list. Caso esse pacote dependa de algum outro -- o que é o caso aqui -- o APT irá conferir as dependências e instalar os pacotes necessários. Veja esse exemplo:

     [root]@[/] # apt-get install nautilus
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following extra packages will be installed:
       bonobo libmedusa0 libnautilus0 
     The following NEW packages will be installed:
       bonobo libmedusa0 libnautilus0 nautilus 
     0 packages upgraded, 4 newly installed, 0 to remove and 1  not upgraded.
     Need to get 8329kB of archives. After unpacking 17.2MB will be used.
     Do you want to continue? [Y/n]

O pacote nautilus depende das bibliotecas compartilhadas citadas, portanto, o APT as vai buscar no repositório. Se você tivesse especificado os nomes dessas bibliotecas na linha de comando do apt-get, o APT não teria perguntado se devia continuar ou não, ele tomaria como certo o seu desejo em instalar todos aqueles pacotes.

Isso significa que o APT só pede confirmação quando precisar instalar pacotes além daqueles que foram solicitados para suprir uma dependência.

As seguintes opções podem ser de utilidade:

     -h - ajuda
     -d - baixar arquivos apenas, não instalar
     -f - conserta erros de instalações de pacotes
     -s - não agir, apenas simular operação
     -y - assume `sim' para todas as perguntas
     -u - mostrar pacotes que serão atualizados também

Múltiplos pacotes podem ser solicitados em uma única linha de comando. Os arquivos baixados da rede são colocados no diretório /var/cache/apt/archives para serem instalados depois.

Você pode especificar pacotes para remoção na mesma linha de comando. Para isso, basta colocar um '-' logo depois do nome do pacote a ser removido, assim:

     [root]@[/] # apt-get install nautilus gnome-panel-       
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following extra packages will be installed:
       bonobo libmedusa0 libnautilus0 
     The following packages will be REMOVED:
       gnome-applets gnome-panel gnome-panel-data gnome-session 
     The following NEW packages will be installed:
       bonobo libmedusa0 libnautilus0 nautilus 
     0 packages upgraded, 4 newly installed, 4 to remove and 1  not upgraded.
     Need to get 8329kB of archives. After unpacking 2594kB will be used.
     Do you want to continue? [Y/n]

Veja a seção Removendo pacotes, Seção 3.3 para maiores detalhes sobre a remoção de pacotes.

Caso você de alguma forma danifique a instalação de um pacote, ou simplesmente deseja que os arquivos do pacote sejam repostos com a mesma versão, você pode usar a opção --reinstall assim:

     [root]@[/] # apt-get --reinstall install gdm
     Reading Package Lists... Done
     Building Dependency Tree... Done
     0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1  not upgraded.
     Need to get 0B/182kB of archives. After unpacking 0B will be used.
     Do you want to continue? [Y/n]

O APT usado na produção desse manual é a versão 0.5.3, atual do Debian `unstable' (sid). Essa versão conta com uma função especial: você pode usar algo do tipo apt-get install pacote/distribuição para instalar o pacote de uma distribuição específica ou apt-get install pacote=versão. Por exemplo:

     apt-get install nautilus/unstable

irá instalar o pacote nautilus da distribuição `unstable' mesmo que você esteja rodando a `stable'. Os nomes aceitos para `distribuição' são: stable, testing, unstable.

Note, porém, que o mais correto para selecionar a distribuição é usar a opção -t, que irá buscar as dependências da distribuição especificada e não só o pacote.

IMPORTANTE: a versão `unstable' do Debian é a versão na qual as últimas versões dos pacotes Debian entram. Essa distribuição recebe todas as mudanças pelas quais os pacotes passam, desde as pequenas até as drásticas, que afetam muitos pacotes ou todo o sistema. Por essa razão, essa versão não deve ser usada por usuários inexperientes ou que precisem de estabilidade à toda prova.

A versão `testing' é um pouco melhor que a `unstable' em relação a estabilidade mas para sistemas de produção deve-se usar a distribuição estável.


3.3 Removendo pacotes

Caso você não esteja mais querendo usar um pacote, você pode removê-lo do seu sistema usando o APT. Para isso basta usar: apt-get remove pacote. Por exemplo:

     [root]@[/] # apt-get remove gnome-panel
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following packages will be REMOVED:
       gnome-applets gnome-panel gnome-panel-data gnome-session 
     0 packages upgraded, 0 newly installed, 4 to remove and 1  not upgraded.
     Need to get 0B of archives. After unpacking 14.6MB will be freed.
     Do you want to continue? [Y/n]

Como você pode observar no exemplo acima, o APT cuida também de retirar os pacotes que dependem do pacote sendo removido. Não há como remover pacotes sem remover os que são dependentes dele.

Rodando o apt-get como acima vai levar à remoção dos pacotes, mas seus arquivos de configuração, caso existam, permanecerão intactos. Para uma remoção completa, faça:

     [root]@[/] # apt-get --purge remove gnome-panel
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following packages will be REMOVED:
       gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 
     0 packages upgraded, 0 newly installed, 4 to remove and 1  not upgraded.
     Need to get 0B of archives. After unpacking 14.6MB will be freed.
     Do you want to continue? [Y/n]

Note os '*' na frente dos nomes. Eles indicam que os arquivos de configuração serão removidos.

Assim como no caso do método install, você pode usar um sinal gráfico para fazer o processo inverso. No caso da remoção, se você adicionar um sinal '+' logo depois do nome do pacote, ao invés de removido ele será instalado. Exemplo:

     [root]@[/] # apt-get --purge remove gnome-panel nautilus+
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following extra packages will be installed:
       bonobo libmedusa0 libnautilus0 nautilus 
     The following packages will be REMOVED:
       gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 
     The following NEW packages will be installed:
       bonobo libmedusa0 libnautilus0 nautilus 
     0 packages upgraded, 4 newly installed, 4 to remove and 1  not upgraded.
     Need to get 8329kB of archives. After unpacking 2594kB will be used.
     Do you want to continue? [Y/n]

Note que o apt-get informa os pacotes extras que serão instalados, ou seja, os pacotes cuja instalação será necessária ao funcionamento do pacote cuja instalação foi solicitada, os que serão removidos e os que serão instalados (incluindo novamente os extras).


3.4 Atualizando os pacotes

A atualização de pacotes é um grande trunfo do sistema APT. Ela é feita com um simples comando: apt-get upgrade. Você pode atualizar tanto pacotes dentro de uma mesma distribuição quanto atualizar para uma nova distribuição, mas, para essa última, o comando apt-get dist-upgrade é melhor, consulte a seção Atualizando para uma nova distribuição, Seção 3.5 para maiores detalhes.

É útil usar sempre a opção -u para esse comando. Essa opção faz com que o APT mostre os pacotes que serão atualizados. Sem ela você vai fazer uma atualização no escuro. O APT irá baixar as últimas versões de cada pacote e as instalará numa ordem coerente. É sempre importante rodar o apt-get update antes. Veja a seção Atualizando a lista de pacotes disponíveis, Seção 3.1. Veja esse exemplo:

     [root]@[/] # apt-get -u upgrade
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following packages have been kept back
       cpp gcc lilo 
     The following packages will be upgraded
       adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
       ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
       libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
       libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 
     29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
     Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
     Do you want to continue? [Y/n]

Esse processo é muito simples. Repare que logo no início, o apt-get diz que alguns pacotes foram kept back. Isso significa que eles têm novas versões que não serão instaladas por algum motivo. Alguns deles são: dependências quebradas (um pacote do qual ele depende não tem uma versão disponível para ser baixada), novas dependências (o pacote passou a depender de novos pacotes desde a última versão).

O primeiro motivo não tem solução limpa, para o segundo basta rodar um apt-get install específico para o pacote, que baixará suas dependências. Outra solução, ainda mais limpa, é usar o dist-upgrade. Veja seção Atualizando para uma nova distribuição, Seção 3.5.


3.5 Atualizando para uma nova distribuição

Essa característica do APT serve para atualizar uma distribuição inteira de uma única tacada, através da internet ou de um novo CD adquirido, ou uma ISO baixada.

Ela é usada também quando mudanças são feitas na interrelação de pacotes já instalados que devem ser atualizados mas são mantidos inalterados (kept back).

Por exemplo, supondo que você está usando a versão estável do Debian revisão 0 e compre o CD com a revisão 3, você pode usar o APT para atualizar seu sistema a partir desse novo CD. Para isso use o apt-cdrom (veja seção Colocando um CDROM na sources.list, Seção 2.4) para adicionar o CD ao seu arquivo /etc/apt/sources.list e rode o apt-get dist-upgrade.

É importante notar que o APT sempre busca as versões mais novas dos pacotes. Portanto, se seu arquivo /etc/apt/sources.list estiver listando um repositório que tenha uma versão mais nova de determinado pacote que contém o CD, ele tenderá a buscá-lo de lá.

No exemplo mostrado na seção Atualizando os pacotes, Seção 3.4, vimos que alguns pacotes ficaram "kept back", vamos solucionar isso agora, com o método dist-upgrade:

     [root]@[/] # apt-get -u dist-upgrade
     Reading Package Lists... Done
     Building Dependency Tree... Done
     Calculating Upgrade... Done
     The following NEW packages will be installed:
       cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
       libpcre2 logrotate mailx 
     The following packages have been kept back
       lilo 
     The following packages will be upgraded
       adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc
       indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
       libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
       liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
       procps psmisc 
     31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
     Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
     Do you want to continue? [Y/n]

Note agora que os pacotes serão atualizados, mas novos pacotes serão instalados (as novas dependências dos pacotes). E que o lilo continua kept back. Ele provavelmente tem algum problema mais sério, que não uma nova dependência. Podemos conferir isso rodando:

     [root]@[/] # apt-get -u install lilo
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following extra packages will be installed:
       cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
       logrotate mailx 
     The following packages will be REMOVED:
       debconf-tiny 
     The following NEW packages will be installed:
       cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
       logrotate mailx 
     The following packages will be upgraded
       lilo 
     1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
     Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
     Do you want to continue? [Y/n]

Como notamos na saída acima, o lilo tinha um novo conflito com o pacote debconf-tiny, ou seja, não podia ser instalado (isso também implica na atualização) sem que o debconf-tiny fosse removido.

Uma maneira de saber especificamente o que leva um pacote a ser mantido ou removido é:

     # apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
     Reading Package Lists... Done
     Building Dependency Tree... Done
     Calculating Upgrade... Starting
     Starting 2
     Investigating python1.5
     Package python1.5 has broken dep on python1.5-base
       Considering python1.5-base 0 as a solution to python1.5 0
       Holding Back python1.5 rather than change python1.5-base
     Investigating python1.5-dev
     Package python1.5-dev has broken dep on python1.5
       Considering python1.5 0 as a solution to python1.5-dev 0
       Holding Back python1.5-dev rather than change python1.5
      Try to Re-Instate python1.5-dev
     Done
     Done
     The following packages have been kept back
       gs python1.5-dev 
     0 packages upgraded, 0 newly installed, 0 to remove and 2  not upgraded.

Assim fica fácil perceber que o pacote python1.5-dev não pode ser instalado por culpa de uma dependência não satisfeita: python1.5


3.6 Usando em conjunto com o Dselect

O dselect é um programa que ajuda na seleção de pacotes do Debian. Ele é considerado meio complicado e chato de se lidar, mas com alguma prática, sua interface ncurses, de console, se torna usual.

Uma de suas qualidades é que ele "sabe" como explorar a capacidade de os pacotes "recomendarem" e "sugerirem" a instalação de outros pacotes. Para usá-lo, rode `dselect' como root. Selecione como método de acesso o apt. Isso não é realmente necessário mas, caso você não esteja usando um CDROM e quiser usar a internet é o melhor jeito de usar o dselect.

Para entender melhor como usar o dselect, leia a documentação do dselect que se encontra na página do Debian http://www.debian.org/doc/ddp ou sua versão em português, encontrada na página do Debian-BR http://debian-br.cipsga.org.br/suporte/documentacao.html.

Depois de feitas as seleções adequadas no dselect, use:

     apt-get -u dselect-upgrade

Veja esse exemplo:

     [root]@[/] # apt-get -u dselect-upgrade
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following packages will be REMOVED:
       lbxproxy 
     The following NEW packages will be installed:
       bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0
       gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl
       libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules
       libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy
       util-linux-locales vacation xbill xplanet-images 
     The following packages will be upgraded
       debian-policy 
     1 packages upgraded, 30 newly installed, 1 to remove and 0  not upgraded.
     Need to get 7140kB of archives. After unpacking 16.3MB will be used.
     Do you want to continue? [Y/n]

Veja, no mesmo sistema, se eu rodar apt-get dist-upgrade o que eu tenho:

     [root]@[/] # apt-get -u dist-upgrade   
     Reading Package Lists... Done
     Building Dependency Tree... Done
     Calculating Upgrade... Done
     The following packages will be upgraded
       debian-policy 
     1 packages upgraded, 0 newly installed, 0 to remove and 0  not upgraded.
     Need to get 421kB of archives. After unpacking 25.6kB will be freed.
     Do you want to continue? [Y/n]

Note que muitos dos pacotes do de cima estão sendo instalados porque outros pacotes os "sugerem" ou "recomendam". Outros deles estão sendo instalados ou removidos (no caso do lbxproxy por exemplo) por escolha minha, durante minha navegação pela lista de pacotes do dselect. O dselect pode ser uma poderosa ferramenta usada em conjunto com o APT.


3.7 Como manter um sistema misto

As pessoas têm o interesse, normalmente, de usar o Debian testing, por ele ser mais estável que o unstable e mais atualizado que o stable. Mas você pode ter um sistema Testing e usar alguns pacotes do unstable.

Para isso, coloque a seguinte linha no /etc/apt/apt.conf:

     APT::Default-Release "testing";

E quando for instalar um pacote da unstable, basta passar a opção -t:

     # apt-get -t unstable install nomedopacote

3.8 Como atualizar os pacotes de versões específicas do Debian

Você usa uma distribuição mixada e agora quer atualizar os pacotes de uma dela. O apt-show-versions entra aqui. Você pode usar uma linha como a seguinte para atingir esse objetivo:

     # apt-get install `apt-show-versions -u -b | grep unstable`

3.9 Como manter versões específicas de pacotes instaladas (complexo)

Algumas vezes você fez uma modificação em um programa e não tem tempo ou vontade de portar aquelas mudanças para um versão nova do programa. Então você "prega" a versão que você tem instalada para que não seja feita a atualização. Ou você acaba de atualizar sua distribuição Debian para a 3.0 mas quer continuar com um certo pacote da 2.2.

É para esse propósito que serve o "pinning". A utilização desse recurso é simples. Basta editar o arquivo /etc/apt/preferences.

O formato é simples:

     Package: <pacote>
     Pin: <definição do pin>
     Pin-Priority: <prioridade do pin>

Por exemplo, para manter o pacote sylpheed que eu modifiquei para aceitar "responder para a lista" na versão 0.4.99, eu adiciono:

     Package: sylpheed
     Pin: version 0.4.99*

Note que eu usei um * (asterisco). Isso serve para dizer que quero que esse "pin" sirva para todas as versões que comecem com 0.4.99. Isso porque o Debian versiona seus pacotes com uma "revisão Debian" e eu não quero impedir essas revisões de entrar. Ou seja, as versões 0.4.99-1 e 0.4.99-10 seriam instaladas a partir do momento em que existissem. Se você modificou uma versão do pacote você não vai querer que isso aconteça assim, no entanto.

Note também que eu não dei prioridade ao Pin. A prioridade foi auto-definida como 989. Vamos entender melhor o que é a prioridade:

Uma prioridade menor que 0 faz com que o pacote definido para o Pin nunca seja instalado. As prioridades 0 a 100 definem pacotes não instalados e que não têm versões disponíveis então não entram no processo de escolha de versão. A prioridade 100 é a prioridade que o pacote atualmente instalado tem - isso significa que para que uma versão diferente seja instalada ela precisa ter mais de 100 na prioridade.

Prioridades até 1000 são prioridades que permitem que o pacote seja instalado. No entanto, um pacote com uma versão mais baixa não será instalado com esta prioridade em cima de uma versão mais nova que já está instalado. Ou seja: se eu tenho sylpheed 0.5.3 instalado e defino um Pin para sylpheed 0.4.99 com prioridade 999, o pacote 0.4.99 não será instalado para conformar com o Pin. Para que um pacote possa se "desatualizar" para cumprir a determinação de um Pin ele precisa ter prioridade maior que 1000.

Isso leva a uma idéia interessante. Suponha que você acaba de atualizar sua versão stable do Debian para a testing mas se arrependeu. Você pode definir um Pin padrão para voltar à stable. Por exemplo:

     Package: *
     Pin: release a=stable
     Pin-Priority: 1001

Depois disso, um apt-get -u dist-upgrade vai "desatualizar" seu sistema para a versão estável.

As opções para o pin podem ser: version, release ou origin.

A opção version, como já vimos, suporta uma versão normal e uma máscara (como um asterisco, por exemplo) para definir várias verões de uma vez.

A opção release é mais ampla e depende do arquivo Release do repositório APT, ou do CD. Esta opção pode deixar a desejar pois alguns repositórios não o contém. Você pode ver o conteúdo dos arquivos Release que você tem em /var/lib/apt/lists/. As sub-opções são: a (archive), c (componente), v (versão), o (origin) e l (label).

Um exemplo:

     Package: *
     Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
     Priority: 1001

Neste exemplo escolhemos versão do Debian 2.2*, que considera as "revisões" (que vêm com consertos de segurança e bugs sérios), repositório stable, seção main (poderia ser contrib e non-free, por exemplo) e origem e nome Debian. Origem (o=) define quem produziu aquele arquivo Release, o nome (l=) define o nome da distribuição: Debian para o próprio Debian e Progeny para a mesma, por exemplo. Um exemplo de arquivo Release:

     $ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release 
     Archive: stable
     Version: 2.2r3
     Component: main
     Origin: Debian
     Label: Debian
     Architecture: i386

[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ próximo ]

Como usar o APT

1.7.7 - Março de 2002
Gustavo Noronha Silva kov@debian.org