Gerenciamento de Pacotes: Primeiros Passos com apt e yum

Gerenciamento de Pacotes: Primeiros Passos com apt e yum

O que você vai conseguir fazer

  • Mapear os comandos apt e dnf e escolher cada um com critério
  • Conferir o impacto antes de instalar para manter a mudança segura
  • Percorrer passo a passo os erros clássicos de gerenciamento de pacotes

Pré-requisitos (leia estes primeiro)

O Que Você Vai Aprender

  • Você mapeia lado a lado os comandos apt e yum/dnf.
  • Você busca, instala, atualiza e remove pacotes com um fluxo confiável.
  • Você confere o impacto antes de instalar para manter a mudança segura.
  • Você decide entre yum e dnf e distingue update de upgrade.
  • Você diagnostica erros comuns como Unable to locate package e NO_PUBKEY.

Resumo Rápido

  • apt (Debian / Ubuntu / Mint) e dnf (RHEL 9 / Rocky / AlmaLinux / Fedora) são os padrões atuais
  • yum só é nativo no CentOS 7 / RHEL 7. No RHEL 8+ yum é um symlink de compatibilidade para dnf
  • Sempre atualize o índice primeiro (apt update / dnf makecache), depois instale
  • Nunca faça install de memória -- confirme o nome exato do pacote com search ou info primeiro

Ambiente Assumido

  • Família Debian: Ubuntu 20.04 / 22.04 / 24.04, Debian 11 / 12
  • Família RHEL: CentOS 7 (yum), Rocky Linux 8/9, AlmaLinux 8/9, RHEL 8/9 (dnf)
  • Todos os comandos executados como usuário regular com sudo. Login direto como root não é assumido.

0. Seis Termos Para Alinhar Antes

Conclusão: Pacote, repositório, índice e dependência destravam a maioria das mensagens de erro.

As mensagens de erro do gerenciador de pacotes são ilegíveis sem o vocabulário. Estas são as seis palavras que vale definir antes.

Termo Significado em uma linha Outros nomes que você verá
pacote Um software empacotado em um arquivo distribuível ".deb" e ".rpm" indicam a mesma coisa
repositório O servidor que hospeda e distribui os pacotes Também "repo" ou "origem"
índice O catalogo do que um repositório oferece no momento Também "lista de pacotes" ou "cache"
dependência Outro pacote necessário para que este funcione Também "pacote dependente"
metapacote Um pacote vazio que puxa um grupo inteiro de pacotes Também "pacote agregador"
chave GPG A chave de assinatura usada para verificar se o repositório é legitimo Também "chave de assinatura" ou "chave pública"

O apt update atualiza o índice. Ele não atualiza nenhum software instalado. Quem atualiza o software é o apt upgrade. Confundir os dois é o mal-entendido mais comum.

1. Mapa de Comandos apt vs yum/dnf

Conclusão: install, remove e search são iguais; só o refresh do índice e o purge diferem na nomenclatura.

A tabela mais útil que você pode manter à mão.

Operação Debian (apt) RHEL (dnf / yum)
Atualizar o índice de pacotes sudo apt update sudo dnf makecache
Listar pacotes atualizáveis apt list --upgradable dnf check-update
Instalar um pacote sudo apt install <pkg> sudo dnf install <pkg>
Atualizar tudo sudo apt upgrade sudo dnf upgrade
Remover (manter config) sudo apt remove <pkg> sudo dnf remove <pkg>
Remover + purgar configs sudo apt purge <pkg> (sem equivalente direto)
Buscar apt search <kw> dnf search <kw>
Mostrar detalhes apt show <pkg> dnf info <pkg>
Listar instalados apt list --installed dnf list installed
Remover dependências orfas sudo apt autoremove sudo dnf autoremove
Limpar cache sudo apt clean sudo dnf clean all
Listar repositórios apt policy dnf repolist

Dica de memorização: install / remove / search são idênticos. As diferenças estão em como você atualiza o índice e como faz o "purge" dos arquivos de configuração.

2. apt: Fluxo de Trabalho Mínimo

Conclusão: Com apt, execute update primeiro, depois install, search, upgrade e remove ou purge.

Daqui em diante, os comandos alteram o sistema. Saiba o que muda e como desfazer antes de executá-los.

Comando O que muda Como desfazer Forma mais segura de testar
update Apenas o índice de pacotes é atualizado Nada a desfazer (o sistema não muda) Pode executar direto
install O pacote e suas dependências são adicionados remove apaga apt-get install -s <pkg> mostra o plano
upgrade Pacotes instalados passam para versões novas Fixar cada versão na mão (trabalhoso) Liste os alvos com apt list --upgradable
remove Os binários saem; a configuração em /etc/ permanece install recoloca o pacote apt-get remove -s <pkg> mostra o alcance
purge Binários e arquivos de configuração em /etc/ são apagados Configurações não voltam sem backup Copie os arquivos de configuração antes
autoremove Toda dependência julgada "desnecessária" é apagada de uma vez Reinstalar cada pacote individualmente Leia a lista de exclusão antes de confirmar

2-1. Atualizar --> Instalar

$ sudo apt update
$ sudo apt install nginx

Pular o apt update é a causa #1 de falhas de instalação em VMs novas (índice desatualizado causa 404s no mirror). Sempre atualize antes de instalar em sistemas novos ou inativos há muito tempo.

2-2. Buscar (quando você só lembra parte do nome)

$ apt search nginx
$ apt show nginx

apt search faz busca de texto completo nas descrições, e por isso "buscar nginx" retorna dezenas de resultados. Para filtrar apenas por nomes, use um glob:

$ apt list 'nginx*'
Listing... Done
nginx/jammy-updates 1.18.0-6ubuntu14.4 amd64
nginx-common/jammy-updates 1.18.0-6ubuntu14.4 all
nginx-core/jammy-updates 1.18.0-6ubuntu14.4 amd64

As colunas trazem: nome e origem do pacote, versão e arquitetura.

Para ver apenas o que já está instalado:

$ apt list --installed 2>/dev/null | grep nginx

2-3. Atualizar

$ sudo apt update
$ sudo apt upgrade           # Atualizar pacotes instalados
$ sudo apt full-upgrade      # Permitir remocoes para resolver dependencias (kernels, etc.)

apt upgrade e apt full-upgrade (antigo dist-upgrade) não são a mesma coisa. Atualizações de kernel e systemd podem precisar de full-upgrade. Revise as mudanças propostas antes de executar em produção.

2-4. Remover

$ sudo apt remove nginx      # Binario removido; configs em /etc/ permanecem
$ sudo apt purge nginx       # Configs tambem sao excluidas
$ sudo apt autoremove        # Remover dependencias orfas

apt remove deixa arquivos em /etc/ para trás. Se uma reinstalação "lembrar" de configurações antigas inesperadamente, execute purge para limpá-las.

3. yum / dnf: Fluxo de Trabalho Mínimo

Conclusão: No RHEL 8+ o dnf é nativo e yum é um symlink, então escreva dnf diretamente nos scripts.

3-1. yum vs dnf -- Qual devo usar?

  • CentOS 7 / RHEL 7: yum é nativo
  • CentOS 8+ / Rocky 8+ / AlmaLinux 8+ / RHEL 8+ / Fedora: dnf é nativo; o comando yum é um wrapper de compatibilidade sobre o dnf

No RHEL 8+, digitar yum install ... ainda funciona -- mas você está realmente invocando o dnf. Para scripts que precisam sobreviver a futuras atualizações de SO, escreva dnf diretamente.

3-2. Operações Principais

$ sudo dnf check-update            # Mostrar atualizacoes disponiveis
$ sudo dnf install nginx
$ sudo dnf upgrade                 # Atualizar tudo
$ sudo dnf remove nginx
$ dnf search nginx
$ dnf info nginx
$ dnf list installed | grep nginx

O dnf remove <pkg> também inclui na fila qualquer pacote que dependa do que você indicou. Leia a lista de exclusão exibida e confirme que nada inesperado está nela. Em sistemas da família RHEL, dnf history undo <ID> reverte a última transação (detalhado adiante).

3-3. Group Install (um ponto forte do dnf)

Instale um pacote de pacotes relacionados em um único passo.

$ dnf grouplist
$ sudo dnf groupinstall "Development Tools"

A família Debian alcança o mesmo resultado através de meta-pacotes:

$ sudo apt install build-essential

Conclusão: Busque por padrão de nome, faça busca reversa por arquivo e verifique o nome oficial.

"Esqueci o nome exato do pacote" é o obstáculo mais comum. Esses três padrões cobrem quase todos os casos.

4-1. Filtrar por Padrão de Nome

# Debian
$ apt list 'php*' 2>/dev/null

# RHEL
$ dnf list 'php*'

4-2. Busca Reversa a Partir de um Binário ou Arquivo

Quando você sabe o nome do comando mas não o do pacote, use apt-file / dnf provides.

# Debian (apt-file nao vem instalado por padrao)
$ sudo apt install apt-file
$ sudo apt-file update
$ apt-file search /usr/bin/htop

# RHEL (integrado)
$ dnf provides /usr/bin/htop
$ dnf provides '*/sshd_config'

Quando aparece command not found, começar com dnf provides ou apt-file search é o caminho mais rápido para descobrir "qual pacote preciso instalar?".

4-3. Verificar se Você Tem o Pacote Certo

$ apt show nginx
$ dnf info nginx

Verifique Version, Source e Homepage para distinguir o pacote desejado de um impostor com o mesmo nome.

5. Inspeção de Repositórios

Conclusão: Liste repos ativos, adicione apenas repos de fornecedores e verifique a impressão digital da chave GPG.

5-1. Listar Repositórios Ativos

# Debian
$ apt policy                              # Prioridades de fonte por pacote
$ ls /etc/apt/sources.list.d/             # Definicoes de repos extras
$ cat /etc/apt/sources.list

# RHEL
$ dnf repolist                            # Repos habilitados
$ dnf repolist --all                      # Incluir desabilitados
$ ls /etc/yum.repos.d/

5-2. Adicionando um Repositório de Terceiros -- Cuidados

Repositórios de terceiros expandem seu limite de confiança.

  • Adicione apenas repos de fornecedores com um processo de segurança publicado (Docker, PostgreSQL, NodeSource, etc.)
  • Verifique a impressão digital da chave GPG contra a documentação oficial do fornecedor
  • Evite curl ... | sudo bash cego em servidores de produção -- leia o script primeiro

5-3. Padrão Moderno para Adicionar Repos (família Debian)

Ubuntu 22.04+ deprecia apt-key. O padrão recomendado é colocar chaves GPG em /etc/apt/keyrings/ e referenciá-las em cada source list com signed-by=.

# Preparar a chave (siga as instrucoes do fornecedor)
$ sudo install -d -m 0755 /etc/apt/keyrings
$ curl -fsSL https://download.example.com/key.gpg \
    | sudo tee /etc/apt/keyrings/example.gpg > /dev/null

# Definicao do repositorio
$ echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://download.example.com/apt stable main" \
    | sudo tee /etc/apt/sources.list.d/example.list
$ sudo apt update

5-4. Como Conferir a Impressão Digital

A impressão digital (fingerprint) é um identificador curto que resume a chave. A mesma chave sempre gera o mesmo valor, então compará-la revela se a chave veio mesmo do fornecedor.

Exiba a impressão digital da chave que você colocou e compare caractere por caractere com o valor publicado no site oficial do fornecedor. O comando apenas exibe, então execute quantas vezes quiser.

$ gpg --show-keys --fingerprint /etc/apt/keyrings/example.gpg

Se não conferir, a chave não é a oficial. Interrompa a configuração e apague os arquivos colocados em /etc/apt/keyrings/ e /etc/apt/sources.list.d/.

6. Solução de Problemas dos Erros Comuns

Conclusão: Pacote não encontrado, lock, GPG e espaço em disco, cada um tem um caminho de diagnóstico definido.

6-1. Unable to locate package <pkg> (apt)

Diagnostique nesta ordem:

  1. Você pulou o apt update
  2. O nome do pacote está errado (python vs python3, etc.)
  3. O componente correto do repositório está desabilitado (ex. universe / multiverse)
$ sudo apt update
$ apt search <palavra-chave-aproximada>
$ apt-cache policy <pkg>

6-2. No match for argument (dnf)

Mesmo diagnóstico. Frequentemente resolvido reconstruindo os metadados:

$ sudo dnf clean all
$ sudo dnf makecache
$ dnf search <palavra-chave-aproximada>

6-3. Could not get lock /var/lib/dpkg/lock

Outro processo apt está em execução, ou uma execução anterior travou. Confirme primeiro, depois recupere.

Os arquivos de lock são vazios. O apt e o dpkg não verificam se o arquivo existe: eles usam flock (um bloqueio exclusivo aplicado sobre o arquivo). Ou seja, "o arquivo está aí, então apague" é o instinto errado. Apagar é o último recurso, apenas depois de confirmar que ninguém os segura.

Primeiro verifique se algum processo segura os quatro arquivos de lock. O lsof apenas exibe; não altera nada.

$ sudo lsof /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock \
    /var/cache/apt/archives/lock /var/lib/apt/lists/lock

Saída vazia significa que ninguém os segura. Só então a remoção é segura.

$ sudo rm /var/lib/dpkg/lock-frontend
$ sudo rm /var/lib/dpkg/lock
$ sudo rm /var/cache/apt/archives/lock
$ sudo rm /var/lib/apt/lists/lock
$ sudo dpkg --configure -a

6-4. Erros GPG (NO_PUBKEY / Signature couldn't be verified)

A chave de assinatura de um repositório de terceiros expirou ou foi rotacionada.

$ sudo apt update
# -> NO_PUBKEY ABCD1234...

Corrija buscando a chave atual do fornecedor e colocando-a em /etc/apt/keyrings/. Evite --allow-unauthenticated e nunca execute apt-key del cegamente.

6-5. Falha na Instalação por Falta de Espaço em Disco

$ df -h /var /usr
$ sudo apt clean        # Remover arquivos .deb baixados
$ sudo dnf clean all    # Mesmo para o cache do dnf

/var/cache/apt/archives/ e /var/cache/dnf/ são os suspeitos habituais.

7. Regras de Produção Que Evitam Dor de Cabeça

Conclusão: Em produção, evite upgrade cego ou curl-to-bash; revise as mudanças e mantenha opção de desfazer.

Não faça:

  • Executar apt upgrade em produção sem antes revisar apt list --upgradable
  • Fazer pipe de scripts de instalação não confiáveis para sudo bash
  • Adicionar --force-yes / --allow-downgrades reflexivamente
  • Puxar o mesmo pacote de múltiplos repositórios -- conflitos de prioridade ficam confusos

Checklist de operação segura:

  1. Sempre atualize primeiro: apt update / dnf makecache
  2. Simule mudanças do apt antes de aplicar: apt-get install -s <pkg>
  3. O RHEL tem histórico de transações que pode ser revertido:
$ dnf history list
$ sudo dnf history undo <ID>
  1. Revise o escopo de atualização com apt list --upgradable antes de executar upgrade
  2. Verifique as impressões digitais GPG sempre que adicionar um novo repositório

8. Templates Prontos para Copiar e Colar

Conclusão: Conjuntos de comandos prontos para famílias Debian e RHEL, desde configuração até rollback.

Debian / Ubuntu

# Configuracao inicial
sudo apt update && sudo apt upgrade -y

# Buscar -> inspecionar -> instalar
apt list 'nginx*'
apt show nginx
sudo apt install nginx

# Visualizar atualizacoes antes de aplicar
apt list --upgradable
sudo apt upgrade

# Remover incluindo configs
sudo apt purge nginx && sudo apt autoremove

RHEL / Rocky / AlmaLinux

# Configuracao inicial
sudo dnf upgrade -y

# Buscar -> inspecionar -> instalar
dnf search nginx
dnf info nginx
sudo dnf install nginx

# Visualizar atualizacoes
dnf check-update

# Reverter uma transacao
dnf history list
sudo dnf history undo <ID>

Próximas Leituras