Gerenciamento de Pacotes: Primeiros Passos com apt e yum

Gerenciamento de Pacotes: Primeiros Passos com apt e yum

O Que Voce Vai Aprender

  • Um mapa lado a lado dos comandos apt e yum/dnf
  • Um fluxo de trabalho confiavel para buscar, instalar, atualizar e remover pacotes
  • Quando usar yum vs dnf, e a diferenca entre update e upgrade
  • Como diagnosticar erros comuns como Unable to locate package e NO_PUBKEY

Resumo Rapido

  • apt (Debian / Ubuntu / Mint) e dnf (RHEL 9 / Rocky / AlmaLinux / Fedora) sao os padroes atuais
  • yum so e nativo no CentOS 7 / RHEL 7. No RHEL 8+ yum e um symlink de compatibilidade para dnf
  • Sempre atualize o indice primeiro (apt update / dnf check-update), depois instale
  • Nunca faca install de memoria -- confirme o nome exato do pacote com search ou info primeiro

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: yum e nativo
  • CentOS 8+ / Rocky 8+ / AlmaLinux 8+ / RHEL 8+ / Fedora: dnf e nativo; o comando yum e um wrapper de compatibilidade sobre o dnf

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

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 bash cego 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 update

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

  1. Voce pulou o apt update
  2. O nome do pacote esta errado (python vs python3, etc.)
  3. 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

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 upgrade em producao sem antes revisar apt list --upgradable
  • Fazer pipe de scripts de instalacao nao confiaveis para sudo bash
  • Adicionar --force-yes / --allow-downgrades reflexivamente
  • Puxar o mesmo pacote de multiplos repositorios -- conflitos de prioridade ficam confusos

Checklist de operacao segura:

  1. Sempre atualize primeiro: apt update / dnf check-update
  2. Simule mudancas do apt antes de aplicar: apt-get install -s <pkg>
  3. O RHEL tem historico de transacoes que pode ser revertido:
$ dnf history list
$ sudo dnf history undo <ID>
  1. Revise o escopo de atualizacao com apt list --upgradable antes de executar upgrade
  2. 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>

Proximas Leituras