Intermediário Fundamental Progresso 0%

Gerenciamento de Pacotes

APT, DNF, Pacman e compilação da fonte, gestão de software de ponta a ponta.

01. Conceito

O que é um gerenciador de pacotes

Explicação

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.
💡 Analogia — App Store com superpoderes

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.

O que você precisa guardar
  • 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)
02. Repositórios

Repositórios e como funcionam

Explicação

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.
Exemplo Concreto
# 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
Erros comuns
  • 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.
03. Segurança

Verificação GPG: por que confiar nos pacotes

Explicação

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 .gpg em /etc/apt/trusted.gpg.d/ + atributo signed-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.
Erros comuns
  • 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.
04. Debian

APT: Debian, Ubuntu e derivados

Explicação

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.

Exemplo Concreto
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
Analogia: apt vs dpkg

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.

Erros comuns
  • apt upgrade vs apt full-upgrade: upgrade nunca remove pacotes; full-upgrade pode remover pacotes conflitantes para completar o upgrade. Em servidores, prefira upgrade e 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.
05. Red Hat

DNF/YUM: Red Hat, Fedora, CentOS

Explicação

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.

Exemplo Concreto
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
ℹ️ Saiba mais

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.

06. Arch

Pacman: Arch Linux

Explicação

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.

Exemplo Concreto
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
Analogia: Flags do Pacman

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.

07. Universal

Snap e Flatpak: o futuro dos pacotes universais

Explicação

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.
Exemplo Concreto
# 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
Erros comuns
  • 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.
08. Avançado

Compilar da fonte: ./configure && make

Explicação

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.

Exemplo Concreto
# 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
Erros comuns
  • 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.

🃏 Flashcards

📝 Quiz: Módulo 07