Gerenciamento de Pacotes: Primeiros Passos com apt e yum
O Que Voce Vai Aprender
- Um mapa lado a lado dos comandos
apteyum/dnf - Um fluxo de trabalho confiavel para buscar, instalar, atualizar e remover pacotes
- Quando usar
yumvsdnf, e a diferenca entreupdateeupgrade - Como diagnosticar erros comuns como
Unable to locate packageeNO_PUBKEY
Resumo Rapido
apt(Debian / Ubuntu / Mint) ednf(RHEL 9 / Rocky / AlmaLinux / Fedora) sao os padroes atuaisyumso e nativo no CentOS 7 / RHEL 7. No RHEL 8+yume um symlink de compatibilidade paradnf- Sempre atualize o indice primeiro (
apt update/dnf check-update), depois instale - Nunca faca
installde memoria -- confirme o nome exato do pacote comsearchouinfoprimeiro
Ambiente Assumido
- Familia Debian: Ubuntu 20.04 / 22.04 / 24.04, Debian 11 / 12
- Familia RHEL: CentOS 7 (yum), Rocky Linux 8/9, AlmaLinux 8/9, RHEL 8/9 (dnf)
- Todos os comandos executados como usuario regular com
sudo. Login direto como root nao e assumido.
1. Mapa de Comandos apt vs yum/dnf
Conclusao: install, remove e search sao iguais; so o refresh do indice e o purge diferem na nomenclatura.
A tabela mais util que voce pode manter a mao.
| Operacao | Debian (apt) |
RHEL (dnf / yum) |
|---|---|---|
| Atualizar indice de pacotes | sudo apt update |
sudo 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 dependencias orfas | sudo apt autoremove |
sudo dnf autoremove |
| Limpar cache | sudo apt clean |
sudo dnf clean all |
| Listar repositorios | apt policy |
dnf repolist |
Dica de memorizacao: install / remove / search sao identicos. As diferencas estao em como voce atualiza o indice e como faz o "purge" dos arquivos de configuracao.
2. apt: Fluxo de Trabalho Minimo
Conclusao: Com apt, execute update primeiro, depois install, search, upgrade e remove ou purge.
2-1. Atualizar --> Instalar
$ sudo apt update $ sudo apt install nginx
Pular o apt update e a causa #1 de falhas de instalacao em VMs novas (indice desatualizado causa 404s no mirror). Sempre atualize antes de instalar em sistemas novos ou inativos ha muito tempo.
2-2. Buscar (quando voce so lembra parte do nome)
$ apt search nginx $ apt show nginx
apt search faz busca de texto completo nas descricoes, e por isso "buscar nginx" retorna dezenas de resultados. Para filtrar apenas por nomes, use um glob:
$ apt list 'nginx*' $ 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) nao sao a mesma coisa. Atualizacoes de kernel e systemd podem precisar de full-upgrade. Revise as mudancas propostas antes de executar em producao.
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 tras. Se uma reinstalacao "lembrar" de configuracoes antigas inesperadamente, execute purge para limpa-las.
3. yum / dnf: Fluxo de Trabalho Minimo
Conclusao: No RHEL 8+ o dnf e nativo e yum e um symlink, entao escreva dnf diretamente nos scripts.
3-1. yum vs dnf -- Qual devo usar?
- CentOS 7 / RHEL 7:
yume nativo - CentOS 8+ / Rocky 8+ / AlmaLinux 8+ / RHEL 8+ / Fedora:
dnfe nativo; o comandoyume um wrapper de compatibilidade sobre odnf
No RHEL 8+, digitar yum install ... ainda funciona -- mas voce esta realmente invocando o dnf. Para scripts que precisam sobreviver a futuras atualizacoes de SO, escreva dnf diretamente.
3-2. Operacoes 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
3-3. Group Install (um ponto forte do dnf)
Instale um pacote de pacotes relacionados em um unico passo.
$ dnf grouplist $ sudo dnf groupinstall "Development Tools"
A familia Debian alcanca o mesmo resultado atraves de meta-pacotes:
$ sudo apt install build-essential
4. Busca na Pratica
Conclusao: Busque por padrao de nome, faca busca reversa por arquivo e verifique o nome oficial.
"Esqueci o nome exato do pacote" e o obstaculo mais comum. Esses tres padroes cobrem quase todos os casos.
4-1. Filtrar por Padrao de Nome
# Debian $ apt list 'php*' 2>/dev/null # RHEL $ dnf list 'php*'
4-2. Busca Reversa a Partir de um Binario ou Arquivo
Quando voce sabe o nome do comando mas nao 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, comecar com dnf provides ou apt-file search e o caminho mais rapido para descobrir "qual pacote preciso instalar?".
4-3. Verificar se Voce 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. Inspecao de Repositorios
Conclusao: Liste repos ativos, adicione apenas repos de fornecedores e verifique a impressao digital da chave GPG.
5-1. Listar Repositorios 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 Repositorio de Terceiros -- Cuidados
Repositorios de terceiros expandem seu limite de confianca.
- Adicione apenas repos de fornecedores com um processo de seguranca publicado (Docker, PostgreSQL, NodeSource, etc.)
- Verifique a impressao digital da chave GPG contra a documentacao oficial do fornecedor
- Evite
curl ... | sudo bashcego em servidores de producao -- leia o script primeiro
5-3. Padrao Moderno para Adicionar Repos (familia Debian)
Ubuntu 22.04+ deprecia apt-key. O padrao recomendado e colocar chaves GPG em /etc/apt/keyrings/ e referencia-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 update6. Solucao de Problemas dos Erros Comuns
Conclusao: Pacote nao encontrado, lock, GPG e espaco em disco, cada um tem um caminho de diagnostico definido.
6-1. Unable to locate package <pkg> (apt)
Diagnostique nesta ordem:
- Voce pulou o
apt update - O nome do pacote esta errado (
pythonvspython3, etc.) - O componente correto do repositorio esta desabilitado (ex.
universe/multiverse)
$ sudo apt update $ apt search <palavra-chave-aproximada> $ apt-cache policy <pkg>
6-2. No match for argument (dnf)
Mesmo diagnostico. 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 esta em execucao, ou uma execucao anterior travou. Confirme primeiro, depois recupere.
$ ps -ef | grep -E 'apt|dpkg' | grep -v grep # Somente se nenhum processo ativo existir: $ sudo rm /var/lib/apt/lists/lock $ sudo rm /var/lib/dpkg/lock-frontend $ sudo dpkg --configure -a
Excluir arquivos lock enquanto um processo apt ainda esta em execucao vai corromper o banco de dados dpkg. Sempre confirme com ps antes de remover locks.
6-4. Erros GPG (NO_PUBKEY / Signature couldn't be verified)
A chave de assinatura de um repositorio 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 Instalacao por Falta de Espaco 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/ sao os suspeitos habituais.
7. Regras de Producao Que Evitam Dor de Cabeca
Conclusao: Em producao, evite upgrade cego ou curl-to-bash; revise as mudancas e mantenha opcao de desfazer.
Nao faca:
- Executar
apt upgradeem producao sem antes revisarapt list --upgradable - Fazer pipe de scripts de instalacao nao confiaveis para
sudo bash - Adicionar
--force-yes/--allow-downgradesreflexivamente - Puxar o mesmo pacote de multiplos repositorios -- conflitos de prioridade ficam confusos
Checklist de operacao segura:
- Sempre atualize primeiro:
apt update/dnf check-update - Simule mudancas do apt antes de aplicar:
apt-get install -s <pkg> - O RHEL tem historico de transacoes que pode ser revertido:
$ dnf history list $ sudo dnf history undo <ID>
- Revise o escopo de atualizacao com
apt list --upgradableantes de executarupgrade - Verifique as impressoes digitais GPG sempre que adicionar um novo repositorio
8. Templates Prontos para Copiar e Colar
Conclusao: Conjuntos de comandos prontos para familias Debian e RHEL, desde configuracao ate 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>