Installation von ArchLinux mit verschlüsseltem LVM und systemd

Da ich gerade meinen PC von Windows auf Arch Linux umstelle und vor kurzem das AIF aus den Installations-Medien entfernt wurde, habe ich mich daran gemacht, diese Anleitung zu verfassen. Dies soll zum Einen anderen Usern ersparen, sich die Info’s aus vielen verschiedenen Wiki-Artikeln heraussuchen zu müssen und zum Anderen soll es mir als Erinnerung für evtl. spätere Installationen dienen.

Der Text beschreibt die Installation eines Basissystems von Arch Linux in ein verschlüsseltes LVM und der kompletten Migration auf systemd.

Die Anleitung wurde unter Verwendung der Installations-Medien 2012.08.04 erstellt. Die Installation sollte aber auch mit zuküftigen Medien (zumindest vorerst) nicht großartig anders verlaufen.

Lasst uns beginnen ;)

  1. Das Installations-Image von http://www.archlinux.org/download/ herunterladen.

  2. Das Image auf CD brennen oder unter einem funktionierendem Linux-System (z.B. Live-CD) auf einen USB-Stick kopieren. Dies funktioniert wie folgt:
    # dd if=archlinux.iso of=/dev/sdx

  3. Nun wird vom vorbereiteten Installations-Medium gebootet und das Setup für die entsprechende Systemarchitektur (i686 oder x86_64) gestartet.

  4. Auf der Konsole angekommen, wird nun zuerst einmal das deutsche Tastatur-Layout geladen.
    root@archiso ~ # loadkeys de-latin1

    Da das Layout derzeit noch auf Englisch eingestellt ist, muss z anstatt y und ß anstatt - eingegeben werden.

  5. Jetzt wird es Zeit, die Festplatten zu partitionieren. Dies kann z.B. mit cfdisk durchgeführt werden. Für unseren Zweck erstellen wir zwei Partitionen:
    sda1 mit einer Größe von 100MB und boot-Flag (dies wird später unsere Boot-Partition)
    sda2, welche den Rest der Festplatte spendiert bekommt (hier wird unser verschlüsseltes LVM seinen Platz drauf finden)

  6. Zur Sicherheit wird die Festplatte jetzt überschrieben:
    root@archiso ~ # shred -v /dev/sda2

    Standardmäßig wird dieser Vorgang drei Mal durchgeführt, wobei ein Durchgang bei einer ca. 2TB großen Festplatte schon mal 5 bis 6 Stunden in Anspruch nehmen kann.

    Wer deswegen den Vorgang nur einmal durchführen möchte, kann stattdessen folgenden Befehl ausführen:
    # shred -v -n 1 /dev/sda2

  7. Jetzt werden die benötigte Kernel-Modul für die Verschlüsselung geladen:
    root@archiso ~ # modprobe dm-crypt

  8. Anschließend wird sda2 verschlüsselt:
    root@archiso ~ # cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda2

    Hinweis: Für Volumes größer als 2TiB sollte aes-xts-plain64 verwendet werden. Kernelunterstützung hierfür gibt es seit Kernel 2.6.33.

    Die Eingabeaufforderung mit YES bestätigen und anschließ ein sicheres Passwort vergeben. Hierbei sollten schon 20 Zeichen inkl. Sonderzeichen und Zahlen verwendet werden.

  9. Jetzt wird die verschlüsselte Partiton geöffnet und das LVM eingerichtet:
    root@archiso ~ # cryptsetup luksOpen /dev/sda2 lvm
    root@archiso ~ # pvcreate /dev/mapper/lvm
    root@archiso ~ # vgcreate main /dev/mapper/lvm
    root@archiso ~ # lvcreate -L 200GB -n root main
    root@archiso ~ # lvcreate -L 8GB -n swap main
    root@archiso ~ # lvcreate -l 100%FREE -n home main

  10. Mit mkfs wird nun das Dateisystem auf die Partitionen geschrieben.
    root@archiso ~ # mkfs.ext4 /dev/mapper/main-root -L root
    root@archiso ~ # mkfs.ext4 /dev/mapper/main-home -L home
    root@archiso ~ # mkfs.ext4 /dev/sda1 -L boot
    root@archiso ~ # mkswap /dev/mapper/main-swap -L swap

  11. Dann werden die Partitionen gemounted:
    root@archiso ~ # mount /dev/mapper/main-root /mnt
    root@archiso ~ # mkdir /mnt/home
    root@archiso ~ # mount /dev/mapper/main-home /mnt/home
    root@archiso ~ # mkdir /mnt/boot
    root@archiso ~ # mount /dev/sda1 /mnt/boot

  12. Bevor es jetzt los geht und wir das Basissystem installieren, testen wir erstmal die Internetverbindung:
    root@archiso ~ # ping -c 3 www.google.com

    Besteht keine Verbindung, sollte folgender Befehl Abhilfe schaffen:
    root@archiso ~ # dhcpcd

  13. Wir bearbeiten nun zuerst unsere Mirrorliste, und kommentieren alle weit entfernten Server mit # aus.
    root@archiso ~ # nano /etc/pacman.d/mirrorlist

    Dies kann bei der Installation Geschwindigkeitsvorteile von ca. 30 Minuten bringen.

    Dann wird das Basissystem inkl. Bootloader (ich habe mich für syslinux entschieden) installiert.
    root@archiso ~ # pacstrap /mnt base base-devel syslinux

  14. Nach der Basis-Installation wird syslinux in den MBR von sda geschrieben:
    root@archiso ~ # syslinux-install_update -i -a -m -c /mnt

    Dann wird syslinux konfiguriert:
    root@archiso ~ # nano /mnt/boot/syslinux/syslinux.cfg

    Die APPEND-Zeile muss bei beiden Einträgen (arch und archfallback angepasst werden:
    APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-root ro lang=de locale=de_DE.UTF-8

  15. Nun ermitteln wir zuerst die UUID der Swap-Partition:
    root@archiso ~ # blkid | grep swap

    Dann wird die fstab generiert und anschließend angepasst:
    root@archiso ~ # genfstab -p /mnt >> /mnt/etc/fstab
    root@archiso ~ # nano /mnt/etc/fstab

    Am Ende der Datei folgendes anfügen:
    # UUID=die_eben_ausgelesene_UUID LABEL=swap
    /dev/mapper/main-swap none swap defaults 0 1

  16. Jetzt wechseln wir in die chroot-Umgebung:
    root@archiso ~ # arch-chroot /mnt

  17. Spracheinstellungen festlegen:
    sh-4.2# nano /etc/locale.conf

    LANG="de_DE.UTF-8"

    # Keep the default sort order (e.g. files starting with a '.'
    # should appear at the start of a directory listing.)
    LC_COLLATE="C"

    LC_TIME="de_DE.UTF-8"

  18. /etc/locale.gen editieren und locales generieren:
    sh-4.2# nano /etc/locale.gen

    # vor folgenden locales entfernen:
    de_DE.UTF-8 UTF-8
    de_DE ISO-8859-1
    de_DE@euro ISO-8859-15

    locales generieren:
    sh-4.2# locale-gen

  19. Config-Dateien für systemd anpassen:
    sh-4.2# echo myhostname >> /etc/hostname
    sh-4.2# echo KEYMAP=de-latin1 >> /etc/vconsole.conf
    sh-4.2# echo FONT=lat9w-16 >> /etc/vconsole.conf
    sh-4.2# echo FONT_MAP=8859-1_to_uni >> /etc/vconsole.conf
    sh-4.2# echo Europe/Berlin >> /etc/timezone
    sh-4.2# nano /etc/hosts

    Nun den Hostnamen hinzufügen:
    #<ip-address> <hostname.domain.org> <hostname>
    127.0.0.1 localhost.localdomain localhost myhostname
    ::1 localhost.localdomain localhost myhostname

  20. Symlink für die Zeitzone erstellen:
    sh-4.2# ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime

  21. /etc/rc.conf bearbeiten:
    USELVM="yes".

  22. HOOKS in /etc/mkinitcpio.config bearbeiten:
    HOOKS="base udev autodetect sata usbinput keymap encrypt lvm2 filesystems fsck shutdown"

    Die hier vorgegebenen Hooks sind für das Booten von einer S-ATA-Festplatte mit einer USB-Tastatur gedacht und müssen daher evtl. angepasst werden. Alle verfügbaren Hooks sind unteter https://wiki.archlinux.org/index.php/Mkinitcpio#HOOKS zu finden.

  23. Damit es bei der Erstellung des Kernel-Images nicht zu dem Fehler bsdcpio: Failed to set default locale kommt, führen wir folgendes aus:
    sh-4.2# export LANG=de_DE.UTF-8

  24. Dann erstellen wir das Kernel-Image:
    sh-4.2# mkinitcpio -p linux

  25. Jetzt legen wir das Passwort für root an:
    sh-4.2# passwd

  26. Anschließend verlassen wir die chroot-Umgebung und hängen die Partitionen aus:
    sh-4.2# exit
    root@archiso ~ # umount /mnt/{boot,home,}
    root@archiso ~ # reboot

  27. Der PC startet nun neu und wir werden – sofern bisher alles gut gegangen ist – von unserem Bootloader gefolgt von der Eingabeaufforderung zur Entschlüsselung des cryptdevice begrüßt. Gebt das Passwort ein und meldet euch, nachdem der Bootvorgang abgeschlossen ist, als root an.

  28. Als erstes bringen wir nun pacman auf den neusten Stand:
    [root@myhostname ~] pacman -Syy

    Sollte das Netzwerk nicht gestartet sein, folgenden Befehl ausführen:
    [root@myhostname ~] dhcpcd

    Dann wird systemd installiert. Außerdem installieren wir noch die Arch Units für systemd
    [root@myhostname ~] pacman -S systemd systemd-arch-units

  29. In /boot/syslinux/syslinux.cfg fügen wir den APPEND-Zeile vom LABEL arch folgenden Eintrag am Ende hinzu:
    init=/bin/systemd

    Dann starten wir das System neu und wählen im Bootmenü den Eintrag Arch Linux aus:
    [root@myhostname ~] reboot

  30. In /boot/syslinux/syslinux.cfg entfernen wir nun wieder den Eintrag init=/bin/systemd.

    Um systemd komplett zu integrieren, werden nun folgende Befehle ausgeführt:
    [root@myhostname ~] pacman -R initscripts sysvinit
    [root@myhostname ~] pacman -S systemd-sysvcompat

  31. Services für systemd einrichten:
    [root@myhostname ~] systemctl enable dhcpcd@.service
    [root@myhostname ~] systemctl enable cronie.service
    [root@myhostname ~] systemctl enable lvm.service

  32. Im Falle, dass ein x86_64 System installiert wurde, kann in der /etc/pacman.conf noch das multilib-repo aktiviert werden. Anschließend müssen pacman’s Paketlisten wieder auf den neusten Stand gebracht werden:
    [root@myhostname ~] pacman -Syy

  33. Ein letzer Reboot und wir können damit anfangen, unser frisch installiertes Arch an unsere Bedürfnisse anzupassen.
    [root@myhostname ~] reboot

Viel Spaß mit deinem Arch Linux!!!

17 Gedanken zu „Installation von ArchLinux mit verschlüsseltem LVM und systemd“

  1. Ich finde es super, dass Du das so gut verständlich aufgeschrieben hast und es ins wiki packst! War vorhin nicht böse gemeint, oder so.
    Keep on archin’ und hoffentlich noch viel content für Dein blog.

  2. ACHTUNG das ist falsch:
    Die APPEND-Zeile muss bei beiden Einträgen (arch und archfallback angepasst werden:
    APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-root ro lang=de locale=de_DE.UTF-8
    MUSS HEIßEN

    APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-root rw lang=de locale=de_DE.UTF-8

    1. “ro” ist in diesem Fall hier schon richtig, da “/dev/mapper/main-root” ja auf “/” gemounted wird. Das gemappte Crypt-Device bleibt schreibgeschützt, die Daten des geöffneten Crypt-Device sind jedoch mit “rw” Zugriff verfügbar.

      Hoffe ich habe das so richtig erklärt. So (oder ähnlich) habe ich es vor einiger Zeit in einer englischen Newsgroup gelesen. Wenn ich den Link nochmal finden sollte, werde ich ihn natürlich noch posten.

      1. Danke für die Blumen!!!
        Da ich vor kurzem selbst erst mein System mal wieder neu aufgesetzt habe, hab ich jedoch bemerkt, dass einige Schritte in der Anleitung aktualisiert werden müssen. Sobald ich Zeit finde, werde ich die Änderungen mal einpflegen. ;)

        1. Konntest du evtl. in den nächsten Tagen die Zeit finden? :( Will als Newcomer nun nach deiner Anleitung gehen (mit dem einzigen Unterschied, dass ich es auf einem USB-Stick statt auf einer Festplatte installieren werde.

          1. Hey,
            sorry, dass ich erst jetzt wieder etwas hier schreibe. Ich bin derzeit immer noch dabei die Anleitung zu verfassen. Mittlerweile bin ich auf 45 DIN A4 Seiten angelangt, in welchen nicht nur die Grundinstallation sondern auch die Installation und Konfiguration der wichtigsten Systemprogramme, Tools, Sicherheits-Einstellungen etc. beschrieben wird.

            Ich kann dir gerne den Entwurf des Kapitels über die Grundinstallation zukommen lassen. Ist aber derzeit noch etwas unübersichtlich ;)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>