Wofür ist Runlevel 'S' unter Debian / Ubuntu?

8

Laut Wikipedia soll 'S' ein Standard-Runlevel sein: "Einzelbenutzermodus". Aber wenn ich mich nicht irre, ist der Einzelbenutzermodus unter Debian Runlevel 1. Ein Debian-Artikel, den ich gefunden habe, behauptet, dass 'S' ein Runlevel ist, "das das System auf dem Weg zu einem anderen Runlevel verwendet". Interessant...

Eigentlich hatte ich dieses Runlevel bisher immer ziemlich ignoriert, aber heute habe ich mit Firestarter (ja, wirklich, einer Endbenutzer-Firewall) herumgespielt, nur weil ich neugierig war, welche Firewall-Regeln es generieren würde. Aber dann bemerkte ich, dass es einen Start-Hook in /etc/rcS.d erstellt, und ich fragte mich, ob mein Firewall-Skript das vielleicht auch haben sollte.

Aktualisieren

Jetzt bin ich noch mehr daran interessiert zu wissen, was es unter Debian / Ubuntu tatsächlich ist , da das Shorewall-Paket (das ein stark "debianisiertes" Paket ist) auch seinen (einzigen!) Start-Hook in rcS.d erstellt!

Chris Lercher
quelle

Antworten:

3

Ich betrachte die Runlevels folgendermaßen:

 S - true single user mode usually drops you into a minimal root shell
 1 - Administrative mode, you get a standard login request before access
 2 - Multi-user without TCP/IP networking -- could use serial ports for other logins
 3 - Multi-user with TCP/IP networking and text 
 4 - To be determined by the system owner
 5 - Multi-User with TCP/IP networking and graphic console 
 6 - reboot
 0 - shutdown and power down

Daher wird eine Firewall wirklich benötigt, wenn TCP / IP aktiv ist und dies im Allgemeinen nur im Anfangszustand 3 geschieht.

mdpc
quelle
1
Dieses ganze Runlevel-Konzept ist eine Legacy-Sache aus der Vergangenheit. Heutzutage ist es normalerweise der Einzelbenutzermodus (für Wartungszwecke) und es wird ein anderer normaler Modus (wie 2 oder 5, je nach Distribution) verwendet. Ich sehe keinen Anwendungsfall für irgendetwas anderes.
Cstamas
Schlimmer noch, die neuesten Distributionen beseitigen alle Run-Levels insgesamt (derzeit als Legacy-Angelegenheit unterstützt) und gehen in benannte Staaten mit Abhängigkeiten unter ihnen (siehe Fedora 15).
Mdpc
3

All dies scheint eine direkte Antwort auf die gestellte Frage zu umgehen.

Nach allem, was ich finden kann, sind die rcS.dSkripte so implementiert, wie es Sfür " Startup " steht, nicht für " Single ".

Sie werden alle während des Startvorgangs ausgeführt. Wenn Sie dann Run Level 1 verwenden möchten, werden die Skripte rc1.dausgeführt (was angesichts der Arbeit, in der wir gerade gearbeitet haben, möglicherweise ziemlich leer ist rcS).

Genauer gesagt, die rcSSkripte werden auf dem Weg zu ausgeführt rc3- so versetzt sich das System effektiv in den Einzelbenutzermodus, überlegt es sich dann und entscheidet, was es WIRKLICH tun soll. Sehr verwirrend und meist schlecht dokumentiert.

Als Beweis, wenn Sie untersuchen /etc/inittab, finden Sie:

 # Boot-time system configuration/initialization script.<br>
 # This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

später folgen viele ähnliche Zeilen:

l3:3:wait:/etc/init.d/rc 3
David Collier
quelle
1

Runlevel 1 wird auch als Runlevel s bezeichnet.

In Debian-basierten Systemen ist dies der Einzelbenutzer- / Minimalmodus . Siehe Debian Runlevel :

Der Runlevel ist eine Ziffer von 0 bis 6 oder der Buchstabe S. Die Runlevel 0, 6 und S sind für das Herunterfahren, den Neustart bzw. den Einzelbenutzermodus reserviert.

Jonasjacek
quelle
0

S ist für den Einzelbenutzermodus.

http://wiki.debian.org/RunLevel

dmourati
quelle
Wenn also ein Skript nur einen Start-Hook in Runlevel S hat (wie z. B. Shorewall) und ich auf Runlevel '2' boote, startet die Boot-Sequenz das Skript?
Chris Lercher
Wenn unter Linux Ihr Standardstatus (wie in / etc / inittab beschrieben) N ist, werden im Gegensatz zu UNIX nur die 'S'-Elemente in /etc/rc.d/rcN.d (dieser Speicherort kann je nach Linux-Distribution variieren) verwendet Wird während des Startvorgangs ausgeführt, wird kein anderes Init-Verzeichnis verwendet.
Mdpc
Normalerweise legen Sie Ihren Standard-Runlevel in inittab fest. Die Zahlen erhöhen sich. Wenn in Ihrem Beispiel Ihr Init nur in S konfiguriert ist, entspricht dies Runlevel 1. Beim Booten startet Ihr System auf Runlevel 1 und erhöht die Ausführung aller Init-Skripte für dieses Level. Erhöhen Sie dann den Runlevel und wiederholen Sie diesen Vorgang erreicht den in inittab angegebenen Standard-Runlevel. Hier sind das zwei. Was auch immer für das Einschalten in 1 oder 2 konfiguriert wurde, ist eingeschaltet.
Dmourati
1
Bitte beachten Sie, dass meine Frage spezifisch für Debian / Ubuntu ist! Ich habe gerade Folgendes versucht: Ich habe ein einfaches Skript eingefügt /etc/rcS.dund /etc/rc2.djeweils eine kurze Nachricht (mit einem Zeitstempel) in eine Protokolldatei geschrieben. Ergebnis: Nach dem Start habe ich eine Protokollmeldung für rcS und 5 Sekunden später eine Protokollmeldung für rc2.
Chris Lercher
Ändern Sie die Variable DEFAULT_RUNLEVEL in der Datei /etc/init/rc-sysinit.conf, um den Standard-Runlevel zu ändern, in den das System booten wird. Um das System beispielsweise standardmäßig in den Einzelbenutzermodus zu starten, setzen Sie: env DEFAULT_RUNLEVEL = 1
dmourati
0

Zusätzlich zu der Antwort von mdpc werden in Laufstufe 1 keine Dämonen (Dienste) gestartet.

Yasser - TechToolbox
quelle