Inhaltsverzeichnis
System V Init - Das klassische Init-System
Kurzfassung: System V Init (SysVinit) war das traditionelle Init-System in Unix/Linux-Systemen von den 1980ern bis ca. 2015. Es wurde durch modernere Systeme wie systemd, Upstart und OpenRC abgelöst. Zielgruppe: Systemadministratoren zum Verständnis der Init-System-Evolution.
Übersicht
System V Init (auch SysV oder SysVinit) war über Jahrzehnte das Standard-Init-System auf Unix und Linux. Es wurde von AT&T entwickelt und war das erste Programm, das beim Booten gestartet wurde (PID 1). SysVinit organisierte Dienste in Runlevels und nutzte Shell-Skripte zur Service-Verwaltung. Trotz seiner Robustheit hatte es Performance- und Komplexitätsprobleme, was zur Entwicklung moderner Alternativen führte.
Voraussetzungen
- Verständnis von Boot-Prozessen
- Grundkenntnisse in Shell-Scripting
- Kenntnis von Runlevels und Services
Anleitung
Runlevels - Das SysV-Konzept
System V organisierte den Systemzustand in Runlevels:
Runlevel 0: Halt (System herunterfahren) Runlevel 1: Single-User-Modus (Wartung) Runlevel 2: Multi-User ohne Netzwerk (Debian/Ubuntu: mit Netzwerk) Runlevel 3: Multi-User mit Netzwerk (CLI) Runlevel 4: Nicht definiert (frei verwendbar) Runlevel 5: Multi-User mit Netzwerk und GUI (X11) Runlevel 6: Reboot (Neustart)
Runlevel-Befehle:
# Aktuellen Runlevel anzeigen runlevel who -r # Runlevel wechseln (root) init 3 # Wechsel zu Runlevel 3 telinit 5 # Alternative Syntax # Standard-Runlevel (in /etc/inittab) grep :initdefault: /etc/inittab
Verzeichnisstruktur
# Init-Skripte (Service-Definitionen) ls /etc/init.d/ # Beispiele: apache2, mysql, ssh, networking # Runlevel-Verzeichnisse (symbolische Links) ls /etc/rc0.d/ # Runlevel 0 (Halt) ls /etc/rc1.d/ # Runlevel 1 (Single-User) ls /etc/rc2.d/ # Runlevel 2 ls /etc/rc3.d/ # Runlevel 3 ls /etc/rc5.d/ # Runlevel 5 (GUI) ls /etc/rc6.d/ # Runlevel 6 (Reboot) # Link-Namenskonvention: # S20apache2 → Start-Skript, Priorität 20 # K80apache2 → Kill-Skript, Priorität 80 # S = Start, K = Kill
Service-Verwaltung mit SysV
# Service starten sudo /etc/init.d/apache2 start sudo service apache2 start # Service stoppen sudo /etc/init.d/apache2 stop sudo service apache2 stop # Service neu starten sudo /etc/init.d/apache2 restart sudo service apache2 restart # Service-Status sudo /etc/init.d/apache2 status sudo service apache2 status # Service beim Booten aktivieren/deaktivieren sudo update-rc.d apache2 defaults # Aktivieren sudo update-rc.d apache2 disable # Deaktivieren sudo update-rc.d -f apache2 remove # Entfernen # Auf RHEL/CentOS (chkconfig) sudo chkconfig apache2 on # Aktivieren sudo chkconfig apache2 off # Deaktivieren sudo chkconfig --list # Alle Services
Beispiel: SysV Init-Skript
#!/bin/sh ### BEGIN INIT INFO # Provides: myservice # Required-Start: $network $remote_fs # Required-Stop: $network $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: My Service # Description: Extended description ### END INIT INFO DAEMON=/usr/bin/myservice PIDFILE=/var/run/myservice.pid case "$1" in start) echo "Starting myservice" start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON ;; stop) echo "Stopping myservice" start-stop-daemon --stop --pidfile $PIDFILE ;; restart) $0 stop $0 start ;; status) if [ -f $PIDFILE ]; then echo "myservice is running" else echo "myservice is not running" fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0
Nachteile von System V Init
Performance-Probleme:
- Services starten sequenziell (nicht parallel)
- Langsamer Boot-Prozess
- Unnötige Wartezeiten durch Abhängigkeiten
Komplexität:
- Shell-Skripte schwer zu warten
- Keine standardisierte Service-Definition
- Fehleranfällig bei komplexen Abhängigkeiten
Fehlende Features:
- Kein automatischer Service-Neustart bei Crash
- Keine Prozess-Überwachung (Monitoring)
- Kein Ressourcen-Management (cgroups)
- Keine Socket-Aktivierung
- Kein On-Demand-Start von Services
Die Ablösung - Moderne Init-Systeme
systemd (2010 - heute)
Eigenschaften:
- Standard auf den meisten modernen Linux-Distributionen
- Paralleler Service-Start (schneller Boot)
- Unit-Files statt Shell-Skripte
- Integriertes Logging (journald)
- Socket-Aktivierung
- Ressourcen-Management via cgroups
- Automatische Service-Neustarts
Distributionen:
- Fedora (seit 2011)
- Debian (seit Jessie 8, 2015)
- Ubuntu (seit 15.04)
- RHEL/CentOS (seit 7)
- openSUSE, Arch Linux
Kompatibilität:
# systemd bietet Kompatibilitäts-Layer sudo service apache2 start # Funktioniert weiterhin sudo systemctl start apache2 # Moderner systemd-Befehl # SysV-Skripte werden automatisch konvertiert ls /etc/init.d/ # Alte Skripte bleiben systemctl list-units # Werden als systemd-Units verwaltet
Upstart (2006 - 2014)
Eigenschaften:
- Entwickelt von Canonical (Ubuntu)
- Event-basiertes Init-System
- Ersetzt durch systemd ab Ubuntu 15.04
Ehemalige Nutzer:
- Ubuntu (9.10 bis 14.10)
- RHEL/CentOS 6
- Chrome OS
OpenRC (2007 - heute)
Eigenschaften:
- Leichtgewichtig und modular
- Kompatibel mit SysV-Skripten
- Kein systemd-Ansatz
- Dependency-basiert
Nutzer:
- Gentoo
- Alpine Linux
- Artix Linux
runit (2004 - heute)
Eigenschaften:
- Minimalistisch und schnell
- Supervision von Services
- Unabhängig von systemd
Nutzer:
- Void Linux
- Container-Systeme
Migration von SysV zu systemd
Kompatibilitäts-Check:
# Aktuelles Init-System identifizieren ps -p 1 -o comm= # Ausgabe: systemd oder init # Init-System-Version systemctl --version # systemd init --version # SysV (falls vorhanden) # SysV-Services finden ls /etc/init.d/ systemctl list-unit-files --type=service | grep generated
SysV zu systemd Befehl-Mapping:
# SysV → systemd service apache2 start → systemctl start apache2 service apache2 stop → systemctl stop apache2 service apache2 restart → systemctl restart apache2 service apache2 status → systemctl status apache2 update-rc.d apache2 defaults → systemctl enable apache2 update-rc.d apache2 disable → systemctl disable apache2 chkconfig apache2 on → systemctl enable apache2 runlevel → systemctl get-default init 3 → systemctl isolate multi-user.target
Runlevel zu systemd Target-Mapping:
# SysV Runlevel → systemd Target Runlevel 0 → poweroff.target Runlevel 1 → rescue.target Runlevel 2,3,4 → multi-user.target Runlevel 5 → graphical.target Runlevel 6 → reboot.target
Hinweise
/etc/init.d/ oft noch vorhanden (Kompatibilität)
- service Kommando funktioniert oft als Wrapper für systemd
