Was ist für einen minimalen Systemstart erforderlich, um getty auf einer virtuellen Konsole zu starten?

21

Für SysV init, ich brauche /etc/inittabrespawning getty Einträge, die /sbin/initbinäre, die Binärdateien und gemeinsam genutzte Bibliotheken für die Schale, logindie gettydie PAM / Sicherheit / shadow Sachen und ein paar Gerätedateien.

Denn upstartich brauche so ziemlich die gleichen Anforderungen, aber stattdessen habe /etc/inittabich ein paar *.confDateien unter /etc/init: eine * .conf, mit start on startupder ein Runlevel gesetzt wird telinit, und eine * .conf für jedes Tty, das gettyauf diesem Tty auf den entsprechenden Runlevels startet / respawnt .

Für welche Konfiguration und Binärdateien benötige ich systemd init?

Die Dokumentation, die ich finde, scheint sich auf die Verwendung eines bereits installierten Systems zum Starten und Beenden von Diensten zu konzentrieren.

Eine minimale Liste der zu kopierenden Dateien (mit Ausnahme des Kernels / initrd) aus einer laufenden Arch- oder Fedora- Installation reicht aus, aber ich kann anscheinend keine derartigen Informationen finden systemd.


Was ich wissen möchte, ist, für systemdwelche Dateien erforderlich sind und was sie enthalten müssen, um eine Anmeldeshell zu starten, nachdem ein initramfs seinen switch_rootAufruf an das ausführt systemd /sbin/init.


Beispiel für upstartdie Binärdateien und zwei *.confDateien:

Datei /etc/init/whatever.conf:

Beim Start starten
gibt Runlevel aus
Aufgabe
Skript
  telinit 2
Skript beenden

Datei /etc/init/tty1.conf:

starte auf Runlevel [12345]
respawn
exec / sbin / agetty -8 --noclear 38400 tty1 Linux

Beispiel für sysvinitdie Binärdateien und 1 conf-Datei mit dem Namen /etc/inittab:

id: 2: initdefault:
c1: 12345: respawn: / sbin / agetty 38400 tty1 linux

Jetzt bin ich hinter dem systemdÄquivalent her.

Ich gehe davon aus *.service, dass irgendwo mindestens 1 Datei mit einem [Service]Eintrag mit ExecStart=-/sbin/agetty --noclear %I linuxund benötigt wird Restart=always, aber was wird sonst noch benötigt?

MattBianco
quelle
Jetzt gibt es einen aktuellen RedHat Knowledge Base-Artikel (754933), der den Systemd-Start unter dieser URL beschreibt: Übersicht über Systemd für RHEL 7
MattBianco,
Es ist so deprimierend zu sehen, wie Leute eine einzelne Konfigurationszeile in ein großes Durcheinander sprengen und es Verbesserung nennen.
20.

Antworten:

17

Erstens systemdist es kein traditionelles Unix init. Systemd ist so viel mehr, also ist es ein bisschen unfair, die beiden zu vergleichen.

Um die Frage zu beantworten, scheinen einige Binärdateien und die folgenden Konfigurationsdateien erforderlich zu sein:

/usr/lib/systemd/system/default.target
/usr/lib/systemd/system/basic.target
/usr/lib/systemd/system/sysinit.target
/usr/lib/systemd/system/getty.target
/usr/lib/systemd/system/[email protected]
/usr/lib/systemd/system/console-getty.service

Das Ausstellen systemctl enable console-getty.service [email protected]erzeugt dann diese Symlinks:

/etc/systemd/system/default.target.wants/[email protected] -> / lib / systemd / system / getty @ service
/etc/systemd/system/getty.target.wants/console-getty.service -> /lib/systemd/system/console-getty.service

HINWEIS : Um die systemdspeziellen Funktionen zum agettydynamischen Starten bei Bedarf beim Drücken von Alt+ F3und so weiter zu nutzen, müssen mindestens die folgenden beiden Dateien vorhanden sein:

/etc/systemd/logind.conf
/lib/systemd/system/[email protected]

wo [email protected]ist ein symlink zu [email protected].

Inhalt der Konfigurationsdateien:

Die default.target, getty.target, sysinit.targetDateien können mit Ausnahme der leer sein [Unit]Tag und (wahrscheinlich) Description=xxx.

basic.target enthält auch Abhängigkeitsinformationen:

[Einheit]
Beschreibung = Basissystem
Benötigt = sysinit.target
Wants = sockets.target timers.target paths.target slices.target
After = sysinit.target sockets.target timers.target paths.target slices.target

Ich bin nicht sicher, ob die Verweise auf Ziele, die nicht als Dateien existieren, benötigt werden oder nicht. Sie sind auf der systemd.special(7)Manpage beschrieben.


console-getty.service: (Sonderfall für agetty auf der Konsole)

[Einheit]
Beschreibung = Konsole Getty
After = systemd-user-sessions.service plymouth-quit-wait.service
Vorher = getty.target

[Bedienung]
ExecStart = - / sbin / agetty --noclear --keep-baud console 115200,38400,9600 $ TERM
Typ = Leerlauf
Neustart = immer
RestartSec = 0
UtmpIdentifier = cons
TTYPath = / dev / console
TTYReset = ja
TTYVHangup = yes
KillMode = Prozess
IgnoreSIGPIPE = no
SendSIGHUP = yes

[Installieren]
WantedBy = getty.target

[email protected]: (generische Konfiguration für alle getty-Dienste außer der Konsole)

[Einheit]
Beschreibung = Getty auf% I
After = systemd-user-sessions.service plymouth-quit-wait.service
Vorher = getty.target
IgnoreOnIsolate = yes
ConditionPathExists = / dev / tty0

[Bedienung]
ExecStart = - / sbin / agetty --noclear% I $ TERM
Typ = Leerlauf
Neustart = immer
RestartSec = 0
UtmpIdentifier =% I
TTYPath = / dev /% I
TTYReset = ja
TTYVHangup = yes
TTYVTDisallocate = no
KillMode = Prozess
IgnoreSIGPIPE = no
SendSIGHUP = yes

[Installieren]
WantedBy = getty.target
DefaultInstance = tty1

Schließlich benötigen Sie wahrscheinlich einige dieser speziellen Binärdateien (ich habe nicht versucht, welche entscheidend sind):

/ lib / systemd / systemd (/ sbin / init zeigt normalerweise darauf)
/ lib / systemd / systemd-logind
/ lib / systemd / systemd-cgroups-agent
/ lib / systemd / systemd-Benutzersitzungen
/ lib / systemd / systemd-vconsole-setup
/ lib / systemd / systemd-update-utmp
/ lib / systemd / systemd-sleep
/ lib / systemd / systemd-sysctl
/ lib / systemd / systemd-initctl
/ lib / systemd / systemd-reply-password
/ lib / systemd / systemd-ac-power
/ lib / systemd / systemd-activate
/ lib / systemd / systemd-Hintergrundbeleuchtung
/ lib / systemd / systemd-binfmt
/ lib / systemd / systemd-bootchart
/ lib / systemd / systemd-bus-proxyd
/ lib / systemd / systemd-coredump
/ lib / systemd / systemd-cryptsetup
/ lib / systemd / systemd-fsck
/ lib / systemd / systemd-hostnamed
/ lib / systemd / systemd-journald
/ lib / systemd / systemd-journal-gatewayd
/ lib / systemd / systemd-journal-remote
/ lib / systemd / systemd-localed
/ lib / systemd / systemd-bearbeitet
/ lib / systemd / systemd-modules-load
/ lib / systemd / systemd-multi-seat-x
/ lib / systemd / systemd-networkd
/ lib / systemd / systemd-networkd-wait-online
/ lib / systemd / systemd-quotacheck
/ lib / systemd / systemd-random-seed
/ lib / systemd / systemd-readahead
/ lib / systemd / systemd-remount-fs
/ lib / systemd / systemd aufgelöst
/ lib / systemd / systemd-rfkill
/ lib / systemd / systemd-shutdown
/ lib / systemd / systemd-shutdownd
/ lib / systemd / systemd-socket-proxyd
/ lib / systemd / systemd-timedated
/ lib / systemd / systemd-timesyncd
/ lib / systemd / systemd-udevd
/ lib / systemd / systemd-update-done

Um den Startvorgang des Systems zusammenzufassen:

  1. systemd findet basic.target(oder alle *.targetDateien?)
  2. Abhängigkeiten erfüllt sind , basierend auf WantedBy=, Wants=, Before=, After=... Richtlinien im [Install]Abschnitt der *.serviceund *.targetKonfigurationsdateien.
  3. *.services, die starten sollen (das sind keine "speziellen" Dienste), haben einen [Service]Abschnitt mit einer ExecStart=Direktive, die auf die zu startende ausführbare Datei hinweist.
MattBianco
quelle
1
AFAIK Der [Install]Abschnitt wird nicht von der Startsequenz verwendet, sondern nur von systemctl enable. Was der Boot betrachtet, sind die Symlinks in /etc/systemd/system/basic.target.wants/, die von erstellt werden systemctl enable.
Stefan Majewsky
6

systemdErstellt automatisch ein getty, wenn Sie zu den Terminals wechseln, bis zu einer bestimmten maximalen Anzahl. Der Standardwert ist 6 (sodass Sie automatisch ein getty für Alt + F1 bis Alt + F6 erhalten). Wenn Sie diesen Parameter ändern möchten, können Sie ihn bearbeiten /etc/systemd/logind.conf, um ihn NAutoVTsin eine andere Zahl zu ändern (max. 12).

Wenn ein getty auch dann erscheinen soll, wenn Sie nicht manuell wechseln, können Sie /usr/lib/systemd/system/[email protected]dem /etc/systemd/system/getty.target.wants/Verzeichnis einen Symlink hinzufügen :

ln -sf /usr/lib/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

Dies führt dazu, getty.targetdass ein weiterer getty@Service erforderlich ist . Ein Ziel ist eine Sammlung von Diensten, die erzeugt werden müssen, wobei Runlevel ersetzt werden, die Abhängigkeiten unterstützen. Das Standardziel ist abhängig vongetty.target

Siehe unter systemd FAQ in ArchWiki

edit: Ich habe ein bisschen mehr in der Dokumentation recherchiert .

Beim Booten systemdlädt der Daemon alle Systeme im defaultZiel und deren Abhängigkeiten. Ein Ziel wird durch die Dateien definiert

/etc/systemd/system/default.target
/usr/lib/systemd/system/default.target

Ein Ziel verfügt über eine Liste der angehängten Dienste, die durch Symlinks in den Verzeichnissen angegeben werden

/etc/systemd/system/default.target.wants
/usr/lib/systemd/system/default.target.wants

Die /etcVersion überschreibt die Distributionsvorgaben in /usr/lib. Es ist nur eine der .targetDateien erforderlich, während keines der Verzeichnisse erforderlich ist

gettyist nur einer der Dienste, die unter anderem von Init-Skripten ausgeführt werden können. In der von mir überprüften Distribution (fedora, arch) gettywird auf zwei verschiedene Arten ausgeführt:

  1. Begonnen mit spezifischen Skripten für jedes Terminal (Links zu der /usr/lib/systemd/system/[email protected]Datei, in der der Name des Tty durch systemdden Dateinamen des Links ersetzt wird )
  2. Wird bei Bedarf automatisch aufgerufen, logindwenn der Benutzer auf ein virtuelles Terminal wechselt (ähnlich wie bei älteren inetdDiensten nur, wenn eine Anforderung eingeht). logindist ein anderer Daemon, der mit verteilt systemdwird und dessen Konfiguration aus der /etc/systemd/logind.confDatei liest .

Hoffe das ist befriedigend.

pqnet
quelle
Ich möchte wissen, welche Dateien benötigt werden und was sie enthalten sollen. Können Sie Ihre Antwort mit einer Liste der erforderlichen Dateien zusammenfassen und wie werden sie in welcher Reihenfolge gelesen? Ich vermisse Informationen darüber, was in diesem Verzeichnis gefunden werden muss. Ich werde versuchen, meine Frage ein wenig zu erläutern. Vielen Dank!
MattBianco
@MattBianco Sie sind unnötig feindlich gegenüber systemd. Ich recherchiere ein bisschen darüber und es sieht ziemlich einfach aus, wenn man erst einmal versteht, wie das Zeug funktioniert
pqnet
1
Ja, ich bin verwöhnt von Dokumentationen aus anderen Open Source-Projekten. Es tut mir leid, dass ich feindlich klang. Es ist nur frustrierend, dass es anscheinend kein einfaches Dokument gibt, das den Startvorgang erklärt. (Ich verstehe jetzt, dass es daran liegt, dass systemd nicht einfach ist.) Auf humorvolle Weise möchte ich kommentieren, dass es vielleicht systemdfeindselig ist, wie bei einer feindseligen Übernahme der Art und Weise, wie ein offenes System startet. Es wendet GNU / Linux von Unix ab. Nicht zu sagen, dass das eine schlechte Sache ist, aber es ist ganz anders als es traditionell war. Und ein bisschen googeln bedeutet, dass ich nicht alleine bin.
MattBianco