===== 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 ==== **Historisches Wissen:** - System V Init ist auf modernen Systemen nicht mehr Standard - Verständnis hilfreich für Legacy-Systeme und Embedded-Geräte - Viele Konzepte (Runlevels → Targets) leben in systemd weiter - SysV-Skripte in ''/etc/init.d/'' oft noch vorhanden (Kompatibilität) - ''service'' Kommando funktioniert oft als Wrapper für systemd **Bei Legacy-Systemen:** - Alte Distributionen (Debian 7, Ubuntu 14.04) nutzen noch SysV/Upstart - Embedded Systems und Router oft mit SysV oder OpenRC - Migration zu systemd erfordert Umdenken bei Service-Management - Init-Skripte nicht einfach 1:1 auf systemd übertragbar - Abhängigkeiten in systemd Units anders definiert ==== Siehe auch ==== * [[sammlung:systemd|systemd]] * [[sammlung:systemctl|systemctl]] * [[sammlung:init|init]] * [[sammlung:boot_prozess|Boot-Prozess]] ==== Quellen ==== * [[https://wiki.debian.org/SysVinit|Debian SysVinit Wiki]] * [[https://www.freedesktop.org/wiki/Software/systemd/|systemd Homepage]] * [[https://en.wikipedia.org/wiki/Init#SysV-style|Wikipedia: System V Init]] ---- {{tag>sysv init systemd boot runlevel legacy}} ----