16 hours ago

Arch Linux Installationsanleitung



Eine Installationsanleitung für die Linuxdistribution Arch Linux mit Rollback Funktion und den wichtigsten Post-Installations Konfigurationsschritten.

Arch Linux ist eine beliebte Linux-Distribution mit einer Do-It-Yourself Philosophie. In diesem Tutorial wird die Installation des Systems auf einem verschlüsselten BTRFS Dateisystem beschrieben.

Nutzer dieses Tutorials sollten mit einem CLI Texteditor umgehen können (z. B. nano oder vim) sowie grundlegende Verzeichnisnavigation beherrschen. Das Archwiki aufsuchen, falls auf Probleme gestossen werden sollte.

Grundlegender Ablauf

Dieses Tutorial ist für ein modernes System mit UEFI BIOS und einer SSD mit GPT-Partitionstabelle geschrieben. Es nutzt Verschlüsselung und das BTRFS Dateisystem.

  1. Festplatten partitionieren, verschlüsseln und formatieren.
  2. Arch Linux mit pacstrap bootstrappen und ins System chrooten.
  3. Initial RAM-Filesystem erstellen.
  4. Boot loader installieren und konfigurieren.
  5. Desktopumgebung einrichten.
  6. Snapshotfunktion einrichten.
  7. Post Install Konfiguration.

Informationen für Dualboot Systeme mit Windows:

Dieses Tutorial geht davon aus, dass Windows auf einer separaten Festplatte installiert ist. Falls das nicht möglich ist, dann sollte Windows zuerst installiert werden. Für die Linux-Installation sollte eine separate ESP Partition erstellt werden, damit in Zukunft Windows Updates nicht unerwünscht den Linux-Eintrag aus der ESP löschen.

Vorbereitung

Die ISO-Datei von der Arch Webseite herunterladen (Arch unterstützt nur die x86_64 Architektur), die Signatur verifizieren und einen bootable USB-Stick erstellen.

Signatur verifizieren

Wir nutzen GnuPG: PGP Signatur von der Webseite herunterladen und im gleichen Ordner wie die ISO Datei speichern. Den Signing Key vom WKD (Web Key Directory) herunterladen.

gpg --auto-key-locate clear,wkd -v --locate-external-key pierre@archlinux.org

Signatur verifizieren:

gpg --keyserver-options auto-key-retrieve --verify archlinux-2024.12.01-x86_64.iso.sig archlinux-2024.12.01-x86_64.iso

Bootable USB-Stick erstellen

Dann die Installationsdatei auf einen USB-Stick laden. Es gibt verschiedene Arten, einen bootable USB-Stick zu erstellen. Hier mache ich es mit dem dd Befehl:

dd bs=4M if=path/to/archlinux-version-x86_64.iso of=/dev/disk/by-id/usb-My_flash_drive conv=fsync oflag=direct status=progress

Danach ins Live Environment booten und die eigentliche Installation beginnen.

Temporär Console Keyboard Layout setzen

Vorhandene Key maps anzeigen:

ls /usr/share/kbd/keymaps/**/*.map.gz

Key map laden:

loadkeys de_CH-latin1

Boot Modus verifizieren

UEFI bitness überprüfen:

cat /sys/firmware/efi/fw_platform_size

Falls 64 ausgegeben wird, dann ist das System im UEFI Modus gebootet und hat ein 64-bit x64 UEFI. Falls es 32 ausgibt, dann ist das System im UEFI Modus gebootet und hat ein 32-bit IA32 UEFI; obwohl das auch unterstützt wird, wird es die Boot loader Wahl auf Systemd-boot reduzieren. Wenn die Datei nicht existiert, könnte das System im BIOS (oder CSM) Modus gebootet sein. Wenn das System nicht im richtigen Modus gebootet hat, sollte die Anleitung des Motherboards aufgesucht werden.

Internet verbinden

Überprüfen, ob das Netzwerk Interface gelistet und aktiviert ist. Dieser Befehl initialisiert auch mit Ethernet-Kabel verbundenes Internet.

ip link
  • Bei Ethernet-Verbindung einfach Kabel einstecken
  • Bei Wireless mit iwctl verbinden. Zuerst noch mit rfkill sicherstellen, dass der Wireless Adapter nicht blockiert ist.

iwctl verwenden, um Internet zu verbinden

Aktiven Prompt erhalten:

iwctl

Alle WiFi Devices auflisten:

[iwd] device list

Falls das Gerät oder der entsprechende Adapter ausgeschaltet ist, einschalten:

[iwd] device DEVICE set-property Powered on [iwd] adapter ADAPTER set-property Powered on

Scan Initiieren:

[iwd] station DEVICE scan

Netzwerke auflisten:

[iwd] station DEVICE get-networks

Netzwerk verbinden:

[iwd] station DEVICE connect SSID

Falls ein Passwort benötigt wird, wird danach gefragt.

Systemuhr aktualisieren

In der Live-Umgebung ist systemd-timesyncd standardmäßig eingeschaltet und die Zeit wird automatisch synchronisiert, sobald das Internet verbunden ist.

Zeit überprüfen:

timedatectl

Festplatte(n) konfigurieren

Wahl zwischen BTRFS oder EXT4. Allgemein: BTRFS für SSD, EXT4 für HDDs. XFS und ZFS sind auch beliebte Dateisysteme, werden hier allerdings nicht beachtet. Für mehr Informationen, Archwiki aufsuchen. LVM für Datenträgerverwaltung. Hier wird davon ausgegangen, dass das System auf einer SSD mit BTRFS Dateisystem installiert wird, mit zwei HDD-Festplatten im EXT4 Format als mass media storage in einer LVM.

Festplatteninhalt komplett löschen

Wir möchten unsere Festplatten verschlüsseln. Zunächst wird der ganze Inhalt der Platten mit Nullen überschrieben. Dazu nutzen wir den Befehl cryptsetup. Festplatten auflisten:

fdisk -l

Festplatte in einem temporär verschlüsselten Container mit dem Namen "to_be_wiped" öffnen:

cryptsetup open --type plain -d /dev/urandom /dev/FESTPLATTE to_be_wiped

Festplatte mit Nullen füllen:

dd bs=1M if=/dev/zero of=/dev/mapper/to_be_wiped status=progress

Container schließen:

cryptsetup close to_be_wiped

Partitionen erstellen

Festplatten auflisten:

fdisk -l

Festplatte auswählen:

fdisk /dev/DEVICE
  • Alte Partitionen mit d löschen
  • Mit g eine neue GPT Partitionstabelle erstellen.
  • Allfällige alte Signaturen ruhig löschen.

Einfach dem Programm folgen, es ist ziemlich selbsterklärend.

EFI Partition (EFI System Partition, ESP)

  • Mit n eine neue Partition erstellen. Default Nummer. Default erste Position. "+500M" Größe.
    • Typ mit t definieren, Partition auswählen, und 1 (oder EFI System) eintippen.

Root Partition

  • Mit n eine neue Partition erstellen. Default Nummer. Default erste Position. Mit Enter einfach den Default Wert für Größe nehmen (= den ganzen Rest).
    • Typ mit t definieren, Partition auswählen, und Linux Filesystem eintippen (ist der Standardwert).

Encryption Setup

Die Partitionen werden mithilfe des cryptsetup-Tools verschlüsselt. ROOTPART steht für die zu verschlüsselnde Partition.

cryptsetup -y -v luksFormat --label ARCH_LUKS /dev/ROOTPART

Passwort eingeben. Danach die Partition entschlüsseln, um mit ihr arbeiten zu können:

cryptsetup open --type luks /dev/ROOTPART cryptroot

Wir haben somit die verschlüsselte Partition /dev/ROOTPART entschlüsselt und auf /dev/mapper/cryptroot gemappt.

Partitionen formatieren

Wir erstellen nun Dateisysteme auf den Partitionen. ESP-Partition in FAT32, ROOTPART in BTRFS formatieren und überprüfen:

mkfs.fat -F32 -n ESP /dev/PART1 mkfs.btrfs -L ARCH /dev/mapper/cryptroot lsblk -f

BTRFS Subvolumes erstellen

Dafür muss die Root-Partition zuerst gemounted werden:

mount /dev/mapper/cryptroot /mnt

Ins /mnt Verzeichnis wechseln und Subvolumes erstellen. Vorgeschlagenes Layout wird vom Archwiki übernommen, außer dass ich keine Subvolume für /var/log verwende. Eine Subvolume für root(@), eine für home, eine für swap und eine für snapshots. Am Schluss /mnt unmounten, damit wir die eigentlichen mount Verzeichnisse im nächsten Schritt definieren können.

cd /mnt btrfs subvolume create @ btrfs subvolume create @home btrfs subvolume create @snapshots btrfs subvolume create @swap cd .. umount /mnt

Subvolumes und ESP mounten

Als BTRFS Optionen werden noatime (schaltet file writing access times ab für bessere performance), zstd:1 (Dateikompression auf Stufe 1) und space_cache=v2 (neue Implementation eines free space tree für BTRFS cache) genutzt.

mount --mkdir -o noatime,compress=zstd:1,space_cache=v2,subvol=@ /dev/mapper/cryptroot /mnt mount --mkdir -o noatime,compress=zstd:1,space_cache=v2,subvol=@home /dev/mapper/cryptroot /mnt/home mount --mkdir -o noatime,compress=zstd:1,space_cache=v2,subvol=@snapshots /dev/mapper/cryptroot /mnt/.snapshots mount --mkdir -o noatime,subvol=@swap /dev/mapper/cryptroot /mnt/swap mount --mkdir /dev/ESPPART /mnt/boot

Swap einrichten

Snapshot-Funktion für Swap Partition ausschalten, und ein Swap File erstellen (optional: mindestens so gross wie RAM, damit Hibernation gewährleistet wird. Im dd Befehl die count Option (in MB) anpassen):

cd /mnt/swap # Snapshotfunktion deaktivieren chattr +C /mnt/swap # Swapspace definieren dd if=/dev/zero of=./swapfile bs=1M count=4096 status=progress chmod 0600 ./swapfile mkswap -U clear ./swapfile swapon ./swapfile

Optional: Mass Media Storage mit LVM Setup

Ich habe 2 HDD-Festplatten, die ich als Mass Media Storage verwende. Diese möchte ich zu einer großen Partition zusammenfassen – dazu nutze ich LVM. Logical Volumes können auch verschlüsselt werden. Dazu entweder die eigentlichen Festplatten verschlüsseln und LVM obendrauf bauen, oder die Logical Volume als Ganzes im Nachhinein verschlüsseln. Für Vor- bzw. Nachteile Archwiki aufsuchen. Ich habe mich für LUKS on LVM entschieden. Anmerkung: Der Wiki-Eintrag geht davon aus, dass es als System-Partition verwendet wird, was hier nicht der Fall ist.

Festplatten vorbereiten

Zunächst müssen beide Festplatten vorbereitet werden. Gleich wie bei der Root Disk zuvor überschreiben wir den Inhalt mit Nullen und erstellen auf beiden Festplatten eine Partition über die komplette Größe vom Typ Linux Filesystem. Physical Volumes können auch direkt auf einer Disk ohne Partition definiert werden, wird aber nicht empfohlen.

LVM definieren

Mit dem pvcreate Befehl die frisch angelegten Partitionen als Physical Volumes definieren:

# sdb1 und sdc1 mit deinen eigenen Partitionen tauschen pvcreate /dev/sdb1 pvcreate /dev/sdc1

Mit dem Befehl pvdisplay können diese überprüft werden.

Nun wird mit dem vgcreate Befehl eine Volume Group (eine Art Container) erstellt, ich gebe ihr den Namen "vghome". Diese beinhaltet die beiden vorher erstellten Physical Volumes.

vgcreate vghome /dev/sdb1 /dev/sdc1

Mit dem Befehl vgdisplay lässt sich die Volume Group überprüfen.

Aus dieser Volume Group können nun mit lvcreate Logical Volumes erstellt werden. Diese verhalten sich auf der Systemebene dann wie eine normale Partition einer Festplatte. Meine Logical Volume erstelle ich über die gesamte Grösse dieser LV.

lvcreate -l 100%FREE vghome -n lvcrypthome

Mit lvdisplay lässt sich diese überprüfen.

Dieses Logical Volume muss nun noch verschlüsselt werden und ein Dateisystem erhalten.

Verschlüsselung & Formatierung

Ähnliches Vorgehen wie auf der Root-Partition. Logical Volume verschlüsseln:

cryptsetup -y -v luksFormat --label HOME_LUKS /dev/vghome/lvcrypthome

Passwort eingeben, ich verwende dasselbe wie bei der Root-Partition. Wieder entschlüsseln und mappen damit wir sie formatieren können.

cryptsetup open --type luks /dev/vghome/lvcrypthome crypthome

Formatieren. Meine Festplatten sind HDDs, deswegen in EXT4.

mkfs.ext4 -L home /dev/mapper/crypthome

Festplatten sind vorbereitet, jetzt kann die Installation beginnen. Anzumerken ist, dass der [[Arch Linux Post Installation#Weitere verschlüsselte Festplatten bei Boot entschlüsseln und mounten|Mountpoint erst am Schluss definiert wird]]. Außerdem darf das lvm2 Paket nicht fehlen (wird im nächsten Schritt installiert).

Arch Installation

Mit pacstrap eine neue Arch-Installation beginnen und Basispakete installieren. Eigentlich ist nur das base Paket notwendig. Es beinhaltet eine minimale Sammlung an Paketen, die eine Arch Installation definieren.

pacstrap -i /mnt base

Aber so fehlt es an vielen wichtigen Funktionen. Weitere Pakete werden einfach mit einem Abstand getrennt aufgeschrieben. Hier ist eine Liste von empfohlenen Softwarepaketen:

  • Basic Stuff:
    • base
    • base-devel (diverse Build-tools)
    • linux (Kernel)
    • linux-lts (LTS kernel)
    • linux-headers (Kernel headers)
    • linux-lts-headers (LTS kernel headers)
    • linux-firmware
    • vim (Text-Editor)
    • vi
    • openssh (SSH)
    • intel-ucode (amd-ucode für AMD-Prozessoren)
    • sudo
  • Filesystem Utilities:
    • ntfsprogs
    • ntfs-3g
    • btrfs-progs
    • lvm2
    • exfat-utils
    • fuse-exfat
    • e2fsprogs
  • Bootprozess:
    • dosfstools
    • grub
    • efibootmgr
    • os-prober
    • mtools
  • Netzwerk:
    • networkmanager
    • dialog (Wifi connect wie CL)

Milde interessant: Wenn das "Linux" Paket (Linux Kernel) nicht installiert wird, ist theoretisch keine Linux-Installation vorhanden, lediglich eine Sammlung von Softwarepaketen. Daher der Name Linux-Distribution - der Linux Kernel wird distribuiert.

Konfiguration

Wir schreiben die zuvor definierten Mountpoints mithilfe des genfstab Befehls in die fstab (Filesystem table) Datei:

genfstab -U /mnt >> /mnt/etc/fstab # Kontrolle cat /mnt/etc/fstab

Wichtig für Restoren von Snapshots: Sicherstellen, dass beim mounten der einzelnen Subvolumes die Option "subvolid" nicht verwendet wird – die Option "subvol" reicht aus. Ausserdem sollte die top-level subvolume (immer ID=5) auf mnt/btrfs-root gemounted werden. Folgende Zeile einfügen:

UUID=UUID-der/installationspartition /mnt/btrfs-root btrfs rw,noatime,compress=zstd:1,ssd,space_cache=v2,subvolid=5 0 0

Wir nehmen Zugriff auf die Arch Installation – die Konsoleneingabe wird auf die Work-in-Progress Installation angebunden:

arch-chroot /mnt

Wir befinden uns nun in der Arch Installation auf der eigentlichen Festplatte in einer chroot (change root) Umgebung. Noch müssen wir ein paar Dinge konfigurieren, damit das System ohne den USB-Stick bootet. Ab jetzt kann auch der Paketmanager pacman verwendet werden, um Pakete zu installieren.

Zeitzone und Sprache

In /usr/share/zoneinfo die Region und Stadt finden und einen Symlink in /etc/localtime erstellen. Im Anschluss die Hardwareuhr synchronisieren:

ln -sf /usr/share/zoneinfo/Europe/Zurich /etc/localtime hwclock --systohc

Sprachen in /etc/locale.gen auskommentieren (en_US.UTF-8 und de_CH.UTF-8), und locale generieren:

locale-gen

Sprache setzen: /etc/locale.conf erstellen und für Englisch die Linie LANG=en_US.UTF-8 einfügen.

Keyboard-Layout definieren, indem /etc/vconsole.conf mit KEYMAP=de_CH-latin1 als Inhalt erstellt wird.

Netzwerk

Die Datei /etc/hostname editieren und in der ersten Linie den gewünschten Namen der Maschine eingeben.

Die Datei /etc/hosts editieren und folgende Linien eingeben:

127.0.0.1 localhost 127.0.1.1 hostname #der in /etc/hostname definierte hostname

Root Passwort setzen und standard Benutzer hinzufügen

Wir sind als Root eingeloggt. Passwort ändern mit:

passwd

Standard Benutzer erstellen, zur wheel Gruppe hinzufügen und Passwort setzen:

useradd -m -G wheel passwd

Sudoers File Anpassen und wheel Gruppe Privilege erhöhen:

visudo

Die Linie %wheel ALL=(ALL) ALL: auskommentieren.

Systemd Services autostart

Mit dem Befehl systemctl einige nützliche Dienste automatisch starten.

systemctl enable sshd NetworkManager fstrim.timer systemd-timesyncd paccache.timer

Initial Ram Disc Environment generieren

Das Initial Ram Disc Environment (seit kernel Version 2.6 Initial Ram Filesystem) hilft dem Linux Kernel im Bootprozess, Treiber und das eigentliche Root Filesystem zu laden. Es muss zuerst generiert werden. Früher nutzte man dazu den Befehl initrd, heute wird initramfs genutzt. In Arch heißt heisst das äquivalente Programm mkinitpcio. Die alte und neue Methode unterscheiden sich in den Details, aber bewerkstelligen allgemein das Gleiche.

Wir editieren /etc/mkinitcpio.conf und fügen in der HOOKS=(... Variable zwischen block und filesystems das Keyword encrypt hinzu. Außerdem werden die Hooks keyboard und keymap benötigt. Falls z.B. von einer LVM gebootet wird, braucht es den lvm Hook.

Sicherstellen, dass die Linie wie folgt aussieht, falls nicht vom Tutorial abgewichen wurde:

HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block encrypt filesystems fsck grub)

Mit dem Befehl mkinitcpio das Initial RAM Dateisystem regenerieren. Mit der -P Option wird es für alle installierten Kernels automatisch gemacht, sonst müsste man den Kernel als Option angeben (z. B. Linux-LTS) und den Prozess wiederholen.

mkinitcpio -P

Boot loader installieren

Ich nutze den Bootloader GRUB. Auf dem Archwiki sind alle gängigen Bootloader und deren Vor- bzw. Nachteile aufgelistet.

Die UUID der Partition, die verschlüsselt wurde (nicht die geöffnet- und dann gemappte /dev/mapper/cryptroot) mit blkid holen (z.B. die UUID von /dev/nvme0n1p2) und aufschreiben.

/etc/default/grub/ bearbeiten, und auskommentieren:

GRUB_ENABLE_CRYPTODISK=y

Für Dual boot Systeme folgende Linie auskommentieren:

GRUB_DISABLE_OS_PROBER=false

Um Grub bei Boot zu verstecken, folgende Linien bearbeiten (mit Drücken der ESC Taste im Bootprozess lässt es sich wieder anzeigen):

GRUB_TIMEOUT=0 GRUB_TIMEOUT_STYLE=hidden

Sowie die Option GRUB_CMDLINE_LINUX_DEFAULT anpassen und folgende Linie nach quiet mit einem Abstand dazwischen einfügen (UUID mit der zuvor aufgeschriebenen ersetzen). Falls es eine SSD ist, mit :allow-discards TRIM support bei Boot aktivieren.

$ root=/dev/mapper/cryptroot cryptdevice=UUID=5f5b0b02-318c-4980-bcb5-793d44fe4387:cryptroot:allow-discards

Installieren (für 64-Bit Systeme):

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB --recheck

Grub Sprache auf Englisch stellen:

cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo

Grub-Konfigurationsdatei generieren:

grub-mkconfig -o /boot/grub/grub.cfg

Das System kann nun ohne den USB-Stick booten. Mit exitaus der chroot Umgebung aussteigen und mit reboot neu starten. Falls eine Windows-Installation auf einer Separaten Festplatte existiert, im BIOS sicherstellen, dass von der Linux Partition gebootet wird. Nach Neustart mit dem Networkmanager Befehl nmcli erneut mit dem WiFi Internet verbinden.

nmcli device wifi list nmcli device wifi connect password

Desktopumgebung einrichten

Es kann eine beliebige Desktopumgebung installiert werden - ich habe mich für KDE Plasma entschieden. Ausserdem wird der Display Server Xorg benötigt.

pacman -S xorg-server xorg xorg-xinit plasma

Treiber für Intel & AMD Grafikkarten. Sollte auch installiert werden, damit die Grafikausgabe der CPU funktioniert.

pacman -S mesa

Treiber für Nvidia Grafikkarten. Muss gleich sein mit dem Kernel, also LTS auch installieren:

pacman -S nvidia nvidia-lts nvidia-settings

Plasma empfiehlt den sddm Display Manager (wird mit dem plasma Paket mitgeliefert). Ein Display Manager zeigt nach dem Bootprozess eine grafische Log-in-Oberfläche an.

systemctl enable sddm

X11 Tastatur Keymap einstellen:

localectl set-keymap de_CH-latin1 localectl set-x11-keymap ch

Neustart, reboot. Das System sollte danach in eine Grafische Umgebung starten. Falls das Tastaturlayout immer noch falsch sein sollte, den letzten Schritt wiederholen - samt Neustart.

Automatische Snapshots mit Snapper

Automatische Snapshots des Systems bei Updates einrichten. Außerdem wird das GRUB Menu auch automatisch aktualisiert und ermöglicht das direkte Booten in den ausgewählten Snapshot (read-only). Snapshots sind nützlich, wenn bei einem Update (oder durch Nutzerfehler) das System unbrauchbar gemacht wird - es kann ruckzuck auf einen noch funktionierenden Systemstand gewechselt werden. Wichtig: Snapshots sind keine Backups.

Vom /home Verzeichnis erstelle ich keine Snapshots, da ich von diesen Daten bereits auf einer separaten Festplatte ein richtiges Backup halte. Falls gewünscht, können die Schritte für /home wiederholt werden.

Snapper installieren:

sudo pacman -S snapper

Bevor wir snapper konfigurieren, müssen wir unsere @snapshots Subvolume unmounten und den Mountpoint Ordner löschen, denn Snapper erstellt selbst einen gleichnamigen Ordner und Subvolume.

sudo umount /.snapshots sudo rm -r /.snapshots

Snapper config erstellen mit dem Namen root

sudo snapper -c root create-config /

Die von Snapper erstellte Subvolume und den Ordner löschen (zuerst sicherstellen, dass die neue Subvolume erstellt worden ist).

sudo btrfs subvolume list / sudo btrfs subvolume delete /.snapshots sudo rm -r /.snapshots

Nun erstellen wir erneut einen Ordner, und mounten unsere bei der Installation erstellte Subvolume erneut.

sudo mkdir /.snapshots sudo mount -a

Wir benötigen noch Lese-, Schreib- und Ausfuhrerlaubnis für unsere Snapshots, damit wir auf sie zugreifen können.

sudo chmod 750 /.snapshots

Die Snapper Konfigurationsdatei bei /etc/snapper/configs/root mit Sudo-Rechten anpassen. Den Namen des Standardusers bei ALLOW_USERS=username hinzufügen und die Aufbewahrungsfrist für timeline snapshots (automatische Snapshots) bearbeiten:

# limits for timeline cleanup TIMELINE_MIN_AGE="1800" TIMELINE_LIMIT_HOURLY="5" TIMELINE_LIMIT_DAILY="7" TIMELINE_LIMIT_WEEKLY="2" TIMELINE_LIMIT_MONTHLY="1" TIMELINE_LIMIT_YEARLY="0"

Snapper timeline Services aktivieren:

sudo systemctl enable --now snapper-timeline.timer sudo systemctl enable --now snapper-cleanup.timer

Wir brauchen Pakete, die nicht in den Offiziellen Repositories vorhanden sind. Diese finden wir auf dem Arch User Repository. Wir installieren einen AUR helper namens yay (der Befehl yay ohne Optionen updated zugleich das ganze System):

git clone https://aur.archlinux.org/yay cd yay makepkg -si PKGBUILD

snap-pac-grub und rsync installieren. snap-pac-grub (genauer gesagt, die Dependency snap-pac) nimmt bei jeder Änderung des Systems einen Snapshot auf (Update, Paket löschen/installieren) und stellt die Snapshots im GRUB Menu zur Verfügung (grub-btrfs Dependency), um von ihnen booten zu können.

yay -S snap-pac-grub rsync

/etc/mkinitcpio.conf editieren und grub-btrfs-overlayfs ans Ende der HOOKS variable hinzufügen und initramfs regenerieren. Dieser Schritt aktualisiert das Grub Menu mit dem neuen Snapshot.

sudo mkinitcpio -P

Da /boot auf einer separaten Partition existiert, wird der Ordner bis jetzt bislang nicht beachtet. Das Backup von /boot erstellen wir separat mit rsync. Dies erlaubt einen Fallback auf den alten Kernel, falls bei einem Update auf eine neue Kernel Version Instabilität eingeführt wird.

/etc/pacman.d/hooks erstellen und darin eine Hook definieren, die vor jedem Systemupdate ausgeführt wird.

sudo mkdir /etc/pacman.d/hooks sudo vim /etc/pacman.d/hooks/0-bootbackup-preupdate.hook

Folgenden Inhalt einfügen:

[Trigger] Operation = Upgrade Operation = Install Operation = Remove Type = Path Target = usr/lib/modules/*/vmlinuz [Action] Depends = rsync Description = Backing up /boot before updating... When = PreTransaction Exec = /usr/bin/rsync -a --delete /boot /.bootbackup/preupdate

Diesen Hook als 95-bootbackup-postupdate.hook kopieren, und für den Postupdate Konfigurieren:

sudo cp /etc/pacman.d/hooks/0-bootbackup-preupdate.hook /etc/pacman.d/hooks/95-bootbackup-postupdate.hook

Editieren mit folgendem Inhalt (Pre wird zu Post):

[Trigger] Operation = Upgrade Operation = Install Operation = Remove Type = Path Target = usr/lib/modules/*/vmlinuz [Action] Depends = rsync Description = Backing up /boot after updating... When = PostTransaction Exec = /usr/bin/rsync -a --delete /boot /.bootbackup/postupdate

Als Test einen Snapshot erstellen, der auch gleichzeitig als "Clean Fallback" dient:

sudo snapper -c root create --description “Saubere BTRFS Installation mit Snapper”

Fertig!, reboot

Installation fertig, Post Installation

An dieser Stelle lohnt es sich, in den General recommendations auf der Archwiki Webseite zu stöbern. Nvidia Nutzer sollten sich mit den Archwiki-Seiten Nvidia tips and tricks und Nvidia troubleshooting bekannt machen. Um hibernation zu aktivieren, folgende Wikiseite aufsuchen: Power management.

Hier sind einige wichtige Punkte aufgelistet:

Weitere verschlüsselte Partitionen bei Boot mounten

Mit jedem jetzigen Init System ist es nicht möglich, mit Eingabe eines Passwortes mehrere verschlüsselte Partitionen zu entschlüsseln. Deswegen wechsle ich auf das Systemd init System.

Zu Systemd init System wechseln

Dazu die Datei /etc/mkinitcpio.conf bearbeiten. Die Hooks base, udev (-> systemd), keymap, consolefont (-> sd-vconsole) und encyrypt (-> sd-encrypt) müssen ersetzt werden. Ausserdem kann die resume Hook entfernt werden.

sudo vim /etc/mkinitcpio.conf # Im Moment sieht die Zeile noch etwa so aus: # HOOKS=(base udev autodetect modconf keyboard kms keymap consolefont block encrypt filesystems fsck resume grub-btrfs-overlayfs) # Neuer Inhalt HOOKS=(systemd autodetect modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck grub-btrfs-overlayfs)

Datei schliessen und initramfs neu bauen (mkinitcpio -P). Danach müssen die Kernel Parameter zur Entschlüsselung der Partition bei boot bearbeitet werden:

sudo vim /etc/default/grub # Den Parameter bearbeiten: # cryptdevice=UUID=b525e45e-874e-4b98-bafa-ae7f1daa75e0:cryptroot:allow-discards # Neu: rd.luks.name=b525e45e-874e-4b98-bafa-ae7f1daa75e0=cryptroot rd.luks.options=discard,password-echo=no

Grub Konfiguration neu generieren

sudo grub-mkconfig -o /boot/grub/grub.cfg

Der Computer läuft nun auf einem Systemd Init System.

Weitere Partitionen entschlüsseln

Die /etc/crypttab Datei anpassen, um bei der Entschlüsselung im Bootprozess das Passwort im Cache zu nutzen.

sudo vim /etc/crypttab # Folgenden Inhalt einfügen # "home" ist der name der entschlüsselten Partition, /dev/home/crypthome die eigentliche verschlüsselte Partition, none für kein Keyfile (nutzt Passsword im Cache) home /dev/home/crypthome none

Danach die /etc/fstab Datei bearbeiten und die entschlüsselte Partition an der gewünschten Stelle mounten. Bei mir sieht es so aus: (etwas unkonventionell, ich erstelle bind mounts auf die Verzeichnisse in /home).

# /dev/mapper/home LABEL=home /dev/mapper/home /run/media/hddhome/ ext4 defaults 0 0 /run/media/hddhome/Pictures /home/seid/Pictures none defaults,bind 0 0 /run/media/hddhome/Videos /home/seid/Videos none defaults,bind 0 0 /run/media/hddhome/Documents /home/seid/Documents none defaults,bind 0 0 /run/media/hddhome/Downloads /home/seid/Downloads none defaults,bind 0 0 /run/media/hddhome/Games /home/seid/Games none defaults,bind 0 0 /run/media/hddhome/Music /home/seid/Music none defaults,bind 0 0 /run/media/hddhome/Software /home/seid/Software none defaults,bind 0 0 /run/media/hddhome/Templates /home/seid/Templates none defaults,bind 0 0 /run/media/hddhome/Public /home/seid/Templates none defaults,bind 0 0 /run/media/hddhome/Phone /home/seid/Phone none defaults,bind 0 0

Package Management

Pacman Konfigurieren

/etc/pacman.conf anpassen, folgende Linien unter "Misc Options" auskommentieren bzw. bearbeiten:

Color ParallelDownloads = 5 # AUF 10 STELLEN ILoveCandy # Hinzufügen am Ende

Mirrorlist optimieren

Reflector Paket installieren:

$ sudo pacman -S reflector

Sicherungskopie der alten Mirrorlist erstellen:

$ sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak

Mirrorlist optimieren:

$ sudo reflector --verbose --latest 10 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

Lokale Paketdatenbank updaten:

$ sudo pacman -Sy

Wir automatisieren diesen Schritt, damit Reflector uns in Zukunft Arbeit abnimmt. /etc/xdg/reflector/reflector.conf editieren und folgende Linien anpassen:

--save /etc/pacman.d/mirrorlist --protocol https --country Switzerland --latest 10 --sort rate

Systemd Service aktivieren und voilà.

$ sudo systemctl enable reflector.timer

Firewall einrichten

ufw Paket installieren:

sudo pacman -S ufw

Simple Konfiguration:

# Alle Verbindungen ablehnen ufw default deny # Verbindungen aus dem lokalen Netzwerk erlauben ufw allow from 192.168.0.0/24 # Beispiel: kdeconnect Rules sudo ufw allow 1714:1764/udp sudo ufw allow 1714:1764/tcp # ssh rate limiten, schützt vor brute-force Attacken ufw limit ssh sudo ufw reload

UFW selbst und den systemd service einschalten:

sudo ufw enable sudo systemctl enable ufw

Reboot und prüfen

sudo systemctl ufw status ufw status

Bluetooth & Audio einrichten

sudo pacman -S bluez bluez-utils pipewire pipewire-pulse pipewire-jack pipewire-alsa wireplumber pavucontrol sudo modprobe btusb sudo systemctl enable bluetooth sudo systemctl start bluetooth

Pipewire bei Systemstart für den Benutzer aktivieren:

systemctl --user enable pipewire.service pipewire-pulse.service

Bluetooth pairing

Um in einem Dual boot System Bluetoothgeräte mit beiden Betriebssystemen verbinden zu können, müssen die Pairing Keys auf der Linux Installation mit den von Windows übereingestimmt werden. Da ich Windows nur noch sehr selten nutze, habe ich mir nicht die Mühe gemacht dies zu implementieren. Details sind im Archwiki verzeichnet.

Schöner Boot Splashscreen

Nicht notwendig, aber schön. Das Softwarepaket Plymouth erstellt schöne Boot Splashscreens.

Kernel Parameter bearbeiten, quiet und splash Parameter einbauen. Ausserdem einige GRUB Optionen setzen, sodass es nicht sichtbar ist. Durch Drücken der ESC Taste im Bootprozess kommt man ins GRUB Menu, so kann auch Plymouth ein- oder ausgeschaltet werden.

sudo vim /etc/default/grub # GRUB Einstellungen GRUB_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_TIMEOUT_STYLE=hidden # Kernel Parameter, ganz am Anfang rein. "loglevel=3" löschen GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Initramfs bearbeiten, plymouth hook nach systemd einbauen.

sudo vim /etc/mkinitcpio.conf # Inhalt: HOOKS(systemd plymouth ...)

Plymouth HiDPI Scaling in der Konfigurationsdatei aktivieren:

sudo vim /etc/plymouth/plymouthd.conf # unter [Deamon] DeviceScale=an-integer-scaling-factor

Ein Plymouth Theme auswählen und setzen. Kann mit der Shell gemacht werden. Ich nutze einfach die Einstellung "Boot Splash Screen" in KDE. Es können Screens im KDE Store heruntergeladen werden, ich nutze einen der Defaults - bgrt. In der vorherigen Konfigurationsdatei nachschauen, ob es wirklich gesetzt wurde. Ein Preview kann wie folgt angeschaut werden:

# als root plymouthd; plymouth --show-splash; sleep 5; plymouth --quit

Initramfs neu erbauen, grub cfg neu bauen. Nach dem Setzen eines neuen Splashscreens muss das Initramfs immer neu gebaut werden.

sudo mkinitcpio -P sudo grub-mkconfig -o /boot/grub/grub.cfg

Snapshots restoren

Die Pakete snapper-rollback (CLI) oder btrfs-assistant (GUI) aus dem AUR installieren. Hier erkläre ich, wie snapper-rollback funktioniert.

Die Datei /etc/snapper-rollback.conf bearbeiten, und bei der Option mountpoint den Mountpoint der BTRFS Toplevel Subvolume angeben (BTRFS root). Falls dem Installationstutorial gefolgt wurde, ist das in /mnt/btrfs-root. Speichern und schliessen. Danach wie folgt vorgehen:

# Alle Subvolumes und Snapshots listen (nicht nötig, aber nice to know) sudo btrfs subvolume list -t / # Besser: Snapper Snapshots auflisten und die gewünschte ID aussuchen snapper list # Oder: Snapper Snapshots einer bestimmten Konfiguration anzeigen snapper -c configname list # Snapshot restoren mit snapper-rollback und neustarten sudo snapper-rollback ID sudo reboot -h now # Nach neustart pacman db lock datei löschen sudo rm /var/lib/pacman/db.lck

snapper-rollback hat automatisch ein Backup des zuletzt gebrauchten Subvolume erstellt. Diese kann gelöscht werden bei Bedarf, kann einfach mit btrfs-assistant gemacht werden.

Falls das System komplett unbrauchbar ist, zuerst im GRUB Menü in den funktionierenden Snapshot booten. Dabei ist es wichtig, sich die ID jetzt zu merken (ist im Pfad ersichtlich z. B. @snapshots/5408/snapshot). Dann im eingeloggten Systemsnapper-rollback IDNUMMER ausführen und neu starten.

Quellen:
https://wiki.archlinux.org/title/installation_guide
https://wiki.archlinux.org/title/Dual_boot_with_Windows
https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system
https://wiki.archlinux.org/title/Dm-crypt/Drive_preparation
https://wiki.archlinux.org/title/Arch_boot_process
https://wiki.archlinux.org/title/NVIDIA/Tips_and_tricks
https://wiki.archlinux.org/title/NVIDIA/Troubleshooting
https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate
https://wiki.archlinux.org/title/General_recommendations
https://www.codyhou.com/arch-encrypt-swap/
https://dev.to/tassavarat/installing-arch-linux-with-btrfs-and-encryption-48na


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.
Gesamten Artikel lesen

© Varient 2024. All rights are reserved