# Sistema gestor de pacotes

Um gerenciador de pacotes ou gestor de pacotes ou sistema de gerenciamento de pacotes ou sistema de gestão de pacotes é uma coleção de ferramentas de software que automatiza o processo de instalação, atualização, configuração e remoção de programas de computador para um sistema operacional de uma maneira consistente. É comumente usado em sistemas operacionais tipo Unix, que consistem de centenas de pacotes distintos, para facilitar a identificação, instalação e atualização do sistema.
Um gerenciador de pacotes manipula pacotes, distribuições de software e dados em arquivos. Os pacotes contém metadados, como o nome do software, descrição e seu propósito, número de versão, fornecedor, checksum e uma lista de dependências necessárias para o software funcionar corretamente. Na instalação, os metadados são armazenados em um banco de dados de pacotes local. Gerenciadores de pacotes normalmente mantém um banco de dados de dependências de software e informações de versão para evitar incompatibilidades de software e pré-requisitos ausentes. Eles trabalham próximos aos repositórios de software, gerenciadores de repositório binário e lojas de aplicativos.
São projetados para eliminar a necessidade de instalações e atualizações manuais. Isto pode ser particularmente útil para grandes empresas cujos sistemas operacionais são baseados em Linux e outros sistemas do tipo Unix, normalmente consistindo de centenas, ou mesmo milhares, de pacotes de software diferentes.

## Funções

Sistemas de gerenciamento de pacotes ficam incumbidos da tarefa de organizar todos os pacotes instalados no sistema. Funções típicas de um gerenciador de pacotes são:
* Verificar checksums para ter certeza de que o pacote foi baixado sem erros;
* Verificar a assinatura digital para autenticar a origem dos pacotes;
* Atualizar um sistema e corrigir bugs (principalmente erros de segurança);
* Agrupar pacotes de acordo com suas funcionalidades para reduzir confusões;
* Gerir dependências para ter certeza de que um pacote só será instalado se todas as suas dependências também estiverem, o que resolveu o problema conhecido como Inferno de dependências.

## Classificação geral

Há uma classificação básica que distingue os gerenciadores de pacote.

### Gerenciadores de pacotes de baixo nível

São sistemas de gestão de pacotes que permitem realizar a instalação dos softwares de forma manual. Não possuem tratamento automático de dependências e não fornecem recursos de automação de manutenção de compatibilidade de versões, dificultando esta tarefa. Da mesma forma, este tipo de sistema geralmente mantem os pacotes após sua instalação, o que gera acúmulo de arquivos no sistema de arquivos, ocupando mais espaço em disco, caso o administrador do sistema não realize a remoção de pacotes já instalados. Os exemplos mais populares no mundo Unix são o Debian Package e Red Hat Package Manager.

### Gerenciadores de pacotes de alto nível

São sistemas de gestão de pacotes que permitem realizar a instalação dos softwares de forma automatizada, manipulando as dependências sem que o administrador do sistema o faça manualmente. Possibilita maior facilidade de manutenção de compatibilidade de versões de softwares e também fornece recursos de automação de remoção de pacotes não mais utilizados, otimizando o espaço em disco ocupado pelos softwares instalados.
Geralmente utiliza ferramentas e formatos de pacotes dos sistemas gerenciadores de pacotes de baixo nível. Exemplos comuns são o Advanced Packaging Tool (APT) e o Yellowdog Updater, Modified (YUM).