Installation mit UEFI und Verschlüsselung

Aus wiki.archlinux.de

Dieser Artikel beschreibt wie man Arch verschlüsselt und mit UEFI installiert. Das fertige System wird am Ende wie folgt konfiguriert sein.

  • Es wird UEFI zum Booten genutzt
  • SecureBoot wird deaktiviert sein
  • /home und / werden in einem LVM sein
  • Es wird keine Swap-Partition geben
  • Das LVM wird mit einem Passwort verschlüsselt sein

Die weiterführende Installation von Programmen, das Anlegen von Useraccounts, und die Konfiguration des Systems über die Grundinstallation hinaus sind nicht Teil dieses Artikels.

Vorarbeiten

  • Das aktuelle Arch-Image herunterladen und auf einen USB-Stick bringen
  • Das Live-Image starten und eine Netzwerkverbindung herstellen (WLAN manuell verbinden falls nötig)
  • Mittels loadkeys de-latin1 das Tastaturlayout einstellen (deutsche Tastatur mit Umlauten, ansonsten entsprechend)

Partitionierung

Es wird in diesem Artikel davon ausgegangen, dass es sich um ein modernes System mit NVMe-SSD handelt, entsprechend wird nvme0n1 verwendet, um den Datenträger zu referenzieren. Auf dem System sollte vorab mittels lsblk -do KNAME,TYPE,SIZE,MODEL geprüft werden, welche Datenträger erkannt werden, und wie diese referenziert werden. An allen Stellen, an denen nvme0n1 genannt wird, muss dies mit dem ermittelten Device ersetzt werden.

Sofern die SSD schon Daten enthielt, ist es sinnvoll den Datenträger zuerst einmal zu bereinigen. Hierzu ist es ausreichend, das komplette Device mit Nullen zu überschreiben. Sofern die Dateisysteme noch Daten enthalten, die man weiterhin verwenden möchte, so ist vorher ein Backup zu machen. Die Daten sind hinterher unwiederbringlich verloren!

dd status=progress if=/dev/zero of=/dev/nvme0n1

Wenn der Vorgang abgeschlossen ist, wird die Partitionierung wie folgt vorgenommen. Die EFI-Partition ist mit 512 Megabyte relativ groß, bietet dadurch aber maximale Flexibilität und ist Zukunftssicherer, als zum Beispiel nur 100 oder gar 50 Megabyte zu verwenden, vor allem, weil auf der Partition später auch die Kernel-Images liegen, da sie zusätzlich als /boot verwendet wird.

  • gdisk /dev/nvme0n1 – Starten von gdisk
  • o – Erzeugen einer neuen GPT im cache. (Protektiver MBR zur Kompatibilität)
  • y – Bestätigung
  • n – Erstellen einer neuen Partition
  • ↵ Enter – Partitionsnummer bestätigen
  • ↵ Enter – Den ersten Sektor bestätigen
  • +512M – Die Partitionsgröße festlegen
  • ef00 – Den Partitionstyp einer EFI-Partition setzen
  • n – Eine weitere Partition erstellen
  • ↵ Enter – Partitionsnummer bestätigen
  • ↵ Enter – Ersten Sektor bestätigen
  • ↵ Enter – Letzten Sektor bestätigen
  • ↵ Enter – Linux Partitionstyp (8300) bestätigen

Mittels P kann man sich die Partitionstabelle nun noch mal ansehen. Es sollten dort zwei Partitionen erscheinen, die erste Partition hat als „Name“ „EFI System“ angegeben und ist 512 MiB groß, die zweite Partition ist „Linux System“ und ist so groß, wie der restliche Platz auf dem Datenträger

Wenn dies der Fall ist, mittels W und danach Y die Partitionstabelle auf die SSD schreiben.

Zweite Partition verschlüsseln und das LVM einrichten

Die Partitionierung als Schema

Nach Einrichtung der Partitionen wird in der zweiten Partition nun mittels dm-crypt ein verschlüsselter Container erstellt, der sich über die gesamte Partition erstreckt. In diesem Container wird ein LVM erstellt, das die Root-Partition / und die /home-Partition enthält. Dies wird gemacht, damit man mit nur einem Passwort an alle Dateisysteme kommt, ohne mit Scripts oder einer crypttab arbeiten zu müssen.

Zuerst sollte mittels blkid geprüft werden, welches das Device für die Zweite Partition ist. Der Artikel geht davon aus, dass dies /dev/nvme0n1p2 ist. Diese Referenz ist entsprechend anzupassen.

  • modprobe dm-crypt – Kernelmodul für die Verschlüsselung laden
  • cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/nvme0n1p2 – Verschlüsseln (YES und dann zweimal das gewünschte Passwort)

Die zweite Partition ist damit verschlüsselt. Das Passwort unbedingt gut merken, ohne dieses ist kein rankommen mehr an alle Dateien im späteren / und /home.

Die Dateisysteme werden in einem LVM angelegt. Hierzu wird der verschlüsselte Container zuerst entschlüsselt und gemappt. In dem dann zugänglichen Container wird dann ein Physical Volume (PV) erstellt in dem dann eine Volume Group (VG) angelegt wird, in der dann die nötigen Logical Volumes (LVs) definiert werden.

Die Root-Partition sollte dem zukünftigen Verwendungszweck des Geräts angepasst werden. Wenn man sehr viel große Software wie zum Beispiel Spiele installiert, sollte man / entsprechend größer bemessen. Wenn man nur ein Basis-System haben will, und die Daten nur Benutzerseitig anfallen, reichen 30-40 Gigabyte aus. Auch hier gilt, im Zweifelsfall lieber auf Nummer sicher gehen.

Auf einem durchschnittlichen Alltagssystem reichen 50 Gigabyte im Regelfall sehr gut aus, und schaffen einen guten Kompromiss aus Ausfallsicherheit und für Anwender nutzbarem Platz

  • cryptsetup luksOpen /dev/nvme0n1p2 lvm – Den Container nach /dev/mapper/lvm mappen
  • pvcreate /dev/mapper/lvm – PV erstellen
  • vgcreate main /dev/mapper/lvm – VG anzulegen
  • lvcreate -L 50GB -n root main – LV für / definieren
  • lvcreate -l 100%FREE -n home main – LV für /home erstellen (kleines L im Parameter beachten!)

Dateisysteme erstellen und für die Installation mounten

Nach der Einrichtung des Verschlüsselten LVMs müssen die erzeugen LVs noch formatiert werden. Auch die angelegte EFI-Partition muss noch entsprechend vorbereitet werden. Der Artikel geht davon aus, dass die erste Partition /dev/nvme0n1p1 ist.

  • mkfs.fat -F 32 -n UEFI /dev/nvme0n1p1 – Formatieren der EFI-Partition
  • mkfs.ext4 -L root /dev/mapper/main-root – Das zukünftige / formatieren
  • mkfs.ext4 -L home /dev/mapper/main-home – Das zukünftige /home formatieren

Nachdem die Dateisysteme erstellt wurden, müssen sie für die Installation gemountet werden.

# Rootpartition mounten
mount /dev/mapper/main-root /mnt

# Homepartition mounten
mkdir /mnt/home
mount /dev/mapper/main-home /mnt/home

# Bootpartition mounten
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot

Hiernach kann die Grundinstallation angegangen werden

Die Grundinstallation durchführen und System konfigurieren

Die nun durchführbare Grundinstallation unterscheidet sich im großen und ganzen nur an einigen Stellen von einer herkömmlichen Grundinstallation.

  • Mit der Bevorzugten Methode die Spiegelserver auswählen
  • pacstrap /mnt base base-devel dosfstools gptfdisk lvm2 linux linux-firmware dhcpcd nano – Installation des Hauptsystems.
  • genfstab -Lp /mnt > /mnt/etc/fstab – Übertragen/erzeugen der fstab
  • arch-chroot /mnt – In das installierte System wechseln
  • echo MeinTollerRechnername > /etc/hostname – Hostnamen festlegen

Die Systemsprache wird in /etc/locale.gen und /etc/locale.conf definiert. Es ist eine gute Entscheidung, das System als solches auf Englisch zu belassen, also in /etc/locale.conf keine Konfiguration vorzunehmen, sondern lediglich in /etc/locale.gen die gewünschten Angaben einzukommentieren.

/etc/locale.gen
de_DE.UTF-8 UTF-8
en_DK.UTF-8 UTF-8
en_US.UTF-8 UTF-8

Danach mittels locale-gen die entsprechenden Locales generieren. Welche Sprache die Benutzeroberfläche nachher haben soll, kann in den entsprechenden Dateien im Homeverzeichnis der jeweiligen Anwender definiert werden.

Sofern man eine deutsche Tastatur verwendet, und öfters ohne X unterwegs ist, bietet sich an, dies per echo KEYMAP=de-latin1 > /etc/vconsole.conf entsprechend im System zu hinterlegen. Ebenso sollte man seine Zeitzone entsprechend verlinken. Für Deutschland geht das per ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime. Weitere Informationen dazu, finden sich in Arch Linux auf Deutsch stellen.

Damit das System beim booten alle nötigen Module laden kann, muss die mkinitcpio angepasst werden. Und zwar gibt es dort eine Liste MODULES und eine Liste HOOKS, diese müssen wie folgt aussehen.

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

Wenn die Datei angepasst wurde, muss mittels mkinitcpio -p linux das Kernel-Image neu erstellt werden. Danach wird noch mittels passwd ein Root-Password gesetzt.

UEFI-Bootloader installieren und konfigurieren

Der Einfachheit halber kommt als EFI-Bootloader bootctl von Systemd zum Einsatz. Dieser wird mittels bootctl install vorbereitet. Nach der Vorbereitung müssen die zu bootenden Systeme konfiguriert werden. Dies geschieht, indem man die entsprechenden Dateien wie folgt anlegt.

/boot/loader/entries/arch.conf
title    Arch Linux
linux    /vmlinuz-linux
initrd   /initramfs-linux.img
options  cryptdevice=/dev/nvme0n1p2:main root=/dev/mapper/main-root rw lang=de init=/usr/lib/systemd/systemd locale=de_DE.UTF-8
/boot/loader/entries/arch-fallback.conf
title    Arch Linux Fallback
linux    /vmlinuz-linux
initrd   /initramfs-linux-fallback.img
options  cryptdevice=/dev/nvme0n1p2:main root=/dev/mapper/main-root rw lang=de init=/usr/lib/systemd/systemd locale=de_DE.UTF-8
/boot/loader/loader.conf
timeout 1
default arch.conf

Achtung: Es wird dem System zwar mittels init=/usr/lib/systemd/systemd die richtige Init-Binary genannt, allerdings kann das Paket systemd-sysvcompat seit dem 6. Oktober 2019 nicht mehr deinstalliert werden, da es zwangsweise als harte Abhängigkeit mit dem base-Metapaket installiert wird.

System verlassen und neu starten

An diesem Punkt ist das System installiert und konfiguriert, sowie der EFI-Bootloader installiert und konfiguriert. Nun wird das Installierte System sauber verlassen, und das Gerät neu gestartet.

exit
umount /mnt/{boot,home,}
reboot

Beim starten wird man nun nach dem Passwort für /dev/nvme0n1p2 gefragt. Dies enthält, wie konfiguriert, die VG mit den beiden LVs für / und /home. Wenn das System hochgefahren ist, kann man sich mit root mit dem zuvor vergebenen Kennwort anmelden. An diesem Punkt hat man eine verschlüsselte, UEFI nutzende, vollwertige Installation von Arch Linux, die man als Grundlage nutzen kann, um sein System individuell nach Einsatzzweck aufzubauen.

Anschließende Artikel

Weblinks