Configuração do Arch Linux com criptografia (LVM em LUKS)
Eu gostaria de configurar o Arch Linux com criptografia. Eu encontrei o tutorial no wiki do Arch , e acho que a segunda opção (LVM no LUKS) é a melhor opção para mim. Aqui está o particionamento que eu gostaria de usar (Thinkpad X1 Carbon, ~ 500 GB SSD, 16 GB de RAM):
- [lacuna de alinhamento] 1 MB
/boot256 MB (FAT 32)- trocar 16 GB (tamanho da memória)
/(root) 64 GB (ext4)/var8 GB (ext4)/tmp4 GB (ext4)/home~ 400 GB (ext4, restante)
O disco tem o nome nvme0n1. Depois de inicializar o instalador (versão de setembro de 2020) e conectar ao WiFi, sobrescrevo o disco com dados aleatórios:
# shred --random-source=/dev/urandom --iterations=3 /dev/nvme0n1
Em seguida, configuro um novo esquema de partição GPT:
# parted -s /dev/nvme0n1 mklabel gpt
Em seguida, crio e formato uma partição de boot com uma lacuna de alinhamento de 1 MB na frente dela.
# parted -s /dev/nvme0n1 mkpart boot fat32 1MiB 257MiB
# parted -s /dev/nvme0n1 set 1 esp on
# mkfs.fat -F 32 /dev/nvme0n1p1
Agora vem a parte em que o wiki não está claro. (Ele apenas menciona que é possível ter /bootem um dispositivo diferente, o que eu não faço.) Decidi fazer outra partição, em cima da qual meu volume criptografado estará localizado:
# parted -s /dev/nvme0n1 mkpart cryptlvm 257MiB '100%'
Isso cria uma segunda partição /dev/nvme0n1p2com o tamanho do disco restante. (Talvez esta etapa cause o problema.) Continuo configurando a criptografia:
# cryptsetup luksFormat /dev/nvme0n1p2 # YES, entering passphrase twice
# cryptsetup open /dev/nvme0n1p2 cryptlvm # entering passphrase
# pvcreate /dev/mapper/cryptlvm
# vgcreate VolumeGroup /dev/mapper/cryptlvm
Em seguida, crio as partições conforme descrito acima:
# lvcreate -L 16G VolumeGroup -n swap
# lvcreate -L 64G VolumeGroup -n root
# lvcreate -L 8G VolumeGroup -n var
# lvcreate -L 4G VolumeGroup -n tmp
# lvcreate -l '100%FREE' VolumeGroup -n home
As partições agora estão sendo formatadas:
# mkswap /dev/VolumeGroup/swap
# mkfs.ext4 -F /dev/VolumeGroup/root
# mkfs.ext4 -F /dev/VolumeGroup/var
# mkfs.ext4 -F /dev/VolumeGroup/tmp
# mkfs.ext4 -F /dev/VolumeGroup/home
E montado:
# mount /dev/VolumeGroup/root /mnt
# mkdir /mnt/boot
# mount /dev/nvme0n1p1 /mnt/boot
# mkdir /mnt/var
mount /dev/VolumeGroup/var /mnt/var
# mkdir /mnt/tmp
mount /dev/VolumeGroup/tmp /mnt/tmp
# mkdir /mnt/home
mount /dev/VolumeGroup/home /mnt/home
O sistema agora pode ser inicializado junto com lvm2:
# pacstrap /mnt base liux linux-firmware lvm2
Eu também crio e armazeno fstab:
# genfstab -U /mnt >> /mnt/etc/fstab
I chrootno sistema inicializado:
# arch-chroot /mnt
Conforme mencionado no wiki, adiciono os ganchos encrypte lvm2em /etc/mkinitcpio.conf:
HOOKS=(base udev autodetect keyboard keymap consolefont modconf block filesystems fsck encrypt lvm2)
Eu continuo com as tarefas de configuração normais (configuração de senha raiz, instalação de pacotes básicos, configuração de fuso horário, localidade, idioma, nome do host)
# passwd
# pacman -S iw wpa_supplicant dialog intel-ucode netctl dhcpcd
# ln -sf /usr/share/zoneinfo/Europe/Zurich /etc/localtime
# timedatectl set-ntp true
# hwclock --systohc
# echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
# locale-gen
# echo 'LANG=en_US.UTF-8' > /etc/locale.conf
# echo -n 'x1' > /etc/hostname
Agora vem o bootloader. Aqui, eu tradicionalmente uso o bootloader systemd em vez do grub. Veja como eu configurei:
# systemd-machine-id-setup
# bootctl --path=/boot install
Eu descobri o UUID (não PARTUUID) da partição raiz da seguinte maneira:
# blkid | grep /dev/VolumeGroup/root | egrep -o 'UUID="[^"]!"'
UUID="6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf"
Então eu crio a entrada de inicialização em /boot/loader/entries/arch.conf:
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options cryptdevice=UUID=6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf:cryptlvm root/dev/VolumeGroup/root
E um acordo /boot/loader/loader.conf:
default arch
timeout 0
editor 0
Por último, mas não menos importante, corro mkinitcpio, antes de partir para uma nova inicialização:
# mkinitcpio -P
# exit
# umount -R /mnt
# shutdown -h now
Então esse foi o meu procedimento de configuração. Eu removo o dongle USB e inicializo o sistema. O bootloader aparece, mas então eu obtenho a seguinte tela:
:: running early hook [udev]
Starting version 246.6-1-arch
:: running early hook [lvm2]
:: running hook [udev]
:: Triggering uevents...
:: running hook [encrypt]
Waiting 10 seconds for device /dev/disk/by-uuid/6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf ...
Waiting 10 seconds for device /dev/VolumeGroup/root ...
ERROR: device '/dev/VolumeGroup/root' not found. Skippng fsck.
:: mounting '/dev/VolumeGroup/root' on real root
mount: /new_root: no filesystem type specified.
You are now being dropped into an emergency shell.
Agora não tenho idéia do que fiz de errado. Uma suspeita é a segunda partição ( /dev/nvme0n1p2) que precisei criar. Outra suspeita é que fiz algo errado com o bootloader. Em configurações regulares, sempre uso o PARTUUID em vez do UUID. (No entanto, não há PARTUUID na saída de blikd, então provavelmente esse não é o problema.)
Respostas
Como @frostschutz ainda não escreveu sua solução correta para o problema como resposta, vou resumir o problema aqui rapidamente: Escolhi o UUID da partição errada. A partição raiz em /dev/VolumeGroup/rootnão é aquela a ser escolhida, mas a partição real /dev/nvme0n1p2. Veja como extrair esse UUID:
# uuid=$(blkid --match-tag UUID -o value /dev/nvme0n1p2)
Que então pode ser usado na configuração da entrada do carregador de boot:
# cat <<EOF >/boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options cryptdevice=UUID=${uuid}:cryptlvm root=/dev/volgrp/root
EOF
Resumi todo o procedimento no meu site privado . Obrigado também a @Cbhihe pelos conselhos sobre o tamanho das partições.