Na da hab ich mir ja mal wieder was vorgenommen. Das neue Business-Notebook meines neuen Arbeitgeber ist eingetroffen. Leider komme ich bei meinem Arbeiten nicht um Windows 10 herum, aber ich kann es mir nicht nehmen lassen mir ein Linux auf der Kiste zu installieren.
Aufgrund von Sicherheitsrichtlinien müssen beide Systeme verschlüsselt sein. Windows 10 mit Bitlocker (AES 256-bit) und Arch Linux mit einem AES 512-bit LUKS-Container.
Die Konfiguration
Das Windows 10 kommt mit einer 250 GB Partition bereits von meiner IT. Daher muss ich lediglich das Linux installieren ohne das Windows zu zerstören.
Auf die Festplatte kommt (bzw. ist) eine UEFI Partition (Bootloader). Von dort kann man dann entweder ins Windows booten oder in einen verschlüsselten LUKS Container mit Arch Linux und einer kleinen SWAP-Partition.
Vorbereitung
Bitlocker deaktivieren
Zunächst muss Bitlocker deaktiviert werden. Leider habe ich keine Informationen, warum das so ist, nur „das Internet“ berichtet sonst von Problemen. Mit Admin-Rechten kann man das ganz einfach im Windows erledigen. Bitlocker kann danach wieder aktiviert werden.
SATA Operation auf AHCI stellen
Damit Linux die Platte erkennt und die Geschwindigkeit der SSD vollumfänglich ausgenutzt werden kann, muss im BIOS die SATA Operation auf AHCI gestellt werden. Unter Dell unter „System Configuration“ -> „SATA Operation“ -> „AHCI“
ACHTUNG: Ist das Windows 10 bereits vorinstalliert und wurde dieses mit „RAID on“ installiert, muss das Windows erst für AHCI vorbereitet werden, ansonsten startet das Betriebssystem nicht mehr. Dazu wie folgt vorgehen (vgl. https://mauriceneumann.de/ahci-modus-nachtraeglich-in-windows-10-aktivieren/):
- BIOS zunächst nicht umstellen und z.B. im „RAID on“ Modus belassen
- Windows 10 starten
- Eingabeaufforderung (cmd.exe) als Administrator öffnen
- Abgesicherten Modus mit folgenden Befehl aktivieren: bcdedit /set {current} safeboot minimal
- PC neustarten
- Beim Neustart ins BIOS wechseln (Oft mit der Taste Entf oder F2)
- Wechsel von IDE oder RAID on auf den AHCI Modus. Einstellung speichern
- Windows 10 wird jetzt im abgesicherten Modus gestartet
- Eingabeaufforderung (cmd.exe) als Administrator öffnen
- Abgesicherten Modus mit folgenden Befehl beenden: bcdedit /deletevalue {current} safeboot
- PC neustarten
- Der AHCI Modus ist jetzt aktiviert
Hinweis für Thunderbolt Docking Stationen
Mein Dell Latitude 5501 hat eine WD19TB Dockingstation welche mit Thunderbolt angeschlossen wird. Diese wurde nach der Umstellung auf AHCI nicht mehr erkannt. Die Lösung: Im BIOS muss das Security Level auf „none“ gestellt werden.
Das Security Level muss aber für Linux sowieso herabgesetzt werden, da sonst Geräte an der Dockingstation nicht erkannt werden, bzw. alle Geräte am Thunderbolt nicht erkannt werden (vgl. https://eischmann.wordpress.com/2017/06/29/thunderbolt-security-levels-and-linux-desktop/).
Secureboot deaktivieren
Eine Installation von Arch Linux mit USB-Stick mit Secureboot ist zwar möglich. Es wird aber nicht empfohlen (vgl. https://wiki.archlinux.de/title/UEFI_Installation). Es können wohl auch weitere Probleme auftreten.
Installations-Medium erstellen
Und natürlich müssen wir auch noch Linux irgendwie installieren können. Daher brauchen wir einen leeren USB Stick und ein Arch-Image. Image herunterladen und dann mit DD auf einen leeren USB-Stick schreiben:
dd bs=4M if=path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync
(https://wiki.archlinux.org/index.php/USB_flash_installation_media#BIOS_and_UEFI_bootable_USB) Danach kann der USB-Stick angesteckt werden und (meistens) mit F12 beim Systemstart (temporäres Bootmedium einstellen) davon gebootet werden.
Installation von Arch Linux im LUKS Container
Eine Linux-root-Konsole sollte am Bildschirm erscheinen. Im Grunde ist alles im sehr ausführlichen Arch Wiki beschrieben. Leider sind die einzelnen Artikel aber teilweise leicht versteckt und es gibt Diskrepanzen zwischen den Übersetzungen. Einige Punkte sind nur im deutschen Wiki beschrieben, Anderes nur im englischen Wiki. Ich halte mich gerne an den Beginners guide: https://wiki.archlinux.org/index.php/Installation_guide
Ab jetzt folgt eine Kurzzusammenfassung. Im Beginners Guide ist alles ausführlicher Beschrieben.
Deutsches Tastaturlayout laden:
loadkeys de-latin1
Freien Speicherplatz partitionieren
Zunächst kann mit dem Befehl
fdisk -l
eine Übersicht geschaffen werden. Wie Windows die Partitionen angelegt hat. Bei mir ist eine 1TB NVME Festplatte verbaut bei der Windows drei Partitionen angelegt hat:
- /dev/nvme0n1p1: EFI System – Die Partiton für den UEFI Bootloader
- /dev/nvme0n1p2: Microsoft reserved – Reservierter Speicher für Sicherungsdaten von Microsoft
- /dev/nvme0n1p3: Microsoft basic data – Die C-Partition für Windows 10
Damit sind 250GB belegt und es bleiben noch 750GB für Linux. Mit
gdisk /dev/nvme0n1
können die weiteren Partitionen angelegt werden. Die Wichtigsten Befehle:
p # Print der aktuellen Tabelle
o # Neue Tabelle anlegen
n # Neue Partition erstellen
w # Schreibe Tabelle auf die Festplatte
Da wir nur eine Partition für den LUKS-Container brauchen (siehe Bild oben) reicht es, wenn wir eine neue Partition über die restlichen 750GB des Speichers erstellen:
n [Enter] Partition number (default 4): [Enter] First sector: [Enter] Last sector: [Enter] Hex code or GUID: 8E00 (Für Linux LVM) [Enter] p (Um nochmal alles anzuzeigen) w (schreiben der Tabelle auf die Festplatte)
Mit „p“ kann man sich jetzt nochmal die gesamte Tabelle anzeigen lassen. Eine vierte Partition für Linux LVM sollte angelegt worden sein. Mit „w“ kann die Tabelle auf die Festplatte geschrieben werden.
Verschlüsselten LUKS Container mit LVM anlegen
Nun erstellen wir den verschlüsselten Container auf /dev/nvme0n1p4 mit LUKS.
Mehr Infos: https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS
Mehr Infos zu cryptsetup: https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode
Die soeben angelegte Partition unter /dev/nvme0n1p4 wird nun verschlüsselt. Dazu können verschiedene Algorithmen und Schlüssellängen gewählt werden. Welche Algorithmen auf dem System am schnellsten funktionieren, kann mit einem Benchmark ermittelt werden:
cryptsetup benchmark
In meinem Fall fällt die Auswahl auf aes-xts-plain64 mit 512-bit Schlüssellänge:
cryptsetup luksFormat -c aes-xts-plain64 -s 512 /dev/nvme0n1p4
Nun einfach der Anweisung auf dem Bildschirm folgen. Bitte sicherstellen, dass auch die richtige Partition ausgewählt wird, da LUKS alles verschlüsselt. Anschließend muss der Container wieder geöffnet werden und auf LVM gemapped werden.
# Öffnet verschlüsselten Cotainer wieder und mapped auf "lvm"
cryptsetup open --type luks /dev/nvme0n1p4 lvm
Mit dem Befehl „lsblk“ kann man Prüfen ob alles geklappt hat.
LVM innerhalb des LUKS-Containers erstellen
Wir haben zwar jetzt einen (offenen) verschlüsselten Container, haben darin aber noch kein LVM. Dieses wird mit den folgenden Befehlen erstellt:
vgcreate main /dev/mapper/lvm # Erstelle Volume Group auf /dev/mapper/lvm mit Namen "main"
lvcreate -L 32G main -n swap # Erstelle 32GB SWAP
lvcreate -l 100%FREE main -n root # Erstelle root mit Rest
Achtet bitte beim letzten Befehl darauf: Ein kleines „-l“ kein „-L“. Zum Swap: Ich halte mich nach wie vor daran: 2x RAM-Größe = SWAP-Größe. Mit dem Befehl „lsblk“ kann man wieder Prüfen ob alles geklappt hat.
Filesystem erstellen
Jetzt fehlt nur noch das Filesystem auf den innerhalb des Containers erstellten Partitionen:
mkfs.ext4 /dev/mapper/main-root
mkswap /dev/mapper/main-swap
Festplatten mounten
Nun müssen lediglich die Partitionen an der richtigen Stelle gemounted werden und die Installation kann beginnen:
mount /dev/mapper/main-root /mnt
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
swapon /dev/mapper/main-swap
Ab jetzt kann mit https://wiki.archlinux.org/index.php/Installation_guide#Installation fortgefahren werden, bis man zum Kernel kommt (Befehl mkinitcpio -P).
Hooks für Linux-Kernel anpassen
Folgende Datei muss angepasst werden: /etc/mkinitcpio.conf
HOOKS="base udev autodetect modconf block keyboard keymap encrypt lvm2 filesystems fsck shutdown"
Die Reihenfolge ist dabei extrem wichtig! Danach folgenden Befehl ausführen:
mkinitcpio -p linux
systemd bootctl konfigurieren (ehemals Gummiboot)
Zunächst müssen zwei Pakete nachinstalliert werden
pacman -S lvm2 dhcpcd
Diese sind später wichtig für ein funktionierendes Internet und der entschlüsselung des lvm. Näheres zu den Folgenden Befehlen ist hier zu finden: https://wiki.archlinux.de/title/UEFI_Installation#systemd_bootctl_.28ehemals_Gummiboot.29
Nun bootctl auf die EFI-Partition installieren
bootctl install
Anschließend die Datei /boot/loader/entries/arch-uefi.conf mit folgendem Inhalt erstellen:
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=/dev/nvme0n1p4:main root=/dev/mapper/main-root lang=de locale=de_DE.UTF-8
Außerdem noch den Fallback anlegen: /boot/loader/entries/arch-uefi-fallback.conf
title Arch Linux Fallback linux /vmlinuz-linux initrd /initramfs-linux-fallback.img options cryptdevice=/dev/nvme0n1p4:main root=/dev/mapper/main-root lang=de locale=de_DE.UTF-8
Nun noch die Datei /boot/loader/loader.conf bearbeiten und folgende Einträge anpassen/ergänzen:
default arch-uefi timeout 3
Damit wird lediglich festgelegt, welches der Default ist und wie viele Sekunden (timeout) gewartet wird.
Das wars! Jetzt kann Linux gestartet werden.
Bitlocker wieder aktivieren
Bitlocker kann nun im Windows wieder aktiviert werden. Achtung: Es kann vorkommen, dass Bitlocker eine neue Partition anlegt. Dadurch verschiebt sich der LUKS Container (z.B. von nvme0n1p4 auf nvme0n1p5 und Linux könnte nicht mehr starten wollen mit dem Fehler „Not a valid LUKS container“. Dazu muss dann die Konfiguration /boot/loader/entries/arch-uefi.conf bzw. /boot/loader/entries/arch-uefi-fallback.conf nochmal angepasst werden.