linux-arch-alpine-minimal administration systemd openrc runit comparison init-system

Init Systems: systemd vs. OpenRC vs. runit (Artikel 223)

Analyse und Vergleich der gängigen Init-Systeme unter Linux. Erfahren Sie alles über die Vorzüge von systemd, die Einfachheit von OpenRC und die Geschwindigkeit von runit.

# Init Systems Masterclass: Wer steuert den Kernel?

TL;DR / Management Summary Das Init-System ist der erste Prozess (PID 1) nach dem Booten. Es ist verantwortlich für das Starten aller weiteren Dienste. Während systemd heute der Standard für fast alle großen Distros ist (RHEL, Ubuntu, Arch), bieten minimalistische Alternativen wie OpenRC (Alpine) und runit (Void) massive Vorteile in Bezug auf Transparenz und Ressourcenverbrauch. Ein Senior Admin muss die Konzepte aller drei Systeme kennen, um im RZ und bei Containern die richtige Wahl zu treffen.


# 1. Einführung & Architektur

Die Philosophie der Macht.

  • systemd: Ein monolithisches System, das nicht nur Init ist, sondern auch Logging, Netzwerk, DNS und Login verwaltet.
  • OpenRC: Eine skriptbasierte Erweiterung des klassischen SysVinit. Nutzt Shell-Skripte für alles.
  • runit: Ein extrem minimalistisches System, das Dienste über Verzeichnisse und den Status von Prozessen überwacht.

# Architektur-Vergleich (Mermaid)

graph TD
    subgraph "systemd (Monolith)"
        A[systemd PID 1] --> B[journald]
        A --> C[networkd]
        A --> D[Unit Files]
    end
    subgraph "OpenRC (Modular)"
        E[OpenRC Core] --> F[Shell Scripts]
        E --> G[Standard Syslog]
    end
    subgraph "runit (Minimalist)"
        H[runsvdir] --> I[Service Folder]
        I --> J[Individual run scripts]
    end

# 2. Der Feature-Check

Was können die Systeme?

Feature systemd OpenRC runit
Abhängigkeiten Automatisch (Wants/After) Manuell (depend function) Nicht vorhanden (via Loops)
Logging Binär (journald) Text (Syslog) Text (svlogd)
Konfiguration INI-Format Shell-Skripte Shell-Skripte
Parallelstart Ja (Exzellent) Ja Ja (Extrem schnell)
Ressourcen Mittel (~20MB RAM) Niedrig (~2MB RAM) Minimal (< 1MB RAM)

# 3. Management-Befehle im Vergleich

Die Sprache des Admins.

Aufgabe systemd OpenRC runit
Dienst starten systemctl start name rc-service name start sv start name
Autostart an systemctl enable name rc-update add name ln -s /etc/sv/name /var/service
Status sehen systemctl status name rc-service name status sv status name
Logs sehen journalctl -u name tail /var/log/messages tail /var/service/name/log/main/current

# 4. Day-2 Operations: Wann nutze ich was?

Die strategische Entscheidung.

# 1. In Containern (Docker/Podman)

Hier ist runit oder ein Wrapper wie Tini (Artikel 214) der Sieger. Ein volles systemd im Container erzeugt zu viel Overhead und Sicherheitsprobleme.

# 2. In minimalistischen VMs (Edge/IoT)

OpenRC ist ideal. Es ist robust, leicht zu debuggen (da alles Shell-Skripte sind) und belegt fast keinen RAM.

# 3. Für Standard-Applikationsserver

Bleiben Sie bei systemd. Die Integration in Monitoring-Tools und die automatische Ressourcen-Limitierung (Cgroups) sind unschlagbar.


# 5. Troubleshooting & “War Stories”

Wenn PID 1 hakt.

# Story 1: “Der hängende Dienst (Zombie)”

Symptom: Ein Prozess ist gestorben, aber systemd zeigt ihn immer noch als active an. Ursache: Der Prozess hat sich in eine Unter-Cgroup verabschiedet, die systemd nicht mehr korrekt trackt (oft bei alten Java-Apps). Lösung: Nutzen Sie systemd-cgls, um die echte Prozess-Hierarchie zu sehen. In runit/OpenRC würde man den Prozess einfach via ps finden und killen.

# Story 2: “Das undurchsichtige Journal”

Symptom: Ein Dienst startet nicht, aber die Fehlermeldung ist im Journal nicht auffindbar. Ursache: systemd puffert Logs. Wenn der Buffer voll ist oder journald selbst hakt, gehen Nachrichten verloren. Lösung: Nutzen Sie bei OpenRC/runit das klassische tail -f. Die Einfachheit von Text-Logs ist in Krisensituationen oft ein Segen.


# 6. Fazit & Empfehlung

  • Lernen: Lernen Sie systemd zuerst – es ist der Standard.
  • Verstehen: Beschäftigen Sie sich mit OpenRC, um zu verstehen, wie Boot-Skripte wirklich funktionieren.
  • Wahl: Nutzen Sie NixOS (Artikel 201) für deklarative Setups, egal welches Init darunter liegt.

# Anhang: Cheatsheet

Aufgabe Befehl
Init System Typ prüfen ps -p 1 -o comm=
Boot Zeit Analyse systemd-analyze
Runlevel wechseln (OpenRC) openrc <name>
Alle Units listen systemctl list-units
Service Pfade (runit) /etc/sv/
Service Pfade (systemd) /etc/systemd/system/