Systemd

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche


Einleitung

systemd ist ein init-System, welches in Konkurrenz zum bewährten sysvinit und zu upstart steht. Entwickelt wurde es von dem bekannten RedHat-Entwickler Lennart Poettering. Debian wird voraussichtlich in Zukunft auf systemd als init-system setzen und Ubuntu möglicherweise folgen. Siduction hat mit dem 2013.2-Release "December" eine Version mit systemd veröffentlicht, hier soll kurz beschrieben werden wie ältere Installationen umgestellt werden können.

Wer tiefer in die Materie eindringen will, kann im empfehlenswerten Blog von Lennart Poettering [1] mit dem bezeichnenden Titel Rethinking PID 1 (PID 1 ist immer init, der erste gestartete Prozess eines bootenden Systems) lesen.


Vorheriges Init sichern

Der Debian-Wiki-Artikel zur systemd-Installation [2] schlägt vor, eine Sicherungskopie des alten Init anzulegen:

cp -av /sbin/init /sbin/init.sysvinit <--- Before installing systemd-sysv package 

Damit kann man gegebenenfalls durch Eingabe von init=/sbin/init.sysvinit an der Grub-Kernelzeile sein System mit Sysvinit starten


systemd installieren

In den standardmäßig eingestellten Debian und Siduction Repos sind alle notwendigen Pakete enthalten, so dass an den sources.lists nichts geändert werden muss. Die Installation erfolgt mittels

apt-get update && apt-get install systemd sytemd-sysv libpam-systemd systemd-ui 

Es kann (nicht zwingend, je nach Status der Installation) nötig sein, dass apt mit einer Nachfrage eine explizite Bestätigung verlangt, die genau wie angezeigt beantwortet werden muss, z.B. muss:

WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'
tatsächlich durch die Eingabe von Yes, do as I say! bestätigt werden.


Journal aktivieren

Um journald, das syslog von systemd zu aktivieren, muss auf umzustellenden Systemen eine neue Gruppe und ein Unterverzeichnis mit den entsprechenden Rechten (siehe man systemd-journald.service) angelegt werden:

addgroup --system systemd-journal
mkdir -p /var/log/journal
chown root:systemd-journal /var/log/journal
gpasswd -a $user systemd-journal


Erste Schritte

Die wichtigsten Befehle sind von Devil in den Release-Notes [3] zu siduction 2013.2 December und in Bluelupos Wiki [4] beschrieben. Kurz zusammengefast:

systemctl isolate graphical.target – Wechselt in die grafische Umgebung (init 5)
systemctl isolate multi-user.target – Wechselt in ein Terminal ohne X (init 3)
systemctl reboot – Neustart des Systems
systemctl poweroff – Herunterfahren des Systems
systemctl start [NAME...] – Starte eine oder mehrere Units (Dienste)
systemctl stop [NAME...] – Stoppe eine oder mehrere Units
systemctl disable [NAME...] – Sperre eine oder mehrere Units
journalctl -b – zeigt das Protokoll des letzten Bootvorgangs
journalctl -b -p err – zeigt den letzten Bootvorgang, limitiert auf Fehler der Priorität ERROR


Bekannte Fehler

init3/init5 klappt nicht

(Anmerkung/Update 07/2014: Das folgende galt für frisches December-Release zur Zeit von systemd-204, mit systemd Version >=208 ab Juli 2014 scheint es so nicht mehr zu klappen da im graphical.target der Install-Abschnitt fehlt)

Einige User berichten, dass auf umgestellten älteren Installationen die vorgesehenen Befehle zum Wechseln des Runlevels (init 3, init 5, siehe oben) nicht funktionieren, dies wird zurzeit noch untersucht. Eine Ursache kann z.B. sein, dass der Loginmanager lightdm auch vom multi-user.target (entspricht init 3) aktiviert wird statt gestoppt zu werden. Dies lässt sich überprüfen mittels
systemctl show lightdm.service
Wenn in der Ausgabe die Zeile "WantedBy=multi-user.target graphical.target" steht, hat systemd-sysv nicht die Siduction Insserv Overrides für den DM übernommen (start in runlevel 5, stop in allen anderen). Die folgenden Schritte sollten abhelfen (auszuführen explizit im aktiven graphical.target, also Schritt 1 nicht auslassen):
1.  systemctl isolate graphical.target
2.  systemctl stop lightdm.service
3.  systemctl disable lightdm.service
4.  update-rc.d remove lightdm
5.  update-rc.d lightdm start 02 5 . stop 01 0 1 2 3 4 6 . 
6.  systemctl enable graphical.target 

Nach Reboot sollte dann show lightdm.service nur noch WantedBy=graphical.target enthalten. (TODO: Saubere systemd-Implementierung wäre das schreiben eines richtigen lightdm.service anstatt auf /etc/init.d/lightdm aufzusetzen)

Netzwerk stoppt in init 3

Auf einigen Systemen schein bei Wechsel nach init 3 das Netzwerk anzuhalten. Auch hier wird vom Team noch nach den Ursachen gesucht, da bei den betroffenen Systemen bisher keine einheitliche Fehlkonfiguration Gefunden wurde. Als vorübergehende Abhilfe klappt es meist, das Netzwerk in der Konsole händisch mittels
systemctl start networking.service
zu starten.


Man-Pages

Bei der fast unendlichen Vielfalt an Einstellungen, Services, Targets gibt es auch zahlreiche manpages. Einen ersten Überblick bzw eine Art Inhaltsverzeichnis liefert

man systemd.index

Besonders interessant sind dabei wohl unter "S" die mit systemd.$foo beginnenden Einträge, die auch per Completion mit man systemd.(Tab(Tab) gezeigt werden können.


Quellen/Links

  1. http://0pointer.de/blog/projects/systemd.html
  2. https://wiki.debian.org/systemd#Installation
  3. http://de.news.siduction.org/2013/12/31/release-notes-fuer-siduction-2013-2-mit-systemd/
  4. http://mywiki.bluelupo.net/index.php/Grundlegende_Kommandos_zu_systemd
  5. http://www.freedesktop.org/software/systemd/man/

Weiterführende Informationen: sehr ausführliche und lesenswerte Wikis zu systemd findet man bei archlinux und fedora.