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