Gestern habe ich die Arch Linux Installation auf meinem Asus UX31a Ultrabook erneuert. Eine Schwierigkeit bei dem Ultrabook ist dabei das UEFI System. Mein vorheriges Arch Linux Setup auf dem Gerät war ziemlich kompliziert (wie sich herausgestellt hat: unnötig kompliziert), aber inzwischen habe ich einfachere Wege gefunden, die ich mit diesem Beitrag mit euch teilen will. Das UEFI Setup ist gar nicht mehr so schwierig, wenn man die richtige herangehensweise gefunden hat. Statt 4 Partitionen werden nur noch 2 benötigt und das Setup ist wesentlich kompakter. Der Großteil des Betriebssytems (alles außer /boot) wird via LUKS verschlüsselt auf der SSD abgelegt.
Zuerst sollte man die Festspeichereinteilung verinnerlichen. Die SSD wird in zwei Partitionen geteilt. Die erste Partition (EFI System Partition – ESP) wird vom UEFI benutzt und muss zwingend angelegt werden. Sie wird als FAT32-Dateisystem formatiert und als ESP markiert. Außerdem werden auf der ESP der EFI Bootmanager und der Linux Kernel mit allen relevanten Boot-Dateien abgelegt. Die zweite Partition ist unsere Nutzdatenpartition. Sie wird mit LUKS verschlüsselt und enthält einen LVM-Container, der wiederum eine virtuelle Root-Partition und eine SWAP-Partition für den Auslagerungsspeicher enthält. Während des Bootvorgangs wird die verschlüsselte LUKS-Partition mit einer Passphrase entschlüsselt.
Für den UEFI-Start soll der UEFI-Bootmanager „Gummiboot“ genutzt werden. Er liegt auf der ESP und wird beim Start von der Firmware des Mainboard aufgerufen. Gummiboot wiederum gibt dem Mainboard die Anweisung, den Linux Kernel direkt via EFISTUB zu starten. Theoretisch könnte man bei einer ausgereiften UEFI Firmware auf dem Mainboard auch auf Gummiboot verzichten und den Linux Kernel direkt via EFISTUB starten, doch das ist nicht auf allen System ohne Hindernisse machbar: Viele Manboards implementieren UEFI nur teilweise und sind in den Konfigurationsmöglichkeiten deutlich eingeschränkt. In meinem Fall hätte ich keine Möglichkeit, dem Kernel zusätzliche Bootparameter zu übergeben, weil die UEFI Firmware meines Asus UX31a das nicht vorsieht. Man kann nur sehr, sehr grundlegende Starteinträge in der UEFI Oberfläche anlegen. Wenn der EFI-Manager der Mainboard-Firmware nichts taugt, nutzt man eben einen externen Bootmanager, der die Starteinträge verwaltet. In diesem Fall Gummiboot. Es ermöglicht und eine sehr einfache Konfiguration, die Nutzung von Startparametern beim Linux Boot und beschleunigt des Booten im Vergleich zur Nutzung eines Bootloaders wie z.B. GRUB deutlich.
Beim Start passiert also folgendes: Das UEFI sucht in der ESP nach einer ausführbaren Startdatei, findet Gummiboot, erhält von Gummiboot die Anweisung, den Linux-Kernel mit bestimmten Parametern zu starten und führt diese Anweisung dann aus. Und schon startet Linux wie gewohnt.
Arch Linux Image herunterladen und auf USB Stick kopieren
Ladet euch das aktuelle Arch ISO auf der Downloadseite herunter und kopiert es mit folgendem Befehl auf einen freien USB-Stick:
sudo dd if=arch-linux-2015-05-22.iso of=/dev/sdb
Bei „if“ wird der Pfad zum ISO angegeben, bei „of“ der Pfad zur Gerätedatei eures USB-Sticks. Wie die passende Gerätedatei heißt, könnt ihr über über den Befehl „lsblk“ erfahren. Vorsicht: Stellt sicher, dass ihr tatsächlich das richtige Gerät beschreibt, und nicht eure interne Festplatte!
Startet den Rechner, auf dem ihr Arch Linux installieren wollt, in die UEFI Oberfläche und stellt sie so ein, dass vom eingesteckten USB-Stick gebootet wird. Wenn ich schon mal im UEFI Management seid: Schaltet „Secure Boot“ aus. Bleibt es aktiv, startet Linux nicht. Beim nächsten Neustart sollte Arch Linux booten und ihr seht die Rootkonsole vor euch.
Bevor es losgeht …
… müssen noch ein paar Dinge eingerichtet werden. Zuerst wird das Tastaturlayout auf Deutsch umgestellt:
loadkeys de-latin1-nodeadkeys
Bei der Eingabe des Befehls ist zunächst noch das englische Tastaturlayout aktiv. „z“ und „y“ sind also vertauscht. Den Bindestrich erzeugt ihr mit einem Druck auf die „ß“ Taste.
Damit wir später LUKS nutzen können, welches dm-crypt nutzt, muss noch ein Modul in den Kernel geladen werden:
modprobe dm-crypt
Als nächstes ist die Internetverbindung dran, denn sie ist für die Installation unverzichtbar. Falls ihr eine LAN-Verbindung nutzen wollt, steckt das Kabel an und lest den Schnittstellenbezeichner für euren Netzwerkadapter aus:
ip link
Bei mir trägt die Schnittstelle beispielsweise den Bezeichner eth8s0. Holt euch dann vom Router eine IP-Adresse:
dhcpcd eth8s0
Mit einem „ping 8.8.8.8“ könnt ihr eure Verbindung überprüfen.
Wer lieber eine WLAN-Verbindung nutzt, kann seine Verbindung über das Kommando
wifi-menu
herstellen. Dabei wird das passende Netzwerk ausgesucht, die Passphrase eingegeben und dann bestätigt. Die Verbindung wird automatisch hergestellt. Auch das lässt sich mit „ping 8.8.8.8“ überprüfen.
Partitionierung
In meinem Fall ist /dev/sda die intern verbaute SSD des Rechners. Welchen Bezeichner euer Festspeicher hat, könnt über „lsblk“ erfahren. In den meisten Fällen ist es /dev/sda.
Für die Partitionierung nutzen wir das Tool gdisk, welches die GPT-Version von fdisk ist. UEFI benötigt nämlich eine GPT (GUID Partition Table).
gdisk /dev/sda
- Alle Partitionen auf der Festplatte werden gelöscht: „o“
- Neue Partition anlegen: „n“
- Als erste Partition festlegen: „1“
- Ersten Sektor auf 2048 setzen: [ENTER]
- Letzten Sektor setzen / auf 512 MB Partitionsgröße setzen: „+512M“
- „ef00“ als Partitionstyp wählen: „ef00“
Es folgt die Hauptpartition für die Nutzdaten:
- Neue Partition anlegen: „n“
- Als zweite Partition festlegen: „2“
- Ersten Sektor wählen: [ENTER]
- Letzten Sektor wählen: [ENTER]
- Partitionstyp wählen: [ENTER]
Mit „w“ werden die Änderungen auf die SSD geschrieben. Der Vorgang muss mit „Y“ bestätigt werden.
LUKS Verschlüsselung einrichten
Die zweite, größere Partition (/dev/sda2) wird nun mit LUKS verschlüsselt. Dazu können verschiedene Algorithmen und Schlüssellängen gewählt werden. Welche Algorithmen auf dem System am schnellsten funktionieren, kann man mit einem Benchmark ermitteln:
cryptsetup benchmark
Ich habe mich für AES-XTS-PLAIN mit 512 Bit entschieden. Das reicht locker aus. Verschlüsselung von /dev/sda2:
cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda2
- „YES“ eingeben
- Gewünschte Passphrase zur Verschlüsselung eingeben
- Passphrase wiederholen
Die Partition ist nun verschlüsselt.
LVM Container anlegen
Um nun LVM mit den virtuellen Partitionen dort ablegen zu können, muss sie entschlüsselt und als Gerät gemountet werden:
cryptsetup luksOpen /dev/sda2 lvm
(Passphrase eingeben)
In den nächsten Schritten wird ein LVM Container „main“ erstellt und dahin die beiden virtuellen Partitionen „root“ und „swap“:
LVM für die verschlüsselte Partition aktivieren:
pvcreate /dev/mapper/lvm
Neue Volume Group „main“ erstellen:
vgcreate main /dev/mapper/lvm
Die Größe der SWAP-Partition sollte sich nach der Größe des RAMs richten. Mein Ultrabook hat 4 GB Ram, also muss auch meine SWAP-Partition 4 GB groß sein, wenn ich „Suspend to Disk“ nutzen will. SWAP-Partition erstellen:
lvcreate -L 4G -n swap main
Der übrige Platz soll von der virtuellen root-Partition genutzt werden:
lvcreate -l 100%FREE -n root main
Nun müssen die neuen, virtuellen LVM Partitionen „root“ und „swap“ mit Dateisystemen beschrieben werden. Swap bekommt das SWAP-Dateisystem:
mkswap /dev/mapper/main-swap
… und „root“ das Standard-EXT4 Dateisystem:
mkfs.ext4 /dev/mapper/main-root
Partitionen einbinden
Alle vorhandenen Partitionen werden jetzt an der richtigen Stelle eingebunden:
Root Partition:
mount /dev/mapper/main-root /mnt
ESP:
mkdir /mnt/boot mount /dev/sda1 /mnt/boot
SWAP wird eingeschaltet:
swapon /dev/mapper/main-swap
Basissystem installieren
Pacman konfigurieren
Der Paketmanager Pacman kommt mit einer langen Liste an verfügbaren Mirror-Servern für die Arch Repositories. Die Liste sollte auf Server in der Nähe bzw. innerhalb des Landes reduziert werden, in dem man sich befindet. In meinem Fall also Server mit dem Standort Deutschland. Von der Liste der verfügbaren Server wird eine Kopie angelegt und die Liste dann bearbeitet:
cp /etc/pacman.d/mirrorlist /etc/pacman/mirrorlist.bak nano /etc/pacman.d/mirrorlist
Je niedriger der „score“, desto besser ist der Server erreichbar. Ganze Zeilen lassen sich im nano-Editor mit STRG + K löschen. 3 Server in der Liste sollten ausreichen. Speichert die Datei nach euren Änderungen ab.
Basissystem mit Pacman installieren
Nun wird die Arch Linux Basis installiert:
pacstrap /mnt/ base base-devel
Wer eine WLAN-verbindung am Rechner nutzt, sollte neben „base“ und „base-devel“ auch „wpa_supplicant“ und „dialog“ installieren, sodass das neu installierte System direkt eine Internetverbindung für weitere Paketinstallationen herstellen kann. Der Installationsvorgang kann je nach Internetverbindung und Leistung des Rechners einige Minuten dauern.
Nach der Installation wird die wichtige Datei „etc/fstab“ erzeugt. In ihr wird festgelegt, welche Partitionen mit welchen Optionen beim Linux Start zu mounten sind:
genfstab -p /mnt > /mnt/etc/fstab
Wenn der Vorgang erfolgreich war, sollten in der Datei /mnt/etc/fstab drei Einträge für die drei Partitionen zu sehen sein.
Arch Linux konfigurieren
Nachdem die Basis installiert wurde, geht es an die Konfiguration von Sprache, Zeitzone und vielem mehr. Dazu wird in das neue Arch System „gechrootet“:
arch-chroot /mnt/
Hostnamen setzen:
echo meinrechner > /etc/hostname
Spracheinstellung festlegen
echo LANG=de_DE.UTF-8 > /etc/locale.conf
Tastaturbelegung festlegen:
echo KEYMAP=de-latin1 > /etc/vconsole.conf
Zeitzone festlegen:
ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime
Locale.gen konfigurieren:
nano /etc/locale.gen
Vor diesen Einträgen „#“ entfernen:
#de_DE.UTF-8 UTF-8 #de_DE ISO-8859-1 #de_DE@euro ISO-8859-15
Locale generieren:
locale-gen
Root Passwort setzen:
passwd
Linux Kernel erzeugen
Damit die LUKS-Verschlüsselung beim Linux-Start erkannt und verarbeitet werden kann, müssen noch ein paar „Hooks“ zur Datei „/etc/mkinitcpio.conf“ hinzugefügt werden. Der Eintrag „HOOKS=“ sollte so aussehen:
HOOKS="base udev autodetect modconf block keyboard keymap encrypt lvm2 filesystems fsck"
Die Reihenfolge der Module spielt eine bedeutende Rolle und sollte wie angegeben übernommen werden.
Linux Kernel erzeugen:
mkinitcpio -p linux
Gummiboot Bootmanager installieren und konfigurieren
Installation aus den Arch Repositories:
pacman -S gummiboot
Gummiboot Dateien nach /boot (ESP) installieren:
gummiboot --path=/boot install
Die Gummiboot-Konfiguration in /boot/loader/loader.conf sollte wie folgt abgeändert werden:
# timeout 0 default arch
„timeout“ (hier auskommentiert) gibt die Zeit an, wie lange eine Auswahl zwischen verschiedenen Starteinträgen beim Boot möglich sein kann. Wird die Einstellung auf Null gesetzt (oder auskommentiert) wird beim rechnerstart keine Auswahl eingeblendet. Falls man trotzdem einmal einen anderen Starteintrag wählen will, oder Bootparameter ändern will, kann man das Gummiboot-Menü durch dauerhaftes Drücken der SPACE-Taste beim Start einblenden. „default“ legt den Haupteintrag fest (hier „arch“ genannt)
Für den „arch“ Starteintrag wird eine passende Konfigurationsdatei angelegt:
nano /boot/loader/entries/arch.conf
Die Datei muss dabei denselben Namen tragen wie der Bezeichner in /boot/loader/loader.conf + Endung „.conf“. Inhalt der Datei:
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=/dev/sda2:main root=/dev/mapper/main-root resume=/dev/mapper/main-swap lang=de locale=de_DE.UTF-8
Unter „options“ werden die Standard-Bootparameter angegeben, die beim Start von Linux genutzt werden sollen. Wenn z.B. wegen eines Grafikproblems kurzfristig andere Bootparameter für den Stadt genutzt werden sollen, kann man beim Hochfahren des Rechners die Leertaste („SPACE“) drücken, den jeweiligen Eintrag auswählen und die Bootparameter temporär durch Drücken der Taste „e“ ändern.
Fertig!
Die Installation und grundlegende Konfiguration von Arch Linux ist abgeschlossen. War doch gar nicht schwierig, oder? Die Chroot-Umgebung wird verlassen:
exit
… und die Partitionen ausgebunden:
umount /mnt/boot umount /mnt
Mit einem „reboot“ wird der Rechner neu gestartet. Vergesst nicht, den USB Stick zu ziehen ;)
Bei Start werdet ihr nach dem Passwort für die LUKS-Verschlüsselung gefragt. Nach der Verschlüsselung könnt ihr euch dann über den Benutzernamen „root“ + selbst gewähltes Root-Passwort einloggen und alle weiteren Einrichtungsschritte in der offiziellen, deutschsprachigen Arch Linux Anleitung befolgen (weiter geht es bei „Einen Benutzer hinzufügen und Gruppen wählen“): https://wiki.archlinux.de/title/Anleitung_f%C3%BCr_Einsteiger#Einen_Benutzer_hinzuf.C3.BCgen_und_Gruppen_w.C3.A4hlen
Wenn ihr euer Passwort für LUKS ändern wollt, könnt ihr hier weiterlesen (mit /dev/sda2 statt /dev/sda3): https://legacy.thomas-leister.de/arch-linux/luks-verschluesselung-passwort-aendern/
https://bbs.archlinux.de/
Merci, Guter Artikel.
systemctl enable Großes_Lob
systemctl start Großes_Lob
Dein Artikel gefällt mir sehr – klar ausgedrückt und einfach nachvollziehbar.
Gruss TLW
So dürfte das eigentlich nicht funktioniert haben. Die Boot Partition ist nicht richtig formatiert (vfat), was zu einer fehlerhaften Installation von base führt.
Daneben fehlt in der arch.conf bei options „rw“ (ohne Anführungsstriche).
Die Verschlüsselung ist auch schwach, wenn vorher kein Entropie Harvester gestartet wurde. Da würde ich mich an deiner Stelle noch mal einlesen
Ich habe mich an die Anleitung gehalten, aber die von dem anderen Thomas vorgeschlagenenen Änderungen befolgt. Damit war ich erfolgreich.
Die Änderungen im einzelnen:
1. Boot-Partition formatieren: mkfs.vfat -F32 /dev/sda1
2. Konfiguration von gummiboot: options cryptdevice=/dev/sda2:main root=/dev/mapper/main-root resume=/dev/mapper/main-swap lang=de locale=en_US.UTF-8 rw
3. Randomisierung nutzen: cryptsetup -c aes-xts-plain -y -s 512 –use-random luksFormat /dev/sda2
Ich hatte Arch Linux schon auf einem USB-Stick, habe an der Liste der Mirrors nichts geändert, LAN benutzt und englische Tastatur etc. (siehe auch 2.) eingestellt. Es handelte sich um einen Dell XPS 13 (2015).
Perfekt. Danke für die detailierte Info!
Danke für die Anleitung, habe sie mit den Änderungen in den Kommentaren erfolgreich angewendet. Gummiboot ist jetzt natürlich systemd-boot, das nicht extra installiert werden musste. Und statt „gummiboot“ verwendet man jetzt „bootclt“.
Ich bin leider mit der Installation nicht erfolgreich. Laut der Ausgabe hätte ich nicht genug Speicher „not enough free disk space“ beim Befehl: pacstrap /mnt base base-devel
Es fehlt die Anregung eines Dateisystems für /boot (muss.vfat). Ansonsten, vielen Dank!