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?

  1. Mirror. Mirror ist immer gut.
  2. GRUB-Bootloader statt Syslinux.
  3. ext4 mit LVM statt btrfs.
  4. Verschlüsselte Boot-Partition.
  5. 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/sda1 Luks (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)

ISO-Abbild

  • wget http://ftp.tu-chemnitz.de/pub/linux/archlinux/iso/2015.06.01/archlinux-2015.06.01-dual.iso
  • 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 lsblk oder parted -l können alle angeschlossenen Blockgeräte angezeigt werden.

Schritt für Schritt

Start

  • Booten vom USB-Stick.
  • loadkeys de oder loadkeys de-latin1
    • Ändern des Tastaturlayouts (Standard ist us).
    • Man tippt also loadkezs deßlatin1 mit einer deutschen Tastatur auf englischem Layout.

Festplatte

  • lsblk oder parted -l
    • Überprüfung der angeschlossenen Laufwerke.
    • Achtung: Da man von USB-Stick gebootet hat, kann es sein, dass dieser unter /dev/sda angesprochen wird und die Zielplatte z. B. unter /dev/sdb zu 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/sdX bezeichnet.
  • 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.

Partitionierung

Entweder MSDOS-Partitionstabelle oder GPT.

MSDOS

  • fdisk /dev/sdX
    • o (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/sdX
    • o (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-discards fü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/linuxvg und /dev/mapper/linuxvg zu finden.
  • lvcreate -L 512MB -n boot linuxvg
  • lvcreate -L 8GB -n swap linuxvg
    • Ist im Idealfall so groß wie der Arbeitsspeicher.
  • lvcreate -L 200GB -n system linuxvg
  • lvcreate -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/boot
  • mkfs.ext4 -L system /dev/linuxvg/system
  • mkfs.ext4 -L home /dev/linuxvg/home
  • mkswap -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/boot
  • mkdir /mnt/home
  • mount /dev/linuxvg/boot /mnt/boot
  • mount /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.tmp
  • sed -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/mirrorlist und bei den gewünschten Mirrors das # zum Auskommentieren entfernen.
  • pacman-key --init
  • pacman-key --populate archlinux
  • pacman -Syy

Locale

  • echo KEYMAP=de-latin1 > /etc/vconsole.conf
  • ln -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-1
  • locale-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.conf
    • MODULES="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 grub
  • nano /etc/default/grub
    • GRUB_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/sdX1 verwenden, sondern das Gerät per UUID ansprechen.
        • blkid oder blkid /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 efibootmgr
  • nano /etc/default/grub
    • GRUB_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/sdX1 verwenden, sondern das Gerät per UUID ansprechen.
        • blkid oder blkid /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/efi
  • mount /dev/sdX1 /boot/efi
  • grub-install --target=x86_64-efi --recheck --efi-directory=/boot/efi --bootloader-id=grub
  • grub-mkconfig -o /boot/grub/grub.cfg

Benutzer

  • passwd root
    • Festlegen des Root-Passwortes.
  • useradd -m -g users -G wheel -s /bin/bash $MYUSERNAME
  • sed -i 's/^# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/' /etc/sudoers
  • passwd $MYUSERNAME

Reboot

  • exit
    • Die chroot-Umgebung verlassen.
  • umount /mnt/boot
  • umount /mnt/home
  • umount /mnt
  • swapoff /dev/linuxvg/swap
  • cryptsetup luksClose /dev/mapper/linuxlvm
  • reboot
    • Neustart.

Quellen