# Ferramenta de pacote avançada

A ferramenta de pacote avançada (APT), é uma interface de usuário de software livre que funciona com bibliotecas centrais para lidar com a instalação e remoção de software no Debian e em distribuições Linux baseadas nele. A APT simplifica o processo de gerenciamento de software em sistemas de computador do tipo Unix, automatizando a recuperação, configuração e instalação de pacotes de software, seja de arquivos pré compilados ou compilando o código fonte.

## Uso

A APT é uma coleção de ferramentas distribuídas em um pacote chamado apt. Uma parte significativa da APT é definida em uma biblioteca de funções C++; a APT também inclui programas de linha de comando para lidar com pacotes, que usam a biblioteca. Três desses programas são o apt, o apt-get e o apt-cache. Eles são comumente usados em exemplos porque são simples e onipresentes. O pacote apt é de prioridade "importante" em todas as versões atuais do Debian e, portanto, está incluído em uma instalação Debian padrão. A APT pode ser considerada um front-end para dpkg, mais amigável do que o antigo front-end dselect. Enquanto o dpkg executa ações em pacotes individuais, a APT gerencia as relações (especialmente dependências) entre eles, bem como o sourcing e o gerenciamento de decisões de versão de nível superior (rastreamento de lançamento e fixação de versão).
A APT é frequentemente saudada como um dos melhores recursos do Debian, que os desenvolvedores do Debian atribuem aos controles de qualidade estritos na política do mesmo.
Uma característica principal da APT é a maneira como ela chama o dpkg - ela faz a classificação topológica da lista de pacotes a serem instalados ou removidos e chama o dpkg na melhor sequência possível. Em alguns casos, ele utiliza as opções --force do dpkg. No entanto, ela só faz isso quando não consegue calcular como evitar o motivo pelo qual o dpkg requer que a ação seja forçada.

### Instalação de software

O usuário indica um ou mais pacotes a serem instalados. Cada nome de pacote é expresso apenas como a parte do nome do pacote, não um nome de arquivo totalmente qualificado (por exemplo, em um sistema Debian, libc6 seria o argumento fornecido, não libc6_1.9.6-2.deb). Notavelmente, a APT obtém e instala automaticamente os pacotes dos quais o pacote indicado depende (se necessário). Esta era uma característica distintiva original dos sistemas de gerenciamento de pacotes baseados na APT, pois evitava falhas de instalação devido à falta de dependências, um tipo de inferno de dependências.
Outra distinção é a recuperação de pacotes de repositórios remotos. A APT usa um arquivo de configuração de localização (/etc/apt/sources.list) para localizar os pacotes desejados (que podem estar disponíveis na rede ou em um meio de armazenamento removível, por exemplo), os recuperar e também obter informações sobre os disponíveis (mas não instalados).
A APT fornece outras opções de comando para substituir as decisões feitas pelo sistema de resolução de conflitos do apt-get. Uma opção é forçar uma versão específica de um pacote. Isso pode fazer o downgrade de um pacote e tornar o software dependente inoperante, portanto, o usuário deve ter cuidado.
Finalmente, o mecanismo apt_preferences permite ao usuário criar uma política de instalação alternativa para pacotes individuais.
O usuário pode especificar pacotes usando uma expressão regular POSIX.
A APT pesquisa sua lista de pacotes em cache e lista as dependências que devem ser instaladas ou atualizadas.
A APT recupera, configura e instala as dependências automaticamente.
Os gatilhos são o tratamento de ações adiadas.

### update, upgrade e dist-upgrade

Os modos de uso do apt e apt-get que facilitam a atualização dos pacotes instalados incluem:
* update é usado para ressincronizar os arquivos do índice de pacotes de suas fontes. As listas de pacotes disponíveis são obtidas nos locais especificados em /etc/apt/sources.list. Por exemplo, ao usar um arquivo Debian, este comando recupera e verifica os arquivos de Packages.gz, de forma que informações sobre pacotes novos e atualizados estejam disponíveis.
* upgrade é usado para instalar as versões mais novas de todos os pacotes atualmente instalados no sistema a partir das fontes enumeradas em /etc/apt/sources.list. Os pacotes atualmente instalados com as novas versões disponíveis são recuperados e atualizados; sob nenhuma circunstância os pacotes atualmente instalados são removidos ou os pacotes ainda não instalados são recuperados e instalados. As novas versões dos pacotes atualmente instalados que não podem ser atualizados sem alterar o estado (status) de instalação de outro pacote serão mantidas em sua versão atual.
* full-upgrade (apt) e dist-upgrade (apt-get), além de executar a função de upgrade, também lida de forma inteligente com a mudança de dependências com novas versões de pacotes; apt e apt-get têm um sistema de resolução de conflitos "inteligente" e tentarão atualizar os pacotes mais importantes às custas dos menos importantes, se necessário. O arquivo /etc/apt/sources.list contém uma lista de locais a partir dos quais os arquivos de pacote desejados podem ser recuperados. [4] O aptitude tem um recurso dist-upgrade mais inteligente chamado full-upgrade.

## Configuração e arquivos

/etc/apt contém as pastas e arquivos de configuração da APT.
O apt-config é o programa de consulta de configuração da APT e apt-config dump mostra a configuração.

### Arquivos

* /etc/apt/sources.list: Locais de onde buscar pacotes.
* /etc/apt/sources.list.d/: Fragmentos adicionais da lista de fontes.
* /etc/apt/apt.conf: Arquivo de configuração da APT.
* /etc/apt/apt.conf.d/: Fragmentos do arquivo de configuração da APT.
* /etc/apt/preferences.d/: Diretório com arquivos de preferências de versão. Aqui é onde você especificaria a "fixação" ("pinagem"), ou seja, uma preferência para obter certos pacotes de uma fonte separada ou de uma versão diferente de uma distribuição.
* /var/cache/apt/archives/: Área de armazenamento para arquivos de pacote recuperados.
* /var/cache/apt/archives/partial/: Área de armazenamento para arquivos de pacotes em trânsito.
* /var/lib/apt/lists/: Área de armazenamento para informações de estado para cada recurso de pacote especificado em sources.list
* /var/lib/apt/lists/partial/: Área de armazenamento para informações de estado em trânsito.

## Fontes

A APT se baseia no conceito de repositórios para encontrar software e resolver dependências. Para a APT, um repositório é um diretório que contém pacotes junto com um arquivo de índice. Isso pode ser especificado como um local de rede ou CD-ROM. O projeto Debian mantém um repositório central de mais de 25.000 pacotes de software prontos para download e instalação.$^[$
Qualquer número de repositórios adicionais pode ser adicionado ao arquivo de configuração sources.list da APT (/etc/apt/sources.list) e então ser consultado pela APT. As interfaces gráficas geralmente permitem modificar o sources.list de forma mais simples (apt-setup). Uma vez que um repositório de pacotes tenha sido especificado (como durante a instalação do sistema), os pacotes nesse repositório podem ser instalados sem especificar uma fonte e serão mantidos atualizados automaticamente.
Além dos repositórios de rede, discos compactos e outras mídias de armazenamento (unidade de chave USB, discos rígidos ...) também podem ser usados, usando apt-cdrom ou adicionando file:/ URI ao arquivo da lista de fontes. Usando a opção -d, o apt-cdrom pode especificar uma pasta diferente de um CD-ROM (ou seja, um disco rígido ou uma unidade de chave USB). Os CDs do Debian disponíveis para download contêm repositórios do Debian. Isso permite que máquinas não conectadas em rede sejam atualizadas. Também se pode usar o apt-zip.
Podem surgir problemas quando várias fontes oferecem o(s) mesmo(s) pacote(s). Os sistemas que possuem fontes possivelmente conflitantes podem usar a pinagem da APT para controlar quais fontes devem ser preferidas.

## Fixação (pinagem) da APT

O recurso de fixação (pinagem) da APT permite aos usuários forçar a APT a escolher versões particulares de pacotes que podem estar disponíveis em diferentes versões de diferentes repositórios. Isso permite que os administradores garantam que os pacotes não sejam atualizados para versões que possam entrar em conflito com outros pacotes no sistema, ou que não tenham sido suficientemente testados para mudanças indesejáveis.
Para fazer isso, os pinos no arquivo de preferências da APT (/etc/apt/preferences) devem ser modificados, embora front-ends gráficos muitas vezes tornem a fixação (pinagem) mais simples.

## Front-ends

Existem vários outros front-ends para a APT, que fornecem funções de instalação mais avançadas e interfaces mais intuitivas. Esses incluem:
* Synaptic, uma interface gráfica de usuário GTK
* Centro de software do Ubuntu, uma interface gráfica de usuário GTK desenvolvida pelo projeto Ubuntu
* aptitude, um cliente de console com Interface de linha de comandos (CLI) e interface do usuário baseada em texto (TUI) baseadas em ncurses
* KPackage, parte do KDE
* Gerenciador de pacotes adepto, uma interface gráfica de usuário para KDE (deb, rpm, bsd)
* PackageKit, um frontend do freedesktop.org.
* GDebi, uma ferramenta baseada em GTK patrocinada pelo Ubuntu. (Também existe uma versão Qt, disponível nos repositórios do Ubuntu como gdebi-kde.)
* apt-cdrom, uma forma de adicionar um novo CDROM à lista de repositórios disponíveis da APT (lista sources.lists). É necessário usar o apt-cdrom para adicionar CDs ao sistema da APT, isso não pode ser feito manualmente.
* apt-zip, uma maneira de usar o apt com mídia removível, especificamente unidades flash USB.
* aptURL, um pacote de software do Ubuntu que permite que aplicativos de usuário final sejam instalados com um único clique por meio de um navegador.
* Cydia, um gerenciador de pacotes para iOS desbloqueado baseado na APT (portado para o iOS como parte do projeto Telesphoreo).
* Sileo, como Cydia, um gerenciador de pacotes para iOS desbloqueado baseado em versões mais recentes da APT (portado para o iOS pela equipe Electra)
* gnome-apt, um front-end gráfico baseado em widget GTK/GNOME. Desenvolvido por Havoc Pennington
* Muon discover (antigo centro de software do Muon), uma interface gráfica de usuário baseada em Qt
* Gerenciador de aplicativos Hildon (aplicativo Maemo), um front-end do Maemo
* apticron, um serviço projetado para ser executado via cron e enviar, por e-mail, notificações de atualizações pendentes para um administrador de sistema (sysadmin)
* APT Daemon, um front-end que funciona como um serviço para permitir que os usuários instalem software por meio do PolicyKit e é, por sua vez, a estrutura usada pelo centro de software do Ubuntu (junto com o gerenciador de software do Linux Mint).
* Instalador de pacotes, parte do MX Linux.
* Apt-offline: Uma maneira conveniente de fazer qualquer mudança não contentorizada disponível para qualquer instalação Linux tipo Debian sem usar uma conexão direta com a Internet. No entanto, uma conexão direta temporária pode ser necessária, como para instalar o Apt-offline em alguns dos tipos relevantes de Linux e adicionar PPAs à lista de fontes.
Os front-ends da APT podem:
* procuraar por novos pacotes.
* atualizar pacotes.
* instalar ou remover pacotes.
* atualizar todo o sistema para uma nova versão.
Os front-ends da APT podem listar as dependências dos pacotes sendo instalados ou atualizados, perguntar ao administrador se os pacotes recomendados ou sugeridos por pacotes recém instalados também devem ser instalados, instalar automaticamente as dependências e realizar outras operações no sistema, como remover arquivos e pacotes obsoletos.

## História

O esforço original que levou ao programa apt-get foi o projeto de substituição do dselect conhecido pelo codinome Divindade (Deity). Este projeto foi comissionado em 1997 por Brian White, o gerente de lançamento do Debian na época. A primeira versão funcional do apt-get foi chamada de dpkg-get e se destinava apenas a ser um programa de teste para as funções da biblioteca central que sustentariam a nova interface de usuário (UI).
Muito do desenvolvimento original da APT foi feito no IRC, então os registros foram perdidos. Os arquivos da lista de discussão da "equipe de criação do Divindade" incluem apenas os principais destaques.
O nome Divindade foi abandonado como nome oficial para o projeto devido a preocupações com a natureza religiosa do nome. O nome APT foi finalmente decidido após considerável discussão interna e pública. Em última análise, o nome foi proposto no bate papo (chat) de retransmissão da Internet (IRC), aceito e, em seguida, finalizado nas listas de discussão.
A APT foi introduzida em 1998 e as compilações de teste originais circularam no IRC. A primeira versão do Debian que a incluiu foi a 2.1, lançada em 9 de março de 1999.
No final, o objetivo original do projeto Divindade de substituir a interface de usuário dselect foi um fracasso. O trabalho na parte da interface de usuário do projeto foi abandonado (os diretórios da interface de usuário foram removidos do sistema de versões simultâneas (CVS)) após o primeiro lançamento público do apt-get. A resposta à APT como um método dselect e um utilitário de linha de comando foi tão grande e positiva que todos os esforços de desenvolvimento se concentraram em manter e melhorar a ferramenta. Só muito mais tarde é que várias pessoas independentes criaram interfaces de usuário com base no libapt-pkg.
Eventualmente, uma nova equipe pegou o projeto, começou a construir novos recursos e lançou a versão 0.6 da APT que introduziu o recurso ferramenta de pacote avançada segura (Secure APT), usando assinatura criptográfica forte para autenticar os repositórios de pacotes.

## Variantes

A APT foi originalmente projetada como um front-end para o dpkg que funciona com os pacotes .deb do Debian. Uma versão modificada para funcionar também com o sistema do gerenciador de pacotes RPM foi lançada como APT-RPM. O projeto Fink portou a APT para o Mac OS X para algumas de suas próprias tarefas de gerenciamento de pacotes, e a APT também está disponível no OpenSolaris.

## apt-file

O apt-file é um comando (empacotado separadamente da APT) usado para encontrar qual pacote inclui um arquivo específico ou listar todos os arquivos incluídos em um pacote em repositórios remotos.