Init Freedom: Von Arch zu Artix wechseln

Do, 13. Januar 2022, Niklas

Ich habe eine Vielzahl von Geräten mit Arch Linux. Obwohl ich mich nun von systemd trennen möchte, will ich nicht auf jedem Gerät eine Linux Distribution komplett neu aufsetzen und alle Einstellungen neu vornehmen. Um diese Unannehmlichkeit zu umgehen, bietet Artix Linux, der systemd-freie Arch Linux Fork, eine Migrationsanleitung für bestehende Installationen.

Das Artix Linux Projekt selbst empfiehlt zwar, eine Neuinstallation zu bevorzugen, bei mir hat der Wechsel jedoch ohne Weiteres funktioniert. Artix Linux bietet verschiedene Init Systeme an. Ich werde mich hier allerdings auf OpenRC konzentrieren, weil ich damit am meisten Praxiserfahrung besitze. Alle Befehle müssen als Root ausgeführt werden.

Die Systeme Arch Linux und Artix Linux sind sehr ähnlich. Der grösste Unterschied sind die Pakete. Aus diesem Grund müssen im ersten Schritt die Mirrors auf die von Artix umgestellt werden. Wir sichern die alte Mirrorliste unter einem anderen Namen, da es später möglich ist, manche Arch Repositorys auch in Artix einzubinden, um zusätzliche Pakete zu bekommen. Ausserdem sichern wir die Artix Mirrorliste ein zweites Mal, da /etc/mirrorlist in einem späteren Schritt gelöscht werden wird.

mv -vf /etc/pacman.conf /etc/pacman.conf.arch
curl https://gitea.artixlinux.org/packagesP/pacman/raw/branch/master/trunk/pacman.conf -o /etc/pacman.conf
mv -vf /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist-arch
curl https://gitea.artixlinux.org/packagesA/artix-mirrorlist/raw/branch/master/trunk/mirrorlist -o /etc/pacman.d/mirrorlist
cp -vf /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.artix

Anschliessend müssen die alten Pakete aus dem Pacman Cache entfernt und die neuen Repositorys heruntergeladen werden:

pacman -Scc && pacman -Syy

Um den artix-keyring installieren zu können, muss die Signaturprüfung bei Pacman vorübergehend ausgeschaltet werden. Dazu wird die Zeile SigLevel = Required DatabaseOptional in der Datei /etc/pacman.conf mit einem # auskommentiert und darunter die Zeile SigLevel = Never eingefügt. Jetzt können wir die Schlüssel von Artix Linux installieren:

pacman -S artix-keyring
pacman-key --populate artix
pacman-key --lsign-key 95AEC5D0C1E294FC9F82B253573A673A53C01BC2

Nachdem dieser Vorgang abgeschlossen ist, ist es ratsam, die Sicherheitsvorkehrungen von Pacman sofort wieder zu aktivieren. Wir bearbeiten wieder die Datei /etc/pacman.conf und entfernen einfach das # vor SigLevel = Required DatabaseOptional und fügen es stattdessen vor der Zeile SigLevel = Never ein.

Als Nächstes muss eine Liste der aktiven systemd Services gespeichert werden. Für diese Services müssen später die entsprechenden OpenRC Pakete installiert und aktiviert werden. Wir erstellen eine Datei namens daemon.list im aktuellen Ordner:

systemctl list-units --state=running | grep -v systemd | awk '{print $1}' | grep service > daemon.list

Anschliessend können die wichtigsten Pakete von Artix Linux heruntergeladen werden. Es ist empfehlenswert, sie jetzt schon herunterzuladen, da systemd im darauffolgenden Schritt entfernt wird und das System unbrauchbar wird, sollte der Download danach scheitern. An dieser Stelle könnten wir noch abbrechen, wenn es zu Problemen kommt.

pacman -Sw base base-devel openrc-system linux linux-headers elogind-openrc openrc netifrc mkinitcpio archlinux-mirrorlist net-tools lsb-release esysusers etmpfiles connman artix-branding-base

Artix Linux schlägt in seiner Anleitung ausserdem die Pakete rsync und nano vor, diese sind jedoch nicht notwendig für ein funktionierendes System und ich brauche sie nicht, deshalb lasse ich sie weg. Des Weiteren lasse ich den Bootloader GRUB weg. Ein Bootloader ist zwingend notwendig, aber es gibt einfachere Optionen, dazu kommen wir später.

Jetzt ist es endlich an der Zeit, dass wir uns von systemd trennen. Nach der Deinstallation muss auch die Mirrorliste wiederhergestellt werden, deshalb das Backup weiter oben. Wichtig: Ab diesem Punkt gibt es kein Zurück mehr. Wenn die Umstellung jetzt noch abgebrochen wird, ist kein Init System mehr vorhanden und das System ist nicht mehr funktionsfähig!

pacman -Rdd --noconfirm systemd systemd-libs systemd-sysvcompat pacman-mirrorlist dbus
cp -vf pacman.d/mirrorlist.artix pacman.d/mirrorlist

Wenn der Dienst systemd-resolved für DNS genutzt wurde, muss ausserdem die Datei /etc/resolv.conf gelöscht werden, die nur ein Symlink auf eine Datei in einem systemd Ordner ist, der nicht mehr existiert. Damit DNS wieder funktioniert, kann eine neue /etc/resolv.conf mit dem Inhalt nameserver 80.241.218.68 angelegt werden. Dann nutzt ihr den datenschutzfreundlichen DNS-Server von dismail.de mit integriertem Werbeblocker.

Nun sind wir bereit, um die neuen Artix Linux Pakete zu installieren, die wir vorher schon heruntergeladen haben. Ausserdem müssen wir die Lokalisierung für die weiteren Schritte auf C umstellen:

pacman -S base base-devel openrc-system linux linux-headers elogind-openrc openrc netifrc mkinitcpio archlinux-mirrorlist net-tools lsb-release esysusers etmpfiles connman artix-branding-base
export LC_ALL=C

Nachdem die wichtigsten Systemkomponenten von Artix Linux installiert sind, müssen auch alle anderen Arch Pakete durch Artix Pakete ersetzt werden, da sie teilweise unterschiedliche Versionen haben können oder modifiziert wurden, um auch ohne systemd korrekt zu funktionieren. Hinweis: Bei relativ aktuellen Systemen funktioniert das in der vorgegebenen Reihenfolge problemlos. Sollte es zu Dependency-Problemen kommen (wenn lange keine Updates installiert wurden), kann es helfen, die Reihenfolge der Pacman Befehle zu vertauschen:

pacman -Sl system | grep installed | cut -d" " -f2 | pacman -S -
pacman -Sl world | grep installed | cut -d" " -f2 | pacman -S -
pacman -Sl galaxy | grep installed | cut -d" " -f2 | pacman -S -

Anschliessend müssen alle OpenRC Services für die aktiven systemd Services installiert werden. Welche das sind, sehen wir in der Datei daemon.list, die wir vorhin erstellt haben. Meistens heissen die Pakete einfach programmname-openrc, aber Ausnahmen bestätigen die Regel, was die Sache kompliziert machen kann. So wird bluetoothd beispielsweise vom Paket bluez-openrc bereitgestellte. Bei NetworkManager muss beachtet werden, dass der Service gross und das Paket kleingeschrieben ist: Der NetworkManager Service wird von networkmanager-openrc bereitgestellt. Für einige andere Services wie polkit oder rtkit-daemon konnte ich gar kein passendes OpenRC Paket finden. Ich habe diese einfach weggelassen, mein System funktioniert trotzdem einwandfrei.

Nach der Installation der Pakete müssen deren OpenRC Services auch aktiviert werden, sodass sie automatisch beim Systemstart gestartet werden. Hier sind allerdings wieder die Namen aus der Daemon Liste zu verwenden, nicht die Paketnamen. Zu beachten ist hier, dass dbus nicht aktiviert werden muss, weil das bei Bedarf automatisch geschieht, aber der udev Daemon sollte bei Artix Linux zusätzlich aktiviert werden. Die Installation und Aktivierung könnte beispielsweise so aussehen:

pacman -S bluez-openrc colord-openrc dbus-openrc gdm-openrc networkmanager-openrc tor-openrc wpa_supplicant-openrc
for daemon in bluetoothd colord gdm NetworkManager tor wpa_supplicant; do rc-update add $daemon default; done
rc-update add udev sysinit

Als nächsten Schritt erklärt Artix Linux die Konfiguration des Internetzugangs über das Terminal und Konfigurationsdateien. Das ist nur bei Servern sinnvoll. Ich gehe von der Nutzung auf einem Desktop Computer oder Laptop aus. Hier ist es absolut ausreichend, den NetworkManager Service zu aktivieren. Alles Weitere kann wie gehabt über die grafischen Netzwerkeinstellungen der Desktopumgebung verwaltet werden.

Wir sind jetzt so weit mit unserer Umstellung, dass verbleibende Benutzerkonten und Ordner von systemd entfernt werden können. Wer sich nicht sicher ist, ob alles richtig eingerichtet ist, kann damit aber auch bis nach einem Neustart warten, um in der systemd Konfiguration nachschauen zu können, falls etwas noch nicht richtig funktioniert.

for user in journal journal-gateway timesync network bus-proxy journal-remote journal-upload resolve coredump; do
  userdel systemd-$user
done
rm -vfr /{etc,var/lib}/systemd

Wichtig: Es müssen alle x-systemd Einträge aus der Datei /etc/fstab entfernt werden. Das muss zwingend vor einem Neustart geschehen, da das System sonst nicht richtig startet. Ausserdem muss sichergestellt werden, dass die Bootloader Konfiguration nicht mehr die Zeile init=/usr/lib/systemd/systemd enthält. Das System könnte dann ebenfalls nicht starten, da diese Datei nicht mehr existiert. Der Kernel startet standardmässig /sbin/init und das ist für OpenRC richtig.

Wenn das System mit BIOS bootet, muss nur die Konfiguration des vorhandenen Bootloaders überprüft und gegebenenfalls angepasst werden. Dies bedeutet in den meisten Fällen lediglich, den Abschnitt init=/usr/lib/systemd/system aus der Konfigurationsdatei zu entfernen und falls nötig den Befehl zum Anwenden der neuen Konfiguration auszuführen (update-grub oder ähnliches).

Wenn das System allerdings mit UEFI bootet, wird wahrscheinlich schon systemds eigener Bootloader systemd-boot verwendet. Da systemd entfernt wurde, brauchen wir eine Alternative dazu. Ich empfehle rEFInd. Dieser ist leichtgewichtig und einfach zu konfigurieren. Da dieses jedoch nicht im Artix Linux Repository verfügbar ist, müssen wir es uns von Arch Linux holen und anschliessend auf die UEFI Partition installieren:

pacman -U https://www.archlinux.de/download/extra/os/x86_64/refind-0.13.2-1-any.pkg.tar.zst
refind-install

Man sollte unbedingt vor einem Neustart die Datei /boot/EFI/refind/refind.conf überprüfen. Die meisten Einstellungen sind korrekt. Falls es doch einen Fehler gibt, wird das neue Artix Linux System allerdings nicht starten. Oft muss hier der Abschnitt init=/usr/lib/systemd/systemd entfernt werden. Ein Update Script muss nicht ausgeführt werden, Änderungen an der Datei werden beim nächsten Boot automatisch wirksam.

Zusätzlich noch ein Tipp aus der Migrationsanleitung für Parabola GNU/Linux-libre: Mit dem Befehl pacman -Q --foreign können Pakete gefunden werden, die nicht im Artix Linux Repository vorhanden sind. Es kann Sinn ergeben, diese zu ersetzen oder, falls nicht mehr benötigt, zu entfernen, da sie bei Systemupdates nicht berücksichtigt werden können und damit veralten.

Nachdem alle Schritte erfolgreich ausgeführt wurden, kann Arch Linux ein letztes Mal heruntergefahren und Artix Linux gestartet werden. Achtung: Sollte es an irgendeinem Punkt zu Problemen gekommen sein, ist jetzt die letzte Chance, um das zu beheben, ansonsten startet das neue System vielleicht nicht richtig und eine Reparatur ist nur mit Live DVD/USB-Stick möglich! Da systemd nicht mehr vorhanden ist, kann das System nicht auf normalem Weg neu gestartet werden. Stattdessen kann man das durch folgende Kombination von Terminalbefehlen erreichen:

sync
umount -a
mount -f / -o remount,ro
echo s >| /proc/sysrq-trigger
echo u >| /proc/sysrq-trigger
echo b >| /proc/sysrq-trigger

Die gesamte Prozedur sieht komplizierter aus, als sie tatsächlich ist. Ich habe sie auf zwei Laptops erfolgreich durchgeführt, beim zweiten Versuch hat es nur noch wenige Minuten gedauert. Wer beim Wechsel auf Probleme stösst, kann gerne in den Kommentaren um Hilfe fragen.

Quellen: