Como usar o APT --------------- Gustavo Noronha Silva 1.7.2 - Agosto de 2001 ------------------------------------------------------------------------------- Resumo ------ Esse documento pretende levar ao usuário um bom conhecimento das funções do utilitário de empacotamento do Debian, APT. É objetivo real deste, facilitar a vida dos novos usuários de Debian ou ajudar aqueles que desejam se aprofundar no conhecimento da administração desse sistema. Ele foi criado para o projeto Debian-BR para melhorar ainda mais o suporte à distribuição Debian oferecido ao usuário falante da língua portuguesa. Nota de Copyright ----------------- Copyright (C) 2001 Gustavo Noronha Silva Esse manual está licenciado nos termos da GNU FDL (Free Documentation License). Ele é feito na intenção de ser útil à comunidade mas vem sem nenhuma garantia, use a seu próprio risco. ------------------------------------------------------------------------------- Conteúdo -------- 1. Introdução 2. Configurações Básicas 2.1. O arquivo /etc/apt/sources.list 2.2. Como usar o APT localmente 2.3. Decidindo qual mirror incluir no sources.list: netselect, netselect-apt 2.4. Colocando um CDROM na sources.list 3. Gerenciando pacotes 3.1. Atualizando a lista de pacotes disponíveis 3.2. Instalando pacotes 3.3. Removendo pacotes 3.4. Atualizando os pacotes 3.5. Atualizando para uma nova distribuição 3.6. Usando em conjunto com o Dselect 3.7. Como manter versões específicas de pacotes instaladas 4. Obtendo informações sobre os pacotes. 4.1. Descobrindo nome dos pacotes 4.2. Usando o dpkg para achar nomes de pacotes 4.3. Como instalar pacotes "on demand" 4.4. Como manter-se informado das mudanças nos pacotes. 5. Lidando com pacotes fonte 5.1. Baixando pacotes fonte 5.2. Pacotes necessários para compilação de um pacote fonte 6. Quais são as distribuições que suportam o APT? 7. Como lidar com erros? 7.1. Erros comuns 7.2. Onde consigo ajuda? 8. Agradecimentos 9. Novas versões desse tutorial ------------------------------------------------------------------------------- 1. Introdução ------------- No início havia o .tar.gz. Os usuários tinham de penar para compilar cada programa usado em seu sistema GNU/Linux, ou outro qualquer. Quando o Debian foi criado, sentiu-se a necessidade de um sistema de gerenciamento de pacotes instalados no sistema. Deu-se a esse sistema o nome de `dpkg'. Assim surgiu o famoso `pacote'. Logo após a Red Hat resolveu criar seu conhecido sistema rpm. Rapidamente outro dilema tomou conta das mentes dos produtores de GNU/Linux. Uma maneira rápida, prática e eficiente de se instalar pacotes, gerenciando suas dependências automaticamente e tomando conta de seus arquivos de configuração ao atualizar. Assim, o Debian, novamente pioneiro, criou o APT ou Advanced Packaging Tool, hoje portado pela Conectiva e incorporado por algumas outras distribuições. Este manual não tenta entrar na área do apt-rpm, como ficou conhecido o APT portado pela Conectiva, mas "patches" são bem vindos para atingir esse objetivo. ------------------------------------------------------------------------------- 2. Configurações Básicas ------------------------ 2.1. O arquivo /etc/apt/sources.list ------------------------------------ Para seu funcionamento, o APT utiliza-se de um arquivo que lista as `fontes' de onde ele obterá os pacotes. Esse arquivo é o `/etc/apt/sources.list'. As entradas desse arquivo são normalmente formadas assim: deb http://site.http.org/debian distribuição seção1 seção2 seção3 deb-src http://site.http.org/debian distribuição seção1 seção2 seção3 É lógico que essas entradas são fictícias e não devem ser usadas. A primeira palavra das linhas, `deb' e `deb-src' indicam o tipo de repositório: se guarda pacotes binários (`deb'), ou seja, os pré-compilados que normalmente usamos ou se guarda pacotes fonte (`deb-src'), que são o fonte original do programa mais o arquivo de controle Debian (`.dsc') e o `diff.gz' contendo as modificações necessárias para se debianizar o programa. Normalmente encontramos nos sources.list padrões do Debian o seguinte: # See sources.list(5) for more information, especialy # Remember that you can only use http, ftp or file URIs # CDROMs are managed through the apt-cdrom tool. deb http://http.us.debian.org/debian stable main contrib non-free deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free deb http://security.debian.org stable/updates main contrib non-free # Uncomment if you want the apt-get source function to work #deb-src http://http.us.debian.org/debian stable main contrib non-free #deb-src http://non-us.debian.org/debian-non-US stable non-US Basicamente, isso é o necessário. A primeira linha com `deb' aponta para o repositório oficial, a segunda para o non-US e a terceira para as atualizações de segurança. As duas últimas linhas estão comentadas, (têm um `#' no início) o que faz com que o apt-get as ignore. Elas são do estilo `deb-src', ou seja, têm os pacotes fonte do Debian. Se você costuma baixar fontes de programas para testar ou recompilar, descomente-as. O arquivo `/etc/apt/sources.list' pode conter vários tipos de linhas. O APT sabe lidar com repositórios `http', `ftp', `file' (arquivos locais, por exemplo, um diretório que contenha uma ISO montada) e `ssh', até onde eu sei. 2.2. Como usar o APT localmente ------------------------------- Algumas vezes você tem um monte de pacotes .deb que gostaria de usar o APT para instalar, para que as dependências fossem automaticamente resolvidas. Para isso crie um diretório e nele coloque os .deb que você quer ter indexados. Por exemplo: mkdir /root/debs Então, dentro do diretório /root, crie um arquivo vazio, com qualquer nome. Isso é porque um repositório APT precisa de um arquivo conhecido como "override", ele pode estar vazio, mas deve existir. Pode-se usar, para criar esse arquivo, o seguinte comando: touch arquivo Dentro desse arquivo você pode definir algumas opções para se sobreporem ao que vem junto do pacote. Ele tem a seguinte forma: pacote prioridade seção Pacote é o nome do pacote, prioridade é low, medium ou high e seção é a seção a qual ele pertence. Basta deixar o arquivo em branco, para dar certo. Ainda no diretório /root faça: dpkg-scanpackages debs arquivo | gzip > debs/Packages.gz Na linha acima, arquivo é o arquivo "override", o comando gera um arquivo debs/Packages.gz que contem informações diversas sobre os pacotes que serão usadas pelo APT. Para usar os pacotes, finalmente, adicione: deb file:/root debs/ Depois é só usar os comandos do APT normalmente. Você também pode gerar um repositório de fontes. Para isso use o mesmo procedimento, mas leve em conta que precisa ter os arquivos `.orig.tar.gz', `.dsc' e `.diff.gz' no diretório e use Sources.gz ao invés de Packages.gz. O programa a ser usado também difere. É o `dpkg-scansources'. Fica assim: dpkg-scansources debs | gzip > debs/Sources.gz Note que o `dpkg-scansources' não precisa de um arquivo "override". A linha pro sources.list fica: deb-src file:/root debs/ 2.3. Decidindo qual mirror incluir no sources.list: netselect, netselect-apt ---------------------------------------------------------------------------- Uma dúvida muito freqüente, principalmente dos usuários mais novos, é "qual mirror do Debian colocar no `sources.list'". Para decidir qual o mirror existem várias maneiras. Os mais experientes provavelmente já terão um script pronto medindo os tempos de ping entre os diversos mirrors. Mas já existe um programa que faz isso para nós: _netselect_. Para instalar o netselect, como sempre: apt-get install netselect Executando-o sem parâmetros mostra a ajuda. Executando-o com uma lista separada por espaços de hosts (mirrors), ele retornará um escore e um dos hosts. Esse escore leva em consideração o tempo estimado de ping e o número de hops (hosts pelos quais uma requisição de rede deve passar para chegar no host destino), e é inversamente proporcional à velocidade estimada de download (ou seja, quanto menor, melhor). O host retornado é o que obteve o menor escore (a lista dos escores pode ser obtida acrescentanto a opção -vv). Veja o seguinte exemplo: bash$ netselect ftp.debian.org http.us.debian.org ftp.at.debian.org download.unesp.br ftp.debian.org.br 365 ftp.debian.org.br bash$ Isso significa que, dos mirrors incluídos como parâmetros do netselect, `ftp.debian.org.br' foi o melhor, com um escore de 365. (Atenção!! Como isso foi feito do meu computador e a topografia da rede é extremamente diferente dependendo do ponto de contato, esse valor não necessariamente reflete corretamente a velocidade em outros computadores). Agora, basta colocar o mirror mais rápido encontrado pelo netselect no arquivo `/etc/apt/sources.list' (veja Seção 2.1, `O arquivo /etc/apt/sources.list') e seguir as dicas em Capítulo 3, `Gerenciando pacotes'. _Observação:_ uma lista de mirrors pode sempre ser encontrada no arquivo http://www.debian.org/mirror/mirrors_full. A partir da versão 0.3 o pacote netselect inclui o script _netselect-apt_, que automatiza o processo descrito acima. Basta usar como parâmetro do script a distribuição (se não for mencionada, stable é adotada como padrão) e o arquivo `sources.list' é gerado com os melhores mirrors da seção main e non-US e gravado no diretório atual. O exemplo a seguir gera um sources.list da distribuição stable. bash$ ls sources.list ls: sources.list: File or directory not found bash$ netselect-apt stable (...) bash$ ls -l sources.list sources.list bash$ _Lembre-se:_ o arquivo `sources.list' gerado no diretório atual deve ser movido para o diretório `/etc/apt'. Depois basta seguir as dicas em Capítulo 3, `Gerenciando pacotes'. 2.4. Colocando um CDROM na sources.list --------------------------------------- Se você preferir usar um CDROM para instalar seus pacotes ou atualizar seu sistema automaticamente com o APT, você pode colocá-lo na sua `sources.list'. Para isso existe o programa `apt-cdrom' Para fazer isso, rode o `apt-cdrom' assim: apt-cdrom add com o CDROM do Debian no drive. Ele irá montar o CDROM, caso seja o certo e irá buscar as informações de pacote dele. Caso sua configuração de CDROM esteja um pouco confusa, você pode usar as seguintes opções: -h - ajuda do programa -d diretório - ponto de montagem do CDROM -r - renomear um CDROM reconhecido -m - não montar -f - modo rápido (não atualiza lista de pacotes) -a - scan minucioso Por exemplo: apt-cdrom -d /home/kov/meucdrom add Você ainda pode identificar o CDROM apenas, sem adicioná-lo: apt-cdrom ident Note que esse programa só funciona caso seu CDROM esteja bem configurado em seu `/etc/fstab'. ------------------------------------------------------------------------------- 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 Seção 2.1, `O arquivo /etc/apt/sources.list' 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 Seção 3.3, `Removendo pacotes' 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'. _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 Seção 3.5, `Atualizando para uma nova distribuição' 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 Seção 3.1, `Atualizando a lista de pacotes disponíveis'. 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 Seção 3.5, `Atualizando para uma nova distribuição'. 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 Seção 2.4, `Colocando um CDROM na sources.list') 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 Seção 3.4, `Atualizando os pacotes', 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. 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.sourceforge.net/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 versões específicas de pacotes instaladas ---------------------------------------------------------- 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: Pin: Pin-Priority: 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 ------------------------------------------------------------------------------- 4. Obtendo informações sobre os pacotes. ---------------------------------------- Existem alguns programas, conhecidos como `front-ends' para o sistema APT que facilitam em muito a listagem dos pacotes disponíveis para instalação, os instalados, em quais seções se encontram, quais suas prioridades, descrições, etc. Mas... nossa intenção aqui é aprender a usar o APT puro. Então o que fazer para descobrir o nome do pacote que você pode querer a vir instalar? Para isso temos uma série de recursos. Vamos começão com o `apt-cache'. Esse programa é usado pelo sistema APT para manter seu banco de dados. Nós vamos entrar apenas nos aspectos práticos dele. 4.1. Descobrindo nome dos pacotes --------------------------------- Por exemplo, suponha que você está com vontade de relembrar os bons tempos do atari 2600. Você quer usar o APT para instalar um emulador de atari e depois baixar alguns jogos. Você pode fazer: [root]@[/] # apt-cache search atari atari-fdisk-cross - Partition editor for Atari (running on non-Atari) circuslinux - The clowns are trying to pop balloons to score points! madbomber - A Kaboom! clone tcs - Character set translator. atari800 - Atari emulator for svgalib/X/curses stella - Atari 2600 Emulator for X windows xmess-x - X binaries for Multi-Emulator Super System Achamos então vários pacotes relacionados ao que queremos e breves descrições. Para ter mais informações sobre um pacote, posso, então, usar: [root]@[/] # apt-cache show stella Package: stella Priority: extra Section: non-free/otherosfs Installed-Size: 830 Maintainer: Tom Lear Architecture: i386 Version: 1.1-2 Depends: libc6 (>= 2.1), libstdc++2.10, xlib6g (>= 3.3.5-1) Filename: dists/potato/non-free/binary-i386/otherosfs/stella_1.1-2.deb Size: 483430 MD5sum: 11b3e86a41a60fa1c4b334dd96c1d4b5 Description: Atari 2600 Emulator for X windows Stella is a portable emulator of the old Atari 2600 video-game console written in C++. You can play most Atari 2600 games with it. The latest news, code and binaries for Stella can be found at: http://www4.ncsu.edu/~bwmott/2600 Nessa saída você tem inúmeras informações sobre o pacote que quer instalar (ou não) e a sua descrição completa. No caso de o pacote já estar instalado em seu sistema e haver uma versão mais nova, você verá informações sobre ambos. Por exemplo: [root]@[/] # apt-cache show lilo Package: lilo Priority: important Section: base Installed-Size: 271 Maintainer: Russell Coker Architecture: i386 Version: 1:21.7-3 Depends: libc6 (>= 2.2.1-2), debconf (>=0.2.26), logrotate Suggests: lilo-doc Conflicts: manpages (<<1.29-3) Filename: pool/main/l/lilo/lilo_21.7-3_i386.deb Size: 143052 MD5sum: 63fe29b5317fe34ed8ec3ae955f8270e Description: LInux LOader - The Classic OS loader can load Linux and others This Package contains lilo (the installer) and boot-record-images to install Linux, OS/2, DOS and generic Boot Sectors of other OSes. . You can use Lilo to manage your Master Boot Record (with a simple text screen) or call Lilo from other Boot-Loaders to jump-start the Linux kernel. Package: lilo Status: install ok installed Priority: important Section: base Installed-Size: 190 Maintainer: Vincent Renardias Version: 1:21.4.3-2 Depends: libc6 (>= 2.1.2) Recommends: mbr Suggests: lilo-doc Description: LInux LOader - The Classic OS loader can load Linux and others This Package contains lilo (the installer) and boot-record-images to install Linux, OS/2, DOS and generic Boot Sectors of other OSes. . You can use Lilo to manage your Master Boot Record (with a simple text screen) or call Lilo from other Boot-Loaders to jump-start the Linux kernel. Note, que a primeira a ser listada é a disponível e a segunda, a que já se encontra instalada. Para uma informação mais geral sobre o pacote, você usa: [root]@[/] # apt-cache showpkg penguin-command Package: penguin-command Versions: 1.4.5-1(/var/lib/apt/lists/download.sourceforge.net_debian_dists_unstable_main_binary-i386_Packages)(/var/lib/dpkg/status) Reverse Depends: Dependencies: 1.4.5-1 - libc6 (2 2.2.1-2) libpng2 (0 (null)) libsdl-mixer1.1 (2 1.1.0) libsdl1.1 (0 (null)) zlib1g (2 1:1.1.3) Provides: 1.4.5-1 - Reverse Provides: Para saber de quais pacotes ele depende, apenas: [root]@[/] # apt-cache depends penguin-command penguin-command Depends: libc6 Depends: libpng2 Depends: libsdl-mixer1.1 Depends: libsdl1.1 Depends: zlib1g Resumindo, temos um bom arsenal para encontrarmos o nome do pacote que queremos. 4.2. Usando o dpkg para achar nomes de pacotes ---------------------------------------------- Uma das maneiras de localizar o nome de um pacote é saber o nome de um arquivo importante que está nesse pacote. Por exemplo, para achar o pacote ao qual pertence um arquivo `".h"' necessário a uma compilação você pode fazer: [root]@[/] # dpkg -S stdio.h libc6-dev: /usr/include/stdio.h libc6-dev: /usr/include/bits/stdio.h perl: /usr/lib/perl/5.6.0/CORE/nostdio.h ou: [root]@[/] # dpkg -S /usr/include/stdio.h libc6-dev: /usr/include/stdio.h Para saber o nome de pacotes instalados no seu sistema, para uma possível limpeza, por exemplo, você pode usar: [root]@[/] # dpkg -l | grep mozilla ii mozilla-browse 0.8-0.1 Mozilla Web Browser O problema com esse comando é que ele pode "quebrar" o nome do pacote. No exemplo acima o nome todo do pacote é `mozilla-browser'. Para dar um jeito nisso, você pode usar a descrição do pacote, ou parte dela para achar o nome completo, veja: [root]@[/] # apt-cache search "Mozilla Web Browser" mozilla-browser - Mozilla Web Browser 4.3. Como instalar pacotes "on demand" -------------------------------------- Você está compilando um programa e, de repente, boom! Há um erro porque falta um arquivo `.h' que você não tem. O `auto-apt' pode te salvar de coisas assim. Ele pede para instalar os pacotes caso sejam necessários pausando o processo dependente e depois de instalado o pacote, continuando. O que você faz, basicamente, é executar: auto-apt run comando Onde `comando' é o comando a ser executado que pode vir a precisar de um arquivo qualquer. Por exemplo: auto-apt run ./configure Ele irá então pedir para instalar os pacotes necessários e irá chamar o apt-get automaticamente. Caso você esteja no X, uma interface gráfica substituirá a interface de texto padrão. O auto-apt mantém bancos de dados que devem ser atualizados para que ele tenha real eficácia, isso é feito chamando os comandos `auto-apt update', `auto-apt updatedb' e `auto-apt update-local'. 4.4. Como manter-se informado das mudanças nos pacotes. ------------------------------------------------------- Todo pacote instala em seu diretório de documentação (`/usr/share/doc/nomedopacote') um arquivo chamado `changelog.Debian.gz' que contém a lista de mudanças feitas no pacote desde a última versão. Você pode ler esses arquivos com a ajuda do `zless', por exemplo, mas é algo pouco prático acabar de instalar todos os pacotes de uma atualização completa do sistema e então sair procurando os changelogs deles todos. Há um jeito de automatizar essa tarefa por meio da ferramenta chamada `apt-listchanges'. Para começar instala-se o pacote `apt-listchanges'. Durante a instalação do pacote uma configuração será feita com o Debconf. Responda às perguntas de acordo com sua vontade. A opção "apt-listchanges deve ser chamado automaticamente pelo apt?" é muito útil pois mostra a lista de mudanças de todos os pacotes que serão instalados pelo apt durante uma atualização e permite que você as examine antes de continuar. A opção "apt-listchanges deve pedir confirmação após mostrar os changelogs?" é útil pois pergunta se você deseja continuar com a instalação depois de ter lido a lista de mudanças. Se você disser que não deseja continuar o apt-listchanges retorna um erro e o apt aborta a atualização. Depois do apt-listchanges instalado, logo depois de ter baixado todos os arquivos (ou tê-los adquirido de um CD ou disco montado) o apt irá mostrar as listas de mudanças ocorridas naqueles pacotes antes de iniciar a instalação. ------------------------------------------------------------------------------- 5. Lidando com pacotes fonte ---------------------------- 5.1. Baixando pacotes fonte --------------------------- É comum no mundo livre que se estude código fonte ou mesmo que se faça correções em código fonte com erros. Para isso é necessário que se baixe o fonte do programa. O sistema APT provê uma maneira fácil de se obter os fontes dos vários programas contidos na distribuição, com, inclusive, os arquivos necessários para se criar o .deb do programa. Outro uso comum dos fontes no Debian é o de adequar uma versão mais nova de um programa que está na distribuição unstable, por exemplo, à estável. Compilar um pacote no stable gera .debs com dependências ajustadas aos pacotes disponíveis nessa distribuição. Para que isso seja feito, a entrada `deb-src' do seu `/etc/apt/sources.list' deve estar apontando para a unstable. E esteja habilitada (descomentada). Veja a seção Seção 2.1, `O arquivo /etc/apt/sources.list'. Para baixar um pacote fonte, você usa o seguinte comando: apt-get source nomedopacote Ele irá baixar três arquivos. Um `.orig.tar.gz', um `.dsc' e um `.diff.gz'. No caso de pacotes feitos especificamente para o Debian, o último desses não é baixado e o primeiro costuma não ter a parte `"orig"' no nome. O arquivo `.dsc' é usado pelo dpkg-source para descompactar o pacote fonte no diretório . Dentro de todo pacote fonte baixado existe o diretorio `debian/' que contém os arquivos para se criar o pacote .deb. Para que o pacote seja auto-construído ao acabar de ser baixado, basta especificar `-b' na linha de comando, assim: apt-get -b source nomedopacote Se você decidir não gerar o .deb logo após o download, você pode fazê-lo depois rodando: dpkg-buildpackage -rfakeroot -uc -b de dentro do diretório criado para o pacote após o download. Há uma grande diferença entre o método `source' do `apt-get' e os outros. Este pode ser usado por usuários comuns, sem a necessidade de poderes especiais de root. Os arquivos são baixados no diretório de onde foi chamado o comando `apt-get source pacote'. 5.2. Pacotes necessários para compilação de um pacote fonte ----------------------------------------------------------- Pacotes fontes, normalmente precisam de bibliotecas compartilhadas e headers específicos para serem compilados. Todo pacote .deb tem em seus arquivos de controle um campo conhecido como 'Build-Depends:' que indica quais os pacotes são necessários para se compilar o pacote fonte. O APT tem uma maneira simples de baixar esses pacotes, basta você executar `apt-get build-dep pacote', onde `pacote' é o nome do pacote que você vai construir. Por exemplo: [root]@[/] # apt-get build-dep gmc Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev libgpmg1-dev 0 packages upgraded, 7 newly installed, 0 to remove and 1 not upgraded. Need to get 1069kB of archives. After unpacking 3514kB will be used. Do you want to continue? [Y/n] Os pacotes que serão instalados são os pacotes dos quais o programa `gmc' necessita para se construir perfeitamente. É importante notar que esse comando não busca o pacote fonte do programa a ser compilado. Assim, você deve rodar o `apt-get source' separadamente para obtê-lo. ------------------------------------------------------------------------------- 6. Quais são as distribuições que suportam o APT? ------------------------------------------------- Aqui estão os nomes de algumas das distribuições que contam com o APT: Debian GNU/Linux (http://www.debian.org) - foi para esta distribuição que o APT foi desenvolvido Conectiva (http://www.conectiva.com.br) - essa foi a primeira distribuição a portar esse software para lidar com rpm Mandrake (http://www.mandrake.com) PLD (http://pld.org.pl) Vine (http://www.vinelinux.org) ------------------------------------------------------------------------------- 7. Como lidar com erros? ------------------------ 7.1. Erros comuns ----------------- Erros sempre acontecem, muitos deles causados por falta de atenção do usuário. Aqui estou listando alguns dos erros reportados mais frequentemente e como lidar com eles. Caso você receba uma mensagem parecida com a seguinte ao tentar rodar o `apt-get install pacote'... Reading Package Lists... Done Building Dependency Tree... Done W: Couldn't stat source package list 'http://people.debian.org unstable/ Packages' (/var/state/apt/lists/people.debian.org_%7ekov_debian_unstable_Packages) - stat (2 Arquivo ou diretório não encontrado) W: You may want to run apt-get update to correct these missing files E: Couldn't find package penguineyes você se esqueceu de rodar o `apt-get update' depois da sua última alteração no arquivo `/etc/apt/sources.list'. Se o erro for parecido com: E: Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied) E: Unable to lock the administration directory (/var/lib/dpkg/), are you root? ao tentar qualquer dos métods do `apt-get' com excessão do `source', você não tem permissão root, ou seja, está acessando como usuário normal. Há um erro parecido com o de cima que acontece ao rodar duas instâncias do `apt-get' juntas ou mesmo ao tentar rodar o `apt-get' enquanto há um processo do `dpkg' ativo. O único método que pode rodar simultâneamente com outro é o `source'. Caso uma instalação quebre durante o processo e você fique impossibilitado de instalar e remover pacotes, tente rodar esses dois comandos: # apt-get -f install # dpkg --configure -a E tente o processo novamente, pode ser preciso rodar o segundo comando acima mais vezes. Essa é uma dica importante aos aventureiros que usam `unstable'. 7.2. Onde consigo ajuda? ------------------------ Caso alguma dúvida cruel venha à sua cabeça, consulte a extensiva documentação existente sobre o sistema de empacotamento do Debian. `--help''s e manpages podem ser de enorme ajuda para você, assim como a documentação contida nos diretórios do `/usr/share/doc' como o `apt'. Se mesmo assim a dúvida persistir, consulte as listas do Debian por uma resposta. Você pode conseguir mais informações sobre a lista específica para usuários falantes da língua portuguesa em: http://debian-br.sourceforge.net, o site do projeto Debian-BR. Outras listas do Debian podem ser encontradas na página do Debian em: http://www.debian.org. Uma boa parte dessa página se encontra traduzida graças ao esforço do Debian-BR. Lembre-se de que essas listas e recursos devem ser usados apenas por usuários do Debian, usuários de outros sistemas devem encontrar um melhor suporte junto à suas distribuições. ------------------------------------------------------------------------------- 8. Agradecimentos ----------------- Agradecimentos vão para meus grandes amigos do projeto Debian-BR e do Debian que me ajudam sempre e me dão força para continuar trabalhando em prol da humanidade além de me ajudar sempre no meu objetivo de salvar o mundo =). Agradeço também ao CIPSGA pelo apoio enorme que dá ao nosso projeto e a todos os projetos livres que brotam de grandes idéias. E agradecimentos especiais para: Michael Bramer - pela sugestão de inclusão da seção sobre manter pacotes em versões definidas. Bryan - pelos muitos patches e correções que ele enviou a mim para a versão em inglês. Tecza Pawel - pelas várias correções enviadas para a versão em inglês. Pablo Lorenzzoni - por ter escrito a seção sobre o netselect Steve Langasek - por traduzir o manual para o inglês. Arnaldo Carvalho de Melo - por contribuir com o nome das distribuições que já contam com APT: Mandrake, PLD e Vine. ------------------------------------------------------------------------------- 9. Novas versões desse tutorial ------------------------------- Esse manual foi produzido para o projeto Debian-BR (http://debian-br.sourceforge.net), com o intuito de ajudar no uso cotidiano do sistema Debian. Novas versões serão lançadas na página do projeto, em http://debian-br.sourceforge.net/documentacao.html. Sugestões e críticas podem ser enviadas diretamente para mim no email . Um abraço a toda a comunidade Debian! ------------------------------------------------------------------------------- Como usar o APT Gustavo Noronha Silva 1.7.2 - Agosto de 2001