===== Init-Systeme: System V vs. systemd =====
**Kurzfassung:** Init-Systeme sind die ersten Prozesse beim Linux-Boot (PID 1) und verwalten alle anderen Services. System V Init war der klassische Standard, systemd ist der moderne Nachfolger mit erweiterten Features. Zielgruppe: Systemadministratoren zum Verständnis der Init-System-Architekturen.
==== Übersicht ====
Das Init-System ist das Herzstück jedes Linux-Systems und startet als erster Prozess (PID 1) beim Booten. Es ist verantwortlich für das Starten, Stoppen und Überwachen aller System-Dienste. Während System V Init jahrzehntelang der Standard war, hat systemd seit 2010 die Linux-Welt revolutioniert und ist heute auf den meisten Distributionen Standard.
==== Voraussetzungen ====
* Grundverständnis des Linux-Boot-Prozesses
* Kenntnis von Services und Daemons
* Root-Privilegien für Service-Management
==== System V Init - Das klassische System ====
=== Merkmale ===
* **Entwickelt**: 1980er Jahre (AT&T Unix System V)
* **Konzept**: Runlevel-basiert (0-6)
* **Start-Methode**: Sequenziell (ein Service nach dem anderen)
* **Konfiguration**: Shell-Skripte in /etc/init.d/
* **Standard bis**: ~2015 (verschiedene Distributionen)
=== Architektur ===
Kernel
└─ init (PID 1)
└─ Liest /etc/inittab
└─ Startet Services aus /etc/rcX.d/ (X = Runlevel)
└─ Führt Shell-Skripte aus /etc/init.d/ aus
=== Runlevel-Konzept ===
0 → Halt (Herunterfahren)
1 → Single-User-Modus (Wartung)
2 → Multi-User ohne Netzwerk
3 → Multi-User mit Netzwerk (CLI)
4 → Benutzerdefiniert
5 → Multi-User mit GUI (X11)
6 → Reboot (Neustart)
=== Kommandos ===
# Service-Verwaltung
sudo service apache2 start
sudo service apache2 stop
sudo service apache2 restart
sudo service apache2 status
# Autostart konfigurieren
sudo update-rc.d apache2 defaults
sudo update-rc.d apache2 disable
# Runlevel-Wechsel
sudo init 3
sudo telinit 5
# Aktuellen Runlevel anzeigen
runlevel
=== Vorteile von System V ===
* ✓ Einfach zu verstehen (Shell-Skripte)
* ✓ Gut dokumentiert
* ✓ Stabil und erprobt
* ✓ Geringe Systemanforderungen
* ✓ Leicht zu debuggen (lesbare Skripte)
=== Nachteile von System V ===
* ✗ Langsamer Boot (sequenzieller Start)
* ✗ Keine Prozessüberwachung
* ✗ Kein automatischer Service-Neustart
* ✗ Komplexe Abhängigkeitsverwaltung
* ✗ Keine parallele Ausführung
* ✗ Kein Ressourcen-Management
* ✗ Inkonsistente Service-Skripte
==== systemd - Das moderne Init-System ====
=== Merkmale ===
* **Entwickelt**: 2010 (Lennart Poettering, Red Hat)
* **Konzept**: Target-basiert (Ersatz für Runlevel)
* **Start-Methode**: Parallel und on-demand
* **Konfiguration**: Unit-Files (INI-ähnliche Syntax)
* **Standard seit**: 2015+ (meiste Distributionen)
=== Architektur ===
Kernel
└─ systemd (PID 1)
├─ Units (.service, .socket, .target, etc.)
├─ journald (Logging)
├─ logind (Session-Management)
├─ networkd (Netzwerk)
├─ resolved (DNS)
├─ timesyncd (Zeit-Sync)
└─ udevd (Device-Management)
=== Target-Konzept (Ersatz für Runlevel) ===
poweroff.target → System herunterfahren (Runlevel 0)
rescue.target → Rettungsmodus (Runlevel 1)
multi-user.target → Multi-User CLI (Runlevel 2,3,4)
graphical.target → Multi-User GUI (Runlevel 5)
reboot.target → Neustart (Runlevel 6)
=== Unit-Typen ===
* **.service** - Services/Daemons (apache2.service)
* **.socket** - Socket-basierte Aktivierung
* **.target** - Gruppierung von Units (multi-user.target)
* **.mount** - Dateisystem-Mountpoints
* **.timer** - Zeitgesteuerte Aktivierung (cron-Ersatz)
* **.device** - Hardware-Geräte
* **.path** - Pfad-basierte Aktivierung
* **.slice** - Ressourcen-Gruppen (cgroups)
=== Kommandos ===
# Service-Verwaltung
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2
sudo systemctl status apache2
sudo systemctl reload apache2
# Autostart konfigurieren
sudo systemctl enable apache2
sudo systemctl disable apache2
sudo systemctl is-enabled apache2
# Service-Übersicht
systemctl list-units --type=service
systemctl list-unit-files
systemctl list-dependencies apache2
# Target-Verwaltung
sudo systemctl isolate multi-user.target
sudo systemctl set-default graphical.target
systemctl get-default
# Logs anzeigen
journalctl -u apache2
journalctl -u apache2 -f
journalctl -b
=== Vorteile von systemd ===
* ✓ Schneller Boot (paralleler Start)
* ✓ Automatischer Service-Neustart
* ✓ Socket-Aktivierung (on-demand)
* ✓ Integriertes Logging (journald)
* ✓ Ressourcen-Management (cgroups)
* ✓ Abhängigkeiten klar definiert
* ✓ Konsistente Unit-Files
* ✓ Monitoring und Watchdog
* ✓ Transaktionen (atomare Änderungen)
* ✓ Snapshot und Restore
=== Nachteile von systemd ===
* ✗ Komplexer als SysV
* ✗ Monolithischer Ansatz (viele Komponenten)
* ✗ Höherer Speicherverbrauch
* ✗ Binary-Logs (journald)
* ✗ Steile Lernkurve
* ✗ Kontroverse in der Community
==== Direkter Vergleich ====
=== Boot-Zeit ===
System V Init: 60-120 Sekunden (sequenziell)
systemd: 10-30 Sekunden (parallel)
=== Service-Management ===
| **Aktion** | **System V** | **systemd** |
| Service starten | ''service nginx start'' | ''systemctl start nginx'' |
| Service stoppen | ''service nginx stop'' | ''systemctl stop nginx'' |
| Service neustarten | ''service nginx restart'' | ''systemctl restart nginx'' |
| Service-Status | ''service nginx status'' | ''systemctl status nginx'' |
| Autostart aktivieren | ''update-rc.d nginx defaults'' | ''systemctl enable nginx'' |
| Autostart deaktivieren | ''update-rc.d nginx disable'' | ''systemctl disable nginx'' |
| Alle Services | ''service --status-all'' | ''systemctl list-units --type=service'' |
=== Konfigurationsdateien ===
**System V:**
# Service-Skripte
/etc/init.d/ # Alle Service-Skripte (ausführbare Shell-Skripte)
/etc/init.d/apache2 # Beispiel: Apache2-Service
/etc/init.d/mysql # Beispiel: MySQL-Service
/etc/init.d/ssh # Beispiel: SSH-Service
# Runlevel-Verzeichnisse (symbolische Links)
/etc/rc0.d/ # Runlevel 0 (Halt)
/etc/rc1.d/ # Runlevel 1 (Single-User)
/etc/rc2.d/ # Runlevel 2
/etc/rc3.d/ # Runlevel 3 (Multi-User CLI)
/etc/rc4.d/ # Runlevel 4
/etc/rc5.d/ # Runlevel 5 (Multi-User GUI)
/etc/rc6.d/ # Runlevel 6 (Reboot)
/etc/rc3.d/S20apache2 # Start-Link: S=Start, 20=Priorität
/etc/rc3.d/K80apache2 # Kill-Link: K=Kill/Stop, 80=Priorität
# Haupt-Konfiguration
/etc/inittab # Init-Konfiguration (Standard-Runlevel, etc.)
/etc/rc.local # Lokales Start-Skript (optional)
# Defaults
/etc/default/ # Service-spezifische Einstellungen
/etc/default/apache2 # Apache2 Umgebungsvariablen
/etc/default/grub # GRUB Bootloader Einstellungen
**systemd:**
# Unit-Dateien (Priorität: absteigend)
/etc/systemd/system/ # Eigene/Admin Units (höchste Priorität)
/etc/systemd/system/apache2.service # Eigene Service-Unit
/etc/systemd/system/multi-user.target.wants/ # Abhängigkeiten für Targets
/run/systemd/system/ # Runtime Units (flüchtig, nach Reboot weg)
/run/systemd/generator/ # Generierte Units
/lib/systemd/system/ # System Units (Paket-Manager)
/usr/lib/systemd/system/ # Alternative Paket-Units (Distribution)
/lib/systemd/system/apache2.service # Standard Apache2-Unit
/lib/systemd/system/ssh.service # Standard SSH-Unit
/lib/systemd/system/multi-user.target # Multi-User-Target
# Konfiguration
/etc/systemd/system.conf # systemd Haupt-Konfiguration
/etc/systemd/journald.conf # Journal/Logging-Konfiguration
/etc/systemd/logind.conf # Login-Manager-Konfiguration
/etc/systemd/resolved.conf # DNS-Resolver-Konfiguration
/etc/systemd/networkd.conf # Netzwerk-Konfiguration
/etc/systemd/timesyncd.conf # Zeit-Synchronisation
# Unit-Overrides (Drop-In-Dateien)
/etc/systemd/system/apache2.service.d/ # Override-Verzeichnis
/etc/systemd/system/apache2.service.d/override.conf # Änderungen ohne Original zu editieren
# State und Runtime
/var/lib/systemd/ # Persistente Daten
/run/systemd/ # Runtime-Daten
=== Beispiel-Konfiguration ===
**System V Init-Skript:**
#!/bin/sh
### BEGIN INIT INFO
# Provides: myapp
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
case "$1" in
start)
/usr/bin/myapp &
;;
stop)
killall myapp
;;
restart)
$0 stop
$0 start
;;
esac
**systemd Unit-File:**
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/myapp
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
=== Pfad-Hierarchie und Prioritäten ===
**System V Priorität:**
1. /etc/init.d/ # Service-Skripte
2. /etc/rcX.d/ # Runlevel-spezifische Links
3. /etc/default/ # Service-Defaults
4. /etc/inittab # Init-Konfiguration
**systemd Priorität (höchste zuerst):**
1. /etc/systemd/system/ # Admin-Units (überschreiben alles)
2. /run/systemd/system/ # Runtime Units (temporär)
3. /lib/systemd/system/ # Paket-Units (Standard)
4. /usr/lib/systemd/system/ # Distribution Units
**Wichtig:**
* systemd: Nie Units in ''/lib/systemd/system/'' direkt bearbeiten!
* Überschreibungen mit ''systemctl edit'' oder Drop-In in ''/etc/systemd/system/X.service.d/''
* System V: Links in ''/etc/rcX.d/'' nicht manuell erstellen (''update-rc.d'' nutzen)
=== Logging ===
**System V:**
# Text-Logs in /var/log/
tail -f /var/log/syslog
tail -f /var/log/messages
grep apache2 /var/log/syslog
**systemd:**
# Binäre Logs (journald)
journalctl -u apache2
journalctl -u apache2 -f
journalctl -u apache2 --since "1 hour ago"
journalctl -b -p err
=== Abhängigkeiten ===
**System V:**
# In Skript-Header definiert
# Required-Start: $network $remote_fs
# Reihenfolge durch Prioritätsnummern: S20, S30, S40...
**systemd:**
# Explizite Abhängigkeiten
[Unit]
After=network.target database.service
Requires=database.service
Wants=logging.service
==== Migration: System V → systemd ====
=== Kompatibilitäts-Layer ===
systemd bietet Abwärtskompatibilität:
# Alte Befehle funktionieren (als Wrapper)
sudo service apache2 start # Ruft systemctl auf
sudo update-rc.d apache2 defaults
# SysV-Skripte werden automatisch integriert
ls /etc/init.d/ # Alte Skripte bleiben
systemctl list-units # Werden als systemd-Units verwaltet
=== Init-System feststellen ===
# Welches Init-System läuft?
ps -p 1 -o comm=
# Ausgabe: systemd oder init
# Version anzeigen
systemctl --version # systemd
init --version # System V (selten vorhanden)
# Alternative Prüfung
stat /proc/1/exe
# /lib/systemd/systemd → systemd
# /sbin/init → könnte System V sein
=== Befehl-Mapping ===
# System V → systemd
service X start → systemctl start X
service X stop → systemctl stop X
service X restart → systemctl restart X
service X status → systemctl status X
update-rc.d X defaults → systemctl enable X
update-rc.d X disable → systemctl disable X
chkconfig X on → systemctl enable X
chkconfig --list → systemctl list-unit-files
runlevel → systemctl get-default
init 3 → systemctl isolate multi-user.target
==== Distributionen und ihre Init-Systeme ====
=== Aktuelle Nutzung (2026) ===
**systemd (Standard):**
* Ubuntu (ab 15.04)
* Debian (ab 8 Jessie)
* Fedora (ab 15)
* RHEL/CentOS/Rocky/Alma (ab 7)
* openSUSE
* Arch Linux
* Manjaro
**System V Init (Legacy):**
* Slackware (traditionell)
* Devuan (systemd-freies Debian)
* Ältere Distributionen (Debian 7, Ubuntu 14.04, CentOS 6)
**Alternative Init-Systeme:**
* **OpenRC**: Gentoo, Alpine Linux, Artix
* **runit**: Void Linux
* **s6**: Einige Embedded-Systeme
==== Hinweise ====
**Für Administratoren:**
- Moderne Systeme: systemd-Kenntnisse essentiell
- Legacy-Systeme: SysV-Verständnis noch wichtig
- Kompatibilitäts-Layer: ''service'' funktioniert meist auf beiden
- Migration: systemd bietet bessere Performance und Features
- Logging: journalctl ist mächtiger als traditionelle Textlogs
- Ressourcen-Management: systemd cgroups für Service-Limits nutzen
**Häufige Fehler vermeiden:**
- Nicht beide Systeme parallel für gleiche Services nutzen
- SysV-Skripte nicht ohne Anpassung als systemd-Units verwenden
- ''systemctl daemon-reload'' nach Unit-File-Änderungen nicht vergessen
- journald-Logs können groß werden - regelmäßig prüfen: ''journalctl --disk-usage''
- Bei systemd: Dependencies korrekt setzen (After, Requires, Wants)
- System V: Prioritätsnummern (S20, S30) bestimmen Start-Reihenfolge
==== Siehe auch ====
* [[sammlung:sysvinit|System V Init Details]]
* [[sammlung:systemd|systemd Details]]
* [[sammlung:systemctl|systemctl]]
* [[sammlung:journalctl|journalctl]]
* [[sammlung:boot_prozess|Linux Boot-Prozess]]
==== Quellen ====
* [[https://www.freedesktop.org/wiki/Software/systemd/|systemd Official Website]]
* [[https://wiki.debian.org/systemd|Debian systemd Wiki]]
* [[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/chap-managing_services_with_systemd|RHEL systemd Guide]]
* [[https://wiki.archlinux.org/title/Systemd|Arch Linux systemd Wiki]]
----
{{tag>init systemd sysv system-v boot services}}
----