Capítulo 8. As ferramentas de gestão de pacotes Debian

Índice

8.1. Que programas Debian disponibiliza para gestão dos seus pacotes?
8.1.1. dpkg
8.1.2. APT
8.1.3. aptitude
8.1.4. synaptic
8.1.5. tasksel
8.1.6. Outras ferramentas de gestão de pacotes
8.2. Debian afirma ser capaz de atualizar um programa a correr, como é que isto é conseguido?
8.3. Como é que Eu posso saber que pacotes já estão instalados num sistema Debian?
8.4. Como mostro os ficheiros de um pacote instalado?
8.5. Como posso descobrir qual pacote produziu um determinado ficheiro?
8.6. Porque "foo-data" não é removido quando Eu desinstalo "foo"? Como é que garanto que os pacotes binários antigos e não usados são purgados?

8.1. Que programas Debian disponibiliza para gestão dos seus pacotes?

Existem várias ferramentas que são usadas para gerir pacotes Debian, desde interfaces gráficas ou baseadas em texto até ferramentas de baixo nível usadas para instalar pacotes. Todas as ferramentas disponíveis contam com as ferramentas de baixo nível para funcionarem apropriadamente e são aqui apresentadas num nível de complexidade decrescente.

É importante perceber que as ferramentas de alto nível de gestão de pacotes como o aptitude ou synaptic fiam-se no apt, o qual fia-se no dpkg para gerir os pacotes no sistema.

Veja Capítulo 2. Gestão de pacotes Debian de Debian reference para mais informação acerca de utilitários de gestão de pacotes Debian. Este documento está disponível em vários idiomas e formatos, veja a entrada Debian Reference na vista geral do Manual de Utilizadores de DDP.

8.1.1. dpkg

Este é o principal programa de gestão de pacotes. dpkg pode ser invocado com muitas opções. Alguns usos mais comuns são:

  • Descobrir todas as opções: dpkg --help.

  • Escreve o ficheiro de controle (e outra informação) para um pacote especificado: dpkg --info foo_VVV-RRR.deb.

  • Instala um pacote (incluindo descompactar e configurar) no sistema de ficheiros do disco rijo: dpkg --install foo_VVV-RRR.deb.

  • Desempacota (mas não configura) um arquivo Debian para o sistema de ficheiros no disco rijo: dpkg --unpack foo_VVV-RRR.deb. Note que esta operação não deixa necessariamente o pacote no estado utilizável; alguns ficheiros podem precisar de mais personalização para funcionarem de modo apropriado. Este comando remove qualquer versão já instalada do programa e corre o script preinst (veja Secção 7.6, “O que é um script Debian preinst, postinst, prerm, e postrm?”) associado ao pacote.

  • Configura um pacote que já foi desempacotado: dpkg --configure foo. Entre outras coisas, esta acção corre o script postinst (veja Secção 7.6, “O que é um script Debian preinst, postinst, prerm, e postrm?”) associado ao pacote. Também actualiza os ficheiros listados em conffiles para este pacote. Note que a operação 'configure' toma como primeiro argumento um nome de pacote (ex. foo), e não o nome do ficheiro de arquivo Debian (ex. foo_VVV-RRR.deb).

  • Extrai um ficheiro único chamado "blurf" (ou um grupo de ficheiros chamado "blurf*") de um arquivo Debian: dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - 'blurf*'.

  • Remove um pacote (mas não os seus ficheiros de configuração): dpkg --remove foo.

  • Remove um pacote (incluindo os seus ficheiros de configuração): dpkg --purge foo.

  • Lista o estado de instalação de pacotes que contêm a string (ou expressão regular) "foo*": dpkg --list 'foo*'.

8.1.2. APT

APT é a Advanced Package Tool, uma interface avançada para o sistema de empacotamento Debian que fornece o programa apt-get. Fornece ferramentas de linha de comandos para procurar e gerir pacotes, e para pesquisar informação sobre eles, assim como acesso de baixo nível a todas as funcionalidades da biblioteca libapt-pkg. Para mais informação, veja o Guia de Utilizador em /usr/share/doc/apt-doc/guide.html/index.html (terá de instalar o pacote apt-doc).

A partir do Debian Jessie, alguns comandos frequentemente usados do apt-get e apt-cache têm um equivalente via novo binário apt. Isto significa que alguns comandos populares como apt-get update, apt-get install, apt-get remove, apt-cache search, ou apt-cache show agora podem também ser chamados simplesmente via apt, digamos apt update, apt install, apt remove, apt search, ou apt show. O seguinte é uma visão geral dos comandos antigos e novos.

 apt-get update             ->  apt update
 apt-get upgrade            ->  apt upgrade
 apt-get dist-upgrade       ->  apt full-upgrade
 apt-get install package    ->  apt install package
 apt-get remove package     ->  apt remove package
 apt-get autoremove         ->  apt autoremove
 apt-cache search string    ->  apt search string
 apt-cache policy package   ->  apt list -a package
 apt-cache show package     ->  apt show package
 apt-cache showpkg package  ->  apt show -a package

A ferramenta apt funde a funcionalidade do apt-get e apt-cache e por predefinição tem um formato colorido e bonito para os resultados, tornam-do-o mais agradável para humanos. Para utilização em scripts ou casos de utilização avançada, ainda é preferido ou necessário o apt-get.

O apt-get fornece um modo simples de obter e instalar pacotes a partir de múltiplas fontes usando a linha de comandos. Ao contrário do dpkg, o apt-get não compreende ficheiros .deb, trabalha com o nome próprio dos pacotes e só consegue instalar arquivos .deb a partir de uma fonte especificada em /etc/apt/sources.list. o apt-get irá chamar o dpkg diretamente após descarregar os arquivos .deb [5] a partir das fontes configuradas.

Algumas maneiras comuns de usar o apt-get são:

  • Para actualizar a lista de pacotes conhecida pelo seu sistema, você pode correr:

    apt update
    

    (você deve executar isto regularmente para actualizar as suas listas de pacotes)

  • Para instalar o pacote foo e todas as suas dependências, corra:

    apt install foo
    
  • Para remover o pacote foo do seu sistema, corra:

    apt remove foo
    
  • Para remover o pacote foo e os seus ficheiros de configuração do seu sistema, execute:

    apt purge foo
    
  • Para listar todos os pacotes para os quais estão disponíveis novas versões, execute:

    apt list --upgradable
    
  • Para atualizar todos os pacotes no seu sistema (sem instalar pacotes extra nem remover pacotes), execute:

    apt upgrade
    
  • Para atualizar todos os pacotes no seu sistema, e, se necessário para a atualização dum pacote, instalar pacotes extra ou remover pacotes, execute:

    apt full-upgrade
    

    (O comando upgrade mantém um pacote na sua versão obsoleta instalada se a actualização precisar da instalação de um pacote extra, para que seja satisfeita uma nova dependência. O comando full-upgrade é menos conservativo.)

Note que você precisa de ser root para executar quaisquer comandos que modificam pacotes.

Note que o apt-get agora também instala pacotes recomendados por predefinição, e graças à sua robustez é o programa preferido para gestão de pacotes a partir da consola para executar a instalação do sistema e as grandes actualizações.

A suite de ferramentas do apt também inclui a ferramenta apt-cache para analisar as listas de pacotes. Você pode usa-la para encontrar pacotes que fornecem funcionalidades específicas através de texto simples ou expressões regulares e através de consultas de dependências no sistema de gestão de pacotes. Algumas maneiras comuns de usar o apt-cache são:

  • Para encontrar pacotes cuja descrição contenha palavra:

    apt search palavra
    
  • Para mostrar a informação detalhada de um pacote:

    apt show pacote
    
  • Para escrever quais os pacotes de que um determinado pacote depende:

    apt-cache depends pacote
    
  • Para escrever informação detalhada das versões disponíveis de um pacote e dos pacotes que de reverso dependem dele:

    apt-cache showpkg pacote
    

Para mais informação, instale o pacote apt e leia apt(8), apt-get(8), sources.list(5) e instale o pacote apt-doc e leia /usr/share/doc/apt-doc/guide.html/index.html.

8.1.3. aptitude

O aptitude é um gestor de pacotes para sistemas Debian GNU/Linux que fornece um frontend para a estrutura de gestão de pacotes apt. O aptitude é uma interface baseada em texto que usa a biblioteca curses. As acções podem ser executadas a partir duma interface visual ou a partir da linha de comandos.

O aptitude pode ser usado para executar tarefas de gestão num modo rápido e fácil. Permite ao utilizador ver a lista de pacotes e executar tarefas de gestão de pacotes como instalar, actualizar, e remover pacotes.

O aptitude fornece a funcionalidade do apt-get, assim como muitas funcionalidades adicionais:

  • O aptitude oferece acesso fácil a todas as versões de um pacote.

  • O aptitude facilita a detecção de software obsoleto ao lista-lo sob "Pacotes Obsoletos ou Criados Localmente".

  • O aptitude inclui um sistema bastante poderoso para procurar pacotes particulares e limitar a amostragem dos pacotes. Os utilizadores familiarizados com o mutt irão aprender depressa, pois o mutt foi a inspiração para a sintaxe de expressão.

  • O aptitude pode ser usado para instalar as tarefas predefinidas disponíveis. Para mais informação veja Secção 8.1.5, “tasksel”.

  • O aptitude em modo de ecrã completo tem a funcionalidade su embebida e pode ser corrido por um utilizador normal. Ele irá chamar su (e pedir a palavra passe do root, se existir) quando você realmente precisar de privilégios administrativos.

Você pode usar o aptitude através da interface visual (simplesmente corra aptitude) ou directamente da linha de comandos. A sintaxe de linha de comandos usada é muito semelhante a aquela usada no apt-get. Por exemplo, para instalar o pacote foo, você pode correr aptitude install foo.

Note que o aptitude é o programa preferido para gestão diária de pacotes a partir da consola.

Para mais informação, leia o manual do aptitude(8) e instale o pacote aptitude-doc.

8.1.4. synaptic

O synaptic é um gestor de pacotes gráfico. Permite-lhe instalar, actualizar e remover pacotes de software num modo amigável ao utilizador. Juntamente com a maioria das funcionalidades oferecidas pelo aptitude, também tem a funcionalidade de editar a lista de repositórios usados, e suporta navegar em toda a documentação disponível relativa a um pacote. Veja o Sitio do Synapti para mais informação.

8.1.5. tasksel

Quando você deseja executar uma tarefa específica pode ser difícil encontrar a suite de pacotes apropriada que você precisa. Os desenvolvedores de Debian definiram tasks, uma task é uma coleção de vários pacotes Debian individuais todos relacionados com uma atividade específica. As tasks podem ser instaladas através do programa tasksel ou através do aptitude.

Tipicamente, o instalador de Debian irá automaticamente instalar a task associada a um sistema standard e um ambiente de desktop. O ambiente de desktop específico instalado irá depender do meio de CD/DVD usado, mais comum será o GNOME desktop (gnome-desktop task). Também, dependendo das suas selecções através do processo de instalação, podem ser instaladas tasks automaticamente no seu sistema. Por exemplo, se você selecionar um idioma diferente de Inglês, a task associada será também instalada automaticamente.

8.1.6. Outras ferramentas de gestão de pacotes

8.1.6.1. dpkg-deb

Este programa manipula ficheiros de arquivo Debian (.deb). Algumas utilizações comuns são:

  • Descobrir todas as opções: dpkg-deb --help.

  • Determinar que ficheiros estão contidos num ficheiro de arquivo Debian dpkg-deb --contents foo_VVV-RRR.deb

  • Extrair os ficheiros contidos num arquivo Debian nomeado para um directório especificado pelo utilizador: dpkg-deb --extract foo_VVV-RRR.debtmp extrai cada um dos ficheiro em foo_VVV-RRR.deb para o directório tmp/. Isto é conveniente para examinar o conteúdo de um pacote num directório localizado, sem instalar o pacote no sistema de ficheiros raiz.

  • Extrair os ficheiros de informação de controlo de um pacote: dpkg-deb --control foo_VVV-RRR.deb tmp.

Note que quaisquer pacotes que foram meramente desempacotados usando dpkg-deb --extract irão ficar incorretamente instalados, em vez disto você deve usar dpkg --install.

Mais informação é fornecida no manual dpkg-deb(1).

8.2. Debian afirma ser capaz de atualizar um programa a correr, como é que isto é conseguido?

O kernel (sistema de ficheiros) em sistemas Debian GNU/Linux suporta substituir ficheiros mesmo quando estes estão a ser usados.

Também disponibilizamos um programa chamado start-stop-daemon o qual é usado para arrancar daemons durante o arranque da máquina ou para parar daemons quando o runlevel muda (ex. de multi-utilizador para único-utilizador ou parar). O mesmo programa é usado por scripts de instalação quando é instalado um novo pacote que contém um daemon, para parar daemons em execução, e reinicia-los quando necessário.

8.3. Como é que Eu posso saber que pacotes já estão instalados num sistema Debian?

Para conhecer o estado de todos os pacotes instalados num sistema Debian execute o comando

dpkg --list

Isto escreve um sumário de uma linha para cada pacote, dando um símbolo de estado de 2 (explicado no cabeçalho), o nome do pacote, a versão que está instalada, e uma breve descrição.

Para conhecer o estado de pacotes cujos nome correspondem a qualquer padrão começado com "foo", corra o comando:

dpkg --list 'foo*'

Para obter um relatório mais detalhado para um determinado pacote, execute o comando:

dpkg --status nome-do-pacote

8.4. Como mostro os ficheiros de um pacote instalado?

Para listar todos os ficheiros fornecidos pelo pacote instalado foo execute o comando

dpkg --listfiles foo

Note que não são mostrados os ficheiros criados pelos scripts de instalação.

8.5. Como posso descobrir qual pacote produziu um determinado ficheiro?

Para identificar o pacote que produziu o ficheiro com nome foo execute um destes:

  • dpkg --search foo

    Isto procura por foo em pacotes instalados. (Isto é (actualmente) o equivalente a procurar em todos os ficheiros que têm a extensão .list no directório /var/lib/dpkg/info/, e ajustar os resultados para escrever os nomes de todos os pacotes que o contêm, e diversões.)

    Uma alternativa mais rápida de fazer isto é a ferramenta dlocate.

    dlocate -S foo
    
  • zgrep foo Contents-ARCH.gz

    Isto procura por ficheiros que contêm a sub-string foo nos seus nomes de caminho completos. Os ficheiros Contents-ARCH.gz (onde ARCH representa a arquitectura desejada) residem nos maiores directórios de pacotes (main, non-free, contrib) num site de arquivo Debian (isto é, sob /debian/dists/bookworm). Um ficheiro Contents refere-se apenas ao pacote na árvore de sub-directório onde reside. Assim, um utilizador pode ter que procurar em mais do que um ficheiro Contents para encontrar o pacote que contém o ficheiro foo.

    Este método tem vantagem sobre dpkg --search no modo que irá encontrar ficheiros em pacotes que não estão actualmente instalados no seu sistema.

  • apt-file search foo

    Se você instalar o pacote apt-file, à semelhança de cima, procura ficheiros que contêm a sub-string ou expressão regular foo nos seus nomes de caminho completos. A vantagem sobre o exemplo em cima é que não há necessidade de obter os ficheiros Contents-ARCH.gz pois irá fazer isto automaticamente para todas as fontes definidas em /etc/apt/sources.list quando você corre (como root) apt-file update.

8.6. Porque "foo-data" não é removido quando Eu desinstalo "foo"? Como é que garanto que os pacotes binários antigos e não usados são purgados?

Alguns pacotes estão divididos em programa ("foo") e dados ("foo-data") (ou em 'foo' e "foo-doc"). Isto é verdade para muitos jogos, aplicações multimédia e dicionários em Debian e foi introduzido porque alguns utilizadores podem querer aceder aos dados crus sem instalarem o programa ou porque o programa pode correr sem os próprios dados, tornando 'foo-data' opcional.

Situações semelhantes ocorrem quando se lida com bibliotecas: geralmente estas são instaladas porque os pacotes que contêm aplicações dependem delas. Quando o pacote da aplicação é purgado, o pacote da biblioteca pode permanecer no sistema. Ou: quando o pacote-aplicação já não depende mais de, por exemplo, libdb4.2, mas de libdb4.3, o pacote libdb4.2 pode ficar quando o pacote-aplicação é actualizado.

Nestes casos, "foo-data" não depende de "foo", assim quando você remove o pacote "foo" ele não será removido automaticamente pela maioria das ferramentas de gestão de pacotes. O mesmo é verdadeiro para os pacotes de bibliotecas. Isto é necessário para evitar dependências circulares. No entanto, se você usar apt-get (veja Secção 8.1.2, “APT”) ou aptitude (veja Secção 8.1.3, “aptitude”) como a sua ferramenta de gestão de pacotes, ela irá acompanhar automaticamente os pacotes instalados e dar-lhe a possibilidade de as remover, quando nenhum pacote que as usa restar no seu sistema.



[5] Note que há portes que tornam esta ferramenta disponível com outros sistemas de gestão de pacotes, como a gestão de pacotes do Red Hat, também conhecida como rpm