OpenRC

Startseite » OpenRC

OpenRC

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:

      Der SSH-Dienst muss sich mit dem internen Netzwerk verbinden, z. B. eth0, und nicht wlan0. Entfernen Sie die net-Abhängigkeit aus /etc/init.d/sshd und ersetzen Sie sie durch net.eth0:

      				
      					/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 testing

          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

          Read More »

          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

          Read More »
          emc testing

          EMV-Prüfung

          Wenn ein elektrisches Produkt auf elektromagnetische Verträglichkeit (EMV) geprüft wird, wird festgestellt, ob es in der elektromagnetischen Umgebung,

          Read More »

          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

          Read More »

          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

          Read More »

          Schreibe einen Kommentar

          Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

          Diese Website ist durch reCAPTCHA geschützt und es gelten die Datenschutzbestimmungen und Nutzungsbedingungen von Google