Gerenciamento de Pacotes
APT, DNF, Pacman e compilação da fonte, gestão de software de ponta a ponta.
O que é um gerenciador de pacotes
Um gerenciador de pacotes é o sistema responsável por instalar, atualizar, remover e verificar softwares no Linux. Ele não apenas copia arquivos — ele entende relacionamentos entre programas.
- Resolve dependências automaticamente — se o pacote X precisa da biblioteca Y, que depende de Z, o gerenciador baixa e instala tudo na ordem correta.
- Mantém banco de dados de pacotes instalados, versões e arquivos pertencentes a cada pacote.
- Verifica integridade com checksums e assinaturas criptográficas antes de instalar qualquer coisa.
- Gerencia atualizações do sistema inteiro com um único comando.
Imagine uma app store que também gerencia as bibliotecas compartilhadas, drivers, serviços do sistema e que verifica a assinatura criptográfica de cada download antes de instalar. E que funciona no terminal com um único comando. Isso é o gerenciador de pacotes Linux.
A diferença crítica: ele entende que "remover o Python pode quebrar 40 outros programas" e avisa antes de fazer isso.
- Gerenciador de pacotes resolve dependências automaticamente
- Mantém banco de dados de tudo instalado e seus arquivos
- Verifica integridade criptográfica antes de instalar
- Cada família de distros tem o seu: APT (Debian/Ubuntu), DNF (Fedora/RHEL), Pacman (Arch)
Repositórios e como funcionam
Um repositório é um servidor que contém pacotes compilados, assinados e indexados. O gerenciador baixa o índice e sabe o que está disponível sem precisar baixar cada pacote.
- /etc/apt/sources.list e /etc/apt/sources.list.d/ (Debian/Ubuntu): lista de repositórios configurados.
- Repositórios oficiais vs PPAs (Personal Package Archives, Ubuntu): PPAs são contribuições de terceiros — úteis, mas use com cautela em servidores de produção.
- stable, testing, unstable (Debian): canais de atualização com diferentes níveis de estabilidade e modernidade.
- Ubuntu LTS: suporte de 5 anos. Ubuntu não-LTS: 9 meses. Escolha LTS para servidores.
# Ver repositórios configurados no Ubuntu
cat /etc/apt/sources.list
# Exemplo de linha de repositório:
# deb http://br.archive.ubuntu.com/ubuntu jammy main restricted universe
# Adicionar um repositório externo de forma segura (método moderno)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
echo "deb [signed-by=/etc/apt/trusted.gpg.d/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update # atualiza índice incluindo novo repositório
- Adicionar PPAs em servidores de produção sem avaliar quem mantém — PPAs não passam pelo processo de revisão da Canonical.
- Esquecer de rodar apt update após adicionar um repositório — o índice local não conhece os novos pacotes ainda.
- Misturar canais Debian (stable + testing) sem saber o que está fazendo — pode causar quebras de dependência.
Verificação GPG: por que confiar nos pacotes
Cada repositório tem um par de chaves GPG. O mantenedor assina os pacotes com a chave privada. Seu sistema verifica essa assinatura com a chave pública antes de instalar.
-
Método antigo:
apt-key add/apt-key list— depreciado, chave fica em keyring global. -
Método moderno: arquivo
.gpgem/etc/apt/trusted.gpg.d/+ atributosigned-by=no sources.list — chave vinculada a repositório específico. - Sem verificação GPG, um atacante poderia substituir pacotes por versões maliciosas — chamado de ataque de supply chain.
-
Nunca desabilite verificação GPG
(
--allow-unauthenticated) em produção — isso remove toda a proteção contra pacotes adulterados. - Baixar chaves GPG via HTTP sem verificar fingerprint — sempre confira o fingerprint no site oficial do projeto.
- apt-key add com curl | sudo apt-key add - é inseguro e depreciado — use o método com trusted.gpg.d.
APT: Debian, Ubuntu e derivados
APT (Advanced Package Tool) é o gerenciador de
pacotes das distribuições baseadas em Debian. É uma camada de alto
nível sobre o dpkg (que lida com arquivos .deb
individualmente).
APT resolve dependências automaticamente, enquanto dpkg apenas instala o que você especifica.
sudo apt update # atualiza índice de repositórios
sudo apt upgrade # atualiza pacotes instalados
sudo apt full-upgrade # upgrade com remoção de conflitos
sudo apt install nginx # instala nginx
sudo apt install -y curl wget # instala múltiplos sem confirmação
sudo apt remove nginx # remove pacote (mantém config)
sudo apt purge nginx # remove pacote E arquivos de config
sudo apt autoremove # remove dependências órfãs
apt search "web server" # busca no repositório
apt show nginx # informações sobre o pacote
dpkg -l | grep nginx # lista pacotes instalados filtrado
dpkg -L nginx # lista arquivos instalados pelo pacote
dpkg -S /usr/bin/python3 # qual pacote instalou este arquivo
dpkg é como copiar um arquivo manualmente. APT é como um assistente que descobre o que você precisa antes de copiar, vai buscar tudo, verifica as assinaturas e instala na ordem certa. Para trabalho do dia a dia, use sempre o APT.
-
apt upgrade vs apt full-upgrade:
upgradenunca remove pacotes;full-upgradepode remover pacotes conflitantes para completar o upgrade. Em servidores, prefiraupgradee inspecione manualmente conflitos. - Esquecer o apt update antes de apt install: você pode instalar versões antigas que já foram supersedidas.
-
apt remove deixa configs: se quiser uma remoção
limpa, use
apt purge.
DNF/YUM: Red Hat, Fedora, CentOS
DNF (Dandified YUM) é o gerenciador de pacotes das distribuições Red Hat desde o Fedora 22 e RHEL 8. YUM foi o predecessor — ainda funciona como wrapper em muitos sistemas, mas DNF é o padrão moderno.
Trabalha com pacotes .rpm, assim como APT
trabalha com .deb. O utilitário de baixo nível equivalente ao dpkg
é o rpm.
sudo dnf install nginx # instala nginx
sudo dnf remove nginx # remove nginx
sudo dnf update # atualiza tudo
sudo dnf search nginx # busca pacotes
sudo dnf info nginx # informações do pacote
sudo dnf list installed | grep nginx # pacotes instalados filtrado
rpm -qa | grep nginx # query de baixo nível (todos os pacotes)
rpm -ql nginx # lista arquivos do pacote instalado
rpm -qi nginx # informações detalhadas via rpm
Rocky Linux e AlmaLinux são clones binários do RHEL gratuitos —
ideais para praticar comandos DNF/RPM sem pagar licença Red Hat. O
comando dnf module (Application Streams) permite
instalar múltiplas versões de uma mesma linguagem — ex: Python 3.9
e 3.11 lado a lado.
Pacman: Arch Linux
Pacman é o gerenciador de pacotes do Arch Linux e derivados (Manjaro, EndeavourOS). É conhecido pela sintaxe concisa com flags de uma letra e pela velocidade.
O AUR (Arch User Repository) é um repositório
mantido pela comunidade com dezenas de milhares de pacotes
adicionais, acessados via helpers como yay ou
paru.
sudo pacman -S nginx # instala (sync)
sudo pacman -R nginx # remove
sudo pacman -Rs nginx # remove + dependências não usadas
sudo pacman -Syu # sync + update (equivale a apt update && apt upgrade)
sudo pacman -Ss "web server" # busca no repositório
sudo pacman -Qi nginx # info do pacote instalado
sudo pacman -Ql nginx # lista arquivos do pacote
# AUR com yay (não precisa de sudo)
yay -S pacote-aur # instala do AUR
yay -Syu # atualiza tudo incluindo AUR
As flags do pacman seguem lógica: -S = Sync
(repositório), -R = Remove, -Q = Query
(banco local), -U = Upgrade de arquivo local. Combine
com modificadores: -y = atualiza banco de dados,
-u = upgrade, -s = search. Decorar a
lógica é mais fácil que decorar cada combinação.
Snap e Flatpak: o futuro dos pacotes universais
Snap (Canonical) e Flatpak (Red Hat/Comunidade) são formatos de pacote universais que empacotam a aplicação com todas as dependências em um contêiner sandbox.
- Vantagem: funcionam em qualquer distro, atualizações automáticas, isolamento de segurança.
- Desvantagem: pacotes maiores (incluem libs próprias), podem ser mais lentos para iniciar, uso maior de disco.
- Snap: centralizado na Snap Store (Canonical). Padrão no Ubuntu para muitas aplicações desktop.
- Flatpak: descentralizado, usa Flathub como repositório principal. Preferido pela comunidade de desktop Linux.
# Snap
snap find vlc # busca
sudo snap install vlc # instala
sudo snap remove vlc # remove
snap list # lista instalados
# Flatpak
flatpak search vlc # busca
flatpak install flathub org.videolan.VLC # instala
flatpak uninstall org.videolan.VLC # remove
flatpak list # lista instalados
flatpak update # atualiza todos
- Misturar snap e apt para a mesma aplicação: pode causar conflitos ou duplicações desnecessárias.
- Usar snap/flatpak em servidores: para servidores, prefira pacotes nativos da distro — mais previsíveis e sem overhead de sandbox.
Compilar da fonte: ./configure && make
Compilar da fonte significa obter o código-fonte do software e transformá-lo em binário você mesmo. Necessário quando:
- A versão nos repositórios está desatualizada e você precisa de uma funcionalidade nova.
- Precisa de flags de compilação específicas ou patches customizados.
- O software não está disponível nos repositórios.
A desvantagem: o gerenciador de pacotes não conhece o que você instalou manualmente. Atualizações e remoções são feitas manualmente.
# Fluxo clássico autotools
./configure --prefix=/usr/local # verifica dependências, gera Makefile
make # compila (use make -j$(nproc) para paralelo)
sudo make install # instala em /usr/local
# Instalar dependências de compilação antes
sudo apt install build-essential libssl-dev # Debian/Ubuntu
sudo dnf groupinstall "Development Tools" # Fedora/RHEL
# CMake (mais moderno)
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
# Desinstalar (se o projeto suportar)
sudo make uninstall
- Não ler o output do ./configure: quando falha, mostra exatamente qual biblioteca está faltando. Leia a última linha do erro.
-
Instalar em /usr ao invés de /usr/local: pode
conflitar com pacotes do gerenciador. Use sempre
--prefix=/usr/local. -
Esquecer build-essential: sem gcc, make e
headers, nada compila. Em Debian/Ubuntu:
sudo apt install build-essential. - Não usar -j$(nproc): compilar single-thread em uma máquina com 8 cores é 8x mais lento do que necessário.