Seit einigen Wochen besitze ich ein Lenovo x220 als neues Arbeitsgerät für unterwegs. Zu diesem Gerät gibt es mehr als genug Erfahrungsberichte und Rezensionen im Internet, so dass ich auf einen weiteren Artikel hierzu verzichten werde.

Was es aber noch nicht gibt sind deutschsprachige Anleitungen wie man Arch Linux auf diesen Typ mittels UEFI installiert bekommt.

Der erste Schritt ist es im BIOS den UEFI Modus einzustellen: Hier kann man konfigurieren ob das System BIOS kompatibel Booten soll, oder ob nur noch UEFI taugliche Medien gebootet werden sollen. Um sicher zu gehen das nur UEFI gebootet wird ist es erforderlich diesen auf UEFI-Only zu stellen, zu beachten ist dabei das nur noch UEFI Medien gebootet werden können!

Nun richten wir uns, von einem anderen PC aus, ein UEFI taugliches Bootmedium auf Basis von Archboot ein. Es genügt ein USB Stick in ausreichender, und heute üblicher Kapazität.

Im nächsten Schritt müssen folgende Befehle ausgeführt werden, die Angabe der Geräte ist dabei an die lokalen Gegebenheiten anzupassen:

dd if=/dev/zero bs=1M count=1 of=/dev/$device
parted /dev/$device
mklabel msdos
mkpart primary fat32 0% 100%
set 1 boot on
quit
mkfs.vfat -F 32 -n ARCHBOOT /dev/$device1
mkdir /tmp/archbootstick
mount /dev/$device1 /tmp/archbootstick
mkdir /tmp/archboot
mount -t iso9660 -o loop,ro /$archbootimage /tmp/archboot
cd /tmp/archboot
cp -R * /tmp/archbootstick
umount /tmp/archbootstick

$device ist hierbei der USB Stick und $archbootimage das Image von Archboot welches man zuvor heruntergeladen hat. Es handelt sich dabei wirklich um Archboot und nicht um die normale Arch Linux CD welche man gewöhnlich zum installieren nimmt! Es ist übrigens richtig das wir keinen Bootloader im Master Boot Record installieren, dies ist bei UEFI auch nicht mehr länger erforderlich.

Beim starten vom Notebook den Stick anstecken und F12 drücken, dort den Eintrag für Archboot auswählen und nach dem starten des Systems den Installer gleich wieder beenden, da dieser nicht gebraucht wird. Wer möchte kann nun gleich mit km wie üblich das Tastaturlayout einstellen.

Jetzt fangen wir mit den Modifikationen der Platte von unserem x220 an, wer keine Backups gemacht hat wird nun auch seine Daten über den Jordan jagen ;-)

Beim Booten mittels UEFI gibt es nicht viel zu beachten, eine der wichtigen Sachen ist es aber ein FAT32 Volume mit einer definieren ID zu haben, den nur dort wird die Firmware nach bootfähigem Material suchen. Hier ein Beispiel für eine mögliche Partitionierung:

sgdisk -Z /dev/sda
sgdisk -o /dev/sda
sgdisk -n 1:0:+500M /dev/sda
sgdisk -n 2:0:0 /dev/sda
sgdisk -t 1:ef00 /dev/sda
sgdisk -t 2:8300 /dev/sda
sgdisk -c 1:"UEFI Boot" /dev/sda
sgdisk -c 2:"LUKS/dm-crypt" /dev/sda

In diesem Beispiel gehe ich davon aus das /dev/sda die interne Platte vom Notebook ist und man keine mSSD oder ähnlich verwendet, da ich meine Volumes schön beschriftet habe sollte ersichtlich sein welches für was genau gut ist. Auf ein gesondertes /boot Volume habe ich verzichtet da dies keine Vorteile in dieser Konfiguration hätte und der eh schon geringe Platz einer SSD nur verschwendet werden würde.

Nun ist es an der Zeit den oben angelegten Partitionen / Volumes ein Dateisystem zu verpassen, es sei nochmal darauf hingewiesen das die UEFI Partition mit FAT32 formatiert werden muss da die Firmware nur dieses Dateisystem lesen kann. Da ich gerne LVM und verschlüsselte Datenträger verwende habe ich dies auf dem 2. Volume eingerichtet und entsprechende LVs angelegt:

mkfs.vfat -F 32 -t BOOT /dev/sda1
cryptsetup -c aes-xts-plain -s 512 luksFormat /dev/sda2
cryptsetup luksOpen /dev/sda2 encrypted
pvcreate /dev/mapper/encrypted
vgcreate main /dev/mapper/encrypted
lvcreate -L 10G -n root main
lvcreate -L 30G -n home main
lvcreate -L 8GB -n swap main
mke2fs -t ext4 -L ROOT /dev/main/root
mke2fs -t ext4 -L HOME /dev/main/home
tune2fs -o discard,acl,user_xattr /dev/main/root
tune2fs -o discard,acl,user_xattr /dev/main/home
mkswap -f /dev/main/swap

Wie ersichtlich habe ich bei der Gelegenheit gleich noch die Unterstützung für erweiterte Attribute und ACLs aktiviert. Zusätzlich wurde noch der Support für discard aktiviert um die SSD ein wenig zu schonen.

Der Rest der Installation wird zu einem großen Teil in einem früheren Artikel erklärt. Hier folgen nur noch die Sachen welche zu beachten sind um das System in einen Bootfähigen Zustand zu bekommen.

Bei der Installation der Pakete ist es wichtig das grub2-efi-x86_64 und auch efibootmgr installiert wird, der normale Grub ist nur für BIOS basierende Installationen geeignet.

Eine weitere wichtige Änderung gegenüber dem anderen Artikel ist das vor dem chroot das Kernelmodul efivars geladen wird:

modprobe efivars
Im chroot selbst kann abschließend der Bootloader wie folgt installiert werden:
vim /etc/default/grub # Anpassen der Kernelparameter wie gewuenscht / erforderlich
mkdir /boot/efi
grub-install --directory=/usr/lib/grub/x86_64-efi --target=x86_64-efi --root-directory=/boot/efi --boot-directory=/boot --bootloader-id=arch_grub --recheck --debug
efibootmgr --create --gpt --disk /dev/sda --part 1 --write-signature --label "LINUX" --loader "\\grub\\grub.efi"
cp /usr/share/grub/unicode.pf2 /boot/grub
grub-mkconfig -o /boot/grub/grub.cfg
Der Befehl efibootmgr pflanzt der Firmware einen Eintrag ein das er auf der UEFI Boot Partition nach einem bestimmten Loader suchen soll. Im Bootmenü erscheint also tatsächlich LINUX als Eintrag und nicht die Bezeichnung eines Datenträgers. Dieser Eintrag muss auch, wenn man den Bootloader immer dort platziert, nicht verändert werden und kann einfach so bleiben. Konkret lädt die Firmware beim starten automatisch von der 1. Partition die Datei /grub/grub.efi, welcher sich dann um den Rest des Bootvorgangs kümmert. Möchte man später, warum auch immer, einen 2. Bootloader verwenden kann man diesen auf ähnliche Art und weiße Eintragen, was das ganze meiner Meinung nach sehr flexibel macht.