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.
- Festplatten partitionieren, verschlüsseln und formatieren.
- Arch Linux mit
pacstrap
bootstrappen und ins System chrooten. - Initial RAM-Filesystem erstellen.
- Boot loader installieren und konfigurieren.
- Desktopumgebung einrichten.
- Snapshotfunktion einrichten.
- 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 mitrfkill
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.
- Typ mit
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).
- Typ mit
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 exit
aus 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
Das geht im Bruchteil der Zeit mit "archinstall".
Natürlich, nur lernt man da nicht so viel :)
Um ein OS zu "lernen" braucht man es nicht während der Installation zu tun.
Frage zu den Snapper Einstellungen: Sind 5 Snapahots pro Stunde nicht ein wenig viel ?
Die Einstellungen sollten den eigenen Bedürfnissen angepasst werden. Als Linux Neuling habe ich mehr mit dem System experimentiert, da war ich froh über jeden zusätzlichen Snapshot. Sonst gebe ich dir Recht, die stündlichen und täglichen Limite können gerne auf 1/2 heruntergeschraubt werden. Danke fürs lesen!
Hat jemand Erfahrungen mit Archinstall oder ist das nicht empfehlenswert? Das wird ja direkt von Arch Linux angeboten und soll den ganzen Installationsprozess angeblich viel einfacher gestalten. Interessanterweise berichtet ein Arch-Veteran in den Kommentaren eines Heise-Artikels darüber, dass er für Neu-Installationen von Arch inzwischen das Live-System von EndeavourOS benutzt und dann am Ende nur einige Zusätze entfernen muss um ein echtes, sauberes Arch zu bekommen, ohne großen Aufwand zu haben. https://www.heise.de/news/Archinstall-3-0-0-Arch-Linux-einfacher-installieren-10044791.html
Von dem was ich so gelesen habe, funktioniert das Archinstall Script ganz gut. Bevor Arch das Script offiziell angeboten hat gab es verschiedene, von Usern erstellte Scripts, manche besser als andere, wodurch sich der schlechte Ruf etabliert hat.
Archinstall macht die Schritte oben automatisiert, was wiederum die Installation von Arch kinderleicht macht. Nur wenn man keine LAN-Verbindung hat, sondern nur WLAN, muss man am Prompt diese konfigurieren, bevor man Archinstall aufruft.
Der Rest im Installer ist selbsterklärend. Mittlerweile installiere ich Arch mit KDE Umgebung und einiger Pakete damit in weniger als 100 Sekunden (Wenn archinstall beendet ist, zeigt es freundlicherweise einen Timer an, wie lange es gelaufen ist.
Nur wer es Hardcore mag, kann es wie im Artikel beschrieben, manuell installieren. Nur: Warum sollte man das? Ein OS "lernen" kann man auch über andere Wege, das muss nicht zwingend der Installer sein, vor allem, wenn man die Anleitung oben nur blind abtippt und gar nicht weiß, was da genau passiert.
Jetzt bin ich mal neugierig... Du benutzt schon BTRFS, aber nimmst dann für ein Software-RAID wieder LVM... was sind da deine Gründe die zwei Platten nicht per BTRFS zu verbinden?
Ich wollte meine persönlichen Daten von den Systemdaten separieren. Diese Daten bestehen hauptsächlich aus Musik, Bildern und Videos. Da ich keine der tollen Funktionen von BTRFS auf sie verwenden kann (Mediendaten profitieren nicht von BTRFS Komprimierung und Snapshots sind etwas langsam auf HDDs) habe ich mich für das EXT4 Dateisystem entschieden, zumal EXT4 einfach stabil und kampferprobt ist. Hoffe das beantwortet deine Frage.
Respekt! Da hat sich einer wirklich viel Mühe gemacht. Allerdings werde ich mich da ran machen, wenn mein "Rentenantrag" durch ist, vorher fehlt einfach die Zeit, zumal es einige "vorgefertigte" ISO's mit Arch gibt...
gute Anleitung, herzlichen Dank! Distro & Anleitung offensichtlich für schon etwas erfahrenere Linux-Nutzer, meine Stolpersteine:
=> Installationsprozess mit "archinstall" sicher schneller, aber der Lerneffekt beim erstmaligen Testen einer Distribution und mögliche Anpassungen 'unbezahlbar' :)
Freut mich, dass es geklappt hat!
Es sollte gesagt werden, dass die Installation von Arch erst die Hälfte der Arbeit ist, denn so gut wie alle Funktionen müssen manuell installiert/konfiguriert werden (Drucker, Sleep, SSH etc.). Ich habe eigentlich ein ganzes Dokument, etwa in der Länge dieser Anleitung, die meine Post-Installations Konfigurationsschritte dokumentieren. Da diese sehr individuell sein können, habe ich sie hier nicht vollständig inkludiert.
Falls du der Anleitung komplett gefolgt bist und KDE als Desktop Umgebung nutzt, empfehle ich die folgenden Pakete aus der KDE Familie:
Systemtools (unabhängig von der genutzten Desktop Umgebung):
sudo mandb
zum initialisieren)