Manutenção básica para Gentoo Linux (com script)
Dica publicada em Linux / Comandos
Manutenção básica para Gentoo Linux (com script)
Introdução
Manter oGentoo saudável não é só dar um emerge --sync. Por ser uma distribuição rolling release baseada em compilação, pequenos desalinhamentos em bibliotecas, módulos de linguagens (Python/Perl) e arquivos de configuração podem se acumular.
Abaixo, apresento um script que realiza uma varredura no sistema. Algo bem simples, só para ajudar. Ele não aplica nada de correção, apenas reporta o que precisa ser feito e sugere os comandos, permitindo que o administrador tenha controle total.
A importância dos Binários (getbinpkg)
Compilar tudo do zero é a alma do Gentoo, mas nem sempre temos tempo. Usar pacotes binários pré-compilados (quando disponíveis) acelera drasticamente as atualizações de pacotes grandes.Para que o
Portage atualize também os binários sem o parâmetro -g, adicione ao seu /etc/portage/make.conf:
FEATURES="getbinpkg"
Nada melhor que automatizar um pouco o processo de cuidar do sistema, certo? Mas nem tão automático assim. Abaixo uma imagem do resultado do script:
O Script: check_gentoo.sh
Este script utiliza oeix. Instale-o se não tiver.
#!/bin/bash
# Autor: Xerxes Lins (vivaolinux.com.br/~xerxeslins)
# Versão e data: v1.0 (7 fev 2026)
# Descrição: verifica atualizações e integridade do Gentoo sem aplicar mudanças.
echo "--- Iniciando Varredura de Manutenção ---"
# 1. Sincronização
echo "[1/7] Sincronizando repositórios (eix-sync)..."
eix-sync -q
# 2. Atualizações do World (Filtro Refinado)
echo "[2/7] Verificando atualizações do @world..."
updates=$(emerge -puvDN @world --with-bdeps=y 2>/dev/null)
# Contagens específicas baseadas nas siglas do Portage
upgrades=$(echo "$updates" | grep -E "^\[ebuild U" | wc -l)
newslots=$(echo "$updates" | grep -E "^\[ebuild NS" | wc -l)
reinstalls=$(echo "$updates" | grep -E "^\[ebuild R" | wc -l)
binarios=$(echo "$updates" | grep -E "^\[binary" | wc -l)
total_updates=$((upgrades + newslots + reinstalls + binarios))
# 3. Pacotes Órfãos
echo "[3/7] Analisando pacotes órfãos (depclean)..."
orphans=$(emerge -p --depclean 2>/dev/null)
orphan_count=$(echo "$orphans" | grep -E "^ [a-z0-9]*/[a-z0-9]*" | wc -l)
# 4. Integridade de Bibliotecas
echo "[4/7] Verificando links dinâmicos (revdep-rebuild)..."
revdep_out=$(revdep-rebuild -p 2>/dev/null)
revdep_needed=$(echo "$revdep_out" | grep -E "emerge --oneshot" | wc -l)
# 5. Configurações
echo "[5/7] Verificando arquivos de configuração pendentes..."
conf_files=$(find /etc -name '._cfg????_*' 2>/dev/null | wc -l)
# 6. Perl
echo "[6/7] Verificando consistência do Perl..."
perl_needed=$(perl-cleaner --pretend 2>/dev/null | grep -E "emerge" | wc -l)
# 7. Python
echo "[7/7] Verificando consistência do Python..."
python_needed=$(python-updater -p 2>/dev/null | grep -E "emerge" | wc -l)
echo -e "\n--- RELATÓRIO FINAL ---"
echo " • Atualizações (Upgrades): $upgrades"
echo " • Novos Slots (New Slots): $newslots"
echo " • Reinstalações (Reinstall): $reinstalls"
echo " • Pacotes Binários: $binarios"
echo " • Pacotes órfãos: $orphan_count"
echo " • Arquivos de config: $conf_files"
echo -e "\n--- COMANDOS SUGERIDOS ---"
cmd_next=1
total_acoes=0
if [ "$total_updates" -gt 0 ]; then
# Se houver apenas reinstalações/binários R, sugere um comando mais agressivo
if [ "$upgrades" -eq 0 ] && [ "$newslots" -eq 0 ]; then
echo "${cmd_next}. Atualizar (Deep): emerge -auvDN --with-bdeps=y --changed-use @world"
else
echo "${cmd_next}. Atualizar tudo: emerge -auvDN @world"
fi
((cmd_next++))
((total_acoes++))
fi
if [ "$orphan_count" -gt 0 ]; then
echo "${cmd_next}. Limpar órfãos: emerge --depclean"
((cmd_next++))
((total_acoes++))
fi
if [ "$conf_files" -gt 0 ]; then
echo "${cmd_next}. Configurações: dispatch-conf"
((cmd_next++))
((total_acoes++))
fi
if [ "$revdep_needed" -gt 0 ]; then
echo "${cmd_next}. Corrigir links: revdep-rebuild"
((cmd_next++))
((total_acoes++))
fi
if [ "$perl_needed" -gt 0 ]; then
echo "${cmd_next}. Corrigir Perl: perl-cleaner --all"
((cmd_next++))
((total_acoes++))
fi
if [ "$python_needed" -gt 0 ]; then
echo "${cmd_next}. Corrigir Python: python-updater"
((cmd_next++))
((total_acoes++))
fi
if [ "$total_acoes" -eq 0 ]; then
echo "Nada a fazer. Seu sistema está 100% em ordem!"
fi
echo -e "\n--- Fim da Verificação ---"
Entendendo os comandos sugeridos
emerge -auvDN @world: comando principal de atualização. Com a FEATUREgetbinpkg, ele baixará binários sempre que possível.
- a (ask): Pergunta antes de agir.
- u (update): Atualiza os pacotes.
- v (verbose): Mostra detalhes.
- D (deep): Verifica as dependências de todo o sistema, não só dos pacotes diretos.
- N (newuse): Recompila se você mudou alguma flag USE.
Outros:
- emerge --depclean: remove pacotes "sobressalentes". Se uma biblioteca não é mais usada por nenhum programa, ela deve ser removida para evitar conflitos futuros.
- dispatch-conf: ferramenta essencial para gerenciar o /etc. Ela permite que você mescle mudanças em arquivos de configuração de forma interativa, evitando que o sistema quebre após uma atualização de serviço.
- revdep-rebuild: verifica se algum binário do sistema ficou com links quebrados (quando um programa procura uma biblioteca .so que mudou de versão).
- perl-cleaner --all: recompila módulos Perl que foram instalados com uma versão antiga do interpretador, garantindo que tudo continue funcionando após um update do Perl.
- python-updater: semelhante ao anterior, garante que os scripts e pacotes Python estejam apontando para a versão correta do slot do Python ativo no sistema.