Initialisation du système

Voici dans ses grandes lignes les phases du démarrage du système jusqu'à une session de travail, et le mécanisme (appelé System V) de lancement ordonné des processus et en particulier les services.

Démarrage du noyau

  • A la mise sous tension, il y a la phase d'initialisation du BIOS de la carte mère : celle-ci fait l'inventaire de ses "petits", les divers périphériques dont elle se trouve dotée (bus, ram, disques, cartes ...).
    Puis il part à la recherche d'un système d'exploitation sur l'un des périphériques accessibles ...

  • Habituellement (si on ne démarre pas sur une disquette), le BIOS charge en mémoire le MBR (Master Boot Record, 1er secteur de la 1ère piste du 1er disque dur, 512 octets).
    Supposons que le chargeur de systèmes LILO (Linux Loader) s'y trouve, une première partie de LILO est chargée et exécutée (A noter que le chargeur LILO peut se trouver sur une disquette ou sur la partition active du disque)

  • Sa tâche consiste à charger en mémoire la 2ème partie de LILO (environ 5 Ko). Lors de cette phase, il y a affichage des lettres LI. S'il y a arrêt, c'est que LILO n'arrive pas à s'exécuter (pb de géométrie du disque)que cette 2ème partie est ce qui va permettre à l'utilisateur de choisir le système à lancer.
  • Le noyau de ce système quel qu'il soit (Linux, Windows ..) est décompressé "à la volée" et est chargé en mémoire. Ceci est accompagné de l'affichage du message "Uncompressing Linux ...done. Now booting the kernel .."
  • Dès lors c'est le noyau qui prend les affaires en main et inspecte son environnement matériel !

Les niveaux de fonctionnement

Ces 6 niveaux sont décrits au début du fichier /etc/inittab
  • 0 : provoque un arrêt (shutdown) de la machine
  • 1 : pour rentrer en mode mono-utilisateur, réservé à root
  • 2 : mode multi-utilisateurs, sans NFS
  • 3 : mode multi-utilisateurs avec tous les services réseaux
  • 5 : démarrage du serveur graphique X11 en plus
  • 6 : redémarrage de la machine (la commande init 6 ou reboot lance le niveau 6).
La ligne qui suit définit le niveau de fonctionnement par défaut au démarrage (Default runlevel), ici le niveau 3
id:3:initdefault
Donc pour changer de niveau par défaut, il suffit tout simplement de changer ce numéro !

Le premier processus, /sbin/init

Le noyau du système chargé et décompressé, s'exécute et s'initialise : réservation mémoire, prise en compte de la zone d'échange (swap), détection du matériel et chargement des pilotes des périphériques, montage du système de fichiers et enfin lance le 1er processus /sbin/init
Le paramétrage de ce processus fondamental est entièrement assuré par l'exécution de ce fichier script /etc/inittab dont voici la suite :
# niveau d'exécution 3 par défaut
id:3:initdefault
# il y a ensuite exécution des scripts rc.sysinit
--> initialisation du PATH pour les autres scripts, activation swap,
montage systèmes fichiers, gestion des quotas..

si::sysinit:/etc/rc.d/rc.sysinit
# exécution du script etc/rc.d/rc avec le niveau en paramètre
--> lancement des divers services du niveau choisi, ici 3,

etc/rc.d/rc 3
# ceci lance tous les liens symboliques du rép rc3.d
/etc/rc.d/rc3.d/S*
# par exemple /etc/rc.d/rc3.d/S01kerneld*fait référence
au script /etc/rc.d/init.d/kerneld

# le fichier inittab se termine par
# exécute xdm qui lance X et le login graphique, si le "runlevel" est 5
x:5:respawn:/etc/X11/prefdm -nodaemon

Le dernier script d'initialisation à être exécuté est /etc/rc.d/rc.local
Habituellement, on y écrit d'éventuelles commandes de chargement de modules ou de lancement de services supplémentaires.

Le système (System V) de démarrage des services

Outils de gestion du démarrage des services

Il est fastidieux de créer les liens précédemment décrits "à la main".
Il existe un outil ntsysv qui permet de déterminer les services devant être démarrés à l'initialisation du système, et ksysv, frontal graphique très convivial.

En ligne de commande : chkconfig --level 3 smb [on | off] pour activer ou non le service samba au démarrage en niveau 3

Outils de gestion des services en cours de session

Il peut etre nécessaire

Manipulations

  1. Examiner le fichier /var/log/dmesg qui contient le compte-rendu de l'initialisation.
    La commande dmesg nous en dit un peu plus, notamment sur l'interface réseau.

  2. Examiner le fichier /etc/inittab avec mc
    Que faudrait-il y changer pour démarrer immédiatement au niveau graphique ?

  3. Lancement des services : sur votre machine, supposée fonctionnant en niveau 3, comment connaitre les services en exécution ? vérifier

  4. Comprendre cet extrait du script /etc/rc.d/rc
     # Now run the START scripts.
    for i in /etc/rc$runlevel.d/S*; do
    # Check if the script is there.
    [ ! -f $i ] && continue

    .............................

    # Bring the subsystem up.
    if egrep -q "(daemon |action )" $i ; then
    $i start
    else
    if [ "$subsys" = "halt" -o "$subsys" = "reboot" -o "$subsys" = "single" -o "$subsys" = "local" ]; then
    $i start
    else
    action "Starting $subsys: " $i start
    fi
    fi
    done
    fi

  5. Nature et ordre des services lancés en niveau d'exécution 3 :
    examiner le contenu du répertoire /etc/rc.d/rc3.d
    quelle est la nature de ces fichiers ? sont-ils exécutables ? que donne leur exécution ?

Annexes

Extrait de /etc/inittab

# inittab       This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Things to run in every runlevel.
ud::once:/sbin/update
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty 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
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

Extrait de /etc/rc.d/rc.sysinit

# Définir des variables d'environnement
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
HOSTNAME=`/bin/hostname`
# Le fichier de configuration du réseau existe t-il ?
if [ -f /etc/sysconfig/network ]; then
. /etc/sysconfig/network
else
NETWORKING=no
fi