% master: inittab.tex
% Befehle v0.3
% 2011-05-26 (Rx)

\section{/etc/inittab}
%---------------------

Nach dem Kernelstart wird versucht das Programm init zu starten. Dabei werden
nacheinander die Verzeichnisse /etc/, /bin/ und /sbin/ nach init abgesucht. Kann
init /dev/console nicht öffnen wird im Einzelbenutzerbetrieb (Single User Mode)
gestartet. Beim LILO-Bootpromt kann init=/bin/sh angegeben werden um die Shell
anstelle von init zu laden. Das Programm init liest die Datei /etc/inittab und
wird durch die Datei das System konfigurieren. /etc/inittab wird vom Kommando
init Zeile für Zeile abgearbeitet. In jeder Zeile seht jeweils eine Anweisung.
Jede Zeile wird durch Doppelpunkte unterteilt. Der Aufbau sieht wie folgt aus:

\begin{verbatim}
Terminal:Termcapeintrag:Gettykommando   Simpleinit von Peter Orbaek mit
                                        Erweiterung von Werner Almesberger
\end{verbatim}

\subsection{Terminal}
%--------------------

Bezeichnet das Terminal (tty1, tty2, ttyS0 ...)

\subsection{Termcapeintrag}
%--------------------------
Wird in die TERM Variable der Shell geschrieben und sollte mit einem Eintrag in
der Datei /etc/termcap übereinstimmen.

\subsection{Gettykommando}
%-------------------------
Pfad und Optionen zum Getty-Kommando

\# Beispiel einer inittab für simpleinit
\# Format: Terminal:Termcapeintrag:Gettykommando
tty1:linux:/sbin/getty 9600 tty1
tty2:console:/sbin/getty 9600 tty2
tty5:con100x40:/sbin/getty 9600 tty5
ttyS1:vt102:/sbin/getty 9600 ttyS1

\begin{verbatim}
Kürzel:Arbeitsstufen:Modus:Kommando     Sysvinit von Mike Jagdis und
                                        Miquel van Smoorenburg
\end{verbatim}

\subsection{Kürzel}
%-------------------
Jede Aktion muß mit einem eindeutigen (maximal vierstelligen, a.out oder
Libraries\textless5.2.18 maximal zweistelligen) Kürzel versehen werden, das bei
Einträgen in Logfiles und bei Fehlermeldungen ausgegeben wird.

\subsection{Arbeitsstufen}
%-------------------------
Es werden hier die Arbeitsstufen (Runlevel) eingetragen. Zulässige
Arbeitsstufen sind 0 - 9 und s. Es können auch die Pseudoarbeitsstufen(ondemand)
a, b, c und q für einmalig auszuführende Kommandos verwendet werden. Es wird
ohne Groß und Kleinschreibung bezeichnet. In einer Zeile können bis zu 11
Runlevel zugeordnet werden. Wenn das Feld für den Runlevel leer ist, wird die
Aktion bei jedem Moduswechsel ausgeführt.
\begin{verbatim}
0       Systemhalt
S       Einzelbenutzerbetrieb (Single User Mode)
1       Einzelbenutzerbetrieb (Single User Mode)
2       Lokaler Mehrbenutzerbetrieb ohne entferntes Netzwerk
        (Local multiuser without remote network)
3       Voller Mehrbenutzerbetrieb mit Netzwerk
        (Full multiuser with network)
4       Frei (Not used)
5       Voller Mehrbenutzerbetrieb mit Netzwerk und KDM, GDM oder XDM
        (Full multiuser with network and xdm)
6       Systemneustart (System reboot)
Q       Quit zum Neueinlesen der inittab
\end{verbatim}

\subsection{Modus}
%-----------------
Gibt an wie das Kommando im letzten Feld ausgeführt werden soll.
\begin{verbatim}
initdefault     Bestimmt den Runlevel beim Systemstart.
sysinit         Wird einmal nach dem Kernelstart ausgeführt.
bootwait        Wird einmal ausgefürt, wenn in einem Mehrbenutzerbetrieb
                gestartet wird und wartet bis das Kommando beendet ist.
boot            Wie bootwait nur das nicht gewartet wird.
respawn         Überwacht das laufende Kommando und startet es neu, wenn es
                beendet wurde. Wird es in zwei Minuten 10 mal neu gestartet,
                setzt init das Kommando für fünf Minuten aus.
ondemand        Wie respawn, um mit Buchstaben gekennzeichnete Level einzelne
                Kommandos mit telinit zu starten.
wait            Wartet bis das Kommando beendet ist.
once            Wird einmal ausgefürt, es wird nicht gewartet.
off             Wenn das Kommando läuft, wird es angehalten.
ctrlaltdel      Kommando (Signal SIGINT, [Strg]+[Alt]+[Entf]) z.B. Rebooten des
                Systems.
kbrequest       Kommando wird ausgeführt, wenn das Signal SIGWINCH
                [Alt]+[Pfeil hoch] von der Tastatur kommt.
powerwait       Wenn init sich in einem passenden Runlevel befindet, das
                Signal SIGPWR erhält oder über Pipeline /dev/initctrl den
                entsprechenden Befehl erhält und wartet auf Beendigung des
                Kommandows. Das Signal kann mit Hilfe eines Dämons von einer USV
                erzeugt werden.
powerfail       Wie powerwait wartet jedoch nicht.
powerfailnow    Wie powerwait es muß die Datei /etc/powerstatus zusätzlich das
                Wort Low enthalten. So kann das APM eines Notebooks mit Hilfe
                eines Dämons das System herrunterfahren.
powerokwait     Wie powerwait es muß die Datei /etc/powerstatus zusätzlich das
                Wort OK enthalten. Auf diese weise kann das System in den
                normalen Zustand gebracht werden, nachdem die Stromversorgung
                wieder hergestellt ist.
\end{verbatim}

\subsection{Kommando}
%--------------------
Pfad und Optionen zum Kommando, wird durch die Bourne-Again-Shell abgearbeitet.
Bei jedem Kommandostart wird versucht die Datei /etc/initscript abzuarbeiten,
die dann das Kommando startet.

\begin{verbatim}
# Beispiel einer inittab für sysvinit
# Format: Kürzel:Arbeitsstufen:Modus:Kommando

# Bestimmt den Runlevel beim Systemstart
id:5:initdefault:

# Erstes Script, wenn nicht im Notfallsystem (-b) gestartet wird.
si::bootwait:/etc/init.d/boot

# /etc/init.d/rc übernimmt die Runlevel Behandlung
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
#l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

# Bestimmt den Einzelbenutzerbetrieb (Single User Mode)
ls:S:wait:/etc/init.d/rc S
~~:S:respawn:/sbin/sulogin

# Aktion bei Signal SIGINT, [Strg]+[Alt]+[Entf]
ca::ctrlaltdel:/sbin/shutdown -r -t 4 now

# Aktion bei Signal SIGWINCH [Alt]+[Pfeil hoch]
kb::kbrequest:/bin/echo "'Keyboard Request -- edit /etc/inittab to let this work."'

# Aktion bei Stormausfall und Wiederherstellung
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
#pn::powerfail:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# getty-Programme für die normalen Runlevels
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
\end{verbatim}

