===== 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}} ----