1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
\input{configpres}
\title{Der Linux-Boot-Prozess}
\maketitle
\begin{frame}
\frametitle{Komponenten des Bootprozesses}
\begin{itemize}
\item Bootloader
\item Linux
\item ''Userspace''
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Ablauf des Bootprozesses}
\begin{enumerate}
\item Bootloader initialisiert Hardware
\item Bootloader reloziert Kernel
\item Bootloader übergibt Parameter und startet Kernel
\item Linux bootet
\item Linux Kernel bindet RFS ein
\item Linux Kernel startet ersten Prozeß (/sbin/init, /linuxrc, oder mit init= spezifizierter Prozeß)
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Das INIT System}
\begin{itemize}
\item System V Init (z.B. Debian)
\item Upstart (Ubuntu)
\item Systemd (z.B. Fedora)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{System V Init}
\begin{itemize}
\item Verhalten in /etc/inittab definiert
\item Startscripte in /etc/init.d
\item Aufteilung in sogenannte Runlevels
\item Runlevel beschreiben verschiedene Systemzustände (Shutdown, Single-User, Multi-User mit / ohne Netzwerk, ...)
\item System V kennt keine Abhängigkeiten, sequentielles Ausführen der Startscripte
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Upstart}
\begin{itemize}
\item Ereignisgesteuert
\item Kein /etc/inittab !!
\item Konfigurationsdateien in /etc/init/, Beispiel:
\begin{verbatim}
start in stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty -8 38400 tty1
\end{verbatim}
\item Upstart benötigt Runlevel, bildet aus Kompatibilitätsgründen aber Runlevel nach
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Upstart: Erweitertes Beispiel}
\begin{verbatim}
# /etc/init/smbd.conf
description "SMB/CIFS File Server"
author "Steve Langasek"
start on (local-filesystems and net-device-up)
stop on runlevel [!2345]
respawn
[...]
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{Upstart: Erweitertes Beispiel}
\begin{verbatim}
# /etc/init/network-interface.conf
description "configure network device"
emits net-device-up
emits net-device-down
[...]
\end{verbatim}
\end{frame}
\begin{frame}
\frametitle{Systemd}
\begin{itemize}
\item Kann Prozesse parallel starten (ohne explizite Konfiguration der Abhängigkeiten):
\begin{itemize}
\item Legt Sockets zur Kommunikation der zu startenden Prozesse an
\item Dorthin geschriebene Daten werden so lange gepuffert, bis der zu startende Prozeß diese entgegennehmen kann
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Systemd}
\begin{itemize}
\item Konfiguration durch einzelne Textdateien und nicht durch Shellscripte
\item Aktionen werden basierend von diesen Konfigurationen von Systemd (Linux-Executable) ausgeführt. Dies vermeidet das Starten vieler einzelner Shell-Instanzen.
\item Administraion mittels systemctl
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Systemd}
\begin{itemize}
\item Targets übernehmen die Rolle von Runleveln (z.B. Runlevel 0 == poweroff.target)
\item Mehrere Targets können gleichzeitig aktiv sein
\item Konfigurationsdateien in /etc/systemd und /lib/systemd
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Systemd}
\begin{itemize}
\item Kompatibel zu System V Init. Skripte, die in /etc/init.d liegen, werden wie gewohnt gestartet
\item Verwendet ''Control Groups'' zur Überwachung / Ausführung von Prozessen (daher mind. Kernel 2.6.24; und CGROUPS in .config aktivieren!!)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Aufgaben des Bootloaders}
\begin{itemize}
\item Low-Level-Initialisierung:
\item Clocks (CPU, PLLs, Peripherie...)
\item Speicher (DRAM-Controller, NAND-Controller...)
\item serielle Schnittstelle
\item Parameterübergabe an den Linux Kernel
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Der Linux Kernel}
\begin{itemize}
\item Setzt Interrupts auf (z.B. Timer Interrupt)
\item Lädt Treiber, initialisiert Hardware
\item Mountet ''root filesystem'' nach /
\item Startet ersten Prozeß
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Quellen}
\begin{thebibliography}{1}
\bibitem{kof} Linux 2012, Michael Kofler, PEARSON Verlag
\bibitem{heise} http://www.heise.de/open/artikel/Das-Init-System-Systemd-Teil-1-1563259.html
\end{thebibliography}
\end{frame}
\input{tailpres}
|