staging.inyokaproject.org

systemd – Das Init-System

software.png

Einige Distributionen, allen voran Fedora, openSUSE und Arch Linux, verwenden schon das neue Init-System systemd. Dieser Artikel soll einen groben Überblick zu systemd liefern und zudem ein Vergleich zu Upstart beinhalten.

Was ist ein Init-System?

Beim Starten eines Rechners geschehen viele Dinge. Für viele ist bekannt, dass zuerst das sogenannte BIOS gestartet wird. Auf neueren Systemen kommt hingegen UEFI zum Einsatz. Beide sind zum Erkennen der installierten Hardware notwendig. Nach diesem Schritt wird der Bootloader gestartet, in der Regel ist GRUB 2 in Gebrauch. Dieser kümmert sich darum den Linux-Kernel und die Initial Ramdisk: zu laden. Nachdem auch dieser Vorgang abgeschlossen ist, folgt der Start des ersten „richtigen“ Prozesses auf einem Unix-System: Das Init-System.

Aufgabe dieses Init-Systems ist es, das System für den Benutzer in einen brauchbaren und definierten Zustand zu überführen: Ohne dieses würde man nur auf einer Shell sitzen, bei welcher die Übersetzung, Uhrzeit, Netzwerk oder viele andere Sachen fehlen würde. Auch ein Mehrbenutzerbetrieb wäre – mangels gestarteter Dienste hierzu – nicht möglich.

Um diesen definierten Zustand zu erreichen, folgt dieses Init-System bestimmten Regeln, welche beim gängigen SysVinit in Shellskripte niedergeschrieben sind. Dazu kommen noch einige Konfigurationsdateien der vielen Dienste, welche man heute auf einem modernen System vorfindet.

Geschichtliches

Im Laufe der Entwicklung hin zu modernen Unix-Systemen wurde vieles an grundlegender Software immer wieder modernisiert, dazu gehört auch das Init-System, welches für das Starten von Prozessen verantwortlich ist.

SysVinit

SysVinit ist ein sehr altes System zum Starten von Diensten, denn als Grundlage dient ein Design von 1983. Daher gibt es weder Abhängigkeiten, noch Events und so wird dieses System modernen Desktops und Notebooks nicht mehr gerecht. Dienste werden hier strikt der Reihe nach gestartet, unabhängig davon, ob diese parallel gestartet werden könnten.

SysVinit setzt auf viele Skripte, welche in weiten Teilen ähnliche oder sogar gleiche Aufgaben erledigen. Häufig benutzte Funktionen wurden aber mit der Zeit auf gemeinsam genutzte Skripte (Includes) ausgelagert, um zumindest im Ansatz dem DRY-Prinzip zu entsprechen.

Die Skripte können je nach Distribution an unterschiedlichen Orten, zum Beispiel /etc/rc.d oder /etc/init.d, liegen, und auch die Aktivierung und Deaktivierung von Diensten kann abhängig von der Distribution unterschiedlich erfolgen – zum Beispiel durch symbolische Links in /etc/rcX.d oder einem Eintrag in der /etc/rc.conf.

Für SysVinit ist es nicht zuverlässig möglich, Dienste sauber zu beenden. In der Regel wird das Skript entweder einen Prozess anhand seiner gespeicherten Prozess-ID beenden oder aber mit killall alle in Frage kommenden Prozesse beenden. Ausnahme hiervon sind Dienste, welche eine eigene Logik zum Beenden haben. Ein bekannter Dienst welcher sich beispielsweise nicht sauber beenden lässt, wäre NRPE, der für Monitoring über Nagios oder Icinga benötigt wird.

Upstart

Upstart ist eine relativ neue Entwicklung eines Init-Systems. Im Gegensatz zu dem nachfolgend beschriebenen systemd, welches mit Abhängigkeiten arbeitet, wird hier alles über Events geregelt. Upstart ist der erste Schritt zur Vereinfachung der Init-Skripte, welche nun unter /etc/init liegen. Ein weiterer Unterschied ist, dass zum Deaktivieren eines Services die Events im Init-Skript deaktiviert werden müssen (bis Version 1.3). systemd arbeitet hier wie auch schon SysVinit mit Symbolischen Verknüpfungen.

Upstart greift bei weitem nicht so tief in ein vorhandenes System ein. Unter anderem wird auch nicht verlangt Konfigurationen über bestimmte, vorgegebene, Konfigurationsdateien zu erledigen. Die Dokumentation wurde vor allem in den letzten Versionen stark ausgebaut. Dies war früher ein häufiger Kritikpunkt.

Upstart wurde neben Ubuntu auch eine Zeit lang von anderen Distributionen wie zum Beispiel Fedora verwendet. Viele Entwickler sind aber nicht bereit an Upstart mitzuentwickeln, da Canonical hierzu eine Beitragszustimmung 🇬🇧 verlangt.

OpenRC

Neben systemd, SysVinit und Upstart gibt es auch noch OpenRC, welches häufig bei Gentoo-Systemen verwendet wird. OpenRC wird in diesem Artikel der Einfachheit halber nicht weiter beschrieben.

Was ist systemd?

systemd ist ein neues Init-System, welches alle Möglichkeiten des Linux Kernels optimal ausnutzt und auf einige alte Konzepte verzichtet. Es wird weder bestehender Code verwendet, noch ist es zu bestehenden Init-Systemen kompatibel. systemd wird von Lennart Poettering entwickelt, welcher unter anderem für PulseAudio, Avahi und einige andere Programme verantwortlich ist, die bekannt und teilweise auch umstritten sind.

Ziel der Entwicklung ist es, ein Init-System zu schaffen, welches für den Anwender nachvollziehbar handelt, zuverlässig funktioniert und gleichzeitig einige Unzulänglichkeiten bisheriger Systeme behebt.

Die Vor- und Nachteile von systemd

systemd-analyze.png
Visualisierung der Aktivitäten, die systemd ausführt.

Vorteile

  • Die Arbeitsweise wird von vielen kleinen Skripten (SysVinit) nach systemd, also einem Skript, verlagert. Der Administrator beschäftigt sich also nicht mehr mit dem Schreiben von Init-Skripten, sondern erstellt lediglich Anweisungen („Unit Files”) wie ein Programm zu starten ist und welche Abhängigkeiten dieses hat.

  • systemd kann genau feststellen, ob ein bestimmter Dienst läuft und kann diesen darüber hinaus auch zuverlässig beenden.

  • Runlevel, bei systemd eigentlich Targets, können unabhängig von der aktuellen Position und unabhängig davon, ob andere Dienste zwischendurch gestartet oder beendet wurden, zielsicher erreicht werden. Gehört zum Beispiel zu einem Target „serverbetrieb.target“ kein Apache, wird dieser beim Wechsel vom Target „privatstuff.target“ zuverlässig beendet, und dafür gegebenenfalls ein anderer Dienst aktiviert.

  • Socket Activation: systemd ist in der Lage Dienste erst zu starten, wenn dies tatsächlich erforderlich ist. Dies ist vor allem hilfreich für Maschinen aus der Softwareentwicklung, welche wohl nicht immer alle Dienste benötigen, diese aber gerne bei Bedarf automatisch gestartet hätten.

  • Einheitliche Konfigurationsdateien: systemd definiert genau wo welche Informationen konfiguriert werden müssen, das heißt, dass sich jede Distribution mit systemd zu weiten Teilen gleich verhält – was zumindest Dienste angeht, Paketverwaltungen und Co. bleiben hiervon unberührt.

  • Dienste, welche nicht selbstständig in einen anderen Benutzerkontext wechseln, können dies in Zukunft ohne sudo oder su erledigen, da systemd hierzu Funktionen bereitstellt.

  • systemd kann sich zur Laufzeit durch eine neuere Version ersetzen, ein Neustart für ein Sicherheitsupdate oder neue Features am Init-System sind also nicht nötig.

Nachteile

  • systemd läuft nur auf einem Kernel, welcher bestimmte Features wie zum Beispiel Control Groups bereitstellt. Dies ist aktuell ausschließlich bei Linux der Fall, eine Portierung auf andere Unix-Derivate ist aktuell nicht geplant und daher unwahrscheinlich.

  • Bruch mit Bestehendem: systemd stellt zu weiten Teilen einen kompletten Neuanfang dar. Dies bedeutet aber auch, dass Bekanntes so nicht mehr funktioniert und ein Umdenken beim Anwender erforderlich ist.

  • systemd verlagert die Komplexität von vielen kleinen Skripten in eine zentrale Software.

journald

journald ist ein Teil von systemd und ist ein Ersatz für den bestehenden Syslog- und logrotate-Dienst. Nachteil ist, dass die Logdateien in einem bisher nicht dokumentiertem binärem Format, das nicht von Menschen gelesen werden kann, abgespeichert werden und somit ein Zugriff mittels den Tools wie less, more oder grep nicht mehr möglich ist.

journald definiert darüber hinaus aber auch die Möglichkeit, Metadaten in Logdateien zu schreiben oder Logdateien zu signieren (FSS). Das sorgt in manchen Anwendungsfällen dafür, dass Logdateien nicht manipuliert, aber dennoch auffällig gelöscht werden können.

Ebenfalls wurden bei journald einige Kritikpunkte der bisherigen syslog/logrotate-Lösung behoben. So war es möglich, dass diese einem das Dateisystem voll schreiben – journald passt hier automatisch auf – oder das Informationen über viele Dateien verstreut liegen. Zugriff auf diese Logfiles erfolgt über das Tool journalctl, welches auch einem normalen Benutzer das vollständige Systemlog anzeigt, sofern man Mitglieder der Gruppe adm ist.

systemd

systemd arbeitet anders. Es beschäftigt sich nur noch mit Abhängigkeiten und nicht mit Events und der Frage wie etwas zu tun ist. Beim Start des Systems laufen viele Prozesse gleichzeitig. Units werden, wenn möglich, gleichzeitig gestartet und die verschiedenen Targets bis zum gewünschten Ziel automatisch anhand der Konfiguration durchlaufen.

Anwendung

Eine kleine Liste gängiger Aktionen:
Auf Links wie zum Beispiel start oder stop, welche die Distributionen oft verwenden, haben wir verzichtet:

Aktionen im Vergleich
Aktion SysVinit upstart systemd
Dienst starten /etc/init.d/dienstname start initctl start dienstname systemctl start dienstname.service
Dienst aktivieren Symlink in rcX.d Manipulation Job oder Override File systemctl enable dienstname.service
Dienst neustarten /etc/init.d/dienstname restart initctl restart dienstname systemctl restart dienstname.service
Dienst ändern Modifikation des Init-Skripts Modifikation Job oder Override File Überschreiben des Distributorskripts in /etc
Runlevel ändern telinit runlevel telinit runlevel systemctl isolate runlevel.target

Auf den ersten Blick sind so kaum Vorteile ersichtlich, sehen wir uns dies aber mal etwas genauer an:

  1. SysVinit erfordert in jedem Skript eine bestimmte, aber unterschiedliche Logik zum Starten, Neustarten und Beenden des Dienstes

  2. Upstart erfodert zum Aktivieren/Deaktivieren eine Modifikation des Jobs

  3. Upstart erfordert zum Verändern eine Modifikation des Skriptes, welches der Distributor mitliefert. Etwas das normalerweise nur in Ausnahmefällen gemacht werden sollte! Ab Version 1.3 gibt es hierzu auch die Möglichkeit der sogenannten „Override Files“.

  4. Weder SysVinit noch Upstart bieten eine zuverlässige Möglichkeit, um unabhängig von der aktuellen Position definiert ein bestimmtes Runlevel zu erreichen.

Unit Files

Ein zentrales Konzept von systemd sind die Unit-Files. Diese ersetzen die Init-Skripte von anderen Systemen und sind wesentlich einfacher aufgebaut.

Unit Typen

Es gibt verschiedene Arten von Unit Files, nachfolgend ein paar Beispiele:

Unit Files
Dienste Typen
.service Typ für normale Dienste
.target Zieltyp, dient zum Beispiel als Ersatz für Runlevels (graphical.target), aber auch für Zwischenschritte (network.target, local-fs.target, ...)
.mount Typ für Mountpoints, meist automatisch durch systemd-fstab-generator erzeugt
.socket Typ für Socket Activation von Diensten

Vergleich

Sehen wir uns hierzu mal einen Dienst bei allen drei Systemen im Vergleich an, ausgewählt wurde hierzu cron, welcher auf den meisten Systemen zu finden sein sollte:

Den Anfang macht SysVinit:

#!/bin/sh
# Start/stop the cron daemon.
#
### BEGIN INIT INFO
# Provides:          cron
# Required-Start:    $syslog $time
# Required-Stop:     $syslog $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Regular background program processing daemon
# Description:       cron is a standard UNIX program that runs user-specified 
#                    programs at periodic scheduled times. vixie cron adds a 
#                    number of features to the basic UNIX cron, including better
#                    security and more powerful configuration options.
### END INIT INFO


test -f /usr/sbin/cron || exit 0

#LSBNAMES='-l'  # Uncomment for LSB name support in /etc/cron.d/

. /lib/lsb/init-functions

case "$1" in
start)  log_daemon_msg "Starting periodic command scheduler" "crond"
        start-stop-daemon --start --quiet --pidfile /var/run/crond.pid --name cron --startas /usr/sbin/cron -- $LSBNAMES
        log_end_msg $?
        ;;
stop)   log_daemon_msg "Stopping periodic command scheduler" "crond"
        start-stop-daemon --stop --quiet --pidfile /var/run/crond.pid --name cron
        log_end_msg $?
        ;;
restart) log_daemon_msg "Restarting periodic command scheduler" "crond" 
        start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/crond.pid --name cron
        start-stop-daemon --start --quiet --pidfile /var/run/crond.pid --name cron --startas /usr/sbin/cron -- $LSBNAMES
        log_end_msg $?
        ;;
reload|force-reload) log_daemon_msg "Reloading configuration files for periodic command scheduler" "crond"
        # cron reloads automatically
        log_end_msg 0
        ;;
*)      log_action_msg "Usage: /etc/init.d/cron {start|stop|restart|reload|force-reload}"
        exit 2
        ;;
esac
exit 0

Jetzt kommt der entsprechende Upstart-Job:

# cron - regular background program processing daemon
#
# cron is a standard UNIX program that runs user-specified programs at
# periodic scheduled times

description     "regular background program processing daemon"

start on runlevel [2345]
stop on runlevel [!2345]

expect fork
respawn

exec cron

Zuletzt systemd:

[Unit]
Description=Periodic Command Scheduler

[Service]
ExecStart=/usr/sbin/crond -n
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target

Grundlegend machen alle drei Varianten das Gleiche. Jedoch ist es bei SysVinit nicht ganz so einfach zu sehen, was genau passiert. Cron ist in diesem Fall ein sehr einfaches Beispiel, Dienste wie zum Beispiel postfix haben wesentlich komplexere Init-Skripte, wohingegen die Komplexität von upstart Jobs oder systemd Units nur unwesentlich zunimmt.

Der upstart-Job wäre, wenn er in /etc/init liegt, schon direkt aktiviert und würde beim Starten des Systems abgearbeitet werden. SysVinit und systemd erfordern hierzu Links in /etc/rcX.d (Debian/Ubuntu) beziehungsweise /etc/systemd/system. Zur Verwaltung dieser Links gibt es auf einem Debian oder Ubuntu System das Tool update-rc.d. Für systemd gibt es systemctl enable dienst.service, welches sich um das Anlegen des Links kümmert.

Im systemd-Unit wurde hier übrigens definiert, dass cron.service zum Target multi-user.target gehört, das entspricht einem Mehrbenutzerrunlevel im normalen SysVinit ohne grafische Oberfläche. Wer jetzt glaubt im grafischen Modus (mit GDM, KDM, ...) keinen cron haben zu können, irrt: Targets können von anderen Targets abhängen und so definiert beispielsweise graphical.target – welches bei den meisten Distributionen der Standard ist – dass doch bitte zuerst multi-user.target gestartet werden möchte.

Die WantedBy Definition ist übrigens nur ein Vorschlag für systemctl. Es ist jederzeit möglich durch eigene Symlinks unterhalb von /etc/systemd/system/ das Verhalten und die Reihenfolge zu modifizieren. Unabhängig davon werden jedoch andere Abhängigkeiten der einzelnen Units beachtet. Dies führt zum Beispiel immer dazu, dass Avahi gestartet wird, wenn ein Dienst diesen benötigt, unabhängig davon, in welchem Target der Dienst gestartet wird.

Mythos: systemd sorgt für mehr Komplexität

Es gibt oft Befürchtungen, dass systemd ein System wesentlich komplexer macht. Begründet wird dies oft damit, dass gerade langjährige Anwender sich an das Lesen von Skripten gewöhnt haben und dies daher logisch erscheint. Tatsächlich ist es aber so, dass Init-Skripte dem DRY-Prinzip widersprechen und dadurch jedes Skript eine gewisse Komplexität mitbringt. systemd beschäftigt sich hier wesentlich wenig mit der Logik, wie etwas zu tun ist. Es beschäftigt sich damit, was getan werden muss, um einen bestimmten Status zu erreichen.

Es ist allerdings richtig, dass durch diese neuen Ansätze von systemd das Init-System als solches komplexer wird, Hintergrund ist, dass Aufgaben von vielen kleinen Skripten in einen einzigen Dienst verlagert werden. Es ist jedoch absehbar, dass auch systemd einen Grad der Stabilität wie SysVinit erreichen wird, wodurch dies zukünftig kein Problem mehr darstellt.

Genauso wie Init-Skripte arbeitet auch systemd nur das ab, was konfiguriert wurde. Es gibt keine wundersame Magie, die dafür sorgt, dass alles funktioniert.

systemd in Ubuntu?

Ubuntu hat bisher noch keinen Plan auf systemd zu wechseln. Aktuell gibt es in dieser Richtung auch keine Entwicklung. Denn die vorhandenen Pakete sind hoffnungslos veraltet und werden nicht aktiv von den Ubuntu-Entwicklern betreut. Ob systemd in Zukunft kommen wird, ist noch ungewiss, hängt aber maßgeblich von Projekten wie GNOME und KDE ab. Sollten diese systemd erfordern, wären diese Desktops nicht mehr länger unter Ubuntu lauffähig.


Ein großes Dankeschön an encbladexp für den eingereichten Artikel

Dieser Artikel steht unter der by-nc-sa 2.0-Lizenz.

Veröffentlicht von svij | 22. September 2012 19:30 | Kategorie: Software | # Fehler im Artikel melden

stenosis

Avatar von stenosis
1 22. September 2012 20:20

Danke für den guten Artikel (-:

FERNmann0

Avatar von FERNmann0
2 22. September 2012 22:01

systemd gefällt mir bis jetzt sehr gut, es wird einiges vereinheitlichen und auch vereinfachen. Bis auf die binären Logs, da habe ich den Sinn dahinter noch nicht verstanden. Textdateien sind noch viel flexibler.

Hoffen wir nur, dass Ubuntu nicht am "not invented here" Syndrom leidet und krampfhaft an Upstart festhält. Auf der anderen Seite ist eine verzögerte Einführung vielleicht ganz gut, PulseAudio wurde ja auch zu früh zum Standard und hat heute immer noch unberechtigterweise einen schlechten Ruf. Gerade sodass Elementares wie ein Init-System braucht Zeit zum Reifen.

Klau3

Avatar von Klau3
3 22. September 2012 23:02

Hmmm, die bisherigen Kritikpunkte an systemd, von denen ich bisher gelesen habe, wurden hier nicht angesprochen (k.a. ob wahr):

- systemd soll noch recht unstabiel im Vergleich zu Upstart sein

- systemd soll den Nutzern Freiheit nehmen, da alles nur noch über den systemd Weg (Binärschnittstellen) gemacht werden kann und dadurch alternative Systeme angeblich stark behindert werden → widerspricht der Linux Philosophie (hoffe ich habe es richtig wiedergegeben).

Zudem kann Upstart paralel zu SysVinit betrieben werden, was auch ein Punkt für Upstart im Vergleich zu systemd ist.

Ich erinnere mich noch wage an dieses Video indem auf dem 27c3 u.a. auf systemd eingegangen wird und die Antworten von Lennart Poettering, der zufällig vor Ort war, nicht gerade die sympathischsten sind.

skull-y

4 22. September 2012 23:07

Instabil ist systemd keines Wegs bzw. ich hab bisher keine Probleme mit ihm gehabt.

Ich verweise einfach mal auf den Thread im archlinux.de-Forum: https://bbs.archlinux.de/viewtopic.php?id=21924

hefee

5 22. September 2012 23:54

@3:systemd und Sysvinit kannst du auch paralell installieren - habe ich auf einem debian sid auch schon getestet; sehr praktisch einfach wieder auf sysvinit umstellen zu können, falls systemd nicht hochkommt.

Was aber eigentlich interessant ist, dass beide upstart und systemd abwärtskompatibel sind. Das heißt wenn es kein entsprechendes/r job/unitfile für einen Dienst erstellt wurde, nutzt er einfach das sysvinit script. Der Stand in debian wheezy(testing) ist, dass systemd einfach installeirt werden kann / ca. 10% der Dienste besitzen eigene Unitfiles. Wenn upstart und systemd nicht abwärtskompatibel wären, würde dass die Verbreitung massivst behindern...

Klau3

Avatar von Klau3
6 22. September 2012 23:57

@5 Danke, das ist gut zu wissen.

Danton

Avatar von Danton
7 23. September 2012 01:14

systemd ist nicht schlecht ein System bootet mit diesem Init System etwas schneller. Das einzige was mich stört ist das systemd eventuell zu Fett wird und immer mächtiger wird (do one job, do it well).

journald ist ein Teil von systemd und ist ein Ersatz für den bestehenden Syslog- >und logrotate-Dienst. Nachteil ist, dass die Logdateien in einem bisher nicht >dokumentiertem binärem Format, das nicht von Menschen gelesen werden kann, >abgespeichert werden und somit ein Zugriff mittels den Tools wie less, more oder >grep nicht mehr möglich ist.

journald speichert die Logdateien bei mir nicht binär ab und ich hoffe auch das dies keinen Anklang findet.

Ich sehe das ganz mit Canocial sehr kritisch da sie sich so wie so sehr schwach an der Entwicklung beteiligen (oder das Patches eben gar nicht für andere Distrubtions verwendbar sind) und auch mit den Unity APIs (die Unity APIs kopieren teilweise Dinge die schon vorhanden sind zb. Unity.MediaPlayer und Mpris2 oder Unity.Notifycation und libnotify) nicht wirklich was passendes getan haben. Ich hoffe das, dass mit der Zeit besser wird.

Danton

Avatar von Danton
8 23. September 2012 01:35

Aktion SysVinit upstart systemd Dienst starten /etc/init.d/dienstname start initctl start >dienstname systemctl start dienstname.service

BTW: Bei systemd können Dienste ohne das .service gestartet werden.

encbladexp

Ehemaliger

Avatar von encbladexp
9 23. September 2012 10:30

@8: Das ist richtig, aber erst ab Version X welche wohl bisher weder in Debian noch in Ubuntu sein dürfte.

@7: journald nutzt immer Binary Logs, leitet aber je nach Distribution die Logs schon 1:1 an einen laufenden Systemd weiter.

@3: Instabil ist erst ein Argument wenn wir bei eine Version sind welche die Entwickler als "fertig" bezeichnen, aktuell wird immernoch viel geschraubt was man auch von Version zu Version merkt. Der systemd Weg sind übrigens keine "Binärschnittstellen" sondern klar definierte Konifgurationsdateien die genommen werden müssen.

mfg Stefan Betz

wurzel-günther

10 23. September 2012 11:39

Vielen Dank für die Ausführungen zu systemd. Ich habe vor etwa 1,5 Jahren damit begonnen, systemd parallel zu sysVinit zu nutzen und nutze es nun seit einem halben Jahr ausschließlich auf Desktop und Server. Ich bin jetzt kein besonders anspruchsvoller Nutzer und bin vielleicht deshalb noch nie auf ein echtes Problem oder einen Bug gestoßen. Vielleicht aber auch, weil systemd ziemlich gut funktioniert (vor allem wenn man sich ein paar Sachen dazu durchliest). Ich bin sehr begeistert, wie einfach man mit systemd Dienste/Daemons kontrollieren kann. Starten, aktivieren, kontrollieren, beenden hat mit systemd nicht mehr viel mit Wissen zu tun, sondern ist mehr eine Fingerübung. (Vielleicht ist das eines der größten Probleme. Zu einfach zu nutzen.) Wo ich aber wirklich Probleme sehe, das ist die Umstellung die man als Nutzer und vor allem als Entwickler hinnehmen muss. Nicht jeder ist bereit, sich neu in Systemstartprobleme einzuarbeiten. Und ein noch größeres Problem ist natürlich die Dokumentation, wie so oft bei Linux. Alles was mit systemd zu tun hat, ist ja noch einigermaßen dokumentiert. aber journald ist in der Hinsicht eine Katastrophe (auch wenn ich finde, dass es unglaublich gute logdateien schreibt, die man mit journalctl dann leider nur sehr mangelhaft lesen kann)

Was mich noch interessieren würde, ist, ob systemd jetzt abwärtskompatibel ist oder nicht. @5hefee sagt es ist abwärtskompatibel, der Artikel sagt es ist nicht abwärtskompatibel. Heißt das, nur die Bedienung wurde umgestellt und das Starten von Diensten ist abwärtskompatibel? Wie soll ich das verstehen?

@3: Das Lennart Poettering Bashing in der Linuxszene ist meiner Meinung nach ziemlich unangebracht. Er ist wie er ist, aber er ist ein ziemlich guter Entwickler. Und das sollte man respektieren. Plus hatte er in dem Video das hier verlinkt wird einfach recht. Warum sollte er niemandem widersprechen dürfen der Quatsch über Teile seier Arbeit erzählt.

encbladexp

Ehemaliger

Avatar von encbladexp
11 23. September 2012 12:00

@10: systemd kann über sog. Generators (davon gibt es viele) alles machen was davor ging. Im Hintergrund wird also aus altem Krams automatisch neuer gemacht was mehr oder weniger gut Funktioniert. Es ist also tatsächlich Abwärtskompatible (mit Einschränkungen), ich selbst würde aber auf jeden Fall native Unit Files bevorzugen und auch andere Distributionen kicken nach und nach die alten Scripts.

Die Dokumentation wird auch von Release zu Release verbessert, es gibt schon mehr Doku als zu Upstart je vorhanden war.

mfg Stefan Betz

skull-y

12 23. September 2012 12:25

Das Einzige, was mich bei systemd mittlerweile maßlos aufregt, ist die (beabsichtigte) Inkompatibiliät zu BSD.

encbladexp

Ehemaliger

Avatar von encbladexp
13 23. September 2012 12:31

@12: Das ist nicht "absichtlich" inkompatibel, der Entwickler hat sich jedoch dazu entschieden bestimmte Features zu erfordern um bestimmte Funktionen zu realisieren. Dazu gehören z.B. cgroups und einige andere Sachen welche wohl ein BSD Kernel nicht so oder eben einfach anders umsetzt.

Bekommt der Kernel also ähnliche/gleiche Features wäre eine Portierung durchaus möglich. Aktuell ist es aber tatsächlich so das dies weder möglich noch vorgesehen ist.

mfg Stefan Betz

Ximion

Avatar von Ximion
14 23. September 2012 16:23

@3: Naja, den "Datenwolf" nimmt eh kaum wer ernst, er ist so ziemlich gegen alle neueren Entwicklungen im Linuxumfeld (z.B. ALSA, PulseAudio, Wayland, systemd, ...) - Ich fand Lennarts einwürfe sehr erfrischend ☺
@encbladexp: Vielen Dank für diesen Artikel! Und noch viel mehr Danke für die korrekte Beantwortung alle Fragen und Mythen in diesen Kommentaren! Systemd ist wirklich ein Segen für entwickler, und das tollste an systemd aus Desktop-Perspektive ist systemd-logind, welches das alte ConsoleKit ersetzt und echtes Multiseat erlaubt. Canonical eiert mit Upstart ←> systemd momentan ziemlich rum, da immer mehr Bibliotheken systemd-funktionen verwenden und ConsoleKit offiziell veraltet ist. Wenn die BSDs ähnliche Funktionen wie der Linuxkernel nachrüsten steht einer portierung nichts mehr im Weg, momentan will Lennart aber keine Patches akzeptieren, weil die Änderungen den Code nicht mehr so leicht lesbar machen würden (viele #ifdefs) und weil er es generell für nicht möglich hält, systemd momentan mit all seinen Funktionen auf andere Systeme zu portieren.

rklm

Projektleitung

15 23. September 2012 20:02

Danke für den Artikel! Eine Formulierung fand ich missverständlich: "Die Arbeitsweise wird von vielen kleinen Skripten (SysVinit) nach systemd, also einem Skript, verlagert." Ich gehe davon aus, dass systemd kein Skript ist.

Ein Punkt vielleicht noch: m.E. ist systemd nur für Desktops von wirklichem Vorteil. Bei einem Server machen ein paar Sekunden mehr Startzeit nicht so viel aus, denn man bootet die meisten Server eher selten. Auch Wechsel der Runlevel werden da wohl meist nicht vorkommen.

Insgesamt ist meine Einschätzung noch zwiespältig. Das Konzept ist toll, die Umsetzung scheint auch schon hinreichend stabil zu funktionieren, aber es gibt doch einiges an Aufwand, bestehende Systeme umzustellen (u.A. weil auch die Dienste angepasst werden müssen). Ich bin mir nicht sicher, ob der Gewinn diesen Aufwand rechtfertigt.

encbladexp

Ehemaliger

Avatar von encbladexp
16 23. September 2012 20:42

Die Dienste müssen nicht angepasst werden, nur die Startscripte davon.

Es geht auch nicht um den schnellen Start, das ist nur ein angenehmer Nebeneffekt. Vorteil auf Server das man unabhängig von SLES,RHEL & Co ein System einheitlich Administrieren kann.

mfg Stefan Betz

noisefloor

Ehemaliger

Avatar von noisefloor
17 23. September 2012 20:49

Schöner Artikel! Sehr informativ und gut geschrieben. ☺ Da ist da den init-Skripten eh' nicht schraube ist mir relativ gleich, was Ubuntu hochfährt. Hauptsache, es fährt hoch 😉

PhotonX

Avatar von PhotonX
18 23. September 2012 22:15

Ich musste vor einigen Wochen meinen Desktop und Laptop auf systemd umstellen (beide laufen mit Arch Linux) und das war schon ein ziemliches Drama. ☺ Mittlerweile funktioniert das Gröbste wieder und auch die Startgeschwindigkeit ist gefühlt leicht angestiegen. Was mir aber total gegen den Strich geht, ist journalctl. Ich möchte die Logs gerne in einem grafischen Editor öffnen, dort mit einer Maus scrollen, den Text durchsuchen, größere Abschnitte kopieren und andere eigentlich selbstverständliche Sachen machen können, das geht mit journalctl nicht oder ich weiß nicht wie. Vor allem verstehe ich überhaupt nicht, was der Vorteil an dem neuen Log-System sein soll...

rklm

Projektleitung

19 23. September 2012 22:53

@16: Das habe ich in dem Posting von Poettering aber anders gelesen - zumindest, wenn man systemd die Annahme der Verbindung überlassen will, so dass er den Dienst erst bei Anforderung (also, wenn sich jemand mit dem Port verbindet) startet. Das geht auch gar nicht anders, weil herkömmliche Dienste ja selbst auf dem Port lauschen, auf dem sie Verbindungen annehmen wollen.

wurzel-günther

20 23. September 2012 23:12

@18 : Meiner Meinung nach schreibt journald ziemlich gute logs. Vor allem wenn du mal den magic sysrq key brauchen solltest um dein system wieder gangbar zu machen, wirst du dich journald bedanken, weil es viel mehr mitschreibt als zum Beispiel syslog und du dein System dadurch besser analysieren kannst. Wenn dir die Ausgabe von journalctl auf den senkel geht, wie mir, solltest du dir mal /etc/systemd/journald.conf ansehen. Wenn du die Weiterleitung an syslog auskommentierst, ist eigentlich alles beim alten.

Übrigens wird hier immer wieder die gestiegene Startgeschwindigkeit durch systemd angesprochen. Der Artikel geht auf diesen banalen Nebeneffekt von systemd dankenswerter nicht ein. Das zentrale und entscheidende an systemd ist das saubere und einfache Starten, Beenden und Verwalten von Diensten (finde zumindest ich und ich glaube viele geben mit da recht). Von der Geschwindigkeit her müsste upstart im Moment sogar noch schneller sein(Ok die Geschwindigkeit von systemd auf ssd festplatten ist extrem. das gebe ich zu). Aber die Möglichkeiten zur Systemverwaltung durch dieses neue init Systemd sind meiner Meinung nach einfach toll.

Ok. Ich gebe zu: Ich bin ein systemd fanboy.

pitt-admin

21 24. September 2012 09:31

@20: Upstart ist tatsächlich schneller beim hochfahren des Systems, da ich den Rechner meistens aus habe, brauche ich zwangsweise ein schnelles startverhalten, daher bin ich upstart fanboy. Also jedem so wie er möchte hoffe es bleiben beide Systeme der Linuxwelt erhalten.

Gruß

Ryuno-Ki

Avatar von Ryuno-Ki
22 24. September 2012 10:35

Danke, gerade OpenRC klammert ihr aus -.-"

Das Thema wurde auf der Sabayon Mailinglist 🇬🇧 (ein Gentoo-Ableger) ebenfalls diskutiert und kam zu dem Schluss, dass die Vorteile von systemd vernachlässigbar gering sind, zumal die Technik noch nicht ausgereift erscheint.

Bin da aber auch noch nicht so involviert wird. Habt ihr wenigstens noch andere Links außer Wikipedia zu OpenRC? Sonst such ich selber. Kann ja nicht angehen, dass die einzigen Nicht-Ubuntu-User hier zu Debian oder Arch gehören 😬

Ryu

PhotonX

Avatar von PhotonX
23 24. September 2012 13:46

@20: Bei mir unter Arch war der Übergang nicht von Upstart zu systemd, sondern von SysVinit zu systemd, daher wundert der Geschwindigkeitsanstieg nicht. Danke für den Tipp zum Forwarden, werd ich ausprobieren!

Developer92

Avatar von Developer92
24 24. September 2012 14:24

Erstmal: Danke für den Artikel, gut geschrieben.

Ich habe vor einiger Zeit meine Systeme auf Systemd umgestellt (laufen beide mit Arch) und bin bis jetzt sehr zufrieden. Transmissiond läuft noch nicht als Daemon, aber das bekommt man auch noch hin. Ansonsten gibts für alles erdenkliche eigentlich schon .service-Dateien, die Konfiguration ist auch einfach und ein wenig schneller booten war auch bei meinen beiden Systemen drin.

Was ich mir aber noch wünschen würde sind Logfiles im normalen Textformat, mit journalctl komm ich irgendwie nicht klar (Naja, mit Hilfe einiger alias gehts dann doch)

Die Inkompatibilität finde ich ehrlich gesagt gut, endlich wird man gezwungen auch neue .service-Dateien zu schreiben. Ubuntu setzt Upstart ja seit Jahren ein ohne die alten Skripte mal anzupassen, was echt schade ist. Da wurde/wird viel Potenzial verschwendet.

encbladexp

Ehemaliger

Avatar von encbladexp
25 24. September 2012 14:38

@19: Ideal ist eine derartige Integration, erforderlich erst wenn man eben diese Socket Activation genannte Methode nutzen möchte. Auch kann man Dienste die inetd tauglich sind durch systemd laufen lassen, spart also einen Server (wenn man sowas wirklich verwenden möchte).

@20: Die Startgeschwindigkeit ist mir persönlich auch egal, es ist ein schöner Nebeneffekt aber auch nicht mehr. Das ist auch der Grund warum dieses Argument in diesem Artikel nicht genannt wird. Mir als Admin ist es wichtig das Dienste Zuverlässig starten, und vor allem in einer definierbaren und korrekten Reihenfolge.

@22: OpenRC habe ich nicht beachtet da ich dieses System nicht so kenne als das ich darüber urteilen könnte.

mfg Stefan Betz

brikkler

26 24. September 2012 15:02

wenn systemd funktioniert, ist es eine feine sache, wenn nicht hat man "spiel und spannung" der spaß bleibt dann gerne aber auf der strecke^^

der link zum arch wiki https://wiki.archlinux.org/index.php/Systemd

Ryuno-Ki

Avatar von Ryuno-Ki
27 24. September 2012 23:16

@25: Mein ja nur. Wenigstens einen Link zum entsprechenden Eintrag im Gentoo-Wiki 🇬🇧 hätte man aber aufnehmen können. Ein paar Eckdaten, die ich dabei rauslesen kann, sind

  • basiert und läuft mit init Skripten

  • unterstützt von der Hardware gestartete Skripte

  • unterstützt cgroups (vgl @12)

  • verwendet Runlevels

  • kann externe Ereignisse triggern

Ich hab auch eine vergleichende Tabelle 🇬🇧 dort gefunden =)

jakon

Lokalisierungsteam

28 26. September 2012 17:10

@3: Richtig … Bis darauf, dass es die Unix-Philosophie ist. 😛