Introdução
Artigo testado usando live-USB do
Linux Mint 22.3. Mas os comandos devem funcionar em qualquer live
Linux.
Este artigo foi feito e testado por mim e, posteriormente, melhorado com ajuda do ChatGPT, principalmente para mudar os comandos para ficar mais fácil de copiar e colar.
Por exemplo, ao invés de dizer “edite o arquivo tal e coloque a informação X”, os comandos já fazem isso automaticamente com uso de
cat e
echo.
Você perceberá que há dois blocos de comandos, um para discos
SATA e outro para
NVMe. Escolha o bloco que for apropriado para o seu caso.
O que seria um Gentoo binário?
A maioria dos componentes serão pacotes binários. Pouca coisa será compilada na sua máquina, agilizando bastante o processo de instalação. Não pretendo discutir vantagens e desvantagens aqui. A forma tradicional continua disponível no handbook oficial:
Obs.: seguir este artigo implica em apagar o disco inteiro.
Preparação dos discos
Os comandos a seguir são para formatação e criação das partições e estão divididos em dois blocos. O bloco
A é para
SATA e o
B para
NVMe.
Arquitetura FINAL (válida para SATA e NVMe)
A ideia central é a seguinte:
EFI e
/boot ficam fora da criptografia. Todo o sistema fica dentro de um LUKS2.
EFI -> vfat -> /boot/efi [FORA do LUKS]
/boot -> ext4 -> /boot [FORA do LUKS]
LUKS2 -> Btrfs -> /, /home, /.snapshots
BLOCO A — DISCO SATA / SCSI (/dev/sda)
Parte 1 — Limpar e particionar o disco (UEFI)
sudo -i
wipefs -a /dev/sda
parted -s /dev/sda mklabel gpt
EFI
parted -s /dev/sda mkpart EFI fat32 1MiB 1025MiB
parted -s /dev/sda set 1 esp on
/boot fora do LUKS
parted -s /dev/sda mkpart BOOT ext4 1025MiB 2049MiB
root criptografado
parted -s /dev/sda mkpart ROOT 2049MiB 100%
lsblk
O que foi feito:
Criamos três partições:
- EFI (vfat)
- /boot (ext4)
- root (para LUKS + Btrfs)
Parte 2 — Formatação + LUKS2 (Argon2id)
Agora formatamos
EFI e
/boot, e criamos o container criptografado.
mkfs.vfat -F32 /dev/sda1
mkfs.ext4 /dev/sda2
cryptsetup luksFormat \
--type luks2 \
--pbkdf argon2id \
--pbkdf-memory 262144 \
--pbkdf-parallel 2 \
/dev/sda3
cryptsetup open /dev/sda3 cryptroot
luksFormat: cria o container criptografado (Argon2id).
Parte 3 — Btrfs + subvolumes
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
Por quê subvolumes?
- facilitam snapshots
- evitam múltiplas partições
- tornam rollback e manutenção mais simples
Parte 4 — Montagem FINAL
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 /dev/sda2 /mnt/gentoo/boot
mkdir -p /mnt/gentoo/boot/efi
mount /dev/sda1 /mnt/gentoo/boot/efi
BLOCO B — DISCO NVMe (/dev/nvme0n1)
Atenção: em NVMe as partições são p1, p2, p3.
Parte 1 — Limpar e particionar o disco (UEFI)
sudo -i
wipefs -a /dev/nvme0n1
parted -s /dev/nvme0n1 mklabel gpt
EFI
parted -s /dev/nvme0n1 mkpart EFI fat32 1MiB 1025MiB
parted -s /dev/nvme0n1 set 1 esp on
/boot fora do LUKS
parted -s /dev/nvme0n1 mkpart BOOT ext4 1025MiB 2049MiB
root criptografado
parted -s /dev/nvme0n1 mkpart ROOT 2049MiB 100%
lsblk
Parte 2 — Formatação + LUKS2 (Argon2id)
mkfs.vfat -F32 /dev/nvme0n1p1
mkfs.ext4 /dev/nvme0n1p2
cryptsetup luksFormat \
--type luks2 \
--pbkdf argon2id \
--pbkdf-memory 262144 \
--pbkdf-parallel 2 \
/dev/nvme0n1p3
cryptsetup open /dev/nvme0n1p3 cryptroot
Parte 3 — Btrfs + subvolumes
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
Parte 4 — Montagem FINAL
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 /dev/nvme0n1p2 /mnt/gentoo/boot
mkdir -p /mnt/gentoo/boot/efi
mount /dev/nvme0n1p1 /mnt/gentoo/boot/efi
Parte 5 — Stage3 + chroot (igual para ambos)
Aqui instalamos o Gentoo base.
cd /mnt/gentoo
Abra o navegador e acesse:
Copie o link do
Stage3 Systemd:
Baixe o Stage3 systemd e execute:
wget -c [URL_DO_STAGE3]
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
source /etc/profile
Parte 6 — make.conf
Aqui definimos otimizações, perfil binário (
EMERGE_DEFAULT_OPTS="--binpkg-respect-use=y --getbinpkg=y"), driver de vídeo, licença...
Modelo genérico UNIVERSAL (funciona na grande maioria dos desktops)
Caso não queira configurar o make.conf pode usar este genérico. Basta copiar e colar para gerar o make.conf:
cat <<'EOF' > /etc/portage/make.conf
COMMON_FLAGS="-O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
MAKEOPTS="-j$(nproc)"
VIDEO_CARDS="amdgpu radeonsi intel i915 nouveau"
INPUT_DEVICES="libinput"
USE="systemd -elogind"
ACCEPT_LICENSE="*"
FEATURES="getbinpkg"
EMERGE_DEFAULT_OPTS="--binpkg-respect-use=y --getbinpkg=y"
LC_MESSAGES=C.utf8
EOF
Exemplo 1 (usei em uma máquina Intel)
cat <<'EOF' > /etc/portage/make.conf
COMMON_FLAGS="-march=haswell -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
MAKEOPTS="-j5"
VIDEO_CARDS="intel i915"
INPUT_DEVICES="libinput"
USE="systemd -elogind"
ACCEPT_LICENSE="*"
FEATURES="getbinpkg"
EMERGE_DEFAULT_OPTS="--binpkg-respect-use=y --getbinpkg=y"
LC_MESSAGES=C.utf8
EOF
Exemplo 2 — (usei em um AMD Ryzen (znver2))
cat <<'EOF' > /etc/portage/make.conf
COMMON_FLAGS="-march=znver2 -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
MAKEOPTS="-j12"
VIDEO_CARDS="amdgpu radeonsi"
INPUT_DEVICES="libinput"
USE="systemd -elogind"
ACCEPT_LICENSE="*"
FEATURES="getbinpkg"
EMERGE_DEFAULT_OPTS="--binpkg-respect-use=y --getbinpkg=y"
LC_MESSAGES=C.utf8
EOF
Na página seguinte veremos kernel, fstab e outros.