Installation: Arch Linux
Diese Anleitung beschreibt die Installation eines Arch Linux-Betriebssystems auf einem Computer. Dabei werden alle Partitionen (boot, system, home, swap) verschlüsselt und der GRUB2-Bootmanager verwendet.
Warum noch eine Installationsanleitung?
- Mirror. Mirror ist immer gut.
- GRUB-Bootloader statt Syslinux.
- ext4 mit LVM statt btrfs.
- Verschlüsselte Boot-Partition.
- Auch geeignet für die Installation auf mobilen Datenträgern.
Fehler, Verbesserungen oder Anmerkungen können mir gern per Email geschickt werden.
Vorraussetzungen
- Halbwegs sicherer Umgang mit einer Linux Konsole / Terminal.
- Kenntnisse darüber wie Platten und Partitionen unter Linux angesprochen (/dev/sdX, /dev/hdX, /dev/sdX1, /dev/sdX2, …) werden.
- Kenntnisse über Partitionierung und Formatierung (siehe auch meine Blog-Einträge: Partitionieren & Formatieren dazu).
Info
- Wir werden auf einem PC Arch Linux installieren.
- Das Partitions-Layout wird wie folgt sein:
- Nur ein Betriebssystem
/dev/sda(DOS-Tabelle oder GPT, GRUB2)/dev/sda1Luks (Serpent-xts-plain-Cipher, 512bit-Schlüssel und sha512-Hash)- LVM (Gruppenname:
linuxvg)- Boot (
linuxvg-boot) - System (
linuxvg-system) - Home (
linuxvg-home) - Swap (
linuxvg-swap)
- Boot (
- LVM (Gruppenname:
ISO-Abbild
wget http://ftp.tu-chemnitz.de/pub/linux/archlinux/iso/2015.06.01/archlinux-2015.06.01-dual.iso- Download eines ISO-Abbildes.
- Siehe auch: Arch Linux - Downloads
wget https://ftp-stud.hs-esslingen.de/pub/Mirrors/archlinux/iso/2015.06.01/archlinux-2015.06.01-dual.iso.sig- Download der PGP-Signatur.
gpg2 --recv-keys 4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC- Import des Arch-GPG-Schlüssels (Pierre Schmitz, pierre@archlinux.de).
gpg2 --verify archlinux-2015.06.01-dual.iso.sig- Den Download verifizieren.
# dd if=archlinux-2015.06.01-dual.iso of=/dev/sdX- Kopieren des Abbildes auf einen USB-Stick.
- Mittels
lsblkoderparted -lkönnen alle angeschlossenen Blockgeräte angezeigt werden.
Schritt für Schritt
Start
- Booten vom USB-Stick.
loadkeys deoderloadkeys de-latin1- Ändern des Tastaturlayouts (Standard ist
us). - Man tippt also
loadkezs deßlatin1mit einer deutschen Tastatur auf englischem Layout.
- Ändern des Tastaturlayouts (Standard ist
Festplatte
lsblkoderparted -l- Überprüfung der angeschlossenen Laufwerke.
- Achtung: Da man von USB-Stick gebootet hat, kann es sein, dass dieser unter
/dev/sdaangesprochen wird und die Zielplatte z. B. unter/dev/sdbzu finden ist. - Anhand der dargestellten Eigenschaften sollte man die Zielplatte erkennen. In dieser Anleitung wird das Speichergerät, auf welchem Arch Linux installiert werden soll, mit
/dev/sdXbezeichnet.
shred --verbose --random-source=/dev/urandom --iterations=3 /dev/sdX- oder
dd if=/dev/urandom of=/dev/sdX - Dieser Schritt ist nur notwendig, falls vorher unverschlüsselte Daten auf der Festplatte waren.
- Das überschreiben mit Zufallszahlen kann sehr lang dauern.
- ACHTUNG: SSDs mögen es gar nicht, wenn sie komplett neu beschrieben werden. Es ist aber notwendig, da in irgend einem Speicherbereich noch alte Reste gefunden werden könnten. Wenn man gleich von Anfang an verschlüsselt, muss man diesen Schritt hier nicht machen.
- oder
Partitionierung
Entweder MSDOS-Partitionstabelle oder GPT.
MSDOS
fdisk /dev/sdXo(Erstellen einer leeren DOS-Partitionstabelle)n(Erstellen einer neuen Partition)p(primäre Partition)1(Partitionsnummer)<enter>(Startsektor)<enter>(Endsektor)
w(Änderungen auf das Gerät schreiben und beenden)
- Alternative ist das interaktive Programm:
cfdisk /dev/sdX
GPT / UEFI
gdisk /dev/sdXo(Erstellen einer leeren GPT)n(Erstellen einer neuen Partition)1(Partitionsnummer)<enter>(Startsektor)+512M(Endsektor)<enter>(Partitionstyp)
n(Erstellen einer neuen Partition)2(Partitionsnummer)<enter>(Startsektor)<enter>(Endsektor)<enter>(Partitionstyp)
w(Änderungen auf das Gerät schreiben und beenden)
- Alternative ist das interaktive Programm:
cgdisk /dev/sdX mkfs.fat -F32 /dev/sdX1- Formatieren
ACHTUNG: Der Rest ist wie bei der Installation mit MSDOS-Partitionstabelle. Vergiss daher nicht in dieser Anleitung /dev/sdX1 mit /dev/sdX2 zu ersetzen!
Verschlüsselung
modprobe dm-crypt- Kernelmodul für Verschlüsselung laden.
cryptsetup benchmark- Benchmark der verschiedenen Verschlüsselungs- und Hashverfahren.
cryptsetup luksFormat -y --cipher=serpent-xts-plain --key-size=512 --hash=sha512 --use-urandom /dev/sdX1- Verschlüsselung der Partition.
- ACHTUNG: In der hier beschriebenen Konfiguration ist es möglich, dass später beim Booten ein US-Tastatur-Layout verfügbar ist. Man sollte die US-Position verwendeter Sonderzeichen kennen.
- Alternativen
cryptsetup luksOpen /dev/sdX1 linuxlvm- Öffnen der Verschlüsselten Partitionen.
- Zusätzliches Argument
--allow-discardsfür SSDs.
LVM/Partitionierung
pvcreate /dev/mapper/linuxlvm- Erzeugt das Physical Volume (PV), die Grundlage des LVM.
vgcreate linuxvg /dev/mapper/linuxlvm- Erzeugt die Volume Group (VG), den Container für die darin zu erzeugenden Logical Volume (LV).
- Ist später auf dem gebooteten Arch Linux-System unter
/dev/linuxvgund/dev/mapper/linuxvgzu finden.
lvcreate -L 512MB -n boot linuxvglvcreate -L 8GB -n swap linuxvg- Ist im Idealfall so groß wie der Arbeitsspeicher.
lvcreate -L 200GB -n system linuxvglvcreate -l 100%FREE -n home linuxvg
Die LVM-Konfiguration kann mittels lvscan oder lvdisplay -C überprüft werden. Sollte man später die LVM manuell mounten, kann man diese mittels vgchange -ay ggf. aktivieren.
Formatierung
mkfs.ext4 -L boot /dev/linuxvg/bootmkfs.ext4 -L system /dev/linuxvg/systemmkfs.ext4 -L home /dev/linuxvg/homemkswap -L swap /dev/linuxvg/swap
Mounten
mount /dev/linuxvg/system /mnt- Es ist wichtig, dass die System-Partition zuerst gemountet wird, da alle anderen Partitionen in Ordnern unterhalb des Wurzel-Verzeichnisses eingehangen werden.
mkdir /mnt/bootmkdir /mnt/homemount /dev/linuxvg/boot /mnt/bootmount /dev/linuxvg/home /mnt/home- Weitere Mount-Optionen auch für andere Dateisysteme können hinzugefügt werden.
Internetverbindung
ping -c 3 startpage.com- Internetverbindung testen.
dhcpcd- Starten des DHCP-Client.
- Wenn keine Verbindung hergestellt werden konnte hilft dies meist.
Grundsystem
pacstrap /mnt base base-devel grub bash-completion networkmanager- Installation des Grundsystems mit dem GRUB2-Bootloader.
Chroot
swapon -L swap- SWAP wird angeschaltet.
genfstab -U -p /mnt >> /mnt/etc/fstab- fstab wird generiert.
-U… Verwendung von UUIDs.-p… Verhindert die Aufnahme von Pseudodateisystemen in die Liste.
arch-chroot /mnt- Wechsel in die chroot-Umgebung.
- Alle folgenden Änderungen werden auf dem späteren Betriebssystem durchgeführt.
Paket-Quellen
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup- Backup der Mirrorlist als Temp und Original.
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.tmpsed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist.tmp- Alle verfügbaren Mirrors werden freigeschaltet.
rankmirrors -n 24 /etc/pacman.d/mirrorlist.tmp > /etc/pacman.d/mirrorlist- Die schnellsten 24 Mirros werden übernommen.
- Kann ein klein wenig dauern.
- Manuelle Alternative:
nano /etc/pacman.d/mirrorlistund bei den gewünschten Mirrors das#zum Auskommentieren entfernen. pacman-key --initpacman-key --populate archlinuxpacman -Syy- Paketmanager updaten und Datenbank neu aufbauen.
Locale
echo KEYMAP=de-latin1 > /etc/vconsole.confln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime- Zeitzone.
nano /etc/locale.conf- Spracheinstellungen
- ‘en_DK’ ist die Option für die Zeit- und Datumsdarstellung im ‘ISO 8601‘-Format.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LANG=en_US.UTF-8
LANGUAGE=en_US:en_GB:en
LC_COLLATE=C
LC_CTYPE=en_US.UTF-8
LC_DATE=en_DK.UTF-8
LC_TIME=en_DK.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_MESSAGES=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_MONETARY=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_NUMERIC=de_DE.UTF-8
LC_PAPER=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_ALL=
nano /etc/locale.gen- Folgende auskommentieren:
de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
en_DK.UTF-8 UTF-8
en_DK ISO-8859-1
en_GB.UTF-8 UTF-8
en_GB ISO-8859-1
en_US.UTF-8 UTF-8
en_US ISO-8859-1locale-gen- Erzeugen der locales.
Schlüssel-Einstellungen
dd bs=512 count=8 if=/dev/urandom of=/crypto_keyfile.bin- Erzeugung eines 4096bit-Schlüssels.
cryptsetup luksAddKey --key-slot=7 /dev/sdX1 /crypto_keyfile.bin- Hinzufügen zu den Schlüsseln der Partition.
- Check:
cryptsetup luksDump /dev/sdX1
chmod 000 /crypto_keyfile.bin- Entzug aller Rechte - Auch für den Root-Nutzer.
Host und Kernel
echo <myhostname> > /etc/hostname- Optional.
- Alternativ später nach dem Boot ins System:
hostnamectl set-hostname <myhostname>
nano /etc/mkinitcpio.confMODULES="ext4"FILES="/crypto_keyfile.bin"- Damit man das Passwort der bereits entschlüsselten Partition nicht nochmals eingeben muss.
HOOKS="base udev autodetect modconf block keyboard keymap encrypt lvm2 resume filesystems fsck"- Die Reihenfolge der Hooks ist relevant.
export LANG=en_US.UTF-8- Vermeidung des Fehlers “bsdcpio”.
mkinitcpio -p linux- Erstellung des Kernel-Images.
GRUB
Entweder BIOS- oder UEFI-System.
BIOS
pacman -S grubnano /etc/default/grubGRUB_CMDLINE_LINUX="cryptdevice=/dev/sdX1:linuxlvm resume=/dev/linuxvg/swap"- Die ‘GRUB_CMDLINE_LINUX‘-Variable ändern.
- Für die Installation auf einem mobilen Datenträger sollte man nicht
/dev/sdX1verwenden, sondern das Gerät per UUID ansprechen.blkidoderblkid /dev/sdX1(Anzeigen der UUIDs. Sollte man sich aufschreiben.)- Das große i hat oben und unten nach links und rechts Serifen. Das kleine L hat oben nur nach links und nach unten in beide Richtungen Serifen. Die Eins hat oben nach links einen schrägen Anstrich und unten einen breiteren Strich nach links und rechts. Das große o hat in der Mitte ein Loch, die Null hat einen Punkt in der Mitte.
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<myuuid-ofthe-encrypted-partition>:linuxlvm resume=/dev/linuxvg/swap"- Ohne SWAP:
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<myuuid-ofthe-encrypted-partition>:linuxlvm root=/dev/mapper/linuxlvm"
- ‘linuxlvm’ ist der name unter welchem die luks-Partition entschlüsselt wurde, also unter
/dev/mapper/zu finden ist.
GRUB_ENABLE_CRYPTODISK=y- Diese Zeile muss hinzugefügt werden. Am besten gleich unter obiger Zeile.
grub-install --target=i386-pc --recheck /dev/sdX- Ich erhalte hier 3 mal die Fehlermeldungen: “(/run/lvm/lvmad.socket: connect failed: No such file or directory. WARNING: Failed to connect to lvmad. Falling back to internal scanning.” Aber am Ende steht dann: “installation beendet. Keine Fehler aufgetreten.”
grub-mkconfig -o /boot/grub/grub.cfg
UEFI
pacman -S grub efibootmgrnano /etc/default/grubGRUB_CMDLINE_LINUX="cryptdevice=/dev/sdX2:linuxlvm resume=/dev/linuxvg/swap"- Die ‘GRUB_CMDLINE_LINUX‘-Variable ändern.
- Für die Installation auf einem mobilen Datenträger sollte man nicht
/dev/sdX1verwenden, sondern das Gerät per UUID ansprechen.blkidoderblkid /dev/sdX1(Anzeigen der UUIDs. Sollte man sich aufschreiben.)- Das große i hat oben und unten nach links und rechts Serifen. Das kleine L hat oben nur nach links und nach unten in beide Richtungen Serifen. Die Eins hat oben nach links einen schrägen Anstrich und unten einen breiteren Strich nach links und rechts. Das große o hat in der Mitte ein Loch, die Null hat einen Punkt in der Mitte.
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<myuuid-ofthe-encrypted-partition>:linuxlvm resume=/dev/linuxvg/swap"- Ohne SWAP:
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<myuuid-ofthe-encrypted-partition>:linuxlvm root=/dev/mapper/linuxlvm"
- ‘linuxlvm’ ist der name unter welchem die luks-Partition entschlüsselt wurde, also unter
/dev/mapper/zu finden ist.
GRUB_ENABLE_CRYPTODISK=y- Diese Zeile muss hinzugefügt werden. Am besten gleich unter obige Zeile.
mkdir /boot/efimount /dev/sdX1 /boot/efigrub-install --target=x86_64-efi --recheck --efi-directory=/boot/efi --bootloader-id=grubgrub-mkconfig -o /boot/grub/grub.cfg
Benutzer
passwd root- Festlegen des Root-Passwortes.
useradd -m -g users -G wheel -s /bin/bash $MYUSERNAMEsed -i 's/^# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/' /etc/sudoerspasswd $MYUSERNAME
Reboot
exit- Die chroot-Umgebung verlassen.
umount /mnt/bootumount /mnt/homeumount /mntswapoff /dev/linuxvg/swapcryptsetup luksClose /dev/mapper/linuxlvmreboot- Neustart.
Quellen
- archwiki: dm-crypt/Encrypting an entire system
- archwiki: GRUB#Encryption
- archwiki: GRUB#BIOS_systems
- archwiki: ArchLinux mit verschlüsseltem LVM und Systemd
- archwiki: Reflector
- Pavel Kogan: Full disk encryption with LUKS (including /boot)
- XercesTech: Full system encryption for linux
- Thomas Krenn: OS-Installation auf UEFI-Systemen
- GitHubGist: XenGi – Archlinux setup guide
- nixCraft: HowTo: Linux List Disk Partitions Command
- Das Rootserver-Experiment: Bootfähigen USB-Stick für UEFI Secure Boot erstellen – 1. PreLoader der Linux-Foundation plus Gummiboot