\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. mai 31 21:17:33 CEST 2010}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={init},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Parent de tous les processus. Son rôle principal est de créer des processus depuis un script stocké dans /etc/inittab. L'ID du processus init est toujour 1},
CreationDate={D:20100531211733},
ModDate={D:20100531211733},
Keywords={Linux}
}}
\begin{document}
 
\begin{center}
{\Huge init }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Parent de tous les processus. Son rôle principal est de créer des processus depuis un script stocké dans /etc/inittab. L'ID du processus init est toujour 1}
 
\vspace{10mm}
 
\vspace{1cm}{\huge runlevels }
 
\
 
\hspace{1mm}  un \textbf{runlevel} est une configuration du système qui permet de sélectionner un groupe de processus. Il existe 8 runlevel. le runlevel peut être changé avec \textbf{telinit} qui envoie le signal approprié à init. Les runlevels \textbf{S}, \textbf{0}, et \textbf{6} sont réservés. Le runlevel \textbf{S} est utilisé pour initialiser le système au boot. Les runlevels \textbf{S} et \textbf{1} sont des modes simple utilisateur. Runlevel \textbf{0} est utilisé pour arrêter le système, runlevel \textbf{6} est utilisé pour rebooter le système. Après avoir booté au travers du runlevel \textbf{S}, le système entre dans un mode multi-utilisateurs (2 à 5). Les runlevels \textbf{7-9} dont aussi valides, bien qu'ils ne soient pas documentés.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Boot }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} ]{Après qu'init ai été invoqué en tant que dernière étape de la séquence de boot du kernel, il cherche le fichier \textbf{/etc/inittab} pour voir s'il y'a une entrée de type \textbf{initdefault}, qui détermine le runlevel initial du système. S'il n'est pas spécifié, le runlevel doit être entré dans la console système.}
\item[\hspace{1mm} ]{En mode simple utilisateur, \textbf{/sbin/sulogin} est invoqué sur \textbf{/dev/console}}
\item[\hspace{1mm} ]{En entrant en mode simple utilisateur, init initialise les réglages des consoles stty.}
\item[\hspace{1mm} ]{En entrant en mode multi-utilisateur pour la première fois, \textbf{init} effectue les entrées \textbf{boot} et \textbf{bootwait} pour permettre aux systèmes de fichiers d'être montés avant que les utilisateurs puissent se logger. Ensuite toutes les entrées correspondant au runlevel sont traitées.}
\item[\hspace{1mm} ]{En démarrant un nouveau processus, \textbf{init} vérifie d'abord si le fichier \textbf{/etc/initscript} existe. Si c'est le cas, il utilise ce script pour démarrer le processus.}
\item[\hspace{1mm} ]{Chaque fois qu'un enfant se termine, \textbf{init} enregistre la raison dans \textbf{/var/run/utmp} et \textbf{/var/log/wtmp}}
\end{description}
 
\vspace{1cm}{\huge Changer les runlevels }
 
\
 
\hspace{1mm}  Une fois tous les processus lancés, init attend qu'un de ses processus meurt, un signal \textbf{powerfail}, ou jusqu'à ce qu'il soit signalé par \textbf{telinit} de changer de runlevel. Quand une de ces 3 conditions se produit, il ré-examine \textbf{/etc/inittab}.
\vspace{5mm} \\
\hspace{1mm}  Si init n'est pas en mode simple utilisateur et reçoit un signal \textbf{POWERFAIL (SIGPWR)}, il lit le fichier \textbf{/etc/powerstatus}, et lance une commande basée sur le contenu de ce fichier. L'utilisation de \textbf{SIGPWR} et \textbf{/etc/powerstatus} n'est pas conseillé.
\vspace{5mm} \\
\hspace{1mm}  Quand init change de runlevel, il envoie un \textbf{SIGTERM} à tous les processus qui ne sont pas définis dans le nouveau runlevel. Puis il attend 5 secondes avant de forcer ces processus avec \textbf{SIGKILL}. Noter que init assume que tous ces processus (et leur descendant) restent dans le même groupe de processus qu'init a crée pour eux. Si un de ces processus change de groupe, il ne recevra pas ces signaux.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Variables d'environnement }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} PATH]{/bin :/usr/bin :/sbin :/usr/sbin}
\item[\hspace{1mm} INIT\_VERSION]{la version d'init}
\item[\hspace{1mm} RUNLEVEL]{Le runlevel système courant}
\item[\hspace{1mm} PREVLEVEL]{Le runlevel système précédant}
\item[\hspace{1mm} CONSOLE]{La console système. S'il n'est pas définit par init, sera /dev/console par défaut.}
\end{description}
 
\vspace{1cm}{\huge Flags }
 
\
 
\hspace{1mm}  Il est possible de passer des flags à init depuis le bootloader (ex : grub). Init accepte les flags suivant:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -s,S, single]{boot en mode simple utilisateur. Dans ce mode /etc/inittab est examiné et les scripts rc sont généralement lancés avant que le shell du mode simple utilisateur ne soit démarré.}
\item[\hspace{1mm} 1-5]{Permet de spécifier le runlevel sur lequel booter.}
\item[\hspace{1mm} -b, emergency]{Boot directement en mode simple utilisateur sans lancer de script de démarrage.}
\item[\hspace{1mm} -a, auto]{LILO ajoute 'auto' à la ligne de commande si le kernel est booté avec la ligne de commande par défaut (sans l'intervention de l'utilisateur). init définit alors la variable AUTOBOOT à yes.}
\item[\hspace{1mm} -z]{permet d'étendre un peu la ligne de commande, et donc prenne un peu plus d'espace dans la pile. Init peut ainsi manipuler la ligne de commande pour que ps(1) affiche le runlevel courant.}
\end{description}
 
\vspace{1cm}{\huge Interface }
 
\
 
\hspace{1mm}  init écoute les messages sur un fifo dans \textbf{/dev/initctl}. Telinit l'utilise pour communiquer avec init.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Signaux }
 
\
 
\hspace{1mm}  init réagit à certains signaux:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} SIGHUP]{a le même effet que \textbf{telinit q}}
\item[\hspace{1mm} SIGUSR1]{init ferme et ré-ouvre son fifo \textbf{/dev/initctl}. utile pour les scripts de boot quand /dev est remonté.}
\item[\hspace{1mm} SIGINT]{Généralement le kernel envoie ce signal à init quand \textbf{ctrl+alt+del} est pressé. Il active l'action \textbf{ctrlaltdel}.}
\item[\hspace{1mm} SIGWINCH]{le kernel envoie ce signal quand la touche \textbf{KeyboardSignal} est pressée. Active l'action \textbf{kbrequest}}
\end{description}
\end{flushleft}
\end{document}
