Arch Linux Setup mit Verschlüsselung (LVM auf LUKS)
Ich möchte Arch Linux mit Verschlüsselung einrichten. Ich habe das Tutorial im Arch-Wiki gefunden und denke, dass die zweite Option (LVM auf LUKS) die beste Option für mich ist. Hier ist die Partitionierung, die ich verwenden möchte (Thinkpad X1 Carbon, ~ 500 GB SSD, 16 GB RAM):
- [Ausrichtungslücke] 1 MB
/boot256 MB (FAT 32)- Swap 16 GB (Speichergröße)
/(root) 64 GB (ext4)/var8 GB (ext4)/tmp4 GB (ext4)/home~ 400 GB (ext4, Rest)
Die Festplatte hat den Namen nvme0n1. Nach dem Booten des Installationsprogramms (Version September 2020) und dem Herstellen einer Verbindung zum WLAN überschreibe ich die Festplatte mit zufälligen Daten:
# shred --random-source=/dev/urandom --iterations=3 /dev/nvme0n1
Dann richte ich ein neues GPT-Partitionsschema ein:
# parted -s /dev/nvme0n1 mklabel gpt
Als Nächstes erstelle und formatiere ich eine Boot-Partition mit einer Ausrichtungslücke von 1 MB davor.
# parted -s /dev/nvme0n1 mkpart boot fat32 1MiB 257MiB
# parted -s /dev/nvme0n1 set 1 esp on
# mkfs.fat -F 32 /dev/nvme0n1p1
Jetzt kommt der Teil, in dem das Wiki unklar ist. (Es wird nur erwähnt, dass es möglich ist, /bootauf einem anderen Gerät zu arbeiten, was ich nicht habe.) Ich habe beschlossen, eine andere Partition zu erstellen, auf der sich mein verschlüsseltes Volume befindet:
# parted -s /dev/nvme0n1 mkpart cryptlvm 257MiB '100%'
Dadurch wird eine zweite Partition /dev/nvme0n1p2mit der verbleibenden Festplattengröße erstellt. (Möglicherweise verursacht dieser Schritt das Problem.) Ich richte die Verschlüsselung weiter ein:
# cryptsetup luksFormat /dev/nvme0n1p2 # YES, entering passphrase twice
# cryptsetup open /dev/nvme0n1p2 cryptlvm # entering passphrase
# pvcreate /dev/mapper/cryptlvm
# vgcreate VolumeGroup /dev/mapper/cryptlvm
Dann erstelle ich die Partitionen wie oben beschrieben:
# 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
Die Partitionen werden jetzt formatiert:
# 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
Und montiert:
# 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
Das System kann jetzt zusammen mit folgenden Funktionen gebootet werden lvm2:
# pacstrap /mnt base liux linux-firmware lvm2
Ich erstelle und speichere auch fstab:
# genfstab -U /mnt >> /mnt/etc/fstab
Ich chrootin das Bootstrap-System:
# arch-chroot /mnt
Wie im Wiki erwähnt, füge ich die Hooks hinzu encryptund lvm2in /etc/mkinitcpio.conf:
HOOKS=(base udev autodetect keyboard keymap consolefont modconf block filesystems fsck encrypt lvm2)
Ich fahre mit den üblichen Setup-Aufgaben fort (Root-Passwort einrichten, Basispakete installieren, Zeitzone, Gebietsschema, Sprache, Hostname festlegen):
# 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
Jetzt kommt der Bootloader. Hier verwende ich traditionell den systemd Bootloader anstelle von grub. So habe ich es eingerichtet:
# systemd-machine-id-setup
# bootctl --path=/boot install
Ich finde die UUID (nicht PARTUUID) der Root-Partition wie folgt heraus:
# blkid | grep /dev/VolumeGroup/root | egrep -o 'UUID="[^"]!"'
UUID="6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf"
Dann erstelle ich den Starteintrag in /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
Und eine Übereinstimmung /boot/loader/loader.conf:
default arch
timeout 0
editor 0
Zu guter Letzt renne ich mkinitcpio, bevor ich mich auf den Weg zu einem neuen Boot mache:
# mkinitcpio -P
# exit
# umount -R /mnt
# shutdown -h now
Das war also mein Setup-Verfahren. Ich entferne den USB-Dongle und starte das System. Der Bootloader wird angezeigt, aber dann wird der folgende Bildschirm angezeigt:
:: 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.
Jetzt bin ich ziemlich ahnungslos, was ich falsch gemacht habe. Ein Verdacht ist die zweite Partition ( /dev/nvme0n1p2), die ich erstellen musste. Ein weiterer Verdacht ist, dass ich mit dem Bootloader etwas falsch gemacht habe. Bei normalen Setups verwende ich immer die PARTUUID anstelle der UUID. (Es gibt jedoch keine PARTUUID in der Ausgabe von blikd, daher ist dies wahrscheinlich nicht das Problem.)
Antworten
Da @frostschutz seine richtige Lösung für das Problem noch nicht als Antwort geschrieben hat, fasse ich das Problem hier schnell zusammen: Ich habe die UUID der falschen Partition ausgewählt. Die Root-Partition unter /dev/VolumeGroup/rootist nicht die zu wählende, sondern die eigentliche Partition /dev/nvme0n1p2. So extrahieren Sie diese UUID:
# uuid=$(blkid --match-tag UUID -o value /dev/nvme0n1p2)
Was dann in der Bootloader-Eintragskonfiguration verwendet werden kann:
# 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
Ich habe den gesamten Vorgang auf meiner privaten Website zusammengefasst . Vielen Dank auch an @Cbhihe für den Rat zu Partitionsgrößen.