Artix Linux - Verschlüsseltes btrfs root

Kurz zur Erklärung weshalb ich mich trotz aller Hürden gerade für diese Kombination entschieden habe:

Partitionierung

Es werden mindestens drei Partitionen benötigt:

Die boot-Partition kann nicht verschlüsselt werden, weil gängige Bootloader noch keine Verschlüsselung beherrschen und der Bootloader somit den Kernel und das initramfs von einer unverschlüsselten Partition laden müssen. Zur Grösse der Bootpartition siehe auch Partitionierung für Artix Linux.

Installation

Die folgenden Schritte führen zu einem verschlüsseltem root-filesystem mit btrfs. Das Ganze scheint immer noch experimentell zu sein, beim booten gibt's ein paar Fehlermeldungen im Zusammenhang mit dem initramfs (ohne Gewähr)

Der Name des Haupt-Subvolumes ist so gewählt, damit das "schnapps" Script (zum Erstellen von Schnappschüssen des btrfs) vom Turris Omnia ohne grosse Änderungen läuft ;-)

mkfs.vfat -F32 /dev/$YOUR_EFI_PART fatlabel /dev/$YOUR_EFI_PART ESP mkfs.btrfs -L boot /dev/$YOUR_BOOT_PART cryptsetup luksFormat -y -s 512 /dev/$YOUR_ROOT_PART cryptsetup luksOpen /dev/$YOUR_ROOT_PART root # Make root filesystem: mkfs.btrfs -L btrfs-root /dev/mapper/root mount -o defaults,noatime /dev/mapper/root /mnt && cd /mnt btrfs subvolume create @ && cd @ btrfs subvolume create home btrfs subvolume create var btrfs subvolume create swap mkdir boot efi chmod 755 ../@ boot efi home var cd / umount /mnt mount -o defaults,noatime,subvol=@ /dev/mapper/root /mnt && cd /mnt mount /dev/$YOUR_BOOT_PART /mnt/boot mount /dev/$YOUR_EFI_PART /mnt/efi

Um die Installation zu beschleunigen, kann man ggf. zu diesem Zeitpunkt einen lokalen Mirror konfigurieren befor man fortfährt:

/etc/pacman.d/mirrorlist
Server = http://archmirror.localnet/$arch/$repo

Jetzt wird das Base System installiert, und dann konfiguriert:

# Installiere base system basestrap /mnt base base-devel cryptsetup dinit elogind-dinit linux linux-firmware fstabgen -U /mnt >> /mnt/etc/fstab artix-chroot /mnt # HIER ARTIX ANLEITUNG FOLGEN pacman -S grub efibootmgr echo "$YOUR_HOSTNAME" > /etc/hostname # TODO: also add info to /etc/hosts ln -sf /usr/share/zoneinfo/$YOUR_ZONEINFO /etc/localtime hwclock --systohc echo 'LANG="en_US.UTF-8"' > /etc/locale.conf echo 'KEYMAP="de_CH-latin1"' > /etc/vconsole.conf

TODO: pacman -S btrfs-progs

Nun muss in der Konfigurationsdatei für mkinitcpio noch der encrypt-hook (VOR dem filesystems hook) gesetzt werden (Achtung für remote-unlock siehe dort).

/etc/mkinitcpio.conf
... HOOKS=(base udev autodetect modconf block encrypt filesystems keyboard fsck shutdown) ...

Dann

mkinitcpio -p linux

Falls es sich um ein headless/embedded System handelt, bitte einen Blick in die Anleitung remote unlock werfen.

Ab hier verläuft die Installation "normal" weiter, es wäre nun die Installation des Bootloaders an der Reihe.
Als Bootloader kann GRUB oder SYSLINUX verwendet werden.

pacman -S grub
pacman -S btrfs-progs kexec-tools curl -O https://aur.archlinux.org/packages/mk/mkinitcpio-btrfs/mkinitcpio-btrfs.tar.gz tar xvf mkinitcpio-btrfs.tar.gz cd mkinitcpio-btrfs makepkg -s pacman -U mkinitcpio.......pkg.tar.xz

Dann die /etc/mkinitcpio.conf editieren (HOOKS encrypt btrfs_advanced shutdown) hinzufügen. Zudem muss BTRFS_ROLLBACK_KERNEL=false in der Datei /etc/default/btrfs_advanced gesetzt werden.
Abschliessend die initrd mit neu erzeugen:

mkinitcpio -p linux