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