OpenRC ist ein abhängigkeitsbasiertes Init-System, das für die Arbeit mit Unix-ähnlichen Betriebssystemen entwickelt wurde. Es hält die Kompatibilität mit dem vom System bereitgestellten Init-System aufrecht, das normalerweise in /sbin/init zu finden ist. Außerdem verwaltet es den gesamten Start und das Herunterfahren des Systems, einschließlich der Dienste.
Es besteht aus verschiedenen modularen Komponenten. Die wichtigsten sind: ein Init, ein Kern-Abhängigkeitsverwaltungssystem und ein Daemon-Supervisor. Es ist in C geschrieben und verwendet eine POSIX-kompatible Shell, sodass es auf BSD-Systemen und Linux läuft.
OpenRC startet die erforderlichen Systemdienste in der richtigen Reihenfolge beim Booten, verwaltet sie, während das System läuft und fährt sie herunter, wenn das System beendet ist. Es kann die aus dem Gentoo-Repository installierten Daemons verwalten, die von ihm gestarteten Prozesse überwachen und Prozesse parallel starten (wenn möglich), um Bootzeit zu sparen.
Installation und Konfiguration
Die Befehle, die zur Installation von openrc verwendet werden, sind:
- sudo apt-get update
- sudo apt-get install openrc
Der Name des OpenRC-Dienstpakets ist „Paketname-openrc", der normalerweise in /etc/init.d steht, und der Name des OpenRC-Dienstpakets ist /etc/rc.conf.
Standardmäßig protokolliert OpenRC nichts. Dekommentieren Sie die Option RC logger in /etc/rc.conf und setzen Sie sie, um die Ausgaben von OpenRC beim Booten zu protokollieren. Standardmäßig wird das Protokoll in /var/log/rc.log gespeichert.
FILE /etc/rc.conf:
rc_logger="YES"
#rc_log_path="/var/log/rc.log"
Netzmanagement
Sie können OpenRC mit jedem der verschiedenen Netzwerkmanager oder auch mit keinem verwenden. Beispiele für die statische und dynamische Netzwerkkonfiguration finden Sie in /etc/conf.d/net. Das Paket netifrc enthält eine Reihe von Modulen zum Einrichten und Verwalten von Netzwerkschnittstellen über separate Skripte im Verzeichnis /etc/init.d/. Es enthält nur /etc/init.d/net.lo (für die Loopback-Schnittstelle), aber keine hart kodierten Operationen. Ein und dasselbe Stück kann mehrere Schnittstellen verwalten (als net.interface name -> net.lo), das stellt eine kostengünstige Alternative zur Bereitstellung zahlreicher Skripte dar. OpenRC benötigt kein Netifrc. Sie können ihn zugunsten eines anderen Netzwerkmanagers unbenutzt lassen.
Um komplexere Installationen zu ermöglichen, kann es notwendig sein, die Standardabhängigkeiten von Init-Skripten zu ändern. Um das Standardverhalten zu ändern, gehen Sie zu /etc/rc.conf und suchen nach der Option rc in Abhängigkeit von der Option strict. Darüber hinaus beweisen die folgenden Vernetzungsbeispiele die Vielseitigkeit von OpenRC.
Wenn das Softlevel-Argument angegeben wird, startet OpenRC den durch den Softlevel-Parameter definierten Runlevel anstelle des Standardwertes. Mit den folgenden Beispieleinstellungen der grub.conf können Sie wählen, ob Sie in den Standard-, Nicht-Netzwerk- oder Einzelbenutzer-Runlevel booten möchten:
FILE /boot/grub/grub.conf:
title = Regular start-up
kernel (hd0,0)/boot/vmlinuz-linux root=/dev/sda3
title = Start without networking
kernel (hd0,0)/boot/vmlinuz-linux root=/dev/sda3 softlevel=nonetwork
title = Single-user mode
kernel (hd0,0)/boot/vmlinuz-linux root=/dev/sda3 softlevel=single
Nutzung
OpenRC benutzt Runlevels auf ähnliche Weise wie sysvinit (oder BSD init). Das System befindet sich zu jedem Zeitpunkt in einem der definierten Runlevels. Es stehen drei interne und vier benutzerdefinierte Runlevels zur Verfügung.
Interne Runlevels, die Namen sind selbsterklärend:
- sysinit
- shutdown
- reboot
User Runlevels:
- boot: Startet alle systemnotwendigen Dienste für andere Runlevels
- default: Für den täglichen Betrieb verwendet
- nonetwork: Wird verwendet, wenn keine Netzanbindung erforderlich ist.
- single: Einzelbenutzermodus
Sie können den Befehl openrc verwenden, um den Runlevel des Systems zu ändern. Zum Beispiel: Openrc nonetwork.
Die OpenRC-Befehle
Es gibt mehrere Befehle, die Sie zur Steuerung und Konfiguration von OpenRC verwenden können.
Hinzufügen und Entfernen von Diensten:
- # rc-update add service runlevel
- # rc-update del service runlevel
Dienst starten, neu starten und stoppen:
- # rc-service service start
- # rc-service service restart
- # rc-service service stop
Anzeige aller verfügbaren Init-Skripte und ihres aktuellen Runlevels::
- # rc-update show -v
Anzeige des Status aller Dienste:
- # rc-status –servicelist
Fehlgeschlagene Dienste überprüfen:
- # rc-status –crashed
Verwaiste Prozesse
Es kommt häufig vor, dass verwaiste Prozesse arbeiten, die zuvor Teil eines Dienstes waren. Angenommen, Sie verwenden einen Supervise-Daemon zur Überwachung eines Dienstes und dieser stirbt ohne ersichtlichen Grund. Jedes System hat einen anderen Ansatz, um dies zu bewältigen.
Der Befehl cgroup cleanup wird zu allen Diensten auf Linux-Systemen mit aktivierten cgroups hinzugefügt. Wenn der Dienst angehalten wird, können Sie ihn manuell starten, indem Sie Folgendes eingeben:
- # rc-service someservice cgroup_cleanup
Setzen Sie den Parameter rc cgroup cleanup auf yes, damit dies automatisch geschieht, wenn der Dienst endet.
Andere Funktionen von OpenRC
Sie können die Variable rc_ulimit verwenden, um ulimit- und nice-Werte pro Dienst festzulegen.
OpenRC kann auch cgroups für die Prozessverwaltung unter Linux verwenden. Sie sollten den Parameter rc_cgroup_mode in /etc/rc.conf verwenden, um zu steuern, ob cgroups Version eins, zwei oder beide verwendet werden, nachdem der Kernel korrekt konfiguriert wurde. Wenn beide zugänglich sind, werden standardmäßig beide verwendet.
Sie können die Begrenzung pro Dienst anwenden, indem Sie bestimmte Einstellungen in der Datei conf.d ändern. Die Standard- /etc/rc.conf unter LINUX CGROUPS RESOURCE MANAGEMENT dokumentiert diese Einstellungen sehr detailliert.
Viele typische Ausgabeaufgaben in libeinfo haben Wrapper in OpenRC. Damit lassen sich farbkodierte Statusmeldungen und andere Informationen ausdrucken. Die gebündelten Dienstskripte verwenden alle ebegin/eend, um schöne Meldungen zu drucken und die Ausgabe konsistent zu halten.
Erweiterte Nutzung
Benutzerdefinierte Runlevels
Erstellung
Ein aktivierter Dienst ist ein Symlink auf die Datei init.d und ein Runlevel ist lediglich ein Verzeichnis in /etc/runlevels. Um den sshd-Dienst zum Beispiel zum Standard-Runlevel hinzuzufügen, muss ein Symlink in /etc/runlevels/ default zu /etc/init.d/sshd erstellt werden. Die Erstellung eines neuen Runlevels erfordert daher die Erstellung eines neuen Verzeichnisses unter /etc/runlevels.
Stacking
Wenn Sie zum Office-Runlevel wechseln, möchten Sie in der Regel nicht alle Ihre Standarddienste deaktivieren. Sie können einen Runlevel zu einem anderen hinzufügen, wenn Sie die Option -s bei rc-update verwenden. Wenn Sie beispielsweise einen Büro-Runlevel einrichten möchten, der mit dem Standard-Runlevel übereinstimmt, aber den myvpn-Dienst einschließt, würden Sie wie folgt vorgehen
# mkdir /etc/runlevels/office
# rc-update -s add default office
# rc-update add myvpn office
Wechseln
Sie können den Befehl openrc verwenden, um zu einem benutzerdefinierten Runlevel zu wechseln, sobald Sie einen erstellt haben. Außerdem würden Sie openrc office verwenden, um zu Ihrem neuen Runlevel zu wechseln, und openrc default, um zurück zu wechseln, wie oben gezeigt.
Beispiele:
/etc/conf.d/sshd
rc_need="!net net.eth0"
Im Runlevel „default" muss der SSH-Dienst mit eth0 (nicht wlan0) starten, im Runlevel „office" muss er mit wlan0 (nicht eth0) starten.
/etc/rc.conf
# rc_depend_strict="YES"
Erstellen Sie Symlinks zu sshd mit den Namen der Netzwerkschnittstellen:
# ln -s sshd /etc/init.d/sshd.eth0
# ln -s sshd /etc/init.d/sshd.wlan0
/etc/conf.d/sshd.eth0 und /etc/conf.d/sshd.wlan0 werden jetzt für Einstellungen gelesen:
# cp /etc/conf.d/sshd /etc/conf.d/sshd.eth0
# cp /etc/conf.d/sshd /etc/conf.d/sshd.wlan0
Fügen Sie die Abhängigkeiten hinzu:
# echo 'rc_need="!net net.eth0"' >> /etc/conf.d/sshd.eth0
# echo 'rc_need="!net net.wlan0"' >> /etc/conf.d/sshd.wlan0
Je nach aktivem Runlevel lesen net.eth0 und net.wlan0 ihre Einstellungen aus /etc/conf.d/net oder /etc/conf.d/net.office.
Fügen Sie alle Runskripte zu den verschiedenen Runlevels hinzu:
# rc-update add sshd.eth0 default
# rc-update add sshd.wlan0 office
# rc-update add net.eth0 default office
# rc-update add net.wlan0 default office
Wechseln Sie zwischen den Runleveln „default" und „office" zum Runlevel „nonetwork", um einen Neustart des Computers zu vermeiden. Dadurch werden die Netzwerkschnittstellen angehalten und gezwungen, ihre runlevelspezifische Konfiguration neu einzulesen. Der Displaymanager und andere Nicht-Netzwerk-Dienste sollten nur zum Runlevel „nonetwork" hinzugefügt werden.
nonetwork runlevel ---> default runlevel office
Um das Problem zu beheben, zappen Sie den Dienst:
# rc nonetwork && rc office
# rc nonetwork && rc default
Fehlerbehebung
- Wiederherstellung abgestürzter Dienste
Um zustandsbehaftete Init-Skripte und automatisches Respawning zu ermöglichen, kann OpenRC den Zustand von Diensten auf den Runlevel-Einstellungsstatus zurücksetzen.
Starten Sie openrc: abgestürzte Dienste werden gestartet und alle manuell gestarteten Dienste werden beendet, um abgestürzte Dienste aus dem Standard-Runlevel neu zu starten. Führen Sie openrc --no-stop oder openrc -n aus, um manuell gestartete Dienste weiterlaufen zu lassen.
Standardmäßig wird openrc versuchen, abgestürzte Dienste zu starten, anstatt sie neu zu starten. Die Parameter /etc/rc.conf rc crashed stop (Voreinstellung NO) und rc crashed start (Voreinstellung YES) regeln dies.
- Abgestürzte Dienste manuell wiederherstellen
Wenn Sie einen Dienst starten, beenden oder seinen Status anzeigen möchten, nachdem er beim Starten abgestürzt ist, wird eine Fehler- oder Warnmeldung angezeigt. Zum Beispiel, wenn Sie den Dienst „Docker" verwenden:
root #rc-service docker status
* status: crashed
root #rc-service docker start
* WARNING: docker has already been started
root #rc-service docker stop
* Caching service dependencies ... [ ok ]
* Stopping docker ...
* Failed to stop docker [ !! ]
* ERROR: docker failed to stop
Um das Problem zu beheben, zappen Sie den Dienst:
root #rc-service docker zap
Weitere Artikel anschauen:
Software-Tests
Die Untersuchung der Artefakte und des Verhaltens der zu testenden Software wird als Softwaretest bezeichnet. Außerdem wird ermittelt, ob die tatsächlichen Ergebnisse
Platzierung der Komponenten
Die Platzierung von Bauteilen ist einer der kritischsten Teile des PCB-Designs. Zunächst müssen Sie die grundlegenden Kriterien für die Anordnung von
Linux-Systemprogrammierung
Dieser Artikel konzentriert sich auf Linux -Systemaufrufe und andere Low-Level-Operationen, wie zum Beispiel die Funktionen der C-Bibliothek. Systemprogrammierung ist der Prozess der Erstellung von
EMV-Prüfung
Wenn ein elektrisches Produkt auf elektromagnetische Verträglichkeit (EMV) geprüft wird, wird festgestellt, ob es in der elektromagnetischen Umgebung,
BSP-Entwicklungsprozess
Jedes Board wird von den Herstellern mit einem Basis-BSP (Board Support Package) ausgeliefert. In den meisten Fällen müssen jedoch verschiedene Stufen der Anpassung den strengen
Kosten der BSP-Entwicklung
Das Board Support Package (BSP) stellt die Softwareverbindungsschicht dar, die es traditionell einem Echtzeitbetriebssystem (RTOS) ermöglicht, auf einer bestimmten Hardwareumgebung