O artigo foi feito e testado usando o live-USB do Linux Mint 22.3.
O objetivo desta instalação é a praticidade, comodidade e não desempenho. Trata-se de uma instalação genérica com muitos pacotes binários.
Sem mais enrolação, vamos lá.
Antes de iniciar a definição de variáveis, entre como root para evitar que as variáveis sejam apagadas da memória ao trocar de usuário no meio do processo:
sudo -i
Agora, precisamos dizer ao sistema qual disco será utilizado. Se o seu disco for um NVMe, usaremos o identificador nvme0n1. Se for um SSD ou HD SATA, usaremos sda.
Execute o comando abaixo que corresponde ao seu hardware. Isso criará uma variável na memória do terminal que será usada em todos os próximos passos:
Para NVMe:
DISCO="/dev/nvme0n1"
Para SATA:
DISCO="/dev/sda"
Para manter a automação e evitar que você tenha que lidar com a diferença de nomenclatura entre SATA (sda1) e NVMe (nvme0n1p1), utilizaremos uma técnica de manipulação de strings no Shell.
Abaixo está a lógica para capturar os nomes das partições automaticamente em variáveis, garantindo que o seu guia funcione universalmente.
Após o particionamento, execute o bloco de comandos abaixo. Ele identificará se o seu disco é NVMe ou SATA e ajustará os nomes das partições (p1 ou 1, etc.) automaticamente:
# Se o disco for NVMe, usa "p" (ex: nvme0n1p1). Se for SATA, o sufixo fica vazio (ex: sda1).
if echo "$DISCO" | grep -q "nvme"; then P="p"; else P=""; fi
# Cria variáveis para cada partição baseada no disco selecionado
PART_EFI="${DISCO}${P}1"
PART_BOOT="${DISCO}${P}2"
PART_ROOT="${DISCO}${P}3"
Arquitetura FINAL
A ideia central é a seguinte: EFI e /boot ficam fora da criptografia. Todo o sistema fica dentro de um LUKS2.
Atenção: em NVMe as partições são p1, p2, p3. Em SATA fica 1, 2 e 3.
wipefs -a $DISCO
parted -s $DISCO mklabel gpt
parted -s $DISCO mkpart EFI fat32 1MiB 1025MiB
parted -s $DISCO set 1 esp on
parted -s $DISCO mkpart BOOT ext4 1025MiB 2049MiB
parted -s $DISCO mkpart ROOT 2049MiB 100%
lsblk $DISCO
mkfs.vfat -F 32 $PART_EFI
mkfs.ext4 $PART_BOOT
cryptsetup luksFormat --type luks2 --pbkdf argon2id --pbkdf-memory 262144 --pbkdf-parallel 2 $PART_ROOT
cryptsetup open $PART_ROOT cryptroot
mkfs.btrfs /dev/mapper/cryptroot
mount /dev/mapper/cryptroot /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@snapshots
umount /mnt
mkdir -p /mnt/gentoo
mount -o subvol=@,compress=zstd /dev/mapper/cryptroot /mnt/gentoo
mkdir -p /mnt/gentoo/{home,.snapshots,boot}
mount -o subvol=@home,compress=zstd /dev/mapper/cryptroot /mnt/gentoo/home
mount -o subvol=@snapshots,compress=zstd /dev/mapper/cryptroot /mnt/gentoo/.snapshots
mount $PART_BOOT /mnt/gentoo/boot
mkdir -p /mnt/gentoo/boot/efi
mount $PART_EFI /mnt/gentoo/boot/efi
Para que os próximos passos encontrem as partições corretas dentro do ambiente isolado, injetamos as variáveis através de um script de inicialização do perfil:
mkdir -p /mnt/gentoo/etc/profile.d/
cat << EOF > /mnt/gentoo/etc/profile.d/install_vars.sh
export DISCO="${DISCO}"
export PART_EFI="${PART_EFI}"
export PART_BOOT="${PART_BOOT}"
export PART_ROOT="${PART_ROOT}"
EOF
Aqui instalamos o Gentoo base.
cd /mnt/gentoo
Abra o navegador e acesse: https://www.gentoo.org/downloads/
Copie o link do Stage "desktop profile | systemd". Baixe o Stage3 e execute:
wget -c [URL_DO_STAGE]
Em seguida, extraia o stage e prepare o ambiente chroot:
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys && mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev && mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run && mount --make-slave /mnt/gentoo/run
chroot /mnt/gentoo /bin/bash
Por fim, recarregue o perfil. Isto ativará as variáveis de disco automaticamente:
source /etc/profile
Crie ou sobrescreva o make.conf utilizando o bloco abaixo. Remova o caractere # da opção VIDEO_CARDS que corresponde ao fabricante da sua placa de vídeo.
cat << 'EOF' > /etc/portage/make.conf
COMMON_FLAGS="-O2 -pipe -march=native"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
MAKEOPTS="-j16 -l16"
# Baixar binários sempre que possível
FEATURES="getbinpkg"
EMERGE_DEFAULT_OPTS="--getbinpkg --binpkg-respect-use=y"
# Vídeo: Descomente a linha referente à sua placa de vídeo
# Para AMD (Radeon):
#VIDEO_CARDS="amdgpu radeonsi"
# Para Intel:
#VIDEO_CARDS="intel i965 iris"
# Para NVIDIA (Drivers proprietários):
#VIDEO_CARDS="nvidia"
# Opcional, mas recomendado pra desktop moderno
ACCEPT_LICENSE="*"
EOF
Atenção: troque o valor do MAKEOPTS pelo valor que sair no comando nproc para adequar à quantidade de threads do seu processador.
emerge-webrsync
getuto
Atualize o sistema base:
emerge --ask --update --deep --newuse @world
Instale os utilitários do sistema, ferramentas de criptografia, sistema de arquivos Btrfs e o gerenciador de boot:
emerge -aq eix flaggie gentoolkit sys-fs/cryptsetup sys-fs/btrfs-progs sys-boot/grub sys-boot/efibootmgr
Instale o gerenciador de rede de forma explícita para garantir a conectividade no primeiro boot do ambiente gráfico:
emerge --ask net-misc/networkmanager
Este passo é vital antes de instalar o kernel. O pacote linux-firmware fornece os blobs proprietários necessários para que o hardware funcione corretamente.
emerge --ask sys-kernel/linux-firmware
Este passo é essencial. Sem ele, o boot pode falhar com erros do tipo: Failed to start systemd-cryptsetup@cryptroot.service
Garanta que o systemd seja compilado com a flag cryptsetup:
echo "sys-apps/systemd cryptsetup" > /etc/portage/package.use/systemd-cryptsetup
emerge --ask --changed-use sys-apps/systemd
mkdir -p /etc/dracut.conf.d
cat << 'EOF' > /etc/dracut.conf.d/10-gentoo-luks-btrfs.conf
# Gentoo + dracut + LUKS + Btrfs
# Initramfs automático para gentoo-kernel-bin
# Módulos necessários no initramfs
add_dracutmodules+=" crypt btrfs "
EOF
UUID_LUKS="$(blkid -s UUID -o value $PART_ROOT)"
Agora gere o conteúdo do /etc/default/grub:
cat << EOF > /etc/default/grub
GRUB_DISTRIBUTOR="Gentoo"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="rd.luks.uuid=${UUID_LUKS} rd.luks.name=${UUID_LUKS}=cryptroot root=/dev/mapper/cryptroot rootfstype=btrfs rootflags=subvol=@"
GRUB_DISABLE_LINUX_UUID=true
GRUB_DISABLE_LINUX_PARTUUID=true
EOF
Antes de instalar o kernel, garanta que as partições de boot estão montadas corretamente para evitar que o kernel seja salvo no diretório raiz e o GRUB não o encontre:
mountpoint -q /boot || mount $PART_BOOT /boot
mountpoint -q /boot/efi || mount $PART_EFI /boot/efi
Certifique-se de que o installkernel utilizará o dracut:
flaggie sys-kernel/installkernel +dracut
Deixe o processo automático acontecer ao atualizar o kernel. Como o linux-firmware já foi instalado, o dracut incluirá o microcódigo e os módulos de vídeo no initramfs automaticamente:
emerge --ask sys-kernel/gentoo-kernel-bin virtual/dist-kernel
Após a instalação, extraia a versão do kernel compilado em /usr/src e copie o arquivo binário correspondente para a pasta /boot:
KERNEL_DIR=$(ls -d /usr/src/linux-*-gentoo-dist | head -n 1)
KERNEL_VER=$(basename "$KERNEL_DIR" | sed 's/linux-//')
cp "$KERNEL_DIR/arch/x86/boot/bzImage" "/boot/vmlinuz-${KERNEL_VER}"
Verifique se o kernel foi gerado corretamente. A lista abaixo deve conter os arquivos "vmlinuz-..." e "initramfs-...":
ls -lh /boot
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Gentoo --recheck
sh -c 'echo "GRUB_THEME="/boot/grub/themes/gentoo_glass/theme.txt"" >> /etc/default/grub'
grub-mkconfig -o /boot/grub/grub.cfg
É necessário capturar o UUID do Btrfs antes de gerar o arquivo fstab. Execute:
BTRFS_UUID="$(blkid -s UUID -o value /dev/mapper/cryptroot)"
O comando "cat" a seguir vai escrever o arquivo fstab automaticamente, com os identificadores corretos para o Btrfs (0 0).
cat << EOF > /etc/fstab
$PART_EFI /boot/efi vfat defaults,noatime 0 2
$PART_BOOT /boot ext4 defaults,noatime 0 2
UUID=${BTRFS_UUID} / btrfs rw,subvol=@,compress=zstd,noatime 0 0
UUID=${BTRFS_UUID} /home btrfs rw,subvol=@home,compress=zstd,noatime 0 0
UUID=${BTRFS_UUID} /.snapshots btrfs rw,subvol=@snapshots,compress=zstd,noatime 0 0
EOF
Aqui usei Recife, mas use a sua capital. Verifique as opções:
ls /usr/share/zoneinfo/America/
ln -sf /usr/share/zoneinfo/America/Recife /etc/localtime
echo "pt_BR.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
eselect locale set pt_BR.utf8
env-update && source /etc/profile
echo "LANG=pt_BR.UTF-8" > /etc/locale.conf
No ambiente chroot, os daemons do systemd não estão em execução. Utilize os arquivos de configuração para definir o layout do teclado de forma definitiva.
Para o console virtual:
echo "KEYMAP=br-abnt2" > /etc/vconsole.conf
Para o ambiente gráfico (X11):
mkdir -p /etc/X11/xorg.conf.d
cat << 'EOF' > /etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "br"
Option "XkbModel" "abnt2"
EndSection
EOF
emerge --ask sys-apps/kbd sys-apps/hwdata sys-apps/usbutils x11-base/xorg-server x11-drivers/xf86-input-libinput sys-auth/polkit
Usei usuário "xerxes", mude para o seu usuário.
emerge app-admin/sudo
echo "%wheel ALL=(ALL:ALL) ALL" >> /etc/sudoers
useradd -m -G wheel,audio,video -s /bin/bash xerxes
passwd xerxes
passwd
Instale o Cinnamon:
flaggie dev-libs/libxmlb +introspection
flaggie x11-libs/xapp +introspection
flaggie dev-libs/libdbusmenu +gtk3
emerge --ask gnome-extra/cinnamon x11-misc/lightdm x11-misc/lightdm-gtk-greeter x11-misc/xdg-user-dirs
su - [seu_usuario]
cat << EOF >> ~/.xinitrc
# Atualiza as pastas do usuário no início da sessão
xdg-user-dirs-update
EOF
exit
Configure o LightDM:
mkdir -p /etc/lightdm/lightdm.conf.d/
cat << "EOF" > /etc/lightdm/lightdm.conf.d/50-greeter.conf
[Seat:*]
greeter-session=lightdm-gtk-greeter
EOF
systemctl enable lightdm.service NetworkManager.service
Para que os usuários do grupo wheel possam desligar ou reiniciar a máquina diretamente pela interface do Cinnamon utilizando o logind do systemd, crie a regra abaixo:
mkdir -p /etc/polkit-1/rules.d/
cat << "EOF" > /etc/polkit-1/rules.d/55-systemd-power.rules
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.power-off-multiple-sessions" ||
action.id == "org.freedesktop.login1.reboot" ||
action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
action.id == "org.freedesktop.login1.suspend" ||
action.id == "org.freedesktop.login1.hibernate") &&
subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
EOF
Apps extras:
emerge --ask app-arch/file-roller gnome-extra/nemo-fileroller app-arch/p7zip app-arch/unrar app-arch/zip app-arch/unzip app-arch/cabextract app-arch/zstd app-arch/lz4 app-arch/lzip app-arch/lrzip media-gfx/flameshot x11-terms/sakura gnome-extra/gnome-calculator dev-util/geany
Utilizaremos PipeWire + WirePlumber e não PulseAudio puro.
emerge --ask media-video/pipewire media-video/wireplumber media-libs/alsa-lib media-plugins/alsa-plugins media-sound/alsa-utils
# Habilita o áudio globalmente para todos os usuários
systemctl --global enable pipewire pipewire-pulse wireplumber
emerge --ask net-wireless/blueman
systemctl enable bluetooth
Lembrete: após logar, se tiver dificuldade para parear seu fone bluetooth, lembre-se de segurar o botão do bluetooth por um tempo para que ele fique disponível para nova conexão.
emerge --ask sys-apps/flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
Reinicie a sessão (logout/login).
emerge --ask media-video/ffmpeg media-libs/gst-plugins-base media-libs/gst-plugins-good media-libs/gst-plugins-bad media-libs/gst-plugins-ugly
Adicionar o overlay GURU ao Gentoo é um processo simples, recomendado para acessar ebuilds mantidos pela comunidade.
emerge --ask dev-vcs/git app-eselect/eselect-repository
eselect repository enable guru
emaint sync -r guru
Se pretende usar o doomretro, habilite o xerxes-overlay:
eselect repository enable xerxes-overlay
emaint sync -r xerxes-overlay
emerge -qa games-fps/doomretro
ou autorizando via flaggie:
flaggie =games-fps/doomretro-9999 +**
emerge -qa =games-fps/doomretro-9999
Zram cria um dispositivo de swap comprimido na RAM, que é muito mais rápido que o swap em arquivo.
emerge --ask sys-apps/zram-generator
Crie o arquivo /etc/systemd/zram-generator.conf. O arquivo usa o algoritmo zstd (melhor compressão) e define o tamanho como 2x a RAM física para tentar atingir o requisito total de memória.
cat << EOF > /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram * 2
compression-algorithm = zstd
swap-priority = 100
fs-type = swap
EOF
Se você optar por usar Btrfs + Timeshift e tem swapfile, os snapshots vão falhar. Solução: remova o swapfile e use apenas zram.
swapoff /swapfile
rm -f /swapfile
Edite o /etc/fstab e remova ou comente a linha correspondente ao swapfile antigo. Ative o zram como mostrado antes.
eselect repository enable guru
emaint sync -r guru
emerge -qa app-backup/timeshift
Opcionalmente altere o swappiness. Isso favorece zram antes de matar processos:
mkdir -p /etc/sysctl.d
echo "vm.swappiness=180" > /etc/sysctl.d/99-zram.conf
sysctl -p /etc/sysctl.d/99-zram.conf
Saia do chroot e reinicie o sistema:
exit
reboot
Após reiniciar e logar no seu novo sistema, abra o terminal e instale o navegador Firefox (versão binária pré-compilada):
sudo emerge --ask www-client/firefox-bin
Instale também Steam, Brave e Google Chrome via Flatpak:
flatpak install flathub com.valvesoftware.Steam com.brave.Browser com.google.Chrome
Instale a fonte Hack e configure o sistema para lidar com emojis em fontes monoespaçadas. Crie as regras via `cat` apontando para o arquivo de configuração e atualize o cache de fontes. Por fim, configure o terminal Sakura para utilizar a fonte instalada.
sudo emerge --ask media-fonts/hack
mkdir -p ~/.config/fontconfig/conf.d/
cat << 'EOF' > ~/.config/fontconfig/conf.d/99-emoji.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="pattern">
<test name="family"><string>monospace</string></test>
<edit name="family" mode="append"><string>Noto Color Emoji</string></edit>
</match>
</fontconfig>
EOF
fc-cache -f -v
mkdir -p ~/.config/sakura
touch ~/.config/sakura/sakura.conf
if grep -q "^font=" ~/.config/sakura/sakura.conf; then
sed -i 's/^font=.*/font=Hack 11/' ~/.config/sakura/sakura.conf
else
echo "font=Hack 11" >> ~/.config/sakura/sakura.conf
fi
O tema Colloid altera o aspecto visual da interface e dos ícones. Os comandos abaixo clonam os repositórios, executam os scripts de instalação e removem os arquivos temporários. Em seguida, o tema escuro é aplicado através da ferramenta gsettings.
Tema da Interface (GTK/Cinnamon):
git clone https://github.com/vinceliuice/Colloid-gtk-theme.git ~/Downloads/Colloid-temp
cd ~/Downloads/Colloid-temp
./install.sh -t all
cd - && rm -rf ~/Downloads/Colloid-temp
Tema de Ícones:
git clone https://github.com/vinceliuice/Colloid-icon-theme.git ~/Downloads/Colloid-icon-temp
cd ~/Downloads/Colloid-icon-temp
./install.sh -s all -t all
cd - && rm -rf ~/Downloads/Colloid-icon-temp
Aplicação do Tema Escuro via Terminal:
gsettings set org.cinnamon.desktop.interface gtk-theme "Colloid-Dark"
gsettings set org.cinnamon.desktop.wm.preferences theme "Colloid-Dark"
gsettings set org.cinnamon.theme name "Colloid-Dark"
gsettings set org.cinnamon.desktop.interface icon-theme "Colloid"
O iwd (iNet Wireless Daemon) substitui o wpa_supplicant e melhora a detecção de redes Wi-Fi (como em adaptadores USB) integrando-se de forma mais eficiente ao NetworkManager no Gentoo com systemd.
Habilite a USE flag e recompile o NetworkManager:
echo "net-misc/networkmanager iwd -wext" | sudo tee /etc/portage/package.use/networkmanager
sudo emerge --ask --changed-use net-misc/networkmanager
Instale e ative o iwd:
sudo emerge --ask net-wireless/iwd
sudo systemctl enable --now iwd
Configure o backend do NetworkManager para usar o iwd:
sudo mkdir -p /etc/NetworkManager/conf.d/
sudo tee /etc/NetworkManager/conf.d/wifi_backend.conf > /dev/null << 'EOF'
[device]
wifi.backend=iwd
EOF
Reinicie o NetworkManager e desative o wpa_supplicant:
sudo systemctl restart NetworkManager
sudo systemctl disable --now wpa_supplicant
Para iniciar a sessão automaticamente sem precisar digitar a senha, crie o grupo autologin e adicione o seu usuário (substitua xerxes pelo seu usuário):
sudo groupadd autologin
sudo gpasswd -a xerxes autologin
Verifique o nome exato da sessão disponível (o nome do arquivo sem a extensão .desktop):
ls /usr/share/xsessions/
Crie um arquivo de configuração dedicado para o autologin. Isso evita a necessidade de editar o arquivo principal com editores de texto. Substitua xerxes e cinnamon conforme a sua configuração:
sudo tee /etc/lightdm/lightdm.conf.d/60-autologin.conf > /dev/null << 'EOF'
[Seat:*]
autologin-user=xerxes
autologin-session=cinnamon
autologin-user-timeout=0
EOF
O uso do Git para sincronizar o Portage é muito mais rápido que o rsync padrão. Execute os comandos abaixo para alterar as configurações e fazer a primeira sincronização:
sudo mkdir -p /etc/portage/repos.conf
sudo tee /etc/portage/repos.conf/gentoo.conf > /dev/null << 'EOF'
[DEFAULT]
main-repo = gentoo
[gentoo]
location = /var/db/repos/gentoo
sync-type = git
sync-uri = https://anongit.gentoo.org/git/repo/sync/gentoo.git
auto-sync = yes
EOF
Agora apague a árvore antiga e sincronize a nova via Git:
sudo rm -rf /var/db/repos/gentoo
sudo emaint sync -a