Introdução
O arquivo
/etc/portage/make.conf é o
coração do
Gentoo Linux. É nele que você define como o sistema inteiro será compilado e otimizado para a sua máquina. Uma configuração "cagada" pode resultar em um sistema lento ou quebradiço, enquanto um arquivo feito com atenção tem potencial de extrair um melhor desempenho do hardware.
Neste artigo, vamos construir esse arquivo do zero com muita calma. Começaremos com uma versão genérica e segura para usar durante a instalação do sistema e, em seguida, evoluiremos para uma configuração mais otimizada e robusta.
1. O make.conf Genérico (Para a Instalação)
Durante a fase de instalação (o chroot), o seu objetivo principal não é o desempenho ainda, mas sim a estabilidade. Se você usar flags de compilação muito agressivas nesta etapa e algo falhar, você terá muita dor de cabeça para consertar o sistema base.
Portanto, recomendo um padrão seguro e compatível com praticamente qualquer processador moderno de 64 bits. A única coisa que já vamos adiantar aqui é a sua placa de vídeo, para que o sistema já baixe os drivers corretos desde o início.
Copie e cole este modelo, ajustando apenas as variáveis indicadas:
# /etc/portage/make.conf (Versão Genérica)
# Otimizações básicas e seguras de CPU (Compatível com qualquer 64 bits moderno)
COMMON_FLAGS="-O2 -march=x86-64 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
# Uso de Threads do Processador
# A regra padrão é: número de threads do seu processador + 1.
# Se o seu processador tem 4 núcleos e 8 threads, use -j8.
# O -l (load average) ajuda a não travar a máquina, limitando o peso.
MAKEOPTS="-j4 -l4"
# Placa de Vídeo
# Como você já sabe qual é a sua placa, defina-a aqui.
# Exemplos comuns: "amdgpu radeonsi" (AMD modernas), "intel i915" (Intel),
# "nouveau" (Nvidia código aberto) ou "nvidia" (Nvidia proprietário).
VIDEO_CARDS="insira_sua_placa_aqui"
# Idioma do sistema e aceitação de licenças
LC_MESSAGES=C.utf8
ACCEPT_LICENSE="*"
Com esse arquivo, você pode compilar o Kernel e o sistema base e dificilmente terá problemas.
2. Conhecendo o seu Hardware
Depois que o sistema Gentoo base estiver instalado e você já tiver feito o primeiro boot (ou se você já tem um Gentoo rodando), é a hora de abandonar a versão genérica. Para otimizar, precisamos conhecer a CPU.
A. Descubra a arquitetura exata do seu processador.O GCC (compilador) pode analisar sua CPU e dizer qual é a flag arquitetural exata dela.
Execute:
gcc -c -Q -march=native --help=target | grep march
Anote o resultado. Pode ser algo como
znver2 (AMD Zen 2),
haswell (Intel antigo),
alderlake, etc.
Exemplo:
-march= znver2
B. Obtenha as flags de instrução da CPU.Instale uma ferramenta do próprio Gentoo que lê todas as tecnologias que seu processador suporta (como AVX, SSE, AES, etc.):
emerge -av app-portage/cpuid2cpuflags
cpuid2cpuflags
Anote a longa linha que começará com
CPU_FLAGS_X86...
Exemplo:
CPU_FLAGS_X86: aes avx avx2 bmi1 bmi2 f16c fma3 mmx mmxext pclmul popcnt rdrand sha sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3
C. Verifique sua Memória RAM.Uma compilação agressiva consome muita RAM. Saiba de fato quanto você tem para evitar travamentos durante a compilação.
free -h
Exemplo:
total usada livre compart. buff/cache disponível
Mem.: 31Gi 7,6Gi 2,0Gi 316Mi 22Gi 23Gi
Swap: 31Gi 0B 31Gi
3. O make.conf Otimizado (Exemplo Real)
Agora vamos juntar tudo. Abaixo, trago o exemplo de um ambiente de desempenho de moderado a bom nos dias de hoje, baseado em um
AMD Ryzen 7 (Zen 2) com 16 threads, 32GB de RAM, vídeo AMDGPU e ambiente KDE Plasma com Systemd. Entenda cada bloco para poder adaptar à sua realidade:
# -----------------------------------------------------------------
# 1. OTIMIZAÇÕES DE CPU
# Substitua "znver2" pelo resultado que você anotou no Passo 2.A
# O parâmetro "-pipe" usa a RAM em vez do disco para acelerar a compilação.
# -----------------------------------------------------------------
COMMON_FLAGS="-O2 -march=znver2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
# Aplica a mesma arquitetura para pacotes escritos na linguagem Rust
RUSTFLAGS="-C target-cpu=znver2 -C opt-level=2"
# -----------------------------------------------------------------
# 2. THREADS E MEMÓRIA
# Temos 16 threads e muita RAM (32GB). É seguro usar força máxima.
# -----------------------------------------------------------------
MAKEOPTS="-j16 -l16"
# -----------------------------------------------------------------
# 3. TECNOLOGIAS DO PROCESSADOR E HARDWARE
# Cole aqui o resultado exato gerado pelo comando cpuid2cpuflags no Passo 2.B
# -----------------------------------------------------------------
CPU_FLAGS_X86="aes avx avx2 bmi1 bmi2 f16c fma3 mmx mmxext pclmul popcnt rdrand sha sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3"
# Vídeo, Dispositivos de Entrada e Bootloader (UEFI)
VIDEO_CARDS="amdgpu radeonsi"
INPUT_DEVICES="libinput"
GRUB_PLATFORMS="efi-64"
# -----------------------------------------------------------------
# 4. COMPORTAMENTO DO SISTEMA E USE FLAGS GLOBAIS
# Definições que afetam todo o sistema. Aqui estamos focando em
# uma base moderna usando Systemd, Wayland e KDE Plasma.
# O sinal de menos (-) desativa um recurso (ex: -elogind).
# -----------------------------------------------------------------
LC_MESSAGES=C.utf8
ACCEPT_LICENSE="*"
USE="systemd dbus polkit wayland server -elogind -webengine -kaccounts"
# -----------------------------------------------------------------
# 5. RECURSOS AVANÇADOS DO PORTAGE (GERENCIADOR DE PACOTES)
# Estas flags mudam o jogo.
# parallel-fetch: Baixa o próximo pacote enquanto ainda compila o atual.
# parallel-install: Instala o pacote na raiz do sistema mais rapidamente.
# getbinpkg / buildpkg: Tenta usar pacotes binários oficiais e cria backups locais.
# -----------------------------------------------------------------
FEATURES="getbinpkg buildpkg parallel-fetch parallel-install"
EMERGE_DEFAULT_OPTS="--binpkg-respect-use=y --getbinpkg=y --jobs=4 --load-average=16 --keep-going"
Salvando sua Memória RAM em caso de Pacotes Gigantes
Alguns usuários de Gentoo montam a pasta
/var/tmp/portage (onde a compilação acontece) na memória RAM (usando
tmpfs) para que tudo seja compilado na velocidade da luz, poupando o SSD de desgaste.
Isso é bom, mas pode criar um Problema: se você tem 16GB de RAM reservados para o
tmpfs e usa um
MAKEOPTS="-j16" (16 tarefas simultâneas), a compilação de "monstros" como
rust,
firefox,
llvm ou
qtwebengine vai estourar o limite do seu
tmpfs, gerando erro de "No space left on device" (Falta de espaço) ou travando a máquina inteira.
Há como prevenir esse problema sem diminuir a velocidade geral do sistema. Em vez disso, a gente cria uma exceção ensinando o Gentoo a compilar
apenas esses pacotes pesados diretamente no disco físico, usando menos threads.
Crie uma pasta no disco físico (SSD/HD):
mkdir -p /var/cache/portage-tmpdir
chown portage:portage /var/cache/portage-tmpdir
chmod 775 /var/cache/portage-tmpdir
Crie um arquivo de "Ambiente Alternativo" (Environment):
Vamos criar um arquivo chamado
notmpfs.conf. Nele, diremos ao Portage para mudar o diretório de compilação para a pasta que acabamos de criar, e limitar o uso do processador pela metade (ex: 8 threads) para não congelar o uso do PC durante horas.
mkdir -p /etc/portage/env
echo 'PORTAGE_TMPDIR="/var/cache/portage-tmpdir"' > /etc/portage/env/notmpfs.conf
echo 'MAKEOPTS="-j8 -l8"' >> /etc/portage/env/notmpfs.conf
Vincule os pacotes gigantes a este ambiente:Agora criamos o arquivo que diz quais pacotes devem obedecer a essa regra de exceção.
mkdir -p /etc/portage/package.env
cat < /etc/portage/package.env/notmpfs
dev-lang/rust notmpfs.conf
sys-devel/llvm notmpfs.conf
sys-devel/clang notmpfs.conf
sys-devel/gcc notmpfs.conf
www-client/firefox notmpfs.conf
dev-qt/qtwebengine notmpfs.conf
EOF
Pronto! Todo o sistema continuará sendo compilado normalmente na RAM (foi esse o motivo que me fez comprar 32Gb de RAM em 2022), mas quando chegar a vez do
firefox ou do
rust, o Portage automaticamente passará a compilar no disco de forma mais conservadora, evitando que o sistema trave.
1. Introdução
2.
Nenhum comentário foi encontrado.