Capítulo 2. Gestão de pacotes Debian

# Capítulo 2. Gestão de pacotes Debian

| Nota
Este capítulo é escrito a assumir que o lançamento estável mais recente tem o nome de código: `trixie`. A fonte de dados do sistema APT é coletivamente referida como a lista de fontes neste documento. Isto pode ser definido em qualquer parte do ficheiro "`/etc/apt/sources.list`", "`/etc/apt/sources.list.d/*.list`" ou "`/etc/apt/sources.list.d/*.sources`".

## 2.1. Pré-requisitos da gestão de pacotes Debian

### 2.1.1. Sistema de gestão de pacotes Debian

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.

O atual sistema de gestão de pacotes Debian que pode utilizar todos estes recursos é o Ferramenta de instalações avançada (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 77003 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) para todas as operações de linha de comandos interativas, incluindo instalação, remoção e atualização de pacotes.

- 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.

Tabela 2.1. Lista de ferramentas de gestão de pacotes Debian

pacote | popcon | tamanho | descrição
--- | --- | --- | ---
`dpkg` | V:905, I:1000 | 6399 | sistema de gestão de pacotes de baixo nível para Debian (baseado em ficheiros)
`apt` | V:896, I:1000 | 4682 | Frontend do APT para gerir pacotes com CLI: `apt`/`apt-get`/`apt-cache`
`aptitude` | V:34, I:172 | 4621 | Interface do APT para gerir pacotes interativamente com uma consola de ecrã completo: aptitude(8)
`tasksel` | V:37, I:984 | 346 | Front-end APT para instalar tarefas selecionadas: tasksel(8)
`unattended-upgrades` | V:128, I:183 | 317 | pacote de melhoria para o APT para ativar a instalação automática de atualizações de segurança
`gnome-software` | V:160, I:262 | 4715 | Centro de Software para GNOME (GUI APT front-end)
`synaptic` | V:32, I:281 | 7788 | gestor de pacotes gráfico (interface GTK para APT)
`apt-utils` | V:417, I:998 | 1139 | Programas utilitários do APT: apt-extracttemplates(1), apt-ftparchive(1) e apt-sortpkgs(1)
`apt-listchanges` | V:400, I:891 | 563 | ferramenta de notificação do histórico de alterações do pacote
`apt-listbugs` | V:5.2, I:7.1 | 512 | lista bugs críticos antes de cada instalação do APT
`apt-file` | V:15, I:55 | 89 | Utilitário de busca de pacotes do APT - interface de linha de comandos
`apt-rdepends` | V:0.4, I:4.5 | 39 | lista recursivamente dependências de pacotes

### 2.1.2. Configuração de pacotes

Aqui estão alguns pontos chave para a configuração de pacotes no sistema Debian.

- Para um Ambiente de Trabalho moderno, reiniciar o sistema após uma alteração de configuração de pacote e atualização de pacote é uma boa ideia ara assegurar que o sistema vai funcionar de modo apropriado.

- A configuração manual feita pelo administrador do sistema é respeitada. Por outras palavras, o sistema de configuração de pacotes não faz configurações intrusivas por conveniência.

- Cada pacote vem com o próprio script de configuração com a interface de utilizador standard chamada debconf(7) para ajudar no processo inicial de instalação do pacote.

- Os Programadores do Debian dão o melhor para tornar a sua experiência de atualização isenta de falhas com scripts de configuração de pacotes.

- As funcionalidades totais do software empacotado estão disponíveis ao administrador do sistema. Mas aquelas com riscos de segurança estão desactivadas na instalação predefinida.

- Se manualmente ativou um serviço com alguns riscos de segurança você é o responsável pelo confinamento de risco.

- A configuração esotérica pode ser activada manualmente pelo administrador do sistema. Isto pode criar interferência com programas de ajuda genéricos populares para a configuração do sistema.

### 2.1.3. Precauções básicas

| 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.

O administrador de sistemas Debian novato deve ficar com a suite `stable` de Debian enquanto aplica apenas atualizações de segurança. Até compreender muito bem o sistema Debian, você deve seguir as seguintes precauções.

- Não inclua `testing` ou `unstable` na lista de fontes.

- Não misture o Debian padrão com outros repositórios não-Debian como o Ubuntu na lista de fontes.

- 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.

Os efeitos não-compatíveis causados pela violação das precauções acima para com o sistema de gestão de pacotes Debian podem deixar o seu sistema inutilizável.

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ó.

### 2.1.4. A vida com atualizações eternas

| 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.

Apesar dos meus avisos acima, sei que muitos leitores deste documento podem querer executar as suites `testing` ou `unstable` mais recentes.

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.

Esta lista destina-se ao ambiente de trabalho auto-administrado.

- Use a suite `testing` já que esta é na prática a atualização contínua gerida automaticamente pela infraestrutura de controlo de qualidade do repositório Debian, como a integração contínua Debian, as práticas de upload somente de código fonte e o acompanhamento de transição de bibliotecas. Os pacotes na suite `testing` são atualizados com frequência suficiente para oferecer todos os recursos mais recentes.

- Definir o nome de código correspondente ao conjunto `testing` ("`forky`" durante o ciclo de lançamento `trixie`-as-`stable` ) na lista de fontes.

- Atualize manualmente este codinome na lista de fontes para o novo somente após avaliar a situação por si mesmo por cerca de um mês após o lançamento da suíte principal. A lista de discussão de usuários e desenvolvedores Debian são boas fontes de informação para isso também.

A utilização da suite `unstable` não é recomendada. A suite `unstable` (instável) é boa para depurar pacotes como programador mas tende a expor a riscos desnecessários para a utilização normal do ambiente de trabalho. Mesmo que a suite `unstable` do sistema Debian pareça muito estável na maioria das vezes, houve alguns problemas com pacotes e alguns deles não foram tão triviais de resolver.

Aqui estão algumas idéias básicas de medidas de precaução para assegurar uma recuperação rápida e fácil de bugs em pacotes Debian.

- Torne o sistema de salvamento disponível seguindo Secção 3.2, “O sistema de salvamento”.

- Faça um sistema de duplo arranque ao instalar a suite `stable` do sistema Debian noutra partiçã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
Se não conseguir fazer nenhumas destas ações de precaução, provavelmente não está preparado para as suites `testing` e `unstable`.

### 2.1.5. Básico do arquivos Debian

| 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.

Para um utilizador do sistema, o arquivo Debian é acedido utilizando o sistema APT.

O sistema APT especifica a sua fonte de dados como a lista de fontes e esta é descrita em sources.list(5).

Para o sistema `trixie` com o acesso HTTP típico, a lista de fontes é fornecida no estilo deb822 moderno em "`/etc/apt/sources.list.d/debian.sources`" como o seguinte:

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

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

| Dica

Se a lista de fontes for fornecida no antigo estilo descontinuado de uma linha em ficheiros "`/etc/apt/sources.list`" ou "`/etc/apt/sources.list.d/*.list`", atualize-os com:

     $ sudo apt modernize-sources

Os pontos principais da lista de fontes em estilo deb822 são os seguintes.

- Os seus ficheiros de definição estão nos ficheiros "`/etc/apt/sources.list.d/*.sources`".

- Cada bloco de linhas separado por uma linha em branco define a fonte de dados para o sistema APT.

- A estrofe "`Types:`" define a lista de tipos tais como "`deb`" e "`deb-src`".

- A estrofe "`URIs:`" define a lista de URIs raiz do repositório Debian.

- A estrofe "`Suites:`" define a lista de nomes de distribuição utilizando o nome da suite ou o nome de código.

- A estrofe "`Components:`" define a lista de nomes de áreas de arquivo válidas do arquivo Debian.

A definição para "`deb-src`" pode ser omitida com segurança se for apenas para `aptitude` que não acede aos meta dados relacionados com a fonte. Acelera as atualizações dos meta dados do arquivo.

O URL pode ser "`https://`", "`http://`", "`ftp://`", "`file://`", ....

As linhas que começam por "`#`" são comentários e são ignoradas.

Aqui, tenho tendência para utilizar o nome de código "`trixie`" ou "`forky`" em vez do nome da suite "`stable`" ou "`testing`" para evitar surpresas quando a próxima `stable` for lançada.

| Dica
Se "`sid`" for utilizado no exemplo acima em vez de "`trixie`", a linha "`deb: http://security.debian.org/ …`" ou o seu conteúdo equivalente em deb822 para atualizações de segurança na lista de fontes não é necessária. Isto porque não existe nenhum arquivo de atualizações de segurança para "`sid`" (`unstable`).

Aqui está a lista de URLs dos sites de arquivo Debian e o nome da suite ou nome de código usado no ficheiro de configuração após o lançamento do `trixie`.

Tabela 2.2. Lista de sites de arquivos Debian

URL do arquivo | nome da suite | codinome | objetivo do repositório
--- | --- | --- | ---
http://deb.debian.org/debian/ | `stable` | `trixie` | Quase-estática `stable` realizada após controlos exaustivos
http://deb.debian.org/debian/ | `testing` | `forky` | Disponibilização dinâmica da suite `testing` após controlos decentes e prazos curtos
http://deb.debian.org/debian/ | `unstable` | `sid` | Lançamento `unstable` dinâmico após verificações mínimas e sem esperas
http://deb.debian.org/debian/ | `experimental` | N/D | Experiências de pré-lançamento efetuadas por programadores (opcional, apenas para programadores)
http://deb.debian.org/debian/ | `stable-proposed-updates` | `trixie-proposed-updates` | Atualizações para a próxima versão `stable` (opcional)
http://deb.debian.org/debian/ | `stable-updates` | `trixie-updates` | Subconjunto do conjunto `stable-proposed-updates` que necessita de atualizações urgentes, como os dados relativos ao fuso horário (opcional)
http://deb.debian.org/debian/ | `stable-backports` | `trixie-backports` | Coleção aleatória de pacotes recompilados maioritariamente da versão `testing` (opcional)
http://security.debian.org/debian-security/ | `stable-security` | `trixie-security` | Atualizações de segurança para a versão `stable` (importante)
http://security.debian.org/debian-security/ | `testing-security` | `forky-security` | Não é ativamente apoiado nem utilizado pela equipa de segurança

| Cuidado

Apenas a suite `stable` pura com atualizações de segurança proporciona a melhor estabilidade. Executar maioritariamente a suite `stable` misturada com alguns pacotes da `testing` ou da suite `unstable` é mais arriscado do que executar a versão `unstable` pura devido a incompatibilidade de versões de bibliotecas, etc. Se precisa mesmo da última versão de alguns programas sob lançamento `stable`, por favor use pacotes dos serviços stable-updates e backports (veja Secção 2.7.4, “Atualizações e Backports”). Estes serviços devem ser usados com cuidado extra.

| 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, “Ajustar a versão candidata com o apt-pinning”).

| Dica
Para o sistema Debian com a suite `stable`, é uma boa ideia incluir o conteúdo com "`http://security.debian.org/`" na lista de fontes para ativar as atualizações de segurança como no exemplo acima.

| Nota

Os bugs de segurança para a suite `stable` são corrigidos pela equipa de segurança Debian. Esta atividade tem sido bastante rigorosa e fiável. Os existentes na suite `testing` podem ser corrigidos pela equipa de segurança de Debian testing. Por várias razões, esta atividade não é tão rigorosa como a da `stable` e poderá ter de esperar pela migração dos pacotes de `unstable` corrigidos para o arquivo `testing`. Os existentes no repositório `unstable` são corrigidos pelo responsável individual. Pacotes `unstable` mantidos ativamente estão normalmente em boa forma, aproveitando as últimas correções de segurança do autor. Veja a FAQ de segurança do Debian para saber como o Debian lida com bugs de segurança.

Tabela 2.3. Lista de área de arquivo Debian

área | quantidade de pacotes | critério do componente do pacote
--- | --- | ---
`main` | 75525 | em conformidade com DFSG e nenhuma dependência a `non-free`
`non-free-firmware` | 74 | não compatível com DFSG, firmware necessário para uma experiência razoável de instalação do sistema
`contrib` | 360 | em conformidade com DFSG mas com dependências a `non-free`
`non-free` | 1044 | não compatível com DFSG e não em `non-free-firmware`

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.

Tabela 2.4. A relação entre suite e nome de código

Tempo | suite = `stable` | suite = `testing` | suite = `unstable`
--- | --- | --- | ---
após o lançamento `trixie` | nome de código = `trixie` | nome de código = `forky` | nome de código = `sid`
após o lançamento `forky` | nome de código = `forky` | nome de código = `duke` | nome de código = `sid`

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.

Antes que um conjunto de pacotes seja movido pelo script de manutenção do arquivo Debian do arquivo `unstable` para o arquivo `testing`, o script de manutenção do arquivo não verifica apenas a maturidade (cerca de 2-10 dias de idade) e o estado dos relatórios de bug RC para os pacotes mas também tenta assegurar que sejam compatíveis com o conjunto de pacotes mais recente no arquivo `testing`. Este processo torna o arquivo `testing` muito atual e utilizável.

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

Durante alguns meses após um novo lançamento de `stable`, a maioria dos utilizadores de ambientes de trabalho devem usar o arquivo `stable` com as atualizações de segurança dele mesmo que normalmente usem os arquivos `unstable` ou `testing`. Durante este período de transição, ambos arquivos `unstable` e `testing` não são bons para a maioria das pessoas. O seu sistema é difícil de manter em boas condições de funcionamento com o arquivo `unstable` porque sofre de vagas de grandes atualizações nos pacotes principais. O arquivo `testing` também não é útil porque contém praticamente o mesmo conteúdo que o arquivo `stable` mas sem o suporte de segurança dele (Anúncio-de-segurança-de-testing-Debian-2008-12). Após um mês ou mais, os arquivos de `unstable` ou `testing` podem ser úteis se for cuidadoso.

| 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.

- "Secções"

- "Prioridades"

- "Sistema base"

- "Pacotes essenciais"

### 2.1.6. Debian é 100% software livre

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`.

- Nenhum pacote `main` depende nem recomenda pacotes na `non-free` nem na `non-free-firmware` nem na `contrib`.

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

- "Debian irá manter-se 100% livre". (Primeiro termo do Debian Social Contract)

- Os servidores Debian hospedam alguns pacotes `non-free-firmware`, `non-free` e `contrib`.

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`.

- Pacotes fora do sistema Debian são hospedados por servidores Debian nas áreas `non-free`, `non-free-firmware` e `contrib`.

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

  - Nós reconhecemos que alguns de nossos utilizadores requerem o uso de trabalhos que não estão de acordo com a Definição Debian de Software Livre. Nós criamos áreas "`non-free`", "`non-free-firmware`" e "`contrib`" no nosso repositório para estes trabalhos. Os pacotes nestas áreas não são parte do sistema Debian, embora tenham sido configurados para uso com o Debian. Nós encorajamos os fabricantes de CDs a ler as licenças dos pacotes nestas áreas e determinar se eles podem distribuir os pacotes em seus CDs. Assim, embora os trabalhos não-livres não façam parte da Debian, nós suportamos a sua utilização e fornecemos infraestruturas para pacotes não-livres (tais como o nosso sistema de acompanhamento de bugs e listas de correio eletrónico). A média oficial da Debian pode incluir firmware que de outra forma não é parte do sistema Debian para permitir o uso da Debian com hardware que requer tal firmware.

| Nota
O texto atual do quinto termo no atual Contrato Social Debian 1.2 é ligeiramente diferente do texto acima. Este desvio editorial é intencional para tornar este documento do utilizador consistente sem alterar o conteúdo real do Contrato Social.

Os utilizadores devem estar cientes dos riscos de usar pacotes das áreas `non-free`, `non-free-firmware` e `contrib`:

- 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.

Tipicamente os pacotes da `non-free`, `non-free-firmware` e da `contrib` incluem pacotes distribuídos livremente dos seguintes tipos:

- 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`.)

- Pacotes de firmware contendo dados binários sem fonte, tais como os listados em Secção 9.10.5, “Controladores de hardware e firmware” como `non-free-firmware`. (maioritariamente encontrados na secção `non-free-firmware/kernel`.)

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

Por favor note que a quantidade de pacotes de `non-free`, `non-free-firmware` e `contrib` é menos de 2% dos pacotes de `main`. Ativar o acesso às áreas `non-free`, `non-free-firmware` e `contrib` não turva a fonte dos pacotes. A utilização do ecrã interativo do aptitude(8) disponibiliza-lhe visibilidade e controlo total sobre que pacotes estão instalados e a partir de qual das áreas, para manter o seu sistema livre conforme desejar.

### 2.1.7. Dependências de pacote

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:

- "Dependências"

  - 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.

- "Pré-Dependências"

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

- "Recomendados"

  - 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.

- "Sugeridos"

  - 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.

- "Melhoramentos"

  - Isto declara uma dependência fraca como Sugerida mas funciona na direção oposta.

- "Quebras"

  - 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.

- "Conflitos"

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

- "Substitui"

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

- "Proporciona"

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

| 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.

### 2.1.8. O fluxo de eventos da gestão de pacotes

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

- Update ("`apt update`", "`aptitude update`" ou "`apt-get update`"):

  1. Obtém meta-dados do arquivo a partir do arquivo remoto

  2. Re-constrói e atualiza os meta-dados locais para utilização do APT

- Upgrade ("`apt upgrade`" e "`apt full-upgrade`", ou "`aptitude safe-upgrade`" e "`aptitude full-upgrade`", ou "`apt-get upgrade`" e "`apt-get dist-upgrade`"):

  1. Escolhe a versão candidata que geralmente é a versão mais recente disponível para todos os pacotes instalados (veja Secção 2.7.7, “Ajustar a versão candidata com o apt-pinning” para exceções)

  2. Resolve a dependência do pacote

  3. Obtém os pacotes binários selecionados do arquivo remoto se a versão candidata diferir da versão instalada

  4. Desempacota os pacotes binários obtidos

  5. Corre o script preinst

  6. Instala os ficheiros binários

  7. Corre o script postinst

- Instalar ("`apt install …`", `aptitude install …`" ou "`apt-get install …`"):

  1. Escolhe os pacotes listados na linha de comandos

  2. Resolve a dependência do pacote

  3. Obtém os pacotes binários selecionados a partir do arquivo remoto

  4. Desempacota os pacotes binários obtidos

  5. Corre o script preinst

  6. Instala os ficheiros binários

  7. Corre o script postinst

- Remover ("`apt remove …`", "`aptitude remove …`" ou "`apt-get remove …`"):

  1. Escolhe os pacotes listados na linha de comandos

  2. Resolve a dependência do pacote

  3. Corre o script prerm

  4. Remove os ficheiros instalados excepto os ficheiros de configuração

  5. Corre o script postrm

- Purgar ("`apt purge`", "`aptitude purge …`" ou "`apt-get purge …`"):

  1. Escolhe os pacotes listados na linha de comandos

  2. Resolve a dependência do pacote

  3. Corre o script prerm

  4. Remove os ficheiros instalados incluindo os ficheiros de configuração

  5. Corre o script postrm

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

### 2.1.9. Primeira resposta a problemas com a gestão de pacotes

Deve ler a boa documentação oficial. O primeiro documento a ler é específico de Debian "`/usr/share/doc/package_name/README.Debian`". Também deve ser consultada outra documentação em "`/usr/share/doc/package_name/`". Se definir a shell como Secção 1.4.2, “Personalizar bash”, escreva o seguinte.

    $ cd package_name
    $ pager README.Debian
    $ mc

Pode necessitar instalar o pacote de documentação correspondente, com o sufixo "`-doc`" no nome, para informações mais detalhadas.

Se estiver a ter problemas com um pacote específico, certifique-se que verifica primeiro o Sistema de acompanhamento de bugs Debian (BTS).

Tabela 2.5. Lista de sites web chave para resolver problemas com um pacote específico

site web | comando
--- | ---
Página inicial do Sistema de acompanhamento de bugs Debian (BTS) | `sensible-browser "https://bugs.debian.org/"`
O relatório de bug de um nome de pacote conhecido | `sensible-browser "https://bugs.debian.org/package_name"`
O relatório de bug de uma quantidade de bugs conhecida | `sensible-browser "https://bugs.debian.org/bug_number"`

Procure no Google com palavras de busca incluindo "`site:debian.org`", "`site:wiki.debian.org`", "`site:lists.debian.org`", etc.

Quando criar um relatório de bug, por favor use o comando reportbug(1).

### 2.1.10. Como escolher os pacotes Debian

Quando encontrar mais de 2 pacotes semelhantes e não sabe qual deles instalar sem o esforço de "teste e erro", deve utilizar algum senso comum. Considero os seguintes pontos como boas indicações dos pacotes preferidos:

- Essencial: sim > não

- Área: main > contrib > non-free

- Prioridade: required > important > standard > optional > extra

- Tasks: pacotes listados em tarefas como "Ambiente de Trabalho"

- Pacotes selecionados pelo pacote de dependência (ex., `gcc-15` por `gcc`)

- Popcon: mais alto na votação e número de instalações

- Changelog: atualizações regulares feitas pelo responsável do pacote

- BTS: Nenhum bug RC (nenhum crítico, nenhum grave e nenhum bug sério)

- BTS: manutenção responsável dos relatórios de bugs

- BTS: maior quantidade de bugs corrigidos recentemente

- BTS: menor quantidade de bugs "não-lista-de-desejos" remanescentes

O Debian, que é um projecto voluntário com modelo de desenvolvimento distribuído, o arquivo dele contém muitos pacotes com diferentes objetivos e qualidade. Tem de tomar as suas próprias decisões sobre o que fazer com eles.

### 2.1.11. Como lidar com requisitos contraditórios

Qualquer que seja a suite de sistema Debian que decida utilizar, pode ainda desejar correr versões de programas que não estão disponíveis nessa suite. Mesmo que encontre pacotes binários de tais programas noutras suites Debian ou noutros recursos não-Debian, os seus requisitos podem entrar em conflito com o seu sistema Debian atual.

Apesar de poder ajustar o sistema de gestão de pacotes com a técnica apt-pinning, etc., como descrito em Secção 2.7.7, “Ajustar a versão candidata com o apt-pinning” para instalar esses pacotes binários dessincronizados, essas abordagens de ajuste têm apenas casos de utilização limitados uma vez que podem quebrar esses programas e o seu sistema.

Antes de instalar brutalmente tais pacotes fora de sincronia, você deve procurar todas as soluções técnicas alternativas mais seguras disponíveis que sejam compatíveis com o seu sistema Debian atual.

- Instale esses programas usando pacotes binários correspondentes em "sandbox" (veja Secção 7.7, “Sandbox”).

  - Muitos programas GUI, como o LibreOffice e as aplicações GNOME, estão disponíveis como pacotes Flatpak, Snap, ou AppImage.

- Crie um ambiente chroot ou similar e execute esses programas nele (veja Secção 9.11, “Sistema virtualizado”).

  - Os comandos CLI podem ser executados facilmente sob o seu chroot compatível (ver Secção 9.11.4, “Sistema chroot”).

  - É possível experimentar facilmente vários ambientes de trabalho completos sem reiniciar (ver Secção 9.11.5, “Sistemas de vários ambientes de trabalho”).

- Construa você mesmo as versões desejadas dos pacotes binários que são compatíveis com o seu sistema Debian atual.

  - Trata-se de uma tarefa não trivial (ver Secção 2.7.13, “Portar um pacote ao sistema stable”).

## 2.2. Operações básicas de gestão de pacotes

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.

### 2.2.1. `apt` vs. `apt-get` / `apt-cache` vs. `aptitude`

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

- O comando `aptitude` não é recomendado para a atualização de sistema de lançamento-a-lançamento do sistema Debian `stable` após um novo lançamento.

  - O uso de "`apt full-upgrade`" ou "`apt-get dist-upgrade`" é recomendado para isso. Veja Bug #411280.

- O comando `aptitude` por vezes sugere a remoção em massa de pacotes para a atualização do sistema no sistema Debian `testing` ou `unstable`.

  - Esta situação já assustou muitos administradores de sistemas. Não entre em pânico.

  - Isto parece ser causado principalmente pela torção de versões entre os pacotes que são dependências ou recomendações de um meta-pacote tal como o `gnome-core`.

  - Isto pode ser resolvido ao selecionar "Cancelar operações pendentes" no menu de comandos do `aptitude`, a terminar o `aptitude` e a usar "`apt full-upgrade`".

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 revestimento 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
É 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.

### 2.2.2. Operações básicas de gestão de pacotes com a linha de comandos

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` e `aptitude` podem ser misturados sem grandes problemas.

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
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`".

Tabela 2.7. Opções de comando notáveis para o aptitude(8)

opção de comando | descrição
--- | ---
`-s` | simula o resultado do comando
`-d` | apenas descarrega e não instala/atualiza
`-D` | mostra breves explicações antes das instalações e remoções automáticas

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

### 2.2.3. Uso interativo do aptitude

Para gestão de pacotes interativa, arranque o `aptitude` em modo interativo a partir da linha de comandos da consola conforme o seguinte:

    $ sudo aptitude -u
    Password:

Isto atualiza a cópia local da informação do arquivo e mostra a lista de pacotes em ecrã completo com menu. O aptitude coloca a configuração dele em "`~/.aptitude/config`".

| Dica
Se desejar utilizar a configuração do root em vez da do utilizador, utilize "`sudo -H aptitude …`" em vez de "`sudo aptitude …`" na expressão acima.

| Dica
O `aptitude` define automaticamente as acções pendentes como se fosse arrancado interativamente. Se não gostar disso, pode redefinir isto a partir do menu: "Acção" → "Cancelar acções pendentes".

### 2.2.4. Teclas de atalho do aptitude

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:

Tabela 2.8. Lista de teclas de atalho do aptitude

tecla | tecla de atalho
--- | ---
`F10` ou `Ctrl-t` | menu
`?` | mostra a ajuda para teclas (listagem mais completa)
`F10` → Ajuda → Manual do Utilizador | mostra o Manual do Utilizador
`u` | atualiza a informação de arquivo do pacote
`+` | marca o pacote para atualização ou instalação
`-` | marca o pacote para remoção (manter os ficheiros de configuração)
`_` | marca o pacote para purgar (remover ficheiros de configuração)
`=` | coloca o pacote em retenção (hold)
`U` | marca todos os pacotes com atualizações (funciona como full-upgrade)
`g` | começa a descarregar e a instalar os pacotes selecionados
`q` | sai do ecrã atual e guarda as alterações
`x` | sai do ecrã atual e descarta as alterações
`Enter` | ver informação acerca de um pacote
`C` | ver o relatório de alterações de um pacote
`l` | altera o limite dos pacotes mostrados
`/` | procura pela primeira correspondência
`\` | repetir a última pesquisa

A especificação de nome de ficheiro da linha de comandos ou do aviso de menu após pressionar "`l`" e "`//`" toma a expressão regular do aptitude conforme descrito em baixo. A expressão regular do aptitude pode corresponder explicitamente a um nome de pacote a utilizar uma cadeia começada por "`~n`" e seguida do nome do pacote.

| 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.

### 2.2.5. Vistas de pacote no aptitude

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
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, “Ajustar a versão candidata com o apt-pinning”).

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

Tabela 2.9. Lista de vistas para o aptitude

vista | descrição da vista
--- | ---
`Package View` | veja Tabela 2.10, “A categorização das vista de pacotes standard” (predefinição)
`Audit Recommendations` | lista pacotes que são recomendados por alguns pacotes instalados mas ainda não estão instalados
`Flat Package List` | lista pacotes sem categorização (para utilizar com expressões regulares)
`Debtags Browser` | lista pacotes categorizados de acordo com as suas entradas debtags
`Source Package View` | lista de pacotes agrupados por pacotes fonte

| Nota
Por favor ajude-nos a melhorar a etiquetagem de pacotes com debtags!

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

Tabela 2.10. A categorização das vista de pacotes standard

categoria | descrição da vista
--- | ---
`Upgradable Packages` | lista pacotes organizados como `secção` → `área` → `pacote`
`New Packages` | , ,
`Installed Packages` | , ,
`Not Installed Packages` | , ,
`Obsolete and Locally Created Packages` | , ,
`Virtual Packages` | lista pacotes com a mesma função
`Tasks` | lista pacotes com diferentes funções geralmente necessárias para uma tarefa

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

### 2.2.6. Opções do método de pesquisa com o aptitude

O aptitude oferece várias opções para procurar pacotes a utilizar a fórmula de expressões regulares dele.

- Linha de comandos da shell:

  - "`aptitude search 'aptitude_regex'`" para listar estado de instalação, nome do pacote e descrição curta dos pacotes correspondentes

  - "`aptitude show 'package_name'`" para listar a descrição detalhada do pacote

- modo de ecrã total interativo:

  - "`l`" para limitar a vista de pacotes aos pacotes correspondentes

  - "`/`" para procurar um pacote correspondente

  - "`\`" para procurar um pacote correspondente a voltar para trás

  - "`n`" para procurar o próximo

  - "`N`" para procurar o próximo (a andar para trás)

| Dica
A cadeia para nome_de_pacote é tratada como a correspondência exata da cadeia para o nome do pacote a menos que seja iniciada explicitamente com "`~`" para ser uma fórmula de expressão regular.

### 2.2.7. A fórmula regex do aptitude

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{trixie,forky,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
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

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.

### 2.2.8. Resolução de dependências do aptitude

A seleção de um pacote no `aptitude` não puxa apenas os pacotes definidos na lista de "`Dependências:`" dele, mas também os definidos na lista "`Recomendados:`" se o menu "`F10` → Opções → Preferências → Manuseamento de dependências" assim estiver definido. Estes pacotes auto-instalados são removidos automaticamente sob o `aptitude` se não forem mais necessários.

A flag que controla o comportamento "auto install" co comando `aptitude` também pode ser manipulada a usar o comando apt-mark(8) do pacote `apt`.

### 2.2.9. Relatórios (logs) de atividade de pacotes

Pode verificar o histórico de atividade de pacotes nos ficheiros log.

Tabela 2.12. Os ficheiros log para atividades de pacotes

ficheiro | conteúdo
--- | ---
`/var/log/dpkg.log` | Log da atividade de nível do `dpkg` para as atividades de todos os pacotes
`/var/log/apt/term.log` | Log da atividade genérica do APT
`/var/log/aptitude` | Log da atividade de comandos do `aptitude`

Na realidade, não é muito fácil obter rapidamente uma compreensão significativa a partir destes logs. Veja Secção 9.3.9, “Gravar alterações em ficheiros de configuração” para um modo mais fácil.

## 2.3. Exemplos de operações do aptitude

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

### 2.3.1. Procurar pacotes interessantes

Pode procurar os pacotes que satisfaçam as suas necessidades com o `aptitude` a partir da descrição do pacote ou a partir da lista "Tarefas".

### 2.3.2. Listagem de pacotes com correspondência por expressão regular nos nomes de pacotes

O seguinte comando lista pacotes com regex a condizer com nomes de pacotes.

    $ aptitude search '~n(pam|nss).*ldap'
    p libnss-ldap - NSS module for using LDAP as a naming service
    p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces

Isto dá muito jeito para encontrar o nome exato de um pacote.

### 2.3.3. Explorar com a correspondência de expressão regular

a expressão regular "`~dipv6`" na vista "Nova Lista de Pacotes Simples" com o aviso "`l`", limita a vista aos pacotes com a descrição correspondente e permite-lhe explorar interativamente a informação deles.

### 2.3.4. Purgar pacotes removidos definitivamente

Pode purgar todos os restantes ficheiros de configuração dos pacotes removidos.

Verifique os resultados do seguinte comando.

    # aptitude search '~c'

Se julgar que os pacotes listados podem ser purgados, execute o seguinte comando:

    # aptitude purge '~c'

Pode fazer o mesmo no modo interativo para um controle mais preciso.

Fornece a expressão regular "`~c`" na vista "Nova Vista de Pacotes" com a prompt "`l`". Isto limita a vista de pacotes apenas aos pacotes correspondentes à expressão regular, isto é, "removidos mas não purgados". Todos estes pacotes correspondentes a expressões regulares podem ser mostrados ao pressionar "`[`" nos cabeçalhos de nível de topo.

Depois pressione "`_`" em cabeçalhos de nível de topo tal como "Pacotes Não Instalados". Apenas os pacotes correspondentes à expressão regular sob o cabeçalho são marcados para serem purgados com isto. Pode excluir alguns pacotes a serem purgados ao pressionar "`=`" interativamente para cada um deles.

Esta técnica é muito útil e funciona com muitas outras teclas de comando.

### 2.3.5. Acertar o estado auto/manual de instalação

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.

### 2.3.6. atualização total ao sistema

| 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.

Pode efetuar a atualização de todo o sistema para uma versão mais recente alterando os conteúdos da lista de fontes apontando para uma nova versão e executando o comando "`apt update; apt dist-upgrade`".

Para atualizar de `stable` para `testing` ou `unstable` durante o ciclo de lançamento `trixie`-as-`stable`, você substitui "`trixie`" no exemplo da lista de fontes de Secção 2.1.5, “Básico do arquivos Debian” por "`forky`" ou "`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. Remova o ficheiro "`/etc/apt/preferences`" (desativa apt-pinning).

9. Tente a atualização em passos inteligentes: `oldstable` → `stable` → `testing` → `unstable`.

10. Atualize a lista de fontes para apontar apenas para o novo arquivo e execute "`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
Não é sensato saltar grandes lançamentos de Debian quando se atualiza entre lançamentos `stable`.

| 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.

| Cuidado
As "Notas de Lançamento" podem não cobrir todos os casos possíveis. Se você alterar configurações de baixo nível, a sua próxima atualização pode correr muito mal e falhar com "... falha de segmentação após atualização ...".

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

## 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

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 package_name_pattern` | lista o estado de um pacote instalado para o relatório de bug
`dpkg -L package_name` | lista o conteúdo de um pacote instalado
`dpkg -L package_name | egrep '/usr/share/man/man.*/.+'` | lista os manuais para um pacote instalado
`dpkg -S file_name_pattern` | lista os pacotes instalados que condizem com o nome de ficheiro
`apt-file search file_name_pattern` | lista pacotes no arquivo que condizem com o nome de ficheiro
`apt-file list package_name_pattern` | lista os conteúdos dos pacotes que correspondem no arquivo
`dpkg-reconfigure package_name` | 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 binary_package_name` | mostra a versão disponível, a prioridade e informação de arquivo de um pacote binário
`apt-cache madison package_name` | mostra a versão disponível e informação de arquivo de um pacote
`apt-cache showsrc binary_package_name` | mostra informação do pacote de código-fonte de um pacote binário
`apt-get build-dep package_name` | instala os pacotes necessários para compilar pacote
`aptitude build-dep package_name` | instala os pacotes necessários para compilar pacote
`apt-get source package_name` | 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 package_name_version-debian.revision.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 kernel_image` | compila um pacote de kernel a partir de uma árvore fonte de kernel
`make-kpkg --initrd kernel_image` | compila um pacote de kernel a partir de uma árvore fonte de kernel com initramfs activa
`dpkg -i package_name_version-debian.revision_arch.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 package_name_version-debian.revision_arch.dsc` | instala pacote(s) locais no sistema
`dpkg --get-selections '*' >selection.txt` | guarda a informação de estado de seleção a nível de pacotes do `dpkg`
`dpkg --set-selections <selection.txt` | define a informação de estado de seleção a nível de pacotes do `dpkg`
`echo package_name 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
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

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:

- Toda a configuração do sistema e comandos de instalação necessitam ser executados pelo root.

- A contrário do `aptitude`, que utiliza regex (veja Secção 1.6.2, “Expressões regulares”), os outros comandos de gestão de pacotes utilizam padrões como a shell glob (veja Secção 1.5.6, “Glob da shell”).

- O apt-file(1), é disponibilizado pelo pacote `apt-file`, tem de correr previamente "`apt-file update`".

- O configure-debian(8) disponibilizado pelo pacote `configure-debian` corre o dpkg-reconfigure(8) como seu backend.

- O dpkg-reconfigure(8) corre scripts de pacote a utilizar o debconf(1) como o backend dele.

- Os comandos "`apt-get build-dep`", "`apt-get source`" e "`apt-cache showsrc`" requerem a entrada "`deb-src`" na lista de fontes.

- Os dget(1), debuild(1) e debi(1) necessitam do pacote `devscripts`.

- Veja o procedimento de (re)empacotamento a utilizar "`apt-get source`" em Secção 2.7.13, “Portar um pacote ao sistema stable”.

- O comando `make-kpkg` necessita do pacote `kernel-package` (veja Secção 9.10, “O kernel”).

- Para empacotamento em geral veja Secção 12.9, “Criar um pacote Debian”.

### 2.4.2. Verificação dos ficheiros pacotes instalados

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
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.

### 2.4.3. Salvaguardar para problemas de pacotes

Muito utilizadores preferem seguir o lançamento testing (or unstable) do sistema Debian pelas suas novas funcionalidades e pacotes. Isto torna o sistema permeável a bugs críticos dos pacotes.

A instalação do pacote `apt-listbugs` salvaguarda o seu sistema contra bugs críticos ao verificar automaticamente o Debian BTS por bugs críticos quando fizer atualizações com o sistema APT.

A instalação do pacote `apt-listchanges` disponibiliza notícias importantes de "`NEWS.Debian`" ao atualizar com o sistema APT.

### 2.4.4. Procurar nos meta-dados do pacote

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.

"`dpkg -S padrão_de_nome_de_ficheiro`" pode ser utilizado para procurar nomes de pacotes instalados pelo `dpkg`que contenham ficheiros com o nome correspondente. Mas isto não vê os ficheiros criados pelo script do responsável do pacote.

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).

## 2.5. Os interiores da gestão de pacotes Debian

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.

### 2.5.1. Meta dados do arquivo

Os ficheiros de meta-dados para cada distribuição são armazenados sob "`dist/nome-de_código`" em cada site mirror Debian, p.e., "`http://deb.debian.org/debian/`". A estrutura de arquivo dele pode ser explorada com um navegador web. Existem 6 tipos de meta-dados chave.

Tabela 2.14. O conteúdo dos meta dados do arquivo Debian

ficheiro | localização | conteúdo
--- | --- | ---
`Release` | topo da distribuição | descrição do arquivo e informação de integridade
`Release.gpg` | topo da distribuição | ficheiro de assinatura para o ficheiro "`Release`" assinado com a chave do arquivo
`Contents-architecture` | topo da distribuição | lista de todos os ficheiros para todos os pacotes no arquivo pertinente
`Release` | topo de cada combinação de distribuição/área/arquitectura | descrição do arquivo utilizada para a regra do apt_preferences(5)
`Packages` | topo de cada combinação de distribuição/área/arquitectura-binário | `debian/control` concatenado para pacotes binários
`Sources` | topo de cada combinação de distribuição/área/fonte | `debian/control` concatenado para pacotes fonte

No arquivo recente, estes meta-dados são armazenados como ficheiros diferenciais e comprimidos para reduzir o tráfego de rede.

### 2.5.2. Ficheiro "Release" de nível de topo e autenticidade:

| 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
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".

A integridade do ficheiro de nível superior "`Release`" é verificada por uma infraestrutura criptográfica denominada apt seguro, tal como descrito em 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.

- As chaves públicas do arquivo Debian são instaladas localmente pelo último pacote `debian-archive-keyring`.

- O sistema APT seguro verifica automaticamente a integridade do ficheiro de nível superior descarregado "`Release`" criptograficamente através deste ficheiro "`Release.gpg`" e das chaves públicas do arquivo Debian instaladas localmente.

- 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”).

Se a entrada da lista de fontes especificar a opção "`signed-by`", a integridade do seu ficheiro de nível superior "`Release`" descarregado é verificada usando a chave pública especificada. Isto é útil quando a lista de fontes contém arquivos não-Debian.

| Dica
A utilização do comando apt-key(8) para a gestão de chaves APT está obsoleta.

Além disso, pode verificar manualmente a integridade do ficheiro "`Release`" com o ficheiro "`Release.gpg`" e a chave pública do arquivo Debian colocada em ftp-master.debian.org utilizando o `gpg`.

### 2.5.3. Ficheiros "Release" do nível de arquivo

| Dica
Os ficheiros "`Release`" do nível de arquivo são utilizados para a regra do apt_preferences(5).

Existem ficheiros "`Release`" de nível de arquivo para todas as localizações de arquivo especificadas pela lista de fontes, como "`http://deb.debian.org/debian/dists/unstable/main/binary-amd64/Release`" ou "`http://deb.debian.org/debian/dists/sid/main/binary-amd64/Release`", como se segue.

    Archive: unstable
    Origin: Debian
    Label: Debian
    Component: main
    Architecture: amd64

| Cuidado
Para a estrofe "`Archive:`" são utilizados os nomes de suite ("`stable`", "`testing`" e "`unstable`", …) no arquivo Debian enquanto que os nomes de código ("`trusty`", "`xenial`", "`artful`", …) são utilizados no arquivo Ubuntu.

Para alguns arquivos, tais como `experimental` e `trixie-backports`, que contêm pacotes que não devem ser instalados automaticamente, existe uma linha extra, p.e., "`http://deb.debian.org/debian/dists/experimental/main/binary-amd64/Release`" como a seguir.

    Archive: experimental
    Origin: Debian
    Label: Debian
    NotAutomatic: yes
    Component: main
    Architecture: amd64

Por favor note que para arquivos normais sem "`NotAutomatic: yes`", o valor Pin-Priority predefinido é 500, enquanto que para arquivos especiais com "`NotAutomatic: yes`", o valor Pin-Priority predefinido é 1 (veja apt_preferences(5) e Secção 2.7.7, “Ajustar a versão candidata com o apt-pinning”).

### 2.5.4. Obter os meta dados do pacote

Quando são utilizadas ferramentas APT, tais como `aptitude`, `apt-get`, `synaptic`, `apt-file`, `auto-apt`, ..., nós precisamos de atualizar as cópias locais dos meta dados que contêm a informação do arquivo Debian. Estas cópias locais têm os seguintes nomes de ficheiros correspondentes à `distribution` especificada , `area`, e nomes de `architecture` na lista de fontes (veja 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`)

Os primeiros 4 tipos de ficheiros são partilhados por todos os comandos APT pertinentes e atualizados a partir da linha de comandos por "`apt-get update`" ou "`aptitude update`". Os meta dados "`Packages`" são atualizados se o "`deb`" for especificado na lista de fontes. Os meta dados "`Sources`" são atualizados se o "`deb-src`" for especificado na lista de fontes.

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.)

### 2.5.5. O estado dos pacote para o APT

Além dos meta-dados obtidos remotamente, a ferramenta APT após o `lenny` armazena a informação de estado de instalação dela gerada localmente em "`/var/lib/apt/extended_states`" que é utilizada por todas as ferramentas do APT para seguirem todos os pacotes auto-instalados.

### 2.5.6. O estado de pacotes para o aptitude

Além aos meta-dados obtidos remotamente, o `aptitude` armazena a sua informação de estado de instalação gerada localmente em "`/var/lib/aptitude/pkgstates`" que é usada apenas pelo próprio.

### 2.5.7. Copias locais dos pacotes obtidos

Todos os pacotes obtidos remotamente através do mecanismo APT são armazenados em "`/var/cache/apt/archives`" até que sejam limpos.

Esta politica de limpeza de ficheiros de cache para o `aptitude` pode ser definida em "`Opções`" → "`Preferências`" e pode ser forçada pelo seu menu "`Limpar cache de pacotes`" ou "`Limpar ficheiros obsoletos`" em "`Acções`".

### 2.5.8. Nomes de ficheiros de pacotes Debian

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

Tabela 2.15. A estrutura de nomes dos pacotes Debian

tipo de pacote | estrutura de nomes
--- | ---
O pacote binário (a.k.a `deb`) | `package-name_upstream-version-debian.revision_architecture.deb`
O pacote binário para debian-installer (a.k.a `udeb`) | `package-name_upstream-version-debian.revision_architecture.udeb`
O pacote fonte (código-fonte atual) | `package-name_upstream-version-debian.revision.orig.tar.gz`
O pacote de código-fonte `1.0` (alterações do Debian) | `package-name_upstream-version-debian.revision.diff.gz`
O pacote de código-fonte `3.0 (quilt)` (alterações do Debian) | `package-name_upstream-version-debian.revision.debian.tar.gz`
O pacote de código-fonte (descrição) | `package-name_upstream-version-debian.revision.dsc`

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

Tabela 2.16. Os caracteres utilizáveis para cada componente nos nomes de pacotes Debian

componente do nome | caracteres utilizáveis (ERE regex) | existência
--- | --- | ---
`package-name` | `[a-z0-9][-a-z0-9.+]+` | necessário
`epoch:` | `[0-9]+:` | opcional
`upstream-version` | `[-a-zA-Z0-9.+:]+` | necessário
`debian.revision` | `[a-zA-Z0-9.+~]+` | opcional

| 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
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.

### 2.5.9. O comando dpkg

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 "`package_name`", 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/package_name.conffiles` | lista de ficheiros de configuração. (modificável pelo utilizador)
`/var/lib/dpkg/info/package_name.list` | lista de ficheiros e diretórios instalados pelo pacote
`/var/lib/dpkg/info/package_name.md5sums` | lista de valores de hash MD5 para os ficheiros instalados pelo pacote
`/var/lib/dpkg/info/package_name.preinst` | script de pacote para ser executado antes da instalação do pacote
`/var/lib/dpkg/info/package_name.postinst` | script de pacote para ser executado após a instalação do pacote
`/var/lib/dpkg/info/package_name.prerm` | script de pacote para ser executado antes da remoção do pacote
`/var/lib/dpkg/info/package_name.postrm` | script de pacote para ser executado após a remoção do pacote
`/var/lib/dpkg/info/package_name.config` | script de pacote para o sistema `debconf`
`/var/lib/dpkg/alternatives/package_name` | 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
No ambiente do debian-installer, o comando `udpkg` é usado para abrir pacotes `udeb`. O comando `udpkg` é uma versão reduzida do comando `dpkg`.

### 2.5.10. O comando update-alternatives

O sistema Debian tem um mecanismo para instalar programas de certa maneira sobrepostos de um modo pacífico a usar update-alternatives(1). Por exemplo, pode fazer o comando `vi` selecionar o `vim` para executar enquanto instala ambos os pacotes `vim` e `nvi`.

    $ ls -l $(type -p vi)
    lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
    $ sudo update-alternatives --display vi
    ...
    $ sudo update-alternatives --config vi
      Selection    Command
     ----------------------------------------------
          1        /usr/bin/vim
    *+    2        /usr/bin/nvi

    Enter to keep the default[*], or type selection number: 1

O sistema de alternativas do Debian mantêm a sua seleção como ligação simbólica em "`/etc/alternatives/`". O processo de seleção utiliza um ficheiro correspondente em "`/var/lib/dpkg/alternatives/`".

### 2.5.11. O comando dpkg-statoverride

Stat overrides disponibilizados pelo comando dpkg-statoverride(8) são um modo de dizer ao dpkg(1) para usar um dono ou modo diferente para um ficheiro quando um pacote for instalado. Se for especificado "`--update`" e o ficheiro existir é imediatamente definido para o novo dono e modo.

| Cuidado
A alteração directa do dono ou modo para um ficheiro cujo dono é o pacote a usar os comandos `chmod` ou `chown` pelo administrador do sistema é reiniciada pela próxima atualização do pacote.

| Nota
Uso a palavra ficheiro aqui, mas na verdade pode ser qualquer objecto de sistema de ficheiros com que o `dpkg` lide, incluindo diretórios, dispositivos, etc.

### 2.5.12. O comando dpkg-divert

As diversões de ficheiros disponibilizadas pelo comando dpkg-divert(8) são um modo de forçar o dpkg(1) a não instalar um ficheiro na localização predefinida dele, mas para uma localização divergida. Os uso do `dpkg-divert` destina-se aos scripts do responsável do pacote. A utilização casual dele pelo administrador do sistema está descontinuada.

## 2.6. Recuperação de um sistema danificado

Quando corre o sistema `testing` ou `unstable`, espera-se que o administrador saiba recuperar o sistema de situações de gestão de pacotes com conflitos.

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

### 2.6.1. Incompatibilidade com configurações antigas de utilizador

Se um programa GUI de ambiente de trabalho ficou instável após uma atualização significante da versão original, deve suspeitar de interferências com os ficheiros locais de configuração antigos criados por ele. Se estiver estável sob uma nova conta de utilizador criada, esta hipótese está confirmada. (Isto é um bug de empacotamento e geralmente evitado pelo empacotador.)

Para recuperar a estabilidade, deve mover os ficheiros de configuração locais correspondentes e reiniciar o programa GUI. Poderá ter que ler o conteúdo dos ficheiros de configuração antigos para mais tarde recuperar informação de configuração. (Não os apague muito depressa.)

### 2.6.2. Erros de armazenamento em cache dos dados do pacote

Erros de cache dos dados do pacote causam erros intrigantes, tais como "Erro GPG: ... invalid: BADSIG ..." com APT.

Deve remover todos os dados guardados em cache com "`sudo rm -rf /var/lib/apt/*` " e tentar novamente. (Se for utilizado `apt-cacher-ng`, deve também correr "`sudo rm -rf /var/cache/apt-cacher-ng/*` ".)

### 2.6.3. Recuperação com o comando dpkg

Como o `dpkg` é uma ferramenta de pacotes de muito baixo nível, consegue funcionar sem uma ligação à rede.

Vamos assumir que o pacote `foo` está quebrado e precisa ser corrigido.

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

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 "`--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
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.

| 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.

### 2.6.4. Falha na instalação devido a dependências em falta

Se forçar a instalação de um pacote através de "`sudo dpkg -i ...`" num sistema sem todos os pacotes de dependência instalados, a instalação do pacote irá falhar como parcialmente instalado.

Deve instalar todos os pacotes de dependência usando repetidamente "`sudo dpkg -i ...`" ou usando:

    # apt --fix-broken install

Em seguida, configure todos os pacotes parcialmente instalados com o seguinte comando.

    # dpkg --configure -a

### 2.6.5. Pacotes diferentes com ficheiros sobrepostos

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, “Pacotes de fontes mistas de arquivos sem 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
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

### 2.6.6. Corrigir script problemático de pacote

Quando um comando no script do pacote retorna erro por alguma razão e o script termina com erro, o sistema de gestão de pacotes aborta a acção dele e termina com pacotes parcialmente instalados. Quando um pacote contém bugs nos seus scripts de remoção, o pacote pode tornar-se impossível de remover e isso é bastante desagradável.

Para o problema script de pacote "`package_name`", deve observar os seguintes scripts do pacote.

- "`/var/lib/dpkg/info/nome_do_pacote.preinst`"

- "`/var/lib/dpkg/info/nome_do_pacote.postinst`"

- "`/var/lib/dpkg/info/nome_do_pacote.prerm`"

- "`/var/lib/dpkg/info/nome_do_pacote.postrm`"

Editar o script do pacote ofensivo a partir de root a usar as seguintes técnicas:

- desativar a linha ofensiva ao preceder um "`#`"

- forçar um retorno com sucesso ao acrescentar a linha ofensiva com "`|| true`"

Em seguida, configure todos os pacotes parcialmente instalados com o seguinte comando.

    # dpkg --configure -a

### 2.6.7. Recuperar dados de seleção de pacotes

Se por qualquer razão o "`/var/lib/dpkg/status`" ficar corrompido o sistema Debian perde os dados de seleção de pacotes e sofre severamente. Procure o ficheiro antigo "`/var/lib/dpkg/status`" em "`/var/lib/dpkg/status-old`" ou "`/var/backups/dpkg.status.*`".

Manter "`/var/backups/`" numa partição separada pode ser uma boa ideia porque este diretório contém muitos dados importantes do sistema .

Em caso de sérios danos recomendo fazer uma instalação limpa após fazer a salvaguarda do sistema. Mesmo que tudo em "`/var/`" esteja perdido, ainda pode recuperar alguma informação dos diretórios em "`/usr/share/doc/`" para guiar a sua nova instalação.

Reinstalar o sistema mínimo (ambiente de trabalho).

    # mkdir -p /path/to/old/system

Monte o sistema antigo em "`/caminho/para/sistema/antigo/`".

    # cd /path/to/old/system/usr/share/doc
    # ls -1 >~/ls1.txt
    # cd /usr/share/doc
    # ls -1 >>~/ls1.txt
    # cd
    # sort ls1.txt | uniq | less

Então ser-lhe-ão apresentados nomes de pacotes para instalar. (Podem existir alguns nomes que não de pacotes como "`texmf`".)

## 2.7. Dicas para a gestão de pacotes

Para simplificar, os exemplos de listas de fontes nesta secção são apresentados como "`/etc/apt/sources.list`" em estilo de uma linha após o lançamento do `trixie`.

### 2.7.1. Quem fez o upload do pacote?

Apesar do nome do responsável listado em "`/var/lib/dpkg/available`" e "`/usr/share/doc/package_name/changelog`" fornecer alguma informação sobre "quem está por detrás a atividade de empacotamento", quem faz o upload real do pacote é um tanto obscuro. O who-uploads(1) no pacote `devscripts` identifica quem foi o uploader real dos pacotes fonte Debian.

### 2.7.2. Limitar a largura de banda de descarga para o APT

Se desejar limitar a largura de banda para o APT a, por exemplo, 800Kib/sec (=100kiB/sec), deve configurar o APT e o parâmetro de configuração dele conforme o seguinte.

    APT::Acquire::http::Dl-Limit "800";

### 2.7.3. Descarga e atualização automática de pacotes

O pacote `apt` vem com um script de cron próprio "`/etc/cron.daily/apt`" para suportar a descarga automática de pacotes. Este script pode ser melhorado para executar a atualização automática de pacotes ao instalar o pacote `unattended-upgrades`. Esta pode ser personalizada por parâmetros em "`/etc/apt/apt.conf.d/02backup`" e "`/etc/apt/apt.conf.d/50unattended-upgrades`" conforme descrito em "`/usr/share/doc/unattended-upgrades/README`".

O pacote `unattended-upgrades` destina-se principalmente às atualizações de segurança do sistema `stable`. Se o risco de danificar um sistema `stable` existente pelas atualizações automáticas for menor que ser danificado por um intruso que usa buracos de segurança que foram fechados por atualizações de segurança, deve considerar usar estas atualizações automáticas com parâmetros de configuração como os a seguir.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "1";

Se está a correr um sistema `testing` ou `unstable`, não quer utilizar a atualização automática pois certamente irá quebrar o sistema um dia. Mesmo para esse caso `testing` ou `unstable`, pode querer descarregar pacotes antecipadamente para poupar tempo para a atualização interativa com parâmetros de configuração como os seguintes.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "0";

### 2.7.4. Atualizações e Backports

Existem stable-updates (`"trixie`-updates" durante o ciclo de lançamento `trixie`-as-`stable` ) e arquivos backports.debian.org que disponibilizam pacotes de atualização para `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/ trixie main non-free-firmware contrib non-free
    deb http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-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 `trixie-updates`.

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

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

    $ sudo apt-get install -t trixie-backports package-name

| Atenção
Não instale demasiados pacotes dos arquivos backports.debian.org. Isso pode causar complicações na dependência de pacotes. Veja Secção 2.1.11, “Como lidar com requisitos contraditórios” as soluções alternativas.

### 2.7.5. Arquivos de pacotes externos

| Atenção
Deve ter em atenção que o pacote externo ganha o privilégio de root no seu sistema. Só deve utilizar o arquivo de pacotes externos de confiança. Ver Secção 2.1.11, “Como lidar com requisitos contraditórios” para soluções alternativas.

Pode utilizar o APT seguro com um arquivo de pacotes externo compatível com Debian adicionando-o à lista de fontes e ao seu ficheiro de chave de arquivo no diretório "`/etc/apt/trusted.gpg.d/`". Veja sources.list(5), apt-secure(8) e apt-key(8).

### 2.7.6. Pacotes de fontes mistas de arquivos sem apt-pinning

| Cuidado
Instalar pacotes de fontes misturadas de arquivos não é suportado pela distribuição oficial Debian excepto para combinações de arquivos oficialmente suportadas tais como a `stable` com security updates e 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`".

Não crie o ficheiro "`/etc/apt/preferences`" nem precisa de se preocupar com o apt-pinning com esta abordagem manual. Mas isto é muito incómodo.

| 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.

- Pacotes não-binários de ("`Arquitecture: all`") são mais seguro para instalar.

  - pacotes de documentação: sem requisitos especiais

  - pacotes de programa interpretador: tem de estar disponível interpretador compatível

- Pacotes binários (não "`Architecture: all`") geralmente enfrentam muitos obstáculos e são inseguros para instalar.

  - compatibilidade de versão de biblioteca (incluindo a "`libc`")

  - compatibilidade de versão de programa utilitário relacionada

  - compatibilidade da ABI do Kernel

  - Compatibilidade ABI C++

  - …

| 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
Exceto para evitar pacotes partidos por um curto período de tempo, instalar pacotes binários de repositórios não-Debian é geralmente má ideia. Você deve procurar todas as soluções técnicas alternativas mais seguras disponíveis que sejam compatíveis com o seu sistema Debian atual (veja Secção 2.1.11, “Como lidar com requisitos contraditórios”).

### 2.7.7. Ajustar a versão candidata com o apt-pinning

| Atenção
A utilização da técnica apt-pinning por um utilizador novato irá certamente causar grandes problemas. Deve evitar utilizar esta técnica exceto quando for absolutamente necessário.

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
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, “Pacotes de fontes mistas de arquivos sem 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.

Quando utilizar apt-pinning, você próprio tem que assegurar a compatibilidade dos pacotes pois Debian não o garante. O apt-pinning é uma operação completamente opcional e a sua utilização não é algo que se encoraje.

Os níveis de arquivo dos ficheiros de lançamento (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”) são utilizados para a regra do apt_preferences(5). Assim o apt-pinning funciona apenas com nome de "suite" para arquivos Debian normais e arquivos Debian de segurança. (Isto é diferente dos arquivos do Ubuntu.) Por exemplo, pode fazer "`Pin: release a=unstable`" mas não pode fazer "`Pin: release a=sid`" no ficheiro "`/etc/apt/preferences`".

Quando utilizar um arquivo não-Debian como parte de apt-pinning, deve verificar ao que ele se destina e também verificar a credibilidade dele. Por exemplo, Ubuntu e Debian não se destinam a ser misturados.

| Nota
Mesmo que não crie o ficheiro "`/etc/apt/preferences`", pode fazer operações no sistema bastante complexas (veja Secção 2.6.3, “Recuperação com o comando dpkg” e Secção 2.7.6, “Pacotes de fontes mistas de arquivos sem apt-pinning”) sem o 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.

Tabela 2.18. Lista de valores notáveis de Pin-Priority para a técnica de apt-pinning.

Prioridade-pin | efeitos do apt-pinning no pacote
--- | ---
1001 | instala o pacote mesmo que isto constitua uma regressão na versão (downgrade) do pacote
990 | utilizado como predefinição para o arquivo de lançamento de destino
500 | utilizado por predefinição para o arquivo normal
100 | utilizado como predefinição para os arquivos NotAutomatic e ButAutomaticUpgrades
100 | utilizado para o pacote instalado
1 | utilizado como predefinição para o arquivo NotAutomatic
-1 | nunca instala o pacote mesmo que este seja recomendado

O arquivo da suite alvo pode ser definido pela linha de comando, por exemplo, "`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/ trixie-backports/main Packages`".

### 2.7.8. Bloquear pacotes instalados por "Recomendados"

| Atenção
A utilização da técnica apt-pinning por um utilizador novato irá certamente causar grandes problemas. Deve evitar utilizar esta técnica exceto quando for absolutamente necessário.

Se desejar não puxar determinados pacotes automaticamente através de "Recommends", tem de criar o ficheiro "`/etc/apt/preferences`" e listar explicitamente esses pacotes no topo conforme a seguir:

    Package: package-1
    Pin: version *
    Pin-Priority: -1

    Package: package-2
    Pin: version *
    Pin-Priority: -1

### 2.7.9. Acompanhar `testing` com alguns pacotes de `unstable`

| Atenção
A utilização da técnica apt-pinning por um utilizador novato irá certamente causar grandes problemas. Deve evitar utilizar esta técnica exceto quando for absolutamente necessário.

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 segue a suite `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 repositório `testing` ao usar a suite `testing` atual e os pacotes que foram instalados a partir do repositório `unstable` a usar a suite `unstable` atual.

| 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
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
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
Esta técnica de apt-pinning é válida mesmo se estiver a seguir o arquivo `stable`. Pela minha experiência e até agora, os pacotes de documentação sempre foram seguros de instalar a partir do arquivo `unstable`.

### 2.7.10. Acompanhar `unstable` com alguns pacotes de `experimental`

| Atenção
A utilização da técnica apt-pinning por um utilizador novato irá certamente causar grandes problemas. Deve evitar utilizar esta técnica exceto quando for absolutamente necessário.

Aqui está outro exemplo de técnica de apt-pinning para incluir pacotes de versão de origem mais recentes encontrados em `experimental` enquanto segue `unstable`. Lista todos os arquivos necessários no ficheiro "`/etc/apt/sources.list`" conforme o seguinte:

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

O valor Pin-Priority predefinido para o arquivo `experimental` é sempre 1 (<<100) porque é um arquivo NotAutomatic (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”). Não é necessário definir o valor Pin-Priority explicitamente no ficheiro "`/etc/apt/preferences`" apenas para usar o arquivo `experimental` a menos que deseje seguir pacotes particulares nele automaticamente para a próxima atualização.

### 2.7.11. Downgrade de emergência

| Atenção
A utilização da técnica apt-pinning por um utilizador novato irá certamente causar grandes problemas. Deve evitar utilizar esta técnica exceto quando for absolutamente necessário.

| 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, “Ajustar a versão candidata com o 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.3, “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/ forky 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
É 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.

### 2.7.12. O pacote equivs

Se vai compilar um programa a partir do código-fonte para substituir um pacote Debian, o melhor é torná-lo num pacote local realmente 'debianizado' (`*.deb`) e utilizar um arquivo privado.

Se escolher compilar um programa de fonte e instalá-lo sob "`/usr/local`", pode necessitar de utilizar o `equivs` como último recurso para satisfazer as dependências em falta para o pacote.

    Package: equivs
    Priority: optional
    Section: admin
    Description: Circumventing Debian package dependencies
     This package provides a tool to create trivial Debian packages.
     Typically these packages contain only dependency information, but they
     can also include normal installed files like other packages do.
     .
     One use for this is to create a metapackage: a package whose sole
     purpose is to declare dependencies and conflicts on other packages so
     that these will be automatically installed, upgraded, or removed.
     .
     Another use is to circumvent dependency checking: by letting dpkg
     think a particular package name and version is installed when it
     isn't, you can work around bugs in other packages' dependencies.
     (Please do still file such bugs, though.)

### 2.7.13. Portar um pacote ao sistema stable

| Cuidado
Não existe qualquer garantia de que o procedimento aqui descrito funcione sem esforços manuais adicionais devido a diferenças de sistema.

Para atualizações parciais do sistema `stable`, é desejável reconstruir um pacote dentro do ambiente dele a utilizar um pacote de código-fonte. Isto evita atualizações maciças de pacotes devido às suas dependências.

Adicione as seguintes entradas ao "`/etc/apt/sources.list`" num sistema `stable`.

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

Instale os pacotes necessários para a compilação e descarregue o pacote de código-fonte conforme o seguinte:

    # apt-get update
    # apt-get dist-upgrade
    # apt-get install fakeroot devscripts build-essential
    # apt-get build-dep foo
    $ apt-get source foo
    $ cd foo*

atualize alguns pacotes de correntes de ferramentas como o `dpkg` e o `debhelper` a partir de pacotes de backport se forem necessários para o "backporting".

Execute o seguinte.

    $ dch -i

Aumentar a versão do pacote, p.e. um com "`+bp1`" acrescentado em "`debian/changelog`"

Compile os pacotes e instale-os para o sistema com o seguinte:

    $ debuild
    $ cd ..
    # debi foo*.changes

### 2.7.14. Servidor proxy para o APT

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.

Tabela 2.19. Lista de ferramentas proxy especiais para arquivos Debian

pacote | popcon | tamanho | descrição
--- | --- | --- | ---
`apt-cacher` | V:0.31, I:0.37 | 267 | Proxy de cache para pacotes Debian e ficheiros de código-fonte (programa Perl)
`apt-cacher-ng` | V:4.0, I:4.1 | 1968 | Proxy de cache para distribuição de pacotes de software (programa C++ compilado)

| 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.

### 2.7.15. Mais leituras sobre a gestão de pacotes

Pode aprender mais sobre a gestão de pacotes a partir das seguintes documentações.

- Documentações principais sobre a gestão de pacotes:

  - aptitude(8), dpkg(1), tasksel(8), apt(8), apt-get(8), apt-config(8), apt-key(8), sources.list(5), apt.conf(5), and apt_preferences(5);

  - "`/usr/share/doc/apt-doc/guide.html/index.html`" e "`/usr/share/doc/apt-doc/offline.html/index.html`" do pacote `apt-doc`; e

  - "`/usr/share/doc/aptitude/html/en/index.html`" do pacote `aptitude-doc-en`.

- Documentações oficiais e detalhadas no arquivo Debian:

  - "Manual de Política Debian Capítulo 2 - O Arquivo Debian",

  - "Referência dos Programadores de Debian, Capítulo 4 - Recursos para Programadores de Debian 4.6 O Arquivo Debian" e

  - "A FAQ de Debian GNU/Linux, Capítulo 6 - Os arquivos FTP de Debian".

- Tutorial para construir um pacote Debian para utilizadores de Debian:

  - "Guia para Mantedores de Debian".

Capítulo 1. Manuais de GNU/Linux |  | Capítulo 3. A inicialização do sistema