Capítulo 2. Gestão de pacotes Debian

Índice

2.1. Pré-requisitos da gestão de pacotes Debian
2.1.1. Debian package management system
2.1.2. Configuração de pacotes
2.1.3. Precauções básicas
2.1.4. A vida com atualizações eternas
2.1.5. Básico do arquivos Debian
2.1.6. Debian é 100% software livre
2.1.7. Dependências de pacote
2.1.8. O fluxo de eventos da gestão de pacotes
2.1.9. Primeira resposta a problemas com a gestão de pacotes
2.1.10. Como escolher os pacotes Debian
2.1.11. How to cope with conflicting requirements
2.2. Operações básicas de gestão de pacotes
2.2.1. apt vs. apt-get / apt-cache contra o aptitude
2.2.2. Operações básicas de gestão de pacotes com a linha de comandos
2.2.3. Uso interativo do aptitude
2.2.4. Teclas de atalho do aptitude
2.2.5. Vistas de pacote no aptitude
2.2.6. Opções do método de pesquisa com o aptitude
2.2.7. A fórmula regex do aptitude
2.2.8. Resolução de dependências do aptitude
2.2.9. Relatórios (logs) de atividade de pacotes
2.3. Exemplos de operações do aptitude
2.3.1. Seeking interesting packages
2.3.2. Listagem de pacotes com correspondência por expressão regular nos nomes de pacotes
2.3.3. Explorar com a correspondência de expressão regular
2.3.4. Purgar pacotes removidos definitivamente
2.3.5. Acertar o estado auto/manual de instalação
2.3.6. atualização total ao sistema
2.4. Operações de gestão avançada de pacotes
2.4.1. Operações de gestão avançada de pacotes com linha de comandos
2.4.2. Verificação dos ficheiros pacotes instalados
2.4.3. Salvaguardar para problemas de pacotes
2.4.4. Procurar nos meta-dados do pacote
2.5. Os interiores da gestão de pacotes Debian
2.5.1. Meta dados do arquivo
2.5.2. Ficheiro "Release" de nível de topo e autenticidade:
2.5.3. Ficheiros "Release" do nível de arquivo
2.5.4. Obter os meta dados do pacote
2.5.5. O estado dos pacote para o APT
2.5.6. O estado de pacotes para o aptitude
2.5.7. Copias locais dos pacotes obtidos
2.5.8. Nomes de ficheiros de pacotes Debian
2.5.9. O comando dpkg
2.5.10. O comando update-alternatives
2.5.11. O comando dpkg-statoverride
2.5.12. O comando dpkg-divert
2.6. Recuperação de um sistema danificado
2.6.1. Failed installation due to missing dependencies
2.6.2. Caching errors of the package data
2.6.3. Incompatibilidade com configurações antigas de utilizador
2.6.4. Pacotes diferentes com ficheiros sobrepostos
2.6.5. Corrigir script problemático de pacote
2.6.6. Recuperação com o comando dpkg
2.6.7. Recuperar dados de seleção de pacotes
2.7. Dicas para a gestão de pacotes
2.7.1. Quem fez o upload do pacote?
2.7.2. Limitar a largura de banda de descarga para o APT
2.7.3. Descarga e atualização automática de pacotes
2.7.4. atualizações e Backports
2.7.5. External package archives
2.7.6. Packages from mixed source of archives without apt-pinning
2.7.7. Tweaking candidate version with apt-pinning
2.7.8. Bloquear pacotes instalados por "Recomendados"
2.7.9. Acompanhar testing com alguns pacotes de unstable
2.7.10. Acompanhar unstable com alguns pacotes de experimental
2.7.11. Downgrade de emergência
2.7.12. O pacote equivs
2.7.13. Portar um pacote ao sistema stable
2.7.14. Servidor proxy para o APT
2.7.15. Mais leituras sobre a gestão de pacotes
[Nota] Nota

Este capítulo é escrito a assumir que o lançamento estável mais recente tem o nome de código: bookworm.

The data source of the APT system is collectively refered as the source list in this document . This can be defined anywhere in the "/etc/apt/sources.list" file, "/etc/apt/sources.list.d/*.list" files, or "/etc/apt/sources.list.d/*.source" files.

Debian é uma organização voluntária que constrói distribuições consistentes de pacotes binários pré-compilados de software livre e distribui-os a partir do arquivo dele.

O arquivo Debian é oferecido por muitos sites mirror remotos para acesso através de métodos HTTP e FTP. Também está disponível em CD-ROM/DVD.

The current Debian package management system which can utilize all these resources is Advanced Packaging Tool (APT).

O sistema de gestão de pacotes Debian, quando utilizado de modo apropriado, oferece ao utilizador o instalar de conjuntos consistentes de pacotes binários no sistema a partir do arquivo. atualmente, existem 74165 pacotes disponíveis para a arquitectura amd64.

O sistema de gestão de pacotes Debian tem um histórico rico e muitas opções de escolha para o programa cliente do utilizador e de método de acesso ao arquivo. Atualmente, recomendamos o seguinte:

  • apt(8) for all interactive command line operations, including package installation, removal and dist-upgrades.

  • apt-get(8) para chamar o sistema de gestão de pacotes Debian a partir de scripts. É também uma opção regressiva quando o apt não está disponível (comum em sistemas Debian antigos).

  • aptitude(8) para uma interface de texto interactiva para gerir os pacotes instalados e procurar os pacotes disponíveis.


[Atenção] Atenção

Não instale pacotes de misturas aleatórias de suites. Provavelmente vai quebrar a consistência do pacote o que requer conhecimentos profundos de gestão do sistema tais como ABI compilador, versão de biblioteca, funcionalidades do interpretador, etc.

The newbie Debian system administrator should stay with the stable release of Debian while applying only security updates. Until you understand the Debian system very well, you should follow the following precautions.

  • Do not include testing or unstable in the source list.

  • Do not mix standard Debian with other non-Debian archives such as Ubuntu in the source list .

  • Não crie "/etc/apt/preferences".

  • Não altere o comportamento predefinido das ferramentas de gestão de pacotes através de ficheiros de configuração sem conhecer os seus impactos totais.

  • Não instale pacotes aleatórios com "dpkg -i qualquer_pacote".

  • Nunca instale pacotes aleatórios com "dpkg --force-all -i qualquer_pacote".

  • Não apague ou altere os ficheiros em "/var/lib/dpkg/".

  • Não sobrescreva ficheiros do sistema ao instalar programas compilados a partir do código-fonte.

    • Instale-os em "/usr/local" ou "/opt", se necessário.

The non-compatible effects caused by violating above precautions to the Debian package management system may leave your system unusable.

O administrador de sistema Debian sério que corre servidores de missões críticas, deve tomar precauções extra.

  • Não instale nenhuns pacotes incluindo as atualizações de segurança da Debian sem os testar completamente com as suas configurações particulares sob condições seguras.

    • Como o administrador do sistema é o responsável final pelo seu sistema.

    • A longa história de estabilidade do sistema Debian não é uma garantia por si só.

[Cuidado] Cuidado

Para o seu servidor de produção a suite stable é recomendada com as atualizações de segurança. O mesmo pode ser dito para PCs de ambiente de trabalho onde pode dispor de esforços limitados de administração.

Despite my warnings above, I know many readers of this document may wish to run the newer testing or unstable suites.

O Esclarecimento com o seguinte salva uma pessoa do karma da eterna luta do inferno das atualizações e permite-lhe alcançar o nirvana de Debian.

This list is targeted for the self-administered Desktop environment.

  • Use the testing suite since it is practically the rolling release automatically managed by the Debian archive QA infrastructure such as the Debian continuous integration, the source only upload practices, and the library transition tracking. The packages in the testing suite are updated frequently enough to offer all the latest features.

  • Set the codename corresponding to the testing suite ("trixie" during the bookworm-as-stable release cycle) in the source list.

  • Manually update this codename in the source list to the new one only after assessing situation by yourself for about a month after the major suite release. The Debian user and developer mailing list are good sources of information for this, too.

The use of the unstable suite isn't recommended. The unstable suite is good for debugging packages as a developer but tends to expose you to unnecessary risks for the normal Desktop usage. Even though the unstable suite of the Debian system looks very stable for most of the times, there have been some package problems and a few of them were not so trivial to resolve.

Here are some basic precautionary measure ideas to ensure quick and easy recovery from bugs in Debian packages.

  • Faça um sistema de duplo arranque ao instalar a suite stable do sistema Debian noutra partição

  • Tenha o CD de instalação 'à mão' para o arranque de recuperação

  • Considere instalar o apt-listbugs para verificar informação do Debian Bug Tracking System (BTS) antes das atualizações

  • Conheça o suficiente da infraestrutura do sistema de pacotes para contornar o problema

[Cuidado] Cuidado

If you can not do any one of these precautionary actions, you are probably not ready for the testing and unstable suites.

[Dica] Dica

A política oficial do arquivo Debian está definida em Manual de Políticas Debian, Capítulo 2 - O Arquivo Debian.

Vamos olhar ao arquivo Debian a partir da perspectiva do utilizador do sistema.

For a system user, the Debian archive is accessed using the APT system.

The APT system specifies its data source as the source list and it is described in sources.list(5).

For the bookworm system with the typical HTTP access, the source list in one-line-style as the following:

deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free
deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free

deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free
deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free

Alternatively, the equivalent source list in deb822-style is the following.

Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: bookworm
Components: main non-free-firmware contrib non-free

Types: deb deb-src
URIs: http://security.debian.org/debian-security/
Suites: bookworm-security
Components: main non-free-firmware contrib non-free

Key points of the source list are followings.

  • One-line-style format

    • It's definition files are in the "/etc/apt/sources.list" file and "/etc/apt/sources.list.d/*.list" files.

    • Each line defines the data source for the APT system.

    • A linha "deb" define os pacotes binários.

    • A linha "deb-src" define os pacotes fonte.

    • O 1º argumento é o URL raiz do arquivo Debian.

    • The 2nd argument is the distribution name using either the suite name or the codename.

    • O 3º argumento e seguintes são a lista de nomes de área de arquivo válidos do arquivo Debian.

  • Deb822-style format

    • It's definition files are in "/etc/apt/sources.list.d/*.source" files.

    • Each block of lines separated by a blank line defines the data source for the APT system.

    • The "Types:" stanza defines the list of types such as "deb" and "deb-src".

    • The "URIs:" stanza defines the list of root URIs of the Debian archive.

    • The "Suites:" stanza defines the list of distribution names using either the suite name or the codename.

    • The "Components:" stanza defines the list of valid archive area names of the Debian archive.

The definition for "deb-src" can safely be omitted if it is just for aptitude which does not access source related meta data. It speeds up the updates of the archive meta data.

The URL can be "https://", "http://", "ftp://", "file://", ….

Lines starting with "#" are comments and ignored.

Here, I tend to use codename "bookworm" or "trixie" instead of suite name "stable" or "testing" to avoid surprises when the next stable is released.

[Dica] Dica

If "sid" is used in the above example instead of "bookworm", the "deb: http://security.debian.org/ …" line or its deb822 equivalent content for security updates in the source list is not required. This is because there is no security update archive for "sid" (unstable).

Here is the list of URL of the Debian archive sites and suite name or codename used in the configuration file after the bookworm release.


[Cuidado] Cuidado

Only pure stable release with security updates provides the best stability. Running mostly stable release mixed with some packages from testing or unstable release is riskier than running pure unstable release for library version mismatch etc. If you really need the latest version of some programs under stable release, please use packages from stable-updates and backports (see Secção 2.7.4, “atualizações e Backports”) services. These services must be used with extra care.

[Cuidado] Cuidado

Basicamente deve listar apenas uma das suites stable, testing, ou unstable na linha "deb". Se listar qualquer combinação das suites stable, testing e unstable na linha "deb", os programas do APT abrandam enquanto apenas o arquivo mais recente é efectivo. Faz sentido várias listagens quando o ficheiro "/etc/apt/preferences" é utilizado com objetivos claros (veja Secção 2.7.7, “Tweaking candidate version with apt-pinning).

[Dica] Dica

For the Debian system with the stable suite, it is a good idea to include the content with "http://security.debian.org/" in the source list to enable security updates as in the example above.

[Nota] Nota

The security bugs for the stable archive are fixed by the Debian security team. This activity has been quite rigorous and reliable. Those for the testing archive may be fixed by the Debian testing security team. For several reasons, this activity is not as rigorous as that for stable and you may need to wait for the migration of fixed unstable packages to the testing archive. Those for the unstable archive are fixed by the individual maintainer. Actively maintained unstable packages are usually in a fairly good shape by leveraging latest upstream security fixes. See Debian security FAQ for how Debian handles security bugs.


Aqui a quantidade de pacotes em cima é para a arquitectura amd64. A área main disponibiliza o sistema Debian (veja Secção 2.1.6, “Debian é 100% software livre”).

A organização do arquivo Debian pode ser melhor estudada ao apontar o seu navegador a cada URL de arquivo seguido de dists ou pool.

A distribuição é referida de duas maneiras, a suite ou o nome-de-código. A palavra distribuição é usada alternativamente como o sinónimo de suite em muitas documentações. A relação entre a suite e o nome de código pode ser resumida ao seguinte.


A história dos nomes de código está descrita em Debian FAQ: 6.2.1 Que outros nomes de código foram usados no passado?

Na terminologia estrita do arquivo Debian, a palavra "secção" é utilizada especialmente para categorizar os pacotes pela área de aplicação. (Apesar da palavra "secção main" poder por vezes ser utilizada para descrever a área do arquivo Debian com o nome "main".)

Cada vez que é feito um novo upload por um programador de Debian (DD) para o arquivo unstable (por processamento do incoming), é necessário que o DD assegure que os pacotes enviados sejam compatíveis com o conjunto de pacotes mais recente no arquivo unstable mais recente.

Se o DD quebrar esta compatibilidade intencionalmente para uma atualização importante de biblioteca ou etc., geralmente existe um anúncio na lista de email debian-devel etc.

Before a set of packages are moved by the Debian archive maintenance script from the unstable archive to the testing archive, the archive maintenance script not only checks the maturity (about 2-10 days old) and the status of the RC bug reports for the packages but also tries to ensure them to be compatible with the latest set of packages in the testing archive. This process makes the testing archive very current and usable.

Através do processo de congelamento gradual do arquivo liderado pela equipa de lançamento, o arquivo testing é amadurecido para o tornar completamente consistente e livre de bugs com algumas intervenções manuais. Então o novo lançamento stable é criado ao atribuir o nome de código do antigo arquivo testing ao novo arquivo stable e a criar um novo nome de código para o novo arquivo testing. O conteúdo inicial do novo arquivo testing é exatamente o mesmo que o arquivo stable recentemente lançado.

Ambos os arquivos unstable e testing podem sofrer falhas temporárias devido a vários fatores:

  • Envio de pacotes danificados ao arquivo (maioritariamente para unstable)

  • Atraso de aceitação dos novos pacotes no arquivo (maioritariamente para unstable)

  • Problemas com o tempo de sincronização do arquivo (tanto para testing como unstable)

  • Intervenção manual no arquivo, tal como remoção de pacotes (mais para testing) etc.

Se alguma vez decidir utilizar estes arquivos, deverá ser capaz de corrigir ou contornar este tipo de problemas.

[Cuidado] Cuidado

For about few months after a new stable release, most desktop users should use the stable archive with its security updates even if they usually use unstable or testing archives. For this transition period, both unstable and testing archives are not good for most people. Your system is difficult to keep in good working condition with the unstable archive since it suffers surges of major upgrades for core packages. The testing archive is not useful either since it contains mostly the same content as the stable archive without its security support (Debian testing-security-announce 2008-12). After a month or so, unstable or testing archives may become useful if you are careful.

[Dica] Dica

Quando se acompanha o arquivo testing, um problema causado por um pacote removido é geralmente contornado ao instalar o pacote correspondente do arquivo unstable que foi lançado para correcção de bug.

Veja Manual de Políticas Debian para as definições do arquivo.

Debian é 100% software livre por causa do seguinte:

  • Por predefinição, Debian instala apenas software livre para respeitar as liberdades dos utilizadores.

  • Debian disponibiliza apenas software livre no main.

  • Debian recomenda correr apenas software livre do main.

  • No packages in main depend nor recommend packages in non-free nor non-free-firmware nor contrib.

Algumas pessoas pensam se os 2 seguintes factos se contradizem ou não.

Estes não se contradizem, devido ao seguinte.

  • O sistema Debian é 100% livre e os seus pacotes estão alojados em servidores Debian na área main.

  • Packages outside of the Debian system are hosted by Debian servers in the non-free, non-free-firmware and contrib areas.

Isto é perfeitamente explicado nos termos 4º e 5º do Debian Social Contract:

  • As nossas prioridades são os nossos utilizadores e o software livre

    • Seremos guiados pelas necessidades dos nossos utilizadores e da comunidade de software livre. Iremos pôr o interesse deles no topo das nossas prioridades. Iremos suportar as necessidades dos nossos utilizadores para operação em muitos ambientes de computação distintos. Não nos oporemos a software não-livre que se destine a ser utilizado em sistemas Debian, nem tentaremos cobrar qualquer taxa a pessoas que criem ou utilizem tais trabalhos. Iremos permitir que terceiros criem distribuições a conter o sistema Debian com outros trabalhos, sem qualquer taxa para nós. Para apoio destes objetivos, iremos disponibilizar um sistema integrado de materiais de alta qualidade sem restrições legais que previnam tais utilizações do sistema.

  • Trabalhos que não coincidem com os nossos standards de software livre

    • We acknowledge that some of our users require the use of works that do not conform to the Debian Free Software Guidelines. We have created "non-free", "non-free-firmware" and "contrib" areas in our archive for these works. The packages in these areas are not part of the Debian system, although they have been configured for use with Debian. We encourage CD manufacturers to read the licenses of the packages in these areas and determine if they can distribute the packages on their CDs. Thus, although non-free works are not a part of Debian, we support their use and provide infrastructure for non-free packages (such as our bug tracking system and mailing lists). The Debian official media may include firmware that is otherwise not part of the Debian system to enable use of Debian with hardware that requires such firmware.

[Nota] Nota

The actual text of the 5th term in the current Debian Social Contract 1.2 is slightly different from the above text. This editorial deviation is intentional one to make this user document consistent without changing the real content of the Social Contract.

Users should be aware of the risks of using packages in the non-free, non-free-firmware and contrib areas:

  • falta de liberdade para tais pacotes de software

  • falta de suporte Debian em tais pacotes de software (Debian não pode suportar devidamente software sem ter acesso ao seu código-fonte.)

  • contaminação do seu sistema Debian 100% livre

As Debian Free Software Guidelines são os standards de software livre para Debian. Debian interpreta "software" no âmbito mais amplo incluindo documentação, firmware, logo e dados artísticos no pacote. Isto torna os standards de software livre de Debian muito rigorosos.

Typical non-free, non-free-firmware and contrib packages include freely distributable packages of following types:

  • Pacotes de documentação sob a GNU Free Documentation License com secções invariantes tais como as do GCC e do Make. (a maioria encontra-se na secção non-free/doc.)

  • Firmware packages containing sourceless binary data such as ones listed in Secção 9.10.5, “Controladores de hardware e firmware” as non-free-firmware. (mostly found in the non-free-firmware/kernel section.)

  • Pacotes de fontes e jogos com restrições comerciais de utilização e/ou modificação de conteúdo.

Please note that the number of non-free, non-free-firmware and contrib packages is less than 2% of that of main packages. Enabling access to the non-free, non-free-firmware and contrib areas does not obscure the source of packages. Interactive full screen use of aptitude(8) provides you with full visibility and control over what packages are installed from which area to keep your system as free as you wish.

O sistema Debian oferece um conjunto consistente de pacotes binários através do mecanismo de declaração de dependências binárias dele com versões nos campos do ficheiro de controle. Aqui está uma definição deles um pouco simplificada:

  • "Depends"

    • Isto declara uma dependência absoluta e todos os pacotes listados neste campo têm de ser instalados ao mesmo tempo ou com antecedência.

  • "Pre-Depends"

    • Isto é como o Depends, excepto que requer a instalação completa de todos os pacotes listados com antecedência.

  • "Recommends"

    • Isto declara uma dependência forte mas não absoluta. A maioria dos utilizadores não iriam querer o pacote a menos que todos os pacotes listados neste campo estejam instalados.

  • "Suggests"

    • Isto declara uma dependência fraca. Muitos utilizadores deste pacote podem beneficiar ao instalar os pacotes listados neste campo mas podem ter as funções razoáveis sem eles.

  • "Enhances"

    • This declares a weak dependency like Suggests but works in the opposite direction.

  • "Breaks"

    • Isto declara uma incompatibilidade do pacote normalmente com alguma especificação de versão. Geralmente a resolução é atualizar todos os pacotes listados neste campo.

  • "Conflicts"

    • Isto declara uma incompatibilidade absoluta. Todos os pacotes listados neste campo têm de ser removidos para instalar este pacote.

  • "Replaces"

    • Isto é declarado quando os ficheiros instalados por este pacote substituem ficheiros nos pacotes listados.

  • "Provides"

    • Isto é declarado quando este pacote disponibiliza todos os ficheiros e funcionalidades dos pacotes listados.

[Nota] Nota

Por favor note que definir "Provides", "Conflicts" e "Replaces" em simultâneo a um pacote virtual é a configuração sã. Isto assegura que apenas um pacote real que disponibilize este pacote virtual possa ser instalado de cada vez.

A definição oficial incluindo dependências de fonte encontra-se em O Manual de Políticas: Capítulo 7 - Declarar relações entre pacotes.

Aqui está um resumo do fluxo de eventos simplificado da gestão de pacotes pelo APT.

Aqui, saltei intencionalmente detalhes técnicos por causa da visão geral.

Whatever suite of Debian system you may decide to use, you may still wish to run versions of programs which aren't available in that suite. Even if you find binary packages of such programs in other Debian suites or in other non-Debian resources, their requirements may conflict with your current Debian system.

Although you can tweak package management system with apt-pinning technique etc. as described in Secção 2.7.7, “Tweaking candidate version with apt-pinning to instal such out-of-sync binary packages, such tweaking approaches have only limited use cases since they may break those programs and your system.

Before brutally installing such out-of-sync packages, you should seek all available alternative safer technical solutions which are compatible with your current Debian syetem.

As operações de gestão de pacotes baseadas em repositório no sistema Debian podem ser executas por muitas ferramentas de gestão de pacotes baseadas no APT e disponíveis no sistema Debian. Aqui vamos explicar 3 ferramentas de gestão básica de pacotes: apt, apt-get / apt-cache e aptitude.

Para as operações de gestão de pacotes que envolvam a instalação ou atualização de meta-dados do pacote, necessita de ter privilégios de root.

Apesar do aptitude ser uma ferramenta interactiva muito boa a qual o autor usa principalmente, deve ser advertido de alguns factos:

Os comandos apt-get e apt-cache são as ferramentas de gestão de pacotes baseadas no APT mais básicas.

  • O apt-get e o apt-cache oferecem apenas a interface de linha de comandos.

  • O apt-get é mais apropriado para uma atualização maior ao sistema entre lançamentos, etc.

  • O apt-get oferece um resolvedor de dependências de pacotes robusto.

  • apt-get é menos exigente em recursos de hardware. Consome menos memória e é mais rápido.

  • O apt-cache oferece uma busca baseada em expressões regulares standard no nome do pacote e na descrição.

  • O apt-get e o apt-cache podem gerir várias versões de pacotes a utilizar o /etc/apt/preferences mas é um pouco incómodo.

O comando apt é uma interface de linha de comandos de alto nível para gestão de pacotes. É basicamente um invólucro dos apt-get, apt-cache e comandos semelhantes, originalmente destinada a ser uma interface de utilizador final e ativa por predefinição algumas opções melhor apropriadas para utilização interativa.

  • O apt disponibiliza uma barra de progresso amigável quando se instala pacotes a usar o apt install.

  • O apt irá remover por predefinição os pacotes .deb em cache após instalação com sucesso dos pacotes descarregados.

[Dica] Dica

É recomendado aos utilizadores usarem o novo comando apt(8) para uso interativo e usarem os comandos apt-get(8) e apt-cache(8) em script de shell.

O comando aptitude é a ferramenta de gestão de pacotes baseada no APT mais versátil.

  • O aptitude oferece a interface de utilizador de texto interactiva de ecrã completo.

  • O aptitude também oferece uma interface de utilizador de linha de comandos.

  • O aptitude é mais apropriado para a gestão de pacotes interactiva diária como inspecionar os pacotes instalados e procurar pacotes disponíveis.

  • O aptitude é mais exigente em recursos de hardware. Consome mais memória e é mais lento.

  • O aptitude oferece um busca baseada em expressões regulares avançada em todos os meta-dados dos pacotes.

  • O aptitude pode gerir várias versões de pacotes sem utilizar o /etc/apt/preferences e é bastante intuitivo.

Aqui estão algumas operações básicas de gestão de pacotes com a linha de comandos a usar apt(8), aptitude(8) e apt-get(8) /apt-cache(8).

Tabela 2.6. Operações básicas de gestão de pacotes com a linha de comandos a utilizar apt(8), aptitude(8) e apt-get(8) /apt-cache(8)

sintaxe do apt sintaxe do aptitude sintaxe do apt-get/apt-cache descrição
apt update aptitude update apt-get update atualiza os meta-dados do arquivo de pacotes
apt install foo aptitude install foo apt-get install foo instala a versão candidata do pacote "foo" com as suas dependências
apt upgrade aptitude safe-upgrade apt-get upgrade instala as versões candidatas dos pacotes instalados sem remover quaisquer outros pacotes
apt full-upgrade aptitude full-upgrade apt-get dist-upgrade instala as versões candidatas dos pacotes instalados a remover outros pacotes caso necessário
apt remove foo aptitude remove foo apt-get remove foo remove o pacote "foo" a deixar os seus ficheiros de configuração
apt autoremove N/D apt-get autoremove remove os pacotes auto-instalados que já não sejam necessários
apt purge foo aptitude purge foo apt-get purge foo purga o pacote "foo" com os seus ficheiros de configuração
apt clean aptitude clean apt-get clean limpa completamente o repositório local de ficheiros de pacotes obtidos
apt autoclean aptitude autoclean apt-get autoclean limpa os pacotes desatualizados do repositório local dos ficheiros de pacotes recebidos
apt show foo aptitude show foo apt-cache show foo mostra informação detalhada acerca do pacote "foo"
apt search regex aptitude search regex apt-cache search regex procura pacotes que correspondem à expressão-regular
N/D aptitude why regex N/D explica a razão porque o pacotes que correspondem à expressão_regular devem ser instalados
N/D aptitude why-not regex N/D explica a razão porque o pacotes que correspondem à expressão_regular não podem ser instalados
apt list --manual-installed aptitude search '~i!~M' apt-mark showmanual lista os pacotes instalados manualmente

apt / apt-get and aptitude can be mixed without major troubles.

O "aptitude why expressão_regular" pode listar mais informação por "aptitude -v why expressão_regular". Informação semelhante pode ser obtida por apt rdepends pacote" ou "apt-cache rdepends pacote".

Quando o comando aptitude é arrancado em modo de linha de comandos e enfrenta alguns problemas como conflitos de pacotes, pode mudar para modo interativo em ecrã total, ao pressionar a tecla "e", mais tarde na linha de comandos.

[Nota] Nota

Apesar do comando aptitude vir com ricas funcionalidades como o resolvedor avançado de pacotes dele, esta complexidade já causou (ou pode ainda causar) algumas regressões como os Bug #411123, Bug #514930 e Bug #570377. Em caso de dúvidas, por favor utilize os comandos apt, apt-get e apt-cache em vez do comando aptitude.

Pode dar opções de comando logo após "aptitude".


Para mais veja aptitude(8) e o "Manual de utilizador do aptitude" em "/usr/share/doc/aptitude/README".

As combinações de teclas notáveis para explorar o estado dos pacotes e definir uma "ação planeada" neles neste modo de ecrã total são as seguintes:


The file name specification of the command line and the menu prompt after pressing "l" and "//" take the aptitude regex as described below. Aptitude regex can explicitly match a package name using a string started by "~n" and followed by the package name.

[Dica] Dica

Necessita pressionar "U", no interface visual, para ter todos os pacotes instalados atualizados para a versão candidata. Caso contrário, apenas os pacotes selecionados e certos pacotes com dependências deles, versionadas, são atualizados à versão candidata.

No modo de ecrã completo interativo do aptitude(8), os pacotes na lista de pacotes são mostrados como no próximo exemplo.

idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

Aqui, esta linha significa desde a esquerda o seguinte:

  • A flag "estado atual" (a primeira letra)

  • A flag "acção planeada" (a segunda letra)

  • A flag "automático" ( a terceira letra)

  • O nome do Pacote

  • A alteração na utilização do espaço do disco atribuída a "acção planeada"

  • A versão atual do pacote

  • A versão candidata do pacote

[Dica] Dica

A lista completa de flags é fornecida ao fundo do ecrã de Ajuda mostrada ao pressionar "?".

A versão candidata é escolhida de acordo com as preferências locais atuais (veja apt_preferences(5) e Secção 2.7.7, “Tweaking candidate version with apt-pinning).

Estão disponíveis vários tipos de vistas de pacotes sob o menu "Vistas".


A "Vista de Pacotes standard categoriza os pacotes de certo modo como o dselect com algumas funcionalidades extra.


[Dica] Dica

A vista Tarefas pode ser usada para escolher pacotes para a sua tarefa.

A fórmula de expressão regular do aptitude é estendida tipo mutt ERE (veja Secção 1.6.2, “Expressões regulares”) e o significado das extensões de regras de correspondência especial específicas do aptitude são as seguintes:

Tabela 2.11. Lista da fórmula regex do aptitude

descrição da regra de correspondência extensa fórmula da expressão regular
corresponde com o nome do pacote ~nregex_name
corresponde com a descrição ~dregex_description
corresponde com nome da tarefa ~tregex_task
corresponde com debtag ~Gregex_debtag
corresponde com o maintainer ~mregex_maintainer
corresponde com secção do pacote ~sregex_section
corresponde com versão do pacote ~Vregex_version
corresponde com arquivo ~A{bookworm,trixie,sid}
corresponde com origem ~O{debian,…}
prioridade da correspondência ~p{extra,important,optional,required,standard}
corresponde com pacotes essenciais ~E
corresponde com pacotes virtuais ~v
corresponde com pacotes novos ~N
corresponde com acções pendentes ~a{install,upgrade,downgrade,remove,purge,hold,keep}
corresponde com os pacotes instalados ~i
corresponde com pacotes instalados com marca A (pacotes instalados automaticamente) ~M
corresponde com pacotes instalados sem a marca A (pacotes selecionados pelo administrador) ~i!~M
corresponde com pacotes instalados e com atualizações disponíveis ~U
corresponde com pacotes removidos mas não purgados ~c
corresponde com pacotes removidos, purgados ou que podem-ser-removidos ~g
corresponde com pacotes que declaram dependências quebradas ~b
corresponde com pacotes que declaram dependências quebradas de type ~Btype
corresponde a pacotes pattern que declaram dependência de type ~D[type:]pattern
corresponde a pacotes pattern que declaram dependência quebrada de type ~DB[type:]pattern
corresponde a pacotes para os quais o pacote que corresponde a pattern declara o type de dependência ~R[type:]pattern
corresponde a pacotes para os quais o pacote que corresponde a pattern declara o type de dependência quebrada ~RB[type:]pattern
corresponde com pacotes com os quais alguns pacotes instalados dependem ~R~i
corresponde com pacotes com os quais nenhum outro pacote instalado depende !~R~i
corresponde com pacotes com os quais alguns pacotes instalados dependem ou recomendam ~R~i|~Rrecommends:~i
corresponde o pacote pattern com a versão filtrada ~S filter pattern
corresponde com todos os pacotes (true) ~T
não corresponde com nenhum pacote (false) ~F

  • A parte da expressão regular é a mesma ERE que aquela utilizada nas típicas ferramentas de texto tipo-Unix que utilizam "^", ".*", "$" etc. como o egrep(1), awk(1) e perl(1).

  • A dependência type é uma de (dependências, pré-dependências, recomendações, sugestões, conflitos, substituições, fornecimentos), que específica o inter-relacionamento do pacote.

  • O type de dependência predefinida é "depends".

[Dica] Dica

Quando regex_pattern for uma string nula, coloca "~T" imediatamente após o comando.

Aqui estão alguns atalhos.

  • "~Pterm" == "~Dprovides:term"

  • "~Cterm" == "~Dconflicts:term"

  • "…~W term" == "(…|term)"

Os utilizadores familiarizados com o mutt aprendem rápido, pois o mutt foi a inspiração para a sintaxe de expressão. Veja "PROCURAR, LIMITAR E EXPRESSÕES" no "Manual do Utilizador" "/usr/share/doc/aptitude/README".

[Nota] Nota

Com a versão lenny do aptitude(8), a nova sintaxe de formato longo como a "?broken" pode ser utilizada para correspondência de expressões regulares no lugar da equivalente antiga dele de formato curto "~b". Agora o caractere de espaço " " é considerado como um caractere terminante de expressão regular em adição ao caractere til "~". Veja o "Manual do Utilizador" para a nova sintaxe de formato longo.

Aqui estão alguns exemplos de operações do aptitude(8).

Aqui está como acertar o estado auto/manual de instalação dos pacotes (após usar um instalador de pacotes sem ser o aptitude e etc.).

  1. Arranque o aptitude em modo interativo como root.

  2. Escreva "u", "U", "f" e "g" para atualizar a lista de pacotes e atualizar os pacotes.

  3. Escreva "l" para inserir o limite de visualização de pacotes aos "~i(~R~i|~Recomendados:~i)" e escreva "M" sobre "Pacotes Instalados" como auto-instalado.

  4. Escreva "l" para inserir o limite de visualização de pacotes como "~prequired|~pimportant|~pstandard|~E" e escreva "m" sobre "Pacotes Instalados" como instalados manualmente.

  5. Escreva "l" para inserir o limite de visualização de pacotes como "~i!~M" e remover pacotes não utilizados ao escrever "-" sobre cada um deles após expô-los ao escrever "[" sobre "Pacotes Instalados".

  6. Escreva "l" para inserir o limite de amostragem de pacotes como "~i" depois escreva "m" sobre "Tasks" para marcar esses pacotes como instalados manualmente.

  7. Termina o aptitude.

  8. Inicie "apt-get -s autoremove|less" como root para verificar os que não são usados.

  9. Reinicie o aptitude em modo interativo e marque os pacotes necessários como "m".

  10. Reinicie o "apt-get -s autoremove|less" como root para verificar que o REMOVED contém apenas os pacotes esperados.

  11. Arranque "apt-get autoremove|less" como root para auto-remover os pacotes não usados.

A opção "m" sobre "Tasks" é uma opção para prevenir situações de remoção de pacotes em massa no futuro.

[Nota] Nota

Quando mover para um novo lançamento etc, deverá considerar fazer uma instalação limpa do novo sistema mesmo a saber que Debian é atualizável como descrito em baixo. Isto dá-lhe a hipótese de remover os lixos coleccionados e expõe-lhe a melhor combinação do pacotes mais recentes. É claro que deverá fazer uma cópia de segurança do sistema para um lugar seguro (veja Secção 10.2, “Salvaguarda (backup) e recuperação”) antes de fazer isto. Recomendo fazer uma configuração de duplo arranque a usar partições diferentes para ter a transição mais suave.

You can perform system wide upgrade to a newer release by changing contents of the source list pointing to a new release and running the "apt update; apt dist-upgrade" command.

To upgrade from stable to testing or unstable during the bookworm-as-stable release cycle, you replace "bookworm" in the source list example of Secção 2.1.5, “Básico do arquivos Debian” with "trixie" or "sid".

Na realidade, pode enfrentar algumas complicações devido a problemas com a transição de alguns pacotes, na maioria devido a dependências desses pacotes. Quanto maior a diferença da atualização, maior a probabilidade de ter grandes problemas. Para a transição da stable antiga à nova stable após o lançamento dele, pode ler as novas Notas de Lançamento dele e seguir o procedimento exacto descrito lá para minimizar problemas.

Quando decidir mover de stable para testing antes do lançamento formal dele, não existem Notas de Lançamento para o ajudar. A diferença entre stable e testing pode ter crescido bastante após o lançamento stable anterior e complicar a situação da atualização.

Deve dar passos de precaução para a atualização total enquanto recolhe a informação mais recente da lista de mail e a usar senso comum.

  1. Leia as "Notas de Lançamento" anteriores.

  2. Faça cópia de segurança a todo o sistema (especialmente dados e informação de configuração).

  3. Tenha um meio de arranque à mão para o caso do gestor de arranque ficar danificado.

  4. Informe os utilizadores do sistema com bastante antecedência.

  5. Grave a atividade de atualização com o script(1).

  6. Para prevenir a remoção aplique "unmarkauto" aos pacotes necessários, p.e., "aptitude unmarkauto vim", .

  7. Minimize a quantidade de pacotes instalados para reduzir a hipótese de conflitos de pacotes, p.e., remova os pacotes da tarefas de ambiente de trabalho.

  8. Remove the "/etc/apt/preferences" file (disable apt-pinning).

  9. Tente a atualização em passos inteligentes: oldstablestabletestingunstable.

  10. Update the source list to point to new archive only and run "aptitude update".

  11. Instale, opcionalmente, os novos pacotes de base primeiro, ex., "aptitude install perl".

  12. Corra o comando "apt-get -s dist-upgrade" para avaliar o impacto.

  13. Corra o comando "apt-get dist-upgrade" em último lugar.

[Cuidado] Cuidado

Não é sensato saltar grandes lançamentos de Debian quando se atualiza entre lançamentos stable.

[Cuidado] Cuidado

Nas "Notas de Lançamento" anteriores, GCC, Linux Kernel, initrd-tools, Glibc, Perl, a cadeia de ferramentas do APT, etc. necessitaram de alguma atenção especial para a atualização geral do sistema.

Para atualizações diárias em unstable, veja Secção 2.4.3, “Salvaguardar para problemas de pacotes”.

Aqui está uma lista de outras operações de gestão de pacotes para as quais o aptitude é de demasiado alto nível ou faltam-lhe funcionalidades necessárias.

Tabela 2.13. Lista de operações de gestão avançada de pacotes

comando acção
COLUMNS=120 dpkg -l padrão_do_nome_de_pacote lista o estado de um pacote instalado para o relatório de bug
dpkg -L nome_do_pacote lista o conteúdo de um pacote instalado
dpkg -L nome_do_pacote | egrep '/usr/share/man/man.*/.+' lista os manuais para um pacote instalado
dpkg -S padrão_do_nome_de_ficheiro lista os pacotes instalados que condizem com o nome de ficheiro
apt-file search padrão_do_nome_de_ficheiro lista pacotes no arquivo que condizem com o nome de ficheiro
apt-file list padrão_do_nome_de_pacote lista os conteúdos dos pacotes que correspondem no arquivo
dpkg-reconfigure nome_do_pacote reconfigura o pacote exacto
dpkg-reconfigure -plow package_name reconfigura o pacote exacto com as questões mais detalhadas
configure-debian reconfigura pacotes a partir do menu de ecrã completo
dpkg --audit faz auditoria ao sistema por pacotes parcialmente instalados
dpkg --configure -a configura todos os pacotes parcialmente instalados
apt-cache policy nome_do_pacote_binário mostra a versão disponível, a prioridade e informação de arquivo de um pacote binário
apt-cache madison nome_do_pacote mostra a versão disponível e informação de arquivo de um pacote
apt-cache showsrc nome_do_pacote_binário mostra informação do pacote de código-fonte de um pacote binário
apt-get build-dep nome_do_pacote instala os pacotes necessários para compilar pacote
aptitude build-dep nome_do_pacote instala os pacotes necessários para compilar pacote
apt-get source nome_do_pacote descarrega código-fonte (do arquivo standard)
dget URL for dsc file descarrega um pacote de código-fonte (de outro arquivo)
dpkg-source -x nome_do_pacote_versão-versão_debian.dsc constrói uma árvore de código-fonte a partir de um conjunto de pacotes de código-fonte ("*.orig.tar.gz" e "*.debian.tar.gz"/"*.diff.gz")
debuild binary compila pacote(s) a partir de uma árvore fonte local
make-kpkg imagem_de_kernel compila um pacote de kernel a partir de uma árvore fonte de kernel
make-kpkg --initrd imagem_de_kernel compila um pacote de kernel a partir de uma árvore fonte de kernel com initramfs activa
dpkg -i nome_pacote_versão-versão_debian_arquitectura.deb instalar um pacote local no sistema
apt install /path/to/package_filename.deb instala um pacote local no sistema, entretanto tenta resolver as dependências automaticamente
debi nome_pacote_versão-versão_debian_arquitectura.dsc instala pacote(s) locais no sistema
dpkg --get-selections '*' >seleção.txt guarda a informação de estado de seleção a nível de pacotes do dpkg
dpkg --set-selections <seleção.txt define a informação de estado de seleção a nível de pacotes do dpkg
echo nome-do-pacote hold | dpkg --set-selections define o estado de seleção de pacote ao nível do dpkg para hold (equivalente a "aptitude hold nome_do_pacote")

[Nota] Nota

Para um pacote com a funcionalidade multi-arch, pode precisar de especificar o nome da arquitectura para alguns comandos. Por exemplo, use "dpkg -L libglib2.0-0:amd64" para listar o conteúdo do pacote libglib2.0-0 para a arquitectura amd64.

[Cuidado] Cuidado

As ferramentas de pacotes de nível mais baixo como "dpkg -i …" e "debi …" deverão ser utilizadas com cuidado pelo administrador do sistema. Não tomam conta automaticamente das dependências de pacotes necessárias. As opções de linha de comandos do dpkg "--force-all" e semelhantes (veja dpkg(1)) destinam-se apenas a serem utilizadas por especialistas. Utiliza-las sem o conhecimento total dos seus efeitos pode danificar completamente o seu sistema.

Por favor note o seguinte:

A instalação de debsums permite a verificação dos ficheiros dos pacotes instalados contra valores MD5sum do ficheiro "/var/lib/dpkg/info/*.md5sums" com debsums(1). Para saber como o MD5sum funciona veja Secção 10.3.5, “O valor de controlo MD5” .

[Nota] Nota

Como a base de dados MD5sum pode ser adulterada por um intruso, o debsums(1) é uma ferramenta de segurança de utilização limitada. É bom apenas para verificar modificações locais pelo administrador ou danos devido a erros de media.

Embora hoje em dia visitar o site Debian https://packages.debian.org/ facilite a busca nos meta-dados do pacote, vamos ver modos mais tradicionais.

Os comandos grep-dctrl(1), grep-status(1) e grep-available(1) podem ser utilizados para procurar qualquer ficheiro que tenha o formato geral de um ficheiro de controle de pacote Debian.

The "dpkg -S file_name_pattern" can be used to search package names which contain files with the matching name installed by dpkg. But this overlooks files created by the maintainer scripts.

Se necessitar de fazer uma busca mais elaborada nos meta-dados do dpkg, necessita executar o comando "grep -e padrão_de_expressão_regular *" no diretório "/var/lib/dpkg/info/". Isto fá-lo procurar as palavras mencionadas nos scripts dos pacotes e nos textos de questões de instalação.

Se desejar procurar, recursivamente, as dependências de pacotes, deverá utilizar o apt-rdepends(8).

Vamos aprender como o sistema de gestão de pacotes Debian funciona internamente. Isto deverá ajudá-lo a criar a sua própria solução para alguns problemas com pacotes.

[Dica] Dica

O ficheiro "Release" no nível de topo é usado para assinar o arquivo sob o sistema secure APT.

Cada suite do arquivo Debian tem um ficheiro "Release" no nível de topo, p.e., "http://deb.debian.org/debian/dists/unstable/Release", como o seguinte:

Origin: Debian
Label: Debian
Suite: unstable
Codename: sid
Date: Sat, 14 May 2011 08:20:50 UTC
Valid-Until: Sat, 21 May 2011 08:20:50 UTC
Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
Components: main contrib non-free
Description: Debian x.y Unstable - Not Released
MD5Sum:
 bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
 9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
 3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
...
[Nota] Nota

Aqui, pode encontrar a minha lógica de utilizar "suite" e "nome de código" em Secção 2.1.5, “Básico do arquivos Debian”. A "distribuição" é usada quando se refere a ambos "suite" e "nome de código". Todos os nomes de "áreas" do arquivo oferecidos pelo arquivo são listados sob "Componentes".

The integrity of the top level "Release" file is verified by cryptographic infrastructure called the secure apt as described in apt-secure(8).

  • O ficheiro de assinatura criptográfica "Release.gpg" é criado a partir do ficheiro "Release" de nível de topo autenticado e da chave secreta do arquivo Debian.

  • The public Debian archive keys are locally installed by the latest debian-archive-keyring package.

  • The secure APT system automatically verifies the integrity of the downloaded top level "Release" file cryptographically by this "Release.gpg" file and the locally installed public Debian archive keys.

  • A integridade de todos os ficheiros "Packages" e "Sources" é verificada a utilizar valores MD5sum do ficheiro "Release" de nível de topo. A integridade de todos os ficheiros de pacotes é verificada a utilizar valores MD5sum nos ficheiros "Packages" e "Sources" Veja debsums(1) e Secção 2.4.2, “Verificação dos ficheiros pacotes instalados”.

  • Como a verificação de assinatura criptográfica é um processo muito mais intenso para a CPU do que o cálculo de valor MD5sum, a utilização de valores MD5sum para cada pacote enquanto se utiliza assinatura criptográfica para o ficheiro "Release" de nível de topo disponibiliza boa segurança com desempenho (veja Secção 10.3, “Infraestrutura da segurança de dados”).

If the source list entry specifies the "signed-by" option, the integrity of its downloaded top level "Release" file is verified using specified public key. This is useful when the source list contains non-Debian archives.

[Dica] Dica

The use of apt-key(8) command for APT key management is deprecated.

Also, you can manually verify the integrity of the "Release" file with the "Release.gpg" file and the public Debian archive key posted on ftp-master.debian.org using gpg.

When APT tools, such as aptitude, apt-get, synaptic, apt-file, auto-apt, … are used, we need to update the local copies of the meta data containing the Debian archive information. These local copies have following file names corresponding to the specified distribution, area, and architecture names in the source list (see Secção 2.1.5, “Básico do arquivos Debian”).

  • "/var/lib/apt/lists/deb.debian.org_debian_dists_distribuição_Release"

  • "/var/lib/apt/lists/deb.debian.org_debian_dists_distribuição_Release.gpg"

  • "/var/lib/apt/lists/deb.debian.org_debian_dists_distribuição_área_binário-arquitectura_Packages"

  • "/var/lib/apt/lists/deb.debian.org_debian_dists_distribuição_área_fonte_Sources"

  • "/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribuição_Contents-arquitectura.gz" (para o apt-file)

First 4 types of files are shared by all the pertinent APT commands and updated from command line by "apt-get update" or "aptitude update". The "Packages" meta data are updated if the "deb" is specified in the source list. The "Sources" meta data are updated if the "deb-src" is specified in the source list.

Os meta-dados "Packages" e "Sources" contêm a estrofe "Filename:" que aponta à localização de ficheiro dos pacotes binários e de código-fonte. atualmente, estes pacotes estão localizados sob a árvore de diretórios "pool/" para a transição melhorada através dos lançamentos.

As cópias locais dos meta-dados "Packages" podem ser pesquisadas interativamente com a ajuda do aptitude. O comando de procura especializada grep-dctrl(1) pode pesquisar as cópias locais dos meta-dados "Packages" e "Sources".

A cópia local dos meta-dados "Contents-arquitectura" pode ser atualizada pelo "apt-file update" e a localização dele é diferente dos outros 4. Veja apt-file(1). (O auto-apt utiliza localização diferente para a cópia local de "Contents-arquitectura.gz" por predefinição.)

Ficheiros de pacotes Debian têm estruturas de nomes particulares.


[Dica] Dica

Aqui apenas são descritos formatos de pacote fonte básicos. Veja mais em dpkg-source(1).


[Nota] Nota

Pode verificar a ordem da versão de pacotes com o dpkg(1), p.e., "dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?" .

[Nota] Nota

O debian-installer (d-i) utiliza udeb como a extensão de ficheiro para o pacote binário dele em vez do normal deb. Um pacote udeb é um pacote deb despido que remove alguns conteúdos não essenciais como a documentação para poupar espaço enquanto relaxa os requisitos de política do pacote. Ambos os pacotes deb e udeb partilham a mesma estrutura de pacote. O "u" significa micro.

dpkg(1) é a ferramenta de mais baixo nível para a gestão de pacotes Debian. É muito poderosa e tem que ser utilizada com cuidado.

Enquanto instala o pacote chamado "nome_de_pacote", o dpkg processa-o na seguinte ordem:

  1. Desempacota o ficheiro deb (equivalente a "ar -x")

  2. Executa "nome_de_pacote.preinst" a utilizar o debconf(1)

  3. Instala o conteúdo do pacote no sistema (equivalente a "tar -x")

  4. Executa "nome_de_pacote.postinst" a utilizar o debconf(1)

O sistema debconf disponibiliza interacção standard com o utilizador com suporte de I18N e L10N (Capítulo 8, I18N e L10N).

Tabela 2.17. Ficheiros notáveis criados pelo dpkg

ficheiro descrição dos conteúdos
/var/lib/dpkg/info/nome_do_pacote.conffiles lista de ficheiros de configuração. (modificável pelo utilizador)
/var/lib/dpkg/info/nome_do_pacote.list lista de ficheiros e diretórios instalados pelo pacote
/var/lib/dpkg/info/nome_do_pacote.md5sums lista de valores de hash MD5 para os ficheiros instalados pelo pacote
/var/lib/dpkg/info/nome_do_pacote.preinst script de pacote para ser executado antes da instalação do pacote
/var/lib/dpkg/info/nome_do_pacote.postinst script de pacote para ser executado após a instalação do pacote
/var/lib/dpkg/info/nome_do_pacote.prerm script de pacote para ser executado antes da remoção do pacote
/var/lib/dpkg/info/nome_do_pacote.postrm script de pacote para ser executado após a remoção do pacote
/var/lib/dpkg/info/nome_do_pacote.config script de pacote para o sistema debconf
/var/lib/dpkg/alternatives/nome_do_pacote a informação alternativa usada pelo comando update-alternatives
/var/lib/dpkg/available a informação de disponibilidade para todos os pacotes
/var/lib/dpkg/diversions a informação de diversões usadas pelo dpkg(1) e definidas por dpkg-divert(8)
/var/lib/dpkg/statoverride a informação de sobreposição de estado usada pelo dpkg(1) e definida por dpkg-statoverride(8)
/var/lib/dpkg/status a informação de estado para todos os pacotes
/var/lib/dpkg/status-old o backup de primeira geração do ficheiro "var/lib/dpkg/status"
/var/backups/dpkg.status* o backup de segunda geração e os mais antigos do ficheiro "var/lib/dpkg/status"

O ficheiro "status" também é utilizado por ferramentas como o dpkg(1), o "dselect update" e o "apt-get -u dselect-upgrade".

O comando especializado de busca grep-dctrl(1) pode procurar as cópias locais dos meta dados "status" e "available".

[Dica] Dica

No ambiente do debian-installer, o comando udpkg é usado para abrir pacotes udeb. O comando udpkg é uma versão reduzida do comando dpkg.

When running testing or unstable system, the administrator is expected to recover from broken package management situation.

[Cuidado] Cuidado

Alguns métodos descritos aqui são acções de alto risco. Foi avisado!

Caching errors of the package data cause intriguing errors, such as "GPG error: ... invalid: BADSIG ..." with APT.

You should remove all cached data by "sudo rm -rf /var/lib/apt/* " and try again. (If apt-cacher-ng is used, you should also run "sudo rm -rf /var/cache/apt-cacher-ng/* ".)

Os sistemas de gestão de pacotes a nível de arquivo, como o aptitude(8) ou o apt-get(1), nem tentam instalar pacotes com ficheiros sobrepostos a utilizar as dependências do pacote. (veja Secção 2.1.7, “Dependências de pacote”).

Erros do responsável do pacote ou de implantação inconsistente de mistura de fontes de arquivos (veja Secção 2.7.6, “Packages from mixed source of archives without apt-pinning) pelo administrador do sistema podem criar situações com dependências de pacotes definidas incorrectamente. Quando instala um pacote com ficheiros sobrepostos a usar o aptitude(8) ou o apt-get(1) sob tal situação, o dpkg(1) que desempacota o pacote certifica-se de retornar um erro ao programa que o chama sem sobrescrever os ficheiros existentes.

[Cuidado] Cuidado

A utilização de pacotes de terceiros introduz riscos significantes ao sistema através dos scripts do programador do pacote que são executados com privilégios de root e podem fazer o que quiserem ao seu sistema. O comando dpkg(1) apenas protege contra a sobreposição de ficheiros ao desempacotar.

Pode contornar tal problema de instalação ao remover primeiro o pacote ofensivo antigo, pacote_antigo.

$ sudo dpkg -P old-package

Como o dpkg é uma ferramenta de pacotes de muito baixo nível, pode funcionar sob situações muito más como um sistema que não arranca sem ligação a rede. Vamos assumir que o pacote foo está danificado e precisa de ser substituído.

Pode ainda encontrar cópias em cache de uma versão antiga livre de bugs do pacote foo no diretório de cache de pacotes: "/var/cache/apt/archives/". (se não, pode descarregá-lo do arquivo https://snapshot.debian.org/ ou copiá-lo da cache de pacotes de uma máquina funcional.)

Se puder arrancar o sistema, pode instalá-lo com o seguinte comando.

# dpkg -i /path/to/foo_old_version_arch.deb
[Dica] Dica

Se os danos no sistema forem menores, pode em alternativa fazer um downgrade (regredir a versão) ao sistema completo como em Secção 2.7.11, “Downgrade de emergência” a usar o nível mais alto do sistema APT.

Se o seu sistema não puder arrancar pelo disco rígido, precisa procurar outras maneiras de arrancá-lo.

  1. Arranque o sistema a usar o CD de instalação de Debian (debian-installer) em modo de recuperação.

  2. Monte o sistema danificado no disco rígido em "/target".

  3. Instale uma versão antiga do pacote foo com o seguinte.

# dpkg --root /target -i /path/to/foo_old_version_arch.deb

Este exemplo funciona mesmo se o comando dpkg no disco rígido estiver danificado.

[Dica] Dica

Pode ser utilizado, de modo semelhante, para recuperar um sistema danificado qualquer sistema GNU/Linux arrancado de outro sistema no disco rígido, Live CD de GNU/Linux, por pen USB de arranque ou arranque pela rede.

Se a tentativa de instalar um pacote deste modo falha devido a algumas violações de dependências e necessitar realmente de fazer isto como último recurso, pode sobrepor a dependência a utilizar a "--ignore-depends", "--force-depends" e outras opções do dpkg. Se o fizer, precisa de fazer um sério esforço para restaurar as dependências apropriadas mais tarde. Veja dpkg(8) para mais detalhes.

[Nota] Nota

Se o seu sistema estiver seriamente danificado, deve fazer uma salvaguarda completa para um lugar seguro (veja Secção 10.2, “Salvaguarda (backup) e recuperação”) e deve fazer uma instalação limpa. Isto consome menos tempo e produz melhores resultados no fim.

For simplicity, the source list examples in this section are presented as "/etc/apt/sources.list" in one-line-style after the bookworm release.

There are stable-updates ("bookworm-updates" during the bookworm-as-stable release cycle) and backports.debian.org archives which provide upgrade packages for stable.

De modo a utilizar estes arquivos, liste todos os arquivos necessários no ficheiro "/etc/apt/sources.list" como a seguir:

deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free
deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free
deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware contrib non-free
deb http://deb.debian.org/debian/ bookworm-backports main non-free-firmware contrib non-free

Não há necessidade de definir valores específicos de Pin-Priority no ficheiro "/etc/apt/preferences". Quando os novos pacotes ficam disponíveis, a configuração predefinida disponibiliza as atualizações mais razoáveis (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”).

  • Todos os pacotes antigos instalados são atualizados para mais recentes a partir de bookworm-updates.

  • Apenas os pacotes antigos instalados manualmente a partir de bookworm-backports são atualizados para mais recentes a partir de bookworm-backports.

Sempre que desejar instalar um pacote chamado "nome-do-pacote" com as suas dependências a partir do arquivo bookworm-backports manualmente, utilize o seguinte comando enquanto muda o lançamento alvo com a opção "-t".

$ sudo apt-get install -t bookworm-backports package-name
[Atenção] Atenção

Do not install too many packages from backports.debian.org archives. It may cause package dependency complications. See Secção 2.1.11, “How to cope with conflicting requirements” for alternative solutions.

[Cuidado] Cuidado

Installing packages from mixed source of archives is not supported by the official Debian distribution except for officially supported particular combinations of archives such as stable with security updates and stable-updates.

Aqui está um exemplo de operações para incluir, uma vez, pacotes específicos com novas versões da origem encontrados em unstable enquanto se acompanha a testing.

  1. Altere o ficheiro "/etc/apt/sources.list" temporariamente para entrada única "unstable".

  2. Corra "aptitude update".

  3. Corra "aptitude install nome-do-pacote".

  4. Recupere o ficheiro "/etc/apt/sources.list" original para testing.

  5. Corra "aptitude update".

You do not create the "/etc/apt/preferences" file nor need to worry about apt-pinning with this manual approach. But this is very cumbersome.

[Cuidado] Cuidado

Quando utiliza fontes misturadas de arquivos, tem que assegurar por si próprio a compatibilidade dos pacotes pois Debian não o garante. Se existir incompatibilidade de pacotes, pode danificar o seu sistema. Tem que ser capaz de julgar estes requisitos técnicos. A utilização de fontes misturadas de arquivos aleatórios é uma operação completamente opcional e a utilização deles não é algo que o encoraje a utilizar.

As regras gerais para instalar pacotes de arquivos diferentes são as seguintes.

[Nota] Nota

De modo a tornar um pacote seguro para instalar, alguns pacotes de programas binários comerciais não-livres podem vir fornecidos com bibliotecas completamente ligadas estaticamente. Mesmo assim deve verificar problemas de compatibilidade da ABI e etc. com eles.

[Nota] Nota

Except to avoid broken package for a short term, installing binary packages from non-Debian archives is generally bad idea. You should seek all available alternative safer technical solutions which are compatible with your current Debian syetem (see Secção 2.1.11, “How to cope with conflicting requirements”).

[Atenção] Atenção

Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it.

Sem o ficheiro "/etc/apt/preferences", o sistema APT escolhe a versão disponível mais recente com a versão candidata a utilizar a cadeia de versão. Este é o estado normal e a utilização recomendada do sistema APT. Todas as combinações de arquivos oficialmente suportadas não necessitam do ficheiro "/etc/apt/preferences" porque alguns arquivos que não devem ser utilizados como fonte automática de atualizações são marcados como NotAutomatic e são tratados de modo apropriado.

[Dica] Dica

A regra de comparação da string de versão pode ser verificada com, p.e., "dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?" (veja dpkg(1)).

Quando instala regularmente pacotes de uma mistura de fontes de arquivos (veja Secção 2.7.6, “Packages from mixed source of archives without apt-pinning), pode automatizar estas operações complicadas ao criar o ficheiro "/etc/apt/preferences" com entradas apropriadas e a moldar a regra de seleção de pacotes para a versão candidata como descrito em apt_preferences(5). Isto chama-se apt-pinning.

When using apt-pinning, you must ensure compatibility of packages by yourself since the Debian does not guarantee it. The apt-pinning is completely optional operation and its use is not something I encourage you to use.

Archive level Release files (see Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”) are used for the rule of apt_preferences(5). Thus apt-pinning works only with "suite" name for normal Debian archives and security Debian archives. (This is different from Ubuntu archives.) For example, you can do "Pin: release a=unstable" but can not do "Pin: release a=sid" in the "/etc/apt/preferences" file.

When you use non-Debian archive as a part of apt-pinning, you should check what they are intended for and also check their credibility. For example, Ubuntu and Debian are not meant to be mixed.

[Nota] Nota

Even if you do not create the "/etc/apt/preferences" file, you can do fairly complex system operations (see Secção 2.6.6, “Recuperação com o comando dpkg” and Secção 2.7.6, “Packages from mixed source of archives without apt-pinning) without apt-pinning.

Aqui está uma explicação simplificada da técnica de apt-pinning.

O sistema APT escolhe o pacote de atualização com o Pin-Priority maior das fontes de pacotes disponíveis definidas no ficheiro "/etc/apt/sources.list" como o pacote de versão candidata. Se o Pin-Priority do pacote for maior que 1000, esta restrição de versão para atualização é abandonada para permitir a regressão (veja Secção 2.7.11, “Downgrade de emergência”).

O valor Pin-Priority de cada pacote é definido por entradas "Pin-Priority" no ficheiro "/etc/apt/preferences" ou utiliza o valor predefinido dele.


The target release archive can be set by the command line option, e.g., "apt-get install -t testing some-package"

Os arquivos NotAutomatic e ButAutomaticUpgrades são definidos pelo servidor de arquivo que contêm no ficheiro Release dele do nível de arquivo (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”) ambos "NotAutomatic: yes" e "ButAutomaticUpgrades: yes". O arquivo NotAutomatic é definido pelo servidor de arquivo que contém no ficheiro Release de nível de arquivo dele apenas "NotAutomatic: yes".

A situação de apt-pinning do pacote de várias fontes de arquivos é mostrada por "apt-cache policy pacote".

  • Uma linha começada com "Package pin:" lista a versão do pacote de pin se estiver definida a associação apenas com o pacote p.e., "Package pin: 0.190".

  • Não existe nenhuma linha com "Package pin:" se não estiver definida nenhuma associação apenas com pacote.

  • O valor Pin-Priority a associar ao pacote é listado no lado direito de todas as strings de versão, p.e., "0.181 700".

  • É listado "0" à direita de todas as strings de versão se nenhuma associação apenas com pacote for definida, ex., "0.181 0".

  • Os valores Pin-Priority dos arquivos (definidos como "Package: *" no ficheiro "/etc/apt/preferences") são listados à esquerda dos caminhos dos arquivos, ex., "100 http://deb.debian.org/debian/ bookworm-backports/main Packages".

[Atenção] Atenção

Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it.

Aqui está um exemplo de técnica de apt-pinning para incluir pacotes específicos de versão original mais recente encontrados em unstable e atualizados regularmente enquanto de segue o testing. Liste todos os arquivos necessários no ficheiro "/etc/apt/sources.list" conforme a seguir:

deb http://deb.debian.org/debian/ testing main contrib non-free
deb http://deb.debian.org/debian/ unstable main contrib non-free
deb http://security.debian.org/debian-security testing-security main contrib

Configure o ficheiro "/etc/apt/preferences" como o seguinte:

Package: *
Pin: release a=unstable
Pin-Priority: 100

Quando desejar instalar um pacote chamado "nome_do_pacote" com as suas dependências a partir do arquivo unstable sob esta configuração, invoque o seguinte comando que muda o lançamento alvo com a opção "-t" (o Pin-Priority de unstable torna-se 990).

$ sudo apt-get install -t unstable package-name

Com esta configuração, a execução usual de "apt-get upgrade" e "apt-get dist-upgrade" (ou "aptitude safe-upgrade" e "aptitude full-upgrade") atualiza os pacotes que foram instalados a partir do arquivo testing a usar o arquivo testing atual e os pacotes que foram instalados a partir do arquivo unstable a usar o arquivo unstable atual.

[Cuidado] Cuidado

Tenha cuidado para não remover a entrada "testing" do ficheiro "/etc/apt/sources.list". Sem a entrada "testing" lá, o sistema APT atualiza os pacotes do novo arquivo unstable.

[Dica] Dica

Geralmente edito o ficheiro "/etc/apt/sources.list" para comentar a entrada do arquivo "unstable" logo após a operação acima. Isto evita a lentidão do processo de atualização ao ter demasiadas entradas no ficheiro "/etc/apt/sources.list" embora isto impeça a atualização dos pacotes que foram instalados a partir do arquivo unstable a utilizar o arquivo unstable atual.

[Dica] Dica

Se for utilizado "Pin-Priority: 1" em vez de "Pin-Priority: 100" no ficheiro "/etc/apt/preferences", os pacotes já instalados que têm o valor Pin-Priority de 100 não são atualizados pelo arquivo unstable mesmo se a entrada "testing" no ficheiro "/etc/apt/sources.list" seja removida.

Se desejar acompanhar pacotes particulares em unstable automaticamente sem uma instalação inicial "-t unstable", tem de criar o ficheiro "/etc/apt/preferences" e listar explicitamente todos esses pacotes no topo conforme a seguir:

Package: package-1
Pin: release a=unstable
Pin-Priority: 700

Package: package-2
Pin: release a=unstable
Pin-Priority: 700

Estes definem o valor Pin-Priority para cada pacote específico. Por exemplo, de modo a acompanhar a versão unstable mais recente deste "Debian Reference" em Português, deve ter as seguintes entradas no ficheiro "/etc/apt/preferences".

Package: debian-reference-en
Pin: release a=unstable
Pin-Priority: 700

Package: debian-reference-common
Pin: release a=unstable
Pin-Priority: 700
[Dica] Dica

This apt-pinning technique is valid even when you are tracking stable archive. Documentation packages have been always safe to install from unstable archive in my experience, so far.

[Atenção] Atenção

Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it.

[Cuidado] Cuidado

O downgrade (regressão de versão) não é suportado oficialmente pelo sistema Debian por design. Deverá ser feito apenas como parte de um processo de recuperação de emergência. Apesar desta situação, é conhecido por funcionar bem em muitos incidentes. Para sistemas críticos, Deve fazer salvaguardas (backups) de todos os dados importantes após a operação de recuperação e reinstalar um sistema novo a partir da estaca zero.

Pode ter sorte ao fazer o downgrade de uma arquivo recente para um arquivo mais antigo para recuperar de uma atualização ao sistema que o deixou danificado ao manipular a versão candidata (veja Secção 2.7.7, “Tweaking candidate version with apt-pinning). Esta é uma alternativa preguiçosa às acções tediosas de muitos comandos "dpkg -i pacote-danificado_versão-antiga.deb" (veja Secção 2.6.6, “Recuperação com o comando dpkg”).

Procure as linhas no ficheiro "/etc/apt/sources.list" que acompanham unstable como a seguir.

deb http://deb.debian.org/debian/ sid main contrib non-free

Substitua-as de modo a acompanharem testing.

deb http://deb.debian.org/debian/ trixie main contrib non-free

Configure o ficheiro "/etc/apt/preferences" como o seguinte:

Package: *
Pin: release a=testing
Pin-Priority: 1010

Corra "apt-get update; apt-get dist-upgrade" para forçar a regressão dos pacotes no sistema.

Remova este ficheiro especial "/etc/apt/preferences" após este downgrade de emergência.

[Dica] Dica

É uma boa ideia remover (não purgar) o máximo de pacotes para minimizar problemas de dependências. Pode necessitar remover e instalar manualmente alguns pacotes para conseguir o downgrade do sistema. O kernel Linux, gestor de arranque, udev, PAM, APT, os pacotes relacionados com a rede e os seus ficheiros de configuração requerem atenção especial.

Como pôr em mirror uma sub-secção inteira do arquivo Debian é um desperdício de espaço de disco e largura de banda de rede, a implantação se um servidor proxy local para o APT é desejável a ter em consideração se administrar muitos sistemas em LAN. O APT pode ser configurado para utilizar servidores proxy web genéricos (http) como o squid (veja Secção 6.5, “Outras aplicações de servidor de rede”) conforme descrito em apt.conf(5) e em "/usr/share/doc/apt/examples/configure-index.gz". A variável de ambiente $http_proxy" pode ser utilizada para sobrepor a definição de servidor proxy do ficheiro "/etc/apt/apt.conf".

Existem ferramentas de proxy especiais para o arquivo Debian. Deve verificar o BTS antes de as utilizar.


[Cuidado] Cuidado

Quando Debian reorganiza a estrutura do arquivo dele, estas ferramentas de proxy especializadas tendem a necessitar ser reescritas de pelo responsável do pacote e podem não estar funcionais durante algum tempo. Por outro lado, os servidores proxy web (http) genéricos são mais robustos e mais fáceis de acompanhar estas mudanças.